41 lines
796 B
Go
41 lines
796 B
Go
package gitcmd
|
|
|
|
import (
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
func (r *Repository) ListCommitsByPath(ref, path string, limit int) ([]Commit, error) {
|
|
if empty, err := r.IsEmpty(); err != nil {
|
|
return nil, err
|
|
} else if empty {
|
|
return []Commit{}, nil
|
|
}
|
|
if ref == "" {
|
|
ref = "HEAD"
|
|
}
|
|
|
|
cmd := NewCommand("log", "--follow").
|
|
Add("--format=%H%x1f%h%x1f%s%x1f%an%x1f%ae%x1f%aI%x1f%P").
|
|
WithDir(r.Path)
|
|
if limit > 0 {
|
|
cmd.Add("-n", strconv.Itoa(limit))
|
|
}
|
|
cmd.AddDynamicArguments(ref)
|
|
cmd.AddDashesAndList(path)
|
|
|
|
out, _, err := cmd.RunStdString(r.ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var commits []Commit
|
|
for _, line := range strings.Split(strings.TrimSpace(out), "\n") {
|
|
if line == "" {
|
|
continue
|
|
}
|
|
commits = append(commits, *parseCommitLine(line))
|
|
}
|
|
return commits, nil
|
|
}
|