package git import ( "errors" "os" "path/filepath" "testing" "github.com/go-git/go-git/v5" "github.com/stretchr/testify/assert" ) func TestIsClean(t *testing.T) { isClean, err := IsClean("/tmp") assert.Equal(t, isClean, false) assert.True(t, errors.Is(err, git.ErrRepositoryNotExists)) } // TestIsCleanIgnoresAbraSource confirms that the .abra-source sidecar // file written by abra next to externally-cloned recipes does not cause // IsClean to report the worktree as dirty. func TestIsCleanIgnoresAbraSource(t *testing.T) { dir := t.TempDir() if _, err := git.PlainInit(dir, false); err != nil { t.Fatalf("git init failed: %s", err) } sidecar := filepath.Join(dir, ".abra-source") if err := os.WriteFile(sidecar, []byte("git.example.com/u/recipe\n"), 0o644); err != nil { t.Fatalf("writing sidecar failed: %s", err) } isClean, err := IsClean(dir) if err != nil { t.Fatalf("IsClean returned error: %s", err) } assert.True(t, isClean, "expected worktree with only .abra-source to be reported clean") // Sanity check: an unrelated untracked file should still mark it dirty. other := filepath.Join(dir, "random.txt") if err := os.WriteFile(other, []byte("hello"), 0o644); err != nil { t.Fatalf("writing extra file failed: %s", err) } isClean, err = IsClean(dir) if err != nil { t.Fatalf("IsClean returned error: %s", err) } assert.False(t, isClean, "expected worktree with unrelated untracked file to be reported dirty") }