From 7923ddf5c1a2fbacc24d470f6ead84369129926e Mon Sep 17 00:00:00 2001 From: Erich <15257900+ErichKramer@users.noreply.github.com> Date: Thu, 7 Sep 2023 11:16:26 -0700 Subject: [PATCH] [MER-2744] fix: look for correct git dir path. (#200) --- cmd/av/helpers.go | 15 +++++++++++---- internal/git/git.go | 6 ++++-- internal/git/gittest/repo.go | 3 ++- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/cmd/av/helpers.go b/cmd/av/helpers.go index b64197cc..cbfefc46 100644 --- a/cmd/av/helpers.go +++ b/cmd/av/helpers.go @@ -18,18 +18,25 @@ var cachedRepo *git.Repo func getRepo() (*git.Repo, error) { if cachedRepo == nil { - cmd := exec.Command("git", "rev-parse", "--show-toplevel") + cmd := exec.Command("git", "rev-parse", "--path-format=absolute", "--show-toplevel", "--git-common-dir") + if rootFlags.Directory != "" { cmd.Dir = rootFlags.Directory } - toplevel, err := cmd.Output() + paths, err := cmd.Output() if err != nil { return nil, errors.Wrap( err, - "failed to determine repo toplevel (are you running inside a Git repo?)", + "failed to find git directory (are you running inside a Git repo?)", ) } - cachedRepo, err = git.OpenRepo(strings.TrimSpace(string(toplevel))) + + dir, gitDir, found := strings.Cut(strings.TrimSpace(string(paths)), "\n" ) + if !found { + return nil, errors.New("Unexpected format, not able to parse toplevel and common dir.") + } + + cachedRepo, err = git.OpenRepo(dir, gitDir) if err != nil { return nil, errors.Wrap(err, "failed to open git repo") } diff --git a/internal/git/git.go b/internal/git/git.go index 0cd6f270..5e04094a 100644 --- a/internal/git/git.go +++ b/internal/git/git.go @@ -20,12 +20,14 @@ var ErrRemoteNotFound = errors.Sentinel("this repository doesn't have a remote o type Repo struct { repoDir string + gitDir string log logrus.FieldLogger } -func OpenRepo(repoDir string) (*Repo, error) { +func OpenRepo(repoDir string, gitDir string) (*Repo, error) { r := &Repo{ repoDir, + gitDir, logrus.WithFields(logrus.Fields{"repo": path.Base(repoDir)}), } @@ -37,7 +39,7 @@ func (r *Repo) Dir() string { } func (r *Repo) GitDir() string { - return path.Join(r.repoDir, ".git") + return r.gitDir } func (r *Repo) AvDir() string { diff --git a/internal/git/gittest/repo.go b/internal/git/gittest/repo.go index 75552158..d7db5e90 100644 --- a/internal/git/gittest/repo.go +++ b/internal/git/gittest/repo.go @@ -3,6 +3,7 @@ package gittest import ( "os" "os/exec" + "path" "path/filepath" "testing" @@ -49,7 +50,7 @@ func NewTempRepo(t *testing.T) *git.Repo { err = remoteInit.Run() require.NoError(t, err, "failed to initialize remote git repository") - repo, err := git.OpenRepo(dir) + repo, err := git.OpenRepo(dir, path.Join(dir, ".git")) require.NoError(t, err, "failed to open repo") settings := map[string]string{