1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-07-31 14:24:25 +03:00

change how we build our list of branches to support detached heads

This commit is contained in:
Jesse Duffield
2018-11-14 19:17:05 +11:00
parent a5f483fae9
commit 0eb1e4a86b
2 changed files with 34 additions and 8 deletions

View File

@ -1658,6 +1658,10 @@ func TestGitCommandGetCommits(t *testing.T) {
assert.EqualValues(t, []string{"symbolic-ref", "--short", "HEAD"}, args) assert.EqualValues(t, []string{"symbolic-ref", "--short", "HEAD"}, args)
// here's where we are returning the error // here's where we are returning the error
return exec.Command("test") return exec.Command("test")
case "rev-parse":
assert.EqualValues(t, []string{"rev-parse", "--short", "HEAD"}, args)
// here too
return exec.Command("test")
} }
return nil return nil
@ -1883,7 +1887,6 @@ func TestGitCommandCurrentBranchName(t *testing.T) {
"says we are on the master branch if we are", "says we are on the master branch if we are",
func(cmd string, args ...string) *exec.Cmd { func(cmd string, args ...string) *exec.Cmd {
assert.Equal(t, "git", cmd) assert.Equal(t, "git", cmd)
assert.EqualValues(t, []string{"symbolic-ref", "--short", "HEAD"}, args)
return exec.Command("echo", "master") return exec.Command("echo", "master")
}, },
func(output string, err error) { func(output string, err error) {
@ -1891,11 +1894,31 @@ func TestGitCommandCurrentBranchName(t *testing.T) {
assert.EqualValues(t, "master", output) assert.EqualValues(t, "master", output)
}, },
}, },
{
"falls back to git rev-parse if symbolic-ref fails",
func(cmd string, args ...string) *exec.Cmd {
assert.EqualValues(t, "git", cmd)
switch args[0] {
case "symbolic-ref":
assert.EqualValues(t, []string{"symbolic-ref", "--short", "HEAD"}, args)
return exec.Command("test")
case "rev-parse":
assert.EqualValues(t, []string{"rev-parse", "--short", "HEAD"}, args)
return exec.Command("echo", "master")
}
return nil
},
func(output string, err error) {
assert.NoError(t, err)
assert.EqualValues(t, "master", output)
},
},
{ {
"bubbles up error if there is one", "bubbles up error if there is one",
func(cmd string, args ...string) *exec.Cmd { func(cmd string, args ...string) *exec.Cmd {
assert.Equal(t, "git", cmd) assert.Equal(t, "git", cmd)
assert.EqualValues(t, []string{"symbolic-ref", "--short", "HEAD"}, args)
return exec.Command("test") return exec.Command("test")
}, },
func(output string, err error) { func(output string, err error) {

View File

@ -40,7 +40,7 @@ func (b *BranchListBuilder) obtainCurrentBranch() *commands.Branch {
panic(err.Error()) panic(err.Error())
} }
return &commands.Branch{Name: strings.TrimSpace(branchName), Recency: " *"} return &commands.Branch{Name: strings.TrimSpace(branchName)}
} }
func (b *BranchListBuilder) obtainReflogBranches() []*commands.Branch { func (b *BranchListBuilder) obtainReflogBranches() []*commands.Branch {
@ -57,7 +57,7 @@ func (b *BranchListBuilder) obtainReflogBranches() []*commands.Branch {
branch := &commands.Branch{Name: branchName, Recency: timeNumber + timeUnit} branch := &commands.Branch{Name: branchName, Recency: timeNumber + timeUnit}
branches = append(branches, branch) branches = append(branches, branch)
} }
return branches return uniqueByName(branches)
} }
func (b *BranchListBuilder) obtainSafeBranches() []*commands.Branch { func (b *BranchListBuilder) obtainSafeBranches() []*commands.Branch {
@ -99,11 +99,8 @@ func (b *BranchListBuilder) Build() []*commands.Branch {
branches := make([]*commands.Branch, 0) branches := make([]*commands.Branch, 0)
head := b.obtainCurrentBranch() head := b.obtainCurrentBranch()
safeBranches := b.obtainSafeBranches() safeBranches := b.obtainSafeBranches()
if len(safeBranches) == 0 {
return append(branches, head)
}
reflogBranches := b.obtainReflogBranches() reflogBranches := b.obtainReflogBranches()
reflogBranches = uniqueByName(append([]*commands.Branch{head}, reflogBranches...))
for i, reflogBranch := range reflogBranches { for i, reflogBranch := range reflogBranches {
reflogBranches[i].Name = sanitisedReflogName(reflogBranch, safeBranches) reflogBranches[i].Name = sanitisedReflogName(reflogBranch, safeBranches)
} }
@ -111,6 +108,12 @@ func (b *BranchListBuilder) Build() []*commands.Branch {
branches = b.appendNewBranches(branches, reflogBranches, safeBranches, true) branches = b.appendNewBranches(branches, reflogBranches, safeBranches, true)
branches = b.appendNewBranches(branches, safeBranches, branches, false) branches = b.appendNewBranches(branches, safeBranches, branches, false)
if len(branches) == 0 || branches[0].Name != head.Name {
branches = append([]*commands.Branch{head}, branches...)
}
branches[0].Recency = " *"
return branches return branches
} }