|
|
|
@ -9,6 +9,8 @@ import ( |
|
|
|
|
"container/list" |
|
|
|
|
"strconv" |
|
|
|
|
"strings" |
|
|
|
|
|
|
|
|
|
"github.com/mcuadros/go-version" |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
// GetRefCommitID returns the last commit ID string of given reference (branch or tag).
|
|
|
|
@ -316,15 +318,35 @@ func (repo *Repository) getCommitsBeforeLimit(id SHA1, num int) (*list.List, err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (repo *Repository) getBranches(commit *Commit, limit int) ([]string, error) { |
|
|
|
|
stdout, err := NewCommand("for-each-ref", "--count="+ strconv.Itoa(limit), "--format=%(refname)", "--contains", commit.ID.String(), BranchPrefix).RunInDir(repo.Path) |
|
|
|
|
if version.Compare(gitVersion, "2.7.0", ">=") { |
|
|
|
|
stdout, err := NewCommand("for-each-ref", "--count="+strconv.Itoa(limit), "--format=%(refname:strip=2)", "--contains", commit.ID.String(), BranchPrefix).RunInDir(repo.Path) |
|
|
|
|
if err != nil { |
|
|
|
|
return nil, err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
branches := strings.Fields(stdout) |
|
|
|
|
return branches, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
stdout, err := NewCommand("branch", "--contains", commit.ID.String()).RunInDir(repo.Path) |
|
|
|
|
if err != nil { |
|
|
|
|
return nil, err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
refs := strings.Split(stdout, "\n") |
|
|
|
|
branches := make([]string, len(refs)-1) |
|
|
|
|
for i, ref := range refs[:len(refs)-1] { |
|
|
|
|
branches[i] = strings.TrimPrefix(ref, BranchPrefix) |
|
|
|
|
|
|
|
|
|
var max int |
|
|
|
|
if len(refs) > limit { |
|
|
|
|
max = limit |
|
|
|
|
} else { |
|
|
|
|
max = len(refs) - 1 |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
branches := make([]string, max) |
|
|
|
|
for i, ref := range refs[:max] { |
|
|
|
|
parts := strings.Fields(ref) |
|
|
|
|
|
|
|
|
|
branches[i] = parts[len(parts)-1] |
|
|
|
|
} |
|
|
|
|
return branches, nil |
|
|
|
|
} |
|
|
|
|