aboutsummaryrefslogtreecommitdiffstats
path: root/pathtools
Commit message (Collapse)AuthorAgeFilesLines
* Add pathtools.Filesystem.Stat for soong_zipColin Cross2018-09-272-12/+119
| | | | | | | | Stat is used by soong_zip. Add it to the FileSystem interface and add tests for it. Test: fs_test.go Change-Id: I1baa2b27398846a4e55bcf4fa291c62f507a4e9d
* Add tests for pathtools.FileSystem.LstatColin Cross2018-09-271-0/+78
| | | | | Test: fs_test.go Change-Id: I202d639d8db3f0cf11d927cbf9ca5aac073ccc43
* Add pathtools.FileSystem.ReadlinkColin Cross2018-09-262-0/+96
| | | | | | | | Readlink is used by soong_zip. Add it to the FileSystem interface and add tests for it. Test: fs_test.go Change-Id: Ie8ca5cd7cae98a47980a50d2891501fe79fd47a5
* Replace exact errors in tests with errno checkingColin Cross2018-09-261-12/+25
| | | | | | | | Only check that functions that return an *os.SyscallError have the correct errno, not that they have identical test text. Test: fs_test.go Change-Id: Iba050cb0474eaf2643858bcca4e52ba770702c2f
* Make pathtools.FileSystem.Open return a ReaderAtSeekerCloserColin Cross2018-09-261-3/+10
| | | | | | | | | Both *os.File and *bytes.Buffer support all of io.Reader, io.ReaderAt, io.Seeker and io.Closer. Return a combo interface so that soong_zip can use the result in an io.SectionReader. Test: m checkbuild Change-Id: I31c3ce35e28c52bae20b536b5905de2f8a3d1478
* Fix typo in TestMockFs_followSymlinksColin Cross2018-09-261-1/+1
| | | | | | | c/f was tested twice and d/f was not tested. Test: fs_test.go Change-Id: I0fd6ba8ef37a3407f9be98608efed387cca5d7ff
* Add ShouldFollowSymlinks argument to pathtools.GlobColin Cross2018-09-244-43/+219
| | | | | | | | | Allow the caller to specify whether symlinks should be followed (the old behavior) or not. Test: glob_test.go Test: fs_test.go Change-Id: I550dc91b8e6370fb32a9a1cbdcb2edade48bda46
* Fix recursive globs through symlinksColin Cross2018-09-2414-43/+254
| | | | | | | | | | | | | filepath.Walk does not walk symlinks to directories, which leads to inconsitent behavior with following symlinks. Replace the use of filepath.Walk in ListDirsRecursive with a helper function that lists each directory and walks anything for which IsDir reports true, which includes following symlinks, and then reconstructs the path through the symlink. Test: fs_test.go Test: glob_test.go Change-Id: Ie4dd0820e9c7c0a124caa65210ce20439a44da16
* Add symlink support to mockFsColin Cross2018-09-244-21/+384
| | | | | | | | | | | Add support for specifying symlinks in mock filesystems to prepare for glob symlink tests. This patch leaves incorrect behavior by not walking symlinks in mockFs.ListDirsRecursive, but it matches what osFs does. Test: fs_test.go Change-Id: If87a83c00f21e14696faf890b7b09e88b18e95b9
* Add OsFs tests for escaped globsColin Cross2018-09-2120-46/+58
| | | | | Test: glob_test.go Change-Id: I18d5f0c1139c68eafe4993792e8640d2144d49e1
* Improve error message for globbed dangling symlinkColin Cross2018-09-212-7/+35
| | | | | | | | | IsDir on a dangling symlink produces ErrNotExist. Manually check if the file exists but is a symlink to report a better error. Test: m checkbuild Change-Id: I3181e74002436d74ec35a0923635835e561030dd
* Fix globs matching files with wildcard characters in the nameColin Cross2018-09-192-11/+140
| | | | | | | | | | | | | Globs that match a file that looks like a glob were causing duplicate results because the prefix match would then re-match the filename as a wildcard. Add escaping to prevent re-matching. Also add tests for globs on files with wildcards, tests for ? and [a-z] glob matches supported by filepath.Match, and tests for escaped wildcard characters. Test: glob_test.go Change-Id: Id11a754863979bb36cca0dbd18ea2e76dd1470e3
* Support trailing slash in pathtools.Match patternsColin Cross2018-07-132-0/+60
| | | | | | | | | | | pathtools.Match was trimming the trailing slash from patterns. Make it handle a trailing slash by first confirming that both the pattern and name either both have or both do not have a trailing slash, and then trimming it from both. Bug: 111389216 Test: TestMatch in glob_test.go Change-Id: I743e00c14d885de5b5a060aa9e2b22c81dc7e09d
* Append / to directories in Glob resultsDan Willemsen2018-02-232-27/+38
| | | | | | | | | This makes it easy for users of Glob to detect whether the match is a file or directory. Doing the check at this level means that the filelist file used as a dependency will be updated if a directory is replaced with a file of the same name, or vice versa. Change-Id: I79ebba39327218bcdcf50b393498306119de9d6c
* Export pathtools.MatchColin Cross2017-11-221-4/+4
| | | | | | | | Export pathtools.Match so that tools that operate on file lists (like zip listings) can use the same glob format. Test: m checkbuild Change-Id: Ic4b90139c381c57551836590da3ea54826b0227a
* Fix recursive glob on MockFsColin Cross2017-10-053-49/+119
| | | | | | | | | | | | Recursive globs on MockFs were ending up in an unmocked os.Lstat call in walkAllDirs. Move walkAllDirs into the FileSystem interface as ListDirsRecursive. Also duplicate the glob tests on both the real filesystem and on MockFs. Test: glob_test.go Change-Id: Ia6b6b5eecdd17955a49d684a0fd5e55df05cfe62
* Clearer error in case of Android.bp being unreadableJeff Gaston2017-09-011-0/+10
| | | | | | | | | | | Bug: 64600838 Test: mkdir errtest \ && ln -s /tmp/dontexist errtest/Android.bp \ # and add errtest to ./Android.bp \ && m nothing \ # and check that the error message mentions a symlink Change-Id: I841ec12d613f61ccc3396538062bee48c8c1ca27
* Add . and / to MockFsColin Cross2017-07-141-0/+1
| | | | | | | | Add the final directory to MockFs so that Exists() on . and / returns true. Test: java_test.go Change-Id: I1320f4f267ee6b6a7dbf1132630df306602e84d8
* Fix glob deps for non-wild patternsDan Willemsen2017-06-222-70/+83
| | | | | | | | | | | | | | | Patterns that were not wild would return an empty "dirs" list if the file was found. But then if they were removed, we wouldn't know to update the glob file and re-run the primary builder. In this case, instead of adding the final directory into the dirs list, add the matched files themselves. Due to editors performing atomic writes (the directory timestamp often gets updated at the same time as file timestamp) this is probably more efficient. In either case, we're only re-running the individual glob, which is rather cheap. Rename startGlob/Glob return name from "dirs" to "deps" since it may contain files now too.
* Add globbing to filesystem mockingColin Cross2017-02-023-30/+169
| | | | | | | | | | Add globbing to filesystem mocking so that more code can be tested against the mock. Also moves the filesystem mock to pathtools, and renames pathtools.GlobWithExcludes to pathtools.Glob, replacing the existing pathtools.Glob. Test: blueprint tests Change-Id: I722df8121bc870c4a861d7c249245c57dcb607be
* Prevent glob from accessing hidden filesDan Willemsen2016-12-195-0/+45
| | | | | | | | | | | | | | | | Hidden files are often source control related (".git", ".repo", etc) or editor related (vim's .*.swp), so are not guaranteed to exist, and may be temporary. The build system shouldn't be using these files by default. If the glob pattern explicitly uses "." at the beginning of a path component, allow returning hidden files for that component. Because of this behavior, non-wildcard globs remain unchanged. The one behavior that cannot be handled anymore is including hidden files in recursive globs. Change-Id: I583c506e9a18ed2ff7ca011a791165d9582de90f
* Fix optional_subdirs globbingColin Cross2016-11-141-1/+1
| | | | | | | | | | | | | Bypassing c.glob() and using filepath.Glob() directly for non-glob paths does not add dependencies on directories that contain missing files. For optional_subdirs, this means no dependency is added to rerun the primary builder when an Android.bp file is added to an optional_subdirs directory. Always use c.glob(), for the non-optional case it will not insert any dependencies if the file exists (as tested by glob_test.go's no-wild tests), and if the file doesn't exist the len(matches) == 0 will error out. Change-Id: I370479c6e89f5ff590897702e256256a4dca6952
* Add better error message when stat returns nilColin Cross2016-11-051-1/+6
| | | | | | | | | Sometimes os.Stat on a path seems to return nil after filepath.Glob returned the path as valid. Return the error message to see why. Bug: 32676828 Test: builds Change-Id: Ieedddb673b4d641e5de08778febeb3d8ea025c0d
* Import globbing from SoongColin Cross2016-11-031-1/+109
| | | | | | | | | | | | | | | | | | | | | | Add globbing with dependency checking to blueprint. Calling ModuleContext.GlobWithDeps or SingletonContext.GlobWithDeps will return a list of files that match the globs, while also adding efficient dependencies to rerun the primary builder if a file that matches the glob is added or removed. Also use the globbing support for optional_subdirs=, subdirs= and build= lines in blueprints files. The globbing slightly changes the behavior of subname= lines, it no longer falls back to looking for a file called "Blueprints". Blueprint files that need to include a subdirectory with a different name can use build= instead of subdir= to directly include them. The Blueprints file is updated to reset subname="Blueprints" in case we want to include subdirectories inside blueprint and the primary builder has changed the subname. Also adds a new test directory that contains a simple primary builder tree to test regeneration for globbing, and runs the tests in travis. Change-Id: I83ce525fd11e11579cc58ba5308d01ca8eea7bc6
* Fix glob dependencies when initial non-wild path does not existColin Cross2015-06-182-10/+74
| | | | | | | | If the initial non-wild part of a glob path does not exist, return the last existing part of the path as a dependency to detect if the path is created later. Change-Id: Ib5a39e6830cb386deed26e017279d0aac1bc9a20
* Add GlobWithExcludes to pathtoolsColin Cross2015-04-292-12/+315
| | | | | | | | Add GlobWithExcludes, which takes a pattern and a list of exclude patterns, and returns all files that match the pattern but do not match any exclude patterns. Change-Id: I8b94b3ba5a37409071b475b9a4035f52f47863f1
* Add recursive glob support to pathtools.GlobColin Cross2015-04-292-10/+139
| | | | | | | | Recursive globs are supported by passing ** in any single non-final path element. For example, path/**/*.java will find all files named *.java under "path". Change-Id: Ifebd76f8959289f7d0d378504053c1c6b88cdeed
* Rewrite pathtools.Glob to track partially-matched directoriesColin Cross2015-04-2411-23/+186
| | | | | | | | | | | | | | | | | | | The directory structure: a/ a b/ b With the glob pattern */a would previously return []string{"a"} for dirs, but it needs to return []string{"a", "b"} in order to re-run the generator if a file called "a" is created inside b/. Rewrite Glob to manually recurse through path elements, only calling filepath.Glob for a pattern with wilds in the last element of the path, and add the globbed directory to the dirs list each time. Also add tests and test data for pathtools.Glob. Change-Id: Ibbdb2f99809ea0826d4fa82066cf84103005ef57
* Fix formattingColin Cross2015-04-201-1/+1
| | | | | | gofmt -w . Change-Id: If9cf0b7bd810f899edffcd2edf361fa83245bd2a
* Replace ReplaceExtension regexp with manual string operationsColin Cross2015-04-151-6/+6
| | | | | | | | regexp is overkill for a simple extension replacement, just find the last '.' and add the new extension after it. Saves 5% cpu time on one workload. Change-Id: Ic299c9ec5132d15bbea2c9c7778c000d6fdf509a
* Add function to return list of globbed fileJean-Francois Dupuis2015-04-141-0/+24
| | | | Change-Id: If501246dc4d7d5b877cc2f871f8786f47c200d00
* Add license headers and LICENSE fileColin Cross2015-01-232-0/+28
| | | | Change-Id: I6f7c7374093c0745ee4aa677480376a06648b358
* Move blueprint/* up a directoryColin Cross2015-01-232-0/+80
Make integrating with go tools easier by putting the blueprint package files in the top level directory of the git project instead of in a subdirectory called blueprint. Change-Id: I35c144c5fe7ddf34e478d0c47c50b2f6c92c2a03