package git import ( "os" "path/filepath" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestIgnoreFile(t *testing.T) { var ign bool var err error f := newIgnoreFile("./testdata/.gitignore") ign, err = f.MatchesPath("root.foo") require.NoError(t, err) assert.True(t, ign) ign, err = f.MatchesPath("i'm included") require.NoError(t, err) assert.False(t, ign) } func TestIgnoreFileDoesntExist(t *testing.T) { var ign bool var err error // Files that don't exist are treated as an empty gitignore file. f := newIgnoreFile("./testdata/thispathdoesntexist") ign, err = f.MatchesPath("i'm included") require.NoError(t, err) assert.False(t, ign) } func TestIgnoreFileTaint(t *testing.T) { var ign bool var err error tempDir := t.TempDir() gitIgnorePath := filepath.Join(tempDir, ".gitignore") // Files that don't exist are treated as an empty gitignore file. f := newIgnoreFile(gitIgnorePath) ign, err = f.MatchesPath("hello") require.NoError(t, err) assert.False(t, ign) // Now create the .gitignore file. err = os.WriteFile(gitIgnorePath, []byte("hello"), 0644) require.NoError(t, err) // Verify that the match still doesn't happen (no spontaneous reload). ign, err = f.MatchesPath("hello") require.NoError(t, err) assert.False(t, ign) // Now taint the file to force a reload and verify that the match does happen. f.Taint() ign, err = f.MatchesPath("hello") require.NoError(t, err) assert.True(t, ign) } func TestStringIgnoreRules(t *testing.T) { var ign bool var err error f := newStringIgnoreRules([]string{"hello"}) ign, err = f.MatchesPath("hello") require.NoError(t, err) assert.True(t, ign) ign, err = f.MatchesPath("world") require.NoError(t, err) assert.False(t, ign) }