diff options
author | Chris Parsons <cparsons@google.com> | 2020-10-12 23:44:08 -0400 |
---|---|---|
committer | Chris Parsons <cparsons@google.com> | 2020-10-13 16:18:59 -0400 |
commit | a798d9607641c27d9b3a383b484a768ce8222be7 (patch) | |
tree | f2d2fd767a876b366542b7ec0527f6943232a662 /finder | |
parent | 19bc60abee60f51114582d83f9f0213181b1bd75 (diff) | |
download | soong-a798d9607641c27d9b3a383b484a768ce8222be7.tar.gz |
find bazel-related files and add them to bazel.list and ninja deps
This retriggers soong_build whenever a new bzl, WORKSPACE, or
BUILD.bazel file is changed or added.
Test: Manually verified on bionic/libc genrules with manual changes to
related BUILD/bzl/WORKSPACE files -- these all retrigger builds.
Test: Updated finder_test.go
Change-Id: I634384f88781a6b6db32f5d6bf9c07e179e14c39
Diffstat (limited to 'finder')
-rw-r--r-- | finder/finder.go | 27 | ||||
-rw-r--r-- | finder/finder_test.go | 56 |
2 files changed, 76 insertions, 7 deletions
diff --git a/finder/finder.go b/finder/finder.go index 6513fa301..5413fa6bb 100644 --- a/finder/finder.go +++ b/finder/finder.go @@ -103,6 +103,9 @@ type CacheParams struct { // IncludeFiles are file names to include as matches IncludeFiles []string + + // IncludeSuffixes are filename suffixes to include as matches. + IncludeSuffixes []string } // a cacheConfig stores the inputs that determine what should be included in the cache @@ -1310,6 +1313,20 @@ func (f *Finder) statDirSync(path string) statResponse { return stats } +func (f *Finder) shouldIncludeFile(fileName string) bool { + for _, includedName := range f.cacheMetadata.Config.IncludeFiles { + if fileName == includedName { + return true + } + } + for _, includeSuffix := range f.cacheMetadata.Config.IncludeSuffixes { + if strings.HasSuffix(fileName, includeSuffix) { + return true + } + } + return false +} + // pruneCacheCandidates removes the items that we don't want to include in our persistent cache func (f *Finder) pruneCacheCandidates(items *DirEntries) { @@ -1326,13 +1343,9 @@ func (f *Finder) pruneCacheCandidates(items *DirEntries) { // remove any files that aren't the ones we want to include writeIndex := 0 for _, fileName := range items.FileNames { - // include only these files - for _, includedName := range f.cacheMetadata.Config.IncludeFiles { - if fileName == includedName { - items.FileNames[writeIndex] = fileName - writeIndex++ - break - } + if f.shouldIncludeFile(fileName) { + items.FileNames[writeIndex] = fileName + writeIndex++ } } // resize diff --git a/finder/finder_test.go b/finder/finder_test.go index 88b0c058b..788dbdd35 100644 --- a/finder/finder_test.go +++ b/finder/finder_test.go @@ -21,6 +21,7 @@ import ( "os" "path/filepath" "sort" + "strings" "testing" "android/soong/finder/fs" @@ -92,6 +93,7 @@ func runSimpleTest(t *testing.T, existentPaths []string, expectedMatches []strin nil, nil, []string{"findme.txt", "skipme.txt"}, + nil, }, ) defer finder.Shutdown() @@ -104,6 +106,46 @@ func runSimpleTest(t *testing.T, existentPaths []string, expectedMatches []strin fs.AssertSameResponse(t, foundPaths, absoluteMatches) } +// runTestWithSuffixes creates a few files, searches for findme.txt or any file +// with suffix `.findme_ext` and checks for the expected matches +func runTestWithSuffixes(t *testing.T, existentPaths []string, expectedMatches []string) { + filesystem := newFs() + root := "/tmp" + filesystem.MkDirs(root) + for _, path := range existentPaths { + fs.Create(t, filepath.Join(root, path), filesystem) + } + + finder := newFinder(t, + filesystem, + CacheParams{ + "/cwd", + []string{root}, + nil, + nil, + []string{"findme.txt", "skipme.txt"}, + []string{".findme_ext"}, + }, + ) + defer finder.Shutdown() + + foundPaths := finder.FindMatching(root, + func(entries DirEntries) (dirs []string, files []string) { + matches := []string{} + for _, foundName := range entries.FileNames { + if foundName == "findme.txt" || strings.HasSuffix(foundName, ".findme_ext") { + matches = append(matches, foundName) + } + } + return entries.DirNames, matches + }) + absoluteMatches := []string{} + for i := range expectedMatches { + absoluteMatches = append(absoluteMatches, filepath.Join(root, expectedMatches[i])) + } + fs.AssertSameResponse(t, foundPaths, absoluteMatches) +} + // testAgainstSeveralThreadcounts runs the given test for each threadcount that we care to test func testAgainstSeveralThreadcounts(t *testing.T, tester func(t *testing.T, numThreads int)) { // test singlethreaded, multithreaded, and also using the same number of threads as @@ -135,6 +177,13 @@ func TestIncludeFiles(t *testing.T) { ) } +func TestIncludeFilesAndSuffixes(t *testing.T) { + runTestWithSuffixes(t, + []string{"findme.txt", "skipme.txt", "alsome.findme_ext"}, + []string{"findme.txt", "alsome.findme_ext"}, + ) +} + func TestNestedDirectories(t *testing.T) { runSimpleTest(t, []string{"findme.txt", "skipme.txt", "subdir/findme.txt", "subdir/skipme.txt"}, @@ -142,6 +191,13 @@ func TestNestedDirectories(t *testing.T) { ) } +func TestNestedDirectoriesWithSuffixes(t *testing.T) { + runTestWithSuffixes(t, + []string{"findme.txt", "skipme.txt", "subdir/findme.txt", "subdir/skipme.txt", "subdir/alsome.findme_ext"}, + []string{"findme.txt", "subdir/findme.txt", "subdir/alsome.findme_ext"}, + ) +} + func TestEmptyDirectory(t *testing.T) { runSimpleTest(t, []string{}, |