From 08ef238391d693a509cbb59994f696cdd8fc32c6 Mon Sep 17 00:00:00 2001 From: oppiliappan Date: Tue, 15 Jul 2025 21:44:47 +0100 Subject: [PATCH] knotserver/git: refactor command runner Change-Id: vyslzywrzumvyvotqkxkvylomtvswxvo Signed-off-by: oppiliappan --- knotserver/git/cmd.go | 42 ++++++++++++++++++++++++++++++++++++++++++ knotserver/git/git.go | 21 --------------------- 2 files changed, 42 insertions(+), 21 deletions(-) create mode 100644 knotserver/git/cmd.go diff --git a/knotserver/git/cmd.go b/knotserver/git/cmd.go new file mode 100644 index 0000000..0a5dec7 --- /dev/null +++ b/knotserver/git/cmd.go @@ -0,0 +1,42 @@ +package git + +import ( + "fmt" + "os/exec" +) + +const ( + fieldSeparator = "\x1f" // ASCII Unit Separator + recordSeparator = "\x1e" // ASCII Record Separator +) + +func (g *GitRepo) runGitCmd(command string, extraArgs ...string) ([]byte, error) { + var args []string + args = append(args, command) + args = append(args, extraArgs...) + + cmd := exec.Command("git", args...) + cmd.Dir = g.path + + 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) revList(extraArgs ...string) ([]byte, error) { + return g.runGitCmd("rev-list", extraArgs...) +} + +func (g *GitRepo) forEachRef(extraArgs ...string) ([]byte, error) { + return g.runGitCmd("for-each-ref", extraArgs...) +} + +func (g *GitRepo) revParse(extraArgs ...string) ([]byte, error) { + return g.runGitCmd("rev-parse", extraArgs...) +} diff --git a/knotserver/git/git.go b/knotserver/git/git.go index 872dafb..c7e1675 100644 --- a/knotserver/git/git.go +++ b/knotserver/git/git.go @@ -6,9 +6,7 @@ import ( "fmt" "io" "io/fs" - "os/exec" "path" - "sort" "strconv" "strings" "time" @@ -170,25 +168,6 @@ func (g *GitRepo) TotalCommits() (int, error) { return count, nil } -func (g *GitRepo) revList(extraArgs ...string) ([]byte, error) { - var args []string - args = append(args, "rev-list") - args = append(args, extraArgs...) - - cmd := exec.Command("git", args...) - cmd.Dir = g.path - - 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) { return g.r.CommitObject(h) } -- 2.43.0