diff --git a/server/events/pending_plan_finder.go b/server/events/pending_plan_finder.go index 1a621fb130..72a4f2742f 100644 --- a/server/events/pending_plan_finder.go +++ b/server/events/pending_plan_finder.go @@ -58,8 +58,8 @@ func (p *DefaultPendingPlanFinder) findWithAbsPaths(pullDir string) ([]PendingPl lsCmd.Dir = repoDir lsOut, err := lsCmd.CombinedOutput() if err != nil { - return nil, nil, errors.Wrapf(err, "running git ls-files . "+ - "--others: %s", string(lsOut)) + return nil, nil, errors.Wrapf(err, "running 'git ls-files . --others' in '%s' directory: %s", + repoDir, string(lsOut)) } for _, file := range strings.Split(string(lsOut), "\n") { if filepath.Ext(file) == ".tfplan" { diff --git a/server/events/pending_plan_finder_test.go b/server/events/pending_plan_finder_test.go index cecc8c9bf2..7319e71f1a 100644 --- a/server/events/pending_plan_finder_test.go +++ b/server/events/pending_plan_finder_test.go @@ -1,6 +1,7 @@ package events_test import ( + "fmt" "os" "os/exec" "path/filepath" @@ -18,6 +19,28 @@ func TestPendingPlanFinder_FindNoDir(t *testing.T) { ErrEquals(t, "open /doesntexist: no such file or directory", err) } +// If one of the dir in PR dir is not git dir then it should throw an error. +func TestPendingPlanFinder_FindIncludingNotGitDir(t *testing.T) { + gitDirName := ".default" + notGitDirName := ".terragrunt-cache" + tmpDir := DirStructure(t, map[string]interface{}{ + gitDirName: map[string]interface{}{ + "default.tfplan": nil, + }, + notGitDirName: map[string]interface{}{ + "some_file.tfplan": nil, + }, + }) + // Initialize git in 'default' directory + gitDir := filepath.Join(tmpDir, gitDirName) + runCmd(t, gitDir, "git", "init") + pf := &events.DefaultPendingPlanFinder{} + + _, err := pf.Find(tmpDir) + ErrEquals(t, fmt.Sprintf("running 'git ls-files . --others' in '%s/%s' directory: fatal: "+ + "not a git repository (or any of the parent directories): .git\n: exit status 128", tmpDir, notGitDirName), err) +} + // Test different directory structures. func TestPendingPlanFinder_Find(t *testing.T) { cases := []struct {