From f674a71c7d1c6ca980a818f5f82c81106f6a00c5 Mon Sep 17 00:00:00 2001 From: oppiliappan Date: Sun, 8 Jun 2025 11:42:50 +0100 Subject: [PATCH] knotserver: git: do not pass HEAD as a default arg to rev-list Change-Id: vumymovsyzwmokpmxlvslqyyuswrvllx when calling rev-list, HEAD was passed as a default argument: git rev-list HEAD --count but HEAD is only populated when we perform git.Open; it is zeroed out when we perform git.PlainOpen: git rev-list 00000... --count this causes rev-list to exit with an error, when used in repos that are git.PlainOpen'd. Signed-off-by: oppiliappan --- knotserver/git/git.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/knotserver/git/git.go b/knotserver/git/git.go index 3a22ca8..2b8764d 100644 --- a/knotserver/git/git.go +++ b/knotserver/git/git.go @@ -128,6 +128,7 @@ func (g *GitRepo) Commits(offset, limit int) ([]*object.Commit, error) { commits := []*object.Commit{} output, err := g.revList( + g.h.String(), fmt.Sprintf("--skip=%d", offset), fmt.Sprintf("--max-count=%d", limit), ) @@ -153,6 +154,7 @@ func (g *GitRepo) Commits(offset, limit int) ([]*object.Commit, error) { func (g *GitRepo) TotalCommits() (int, error) { output, err := g.revList( + g.h.String(), fmt.Sprintf("--count"), ) if err != nil { @@ -170,13 +172,20 @@ func (g *GitRepo) TotalCommits() (int, error) { func (g *GitRepo) revList(extraArgs ...string) ([]byte, error) { var args []string args = append(args, "rev-list") - args = append(args, g.h.String()) args = append(args, extraArgs...) cmd := exec.Command("git", args...) cmd.Dir = g.path - return cmd.Output() + out, err := cmd.Output() + if err != nil { + if exitErr, ok := err.(*exec.ExitError); ok { + return nil, fmt.Errorf("%w, stderr: %s", err, string(exitErr.Stderr)) + } + return nil, err + } + + return out, nil } func (g *GitRepo) Commit(h plumbing.Hash) (*object.Commit, error) { -- 2.43.0