diff --git a/gps/prune.go b/gps/prune.go index aa8671c414..e3f48e3cd7 100644 --- a/gps/prune.go +++ b/gps/prune.go @@ -333,22 +333,36 @@ func isPreservedFile(name string) bool { return false } -// pruneGoTestFiles deletes all Go test files (*_test.go) in fsState. +// pruneGoTestFiles deletes all Go test files (*_test.go and testdata/**/*) +// in fsState. func pruneGoTestFiles(fsState filesystemState) error { - toDelete := make([]string, 0, len(fsState.files)/2) + filesToDelete := make([]string, 0, len(fsState.files)/2) + dirsToDelete := make([]string, 0) for _, path := range fsState.files { if strings.HasSuffix(path, "_test.go") { - toDelete = append(toDelete, filepath.Join(fsState.root, path)) + filesToDelete = append(filesToDelete, filepath.Join(fsState.root, path)) } } - for _, path := range toDelete { + for _, path := range fsState.dirs { + if filepath.Base(path) == "testdata" { + dirsToDelete = append(dirsToDelete, filepath.Join(fsState.root, path)) + } + } + + for _, path := range filesToDelete { if err := os.Remove(path); err != nil && !os.IsNotExist(err) { return err } } + for _, path := range dirsToDelete { + if err := os.RemoveAll(path); err != nil && !os.IsNotExist(err) { + return err + } + } + return nil } diff --git a/gps/prune_test.go b/gps/prune_test.go index 0d202a8cac..f653e15aa3 100644 --- a/gps/prune_test.go +++ b/gps/prune_test.go @@ -426,6 +426,31 @@ func TestPruneGoTestFiles(t *testing.T) { }, false, }, + { + "testdata-files", + fsTestCase{ + before: filesystemState{ + dirs: []string{ + "dir", + "dir/testdata", + }, + files: []string{ + "dir/main.go", + "dir/main_test.go", + "dir/testdata/foo", + }, + }, + after: filesystemState{ + dirs: []string{ + "dir", + }, + files: []string{ + "dir/main.go", + }, + }, + }, + false, + }, } for _, tc := range testcases {