aboutsummaryrefslogtreecommitdiff
path: root/finder
diff options
context:
space:
mode:
authorChris Parsons <cparsons@google.com>2020-10-12 23:44:08 -0400
committerChris Parsons <cparsons@google.com>2020-10-13 16:18:59 -0400
commita798d9607641c27d9b3a383b484a768ce8222be7 (patch)
treef2d2fd767a876b366542b7ec0527f6943232a662 /finder
parent19bc60abee60f51114582d83f9f0213181b1bd75 (diff)
downloadsoong-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.go27
-rw-r--r--finder/finder_test.go56
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{},