Skip to content

Commit

Permalink
Merge pull request jesseduffield#328 from jesseduffield/feature/detac…
Browse files Browse the repository at this point in the history
…hed-heads

support Detached heads
  • Loading branch information
jesseduffield authored Nov 14, 2018
2 parents cc7d78f + 5160668 commit b9ecb82
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 23 deletions.
14 changes: 6 additions & 8 deletions pkg/commands/git.go
Original file line number Diff line number Diff line change
Expand Up @@ -208,11 +208,6 @@ func includesInt(list []int, a int) bool {
return false
}

// GetBranchName branch name
func (c *GitCommand) GetBranchName() (string, error) {
return c.OSCommand.RunCommandWithOutput("git symbolic-ref --short HEAD")
}

// ResetHard does the equivalent of `git reset --hard HEAD`
func (c *GitCommand) ResetHard() error {
return c.Worktree.Reset(&gogit.ResetOptions{Mode: gogit.HardReset})
Expand Down Expand Up @@ -268,11 +263,14 @@ func (c *GitCommand) NewBranch(name string) error {
}

func (c *GitCommand) CurrentBranchName() (string, error) {
output, err := c.OSCommand.RunCommandWithOutput("git symbolic-ref --short HEAD")
branchName, err := c.OSCommand.RunCommandWithOutput("git symbolic-ref --short HEAD")
if err != nil {
return "", err
branchName, err = c.OSCommand.RunCommandWithOutput("git rev-parse --short HEAD")
if err != nil {
return "", err
}
}
return utils.TrimTrailingNewline(output), nil
return utils.TrimTrailingNewline(branchName), nil
}

// DeleteBranch delete branch
Expand Down
27 changes: 25 additions & 2 deletions pkg/commands/git_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1658,6 +1658,10 @@ func TestGitCommandGetCommits(t *testing.T) {
assert.EqualValues(t, []string{"symbolic-ref", "--short", "HEAD"}, args)
// here's where we are returning the error
return exec.Command("test")
case "rev-parse":
assert.EqualValues(t, []string{"rev-parse", "--short", "HEAD"}, args)
// here too
return exec.Command("test")
}

return nil
Expand Down Expand Up @@ -1883,19 +1887,38 @@ func TestGitCommandCurrentBranchName(t *testing.T) {
"says we are on the master branch if we are",
func(cmd string, args ...string) *exec.Cmd {
assert.Equal(t, "git", cmd)
assert.EqualValues(t, []string{"symbolic-ref", "--short", "HEAD"}, args)
return exec.Command("echo", "master")
},
func(output string, err error) {
assert.NoError(t, err)
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",
func(cmd string, args ...string) *exec.Cmd {
assert.Equal(t, "git", cmd)
assert.EqualValues(t, []string{"symbolic-ref", "--short", "HEAD"}, args)
return exec.Command("test")
},
func(output string, err error) {
Expand Down
25 changes: 12 additions & 13 deletions pkg/git/branch_list_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,16 +35,12 @@ func NewBranchListBuilder(log *logrus.Entry, gitCommand *commands.GitCommand) (*
}

func (b *BranchListBuilder) obtainCurrentBranch() *commands.Branch {
// I used go-git for this, but that breaks if you've just done a git init,
// even though you're on 'master'
branchName, err := b.GitCommand.OSCommand.RunCommandWithOutput("git symbolic-ref --short HEAD")
branchName, err := b.GitCommand.CurrentBranchName()
if err != nil {
branchName, err = b.GitCommand.OSCommand.RunCommandWithOutput("git rev-parse --short HEAD")
if err != nil {
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 {
Expand All @@ -61,7 +57,7 @@ func (b *BranchListBuilder) obtainReflogBranches() []*commands.Branch {
branch := &commands.Branch{Name: branchName, Recency: timeNumber + timeUnit}
branches = append(branches, branch)
}
return branches
return uniqueByName(branches)
}

func (b *BranchListBuilder) obtainSafeBranches() []*commands.Branch {
Expand Down Expand Up @@ -103,18 +99,21 @@ func (b *BranchListBuilder) Build() []*commands.Branch {
branches := make([]*commands.Branch, 0)
head := b.obtainCurrentBranch()
safeBranches := b.obtainSafeBranches()
if len(safeBranches) == 0 {
return append(branches, head)
}

reflogBranches := b.obtainReflogBranches()
reflogBranches = uniqueByName(append([]*commands.Branch{head}, reflogBranches...))
for i, reflogBranch := range reflogBranches {
reflogBranches[i].Name = sanitisedReflogName(reflogBranch, safeBranches)
}

branches = b.appendNewBranches(branches, reflogBranches, safeBranches, true)
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
}

Expand Down

0 comments on commit b9ecb82

Please sign in to comment.