diff options
author | Aníbal Limón <anibal.limon@linaro.org> | 2019-11-15 08:47:23 -0600 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2019-12-30 23:39:31 +0000 |
commit | 923aff060d8aba8456979c35b16d300ba7c13ff9 (patch) | |
tree | 1451850b5c7efbdb914976034722d8af047bdd24 | |
parent | a8e7e913407d5c381fd817689bab19208919f86e (diff) | |
download | bitbake-923aff060d8aba8456979c35b16d300ba7c13ff9.tar.gz |
lib/bb: Add BB_SIGNATURE_LOCAL_DIRS_EXCLUDE to speed-up taskhash on directories
The new BB_SIGNATURE_LOCAL_DIRS_EXCLUDE allows you to specify a list
of directories to exclude when making taskhash, our specific case
is using SRC_URI that points local VCS directory.
Use bb.fetch.module to set default to: "CVS .bzr .git .hg .osc .p4 .repo .svn"
Signed-off-by: Aníbal Limón <anibal.limon@linaro.org>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | lib/bb/checksum.py | 5 | ||||
-rw-r--r-- | lib/bb/fetch2/__init__.py | 4 | ||||
-rw-r--r-- | lib/bb/siggen.py | 5 |
3 files changed, 8 insertions, 6 deletions
diff --git a/lib/bb/checksum.py b/lib/bb/checksum.py index 5bc8a8fcb..677020f49 100644 --- a/lib/bb/checksum.py +++ b/lib/bb/checksum.py @@ -74,7 +74,7 @@ class FileChecksumCache(MultiProcessCache): else: dest[0][h] = source[0][h] - def get_checksums(self, filelist, pn): + def get_checksums(self, filelist, pn, localdirsexclude): """Get checksums for a list of files""" def checksum_file(f): @@ -90,7 +90,8 @@ class FileChecksumCache(MultiProcessCache): if pth == "/": bb.fatal("Refusing to checksum /") dirchecksums = [] - for root, dirs, files in os.walk(pth): + for root, dirs, files in os.walk(pth, topdown=True): + [dirs.remove(d) for d in list(dirs) if d in localdirsexclude] for name in files: fullpth = os.path.join(root, name) checksum = checksum_file(fullpth) diff --git a/lib/bb/fetch2/__init__.py b/lib/bb/fetch2/__init__.py index 07de6c269..731c16089 100644 --- a/lib/bb/fetch2/__init__.py +++ b/lib/bb/fetch2/__init__.py @@ -1197,14 +1197,14 @@ def get_checksum_file_list(d): return " ".join(filelist) -def get_file_checksums(filelist, pn): +def get_file_checksums(filelist, pn, localdirsexclude): """Get a list of the checksums for a list of local files Returns the checksums for a list of local files, caching the results as it proceeds """ - return _checksum_cache.get_checksums(filelist, pn) + return _checksum_cache.get_checksums(filelist, pn, localdirsexclude) class FetchData(object): diff --git a/lib/bb/siggen.py b/lib/bb/siggen.py index e484e5e37..f982bf22b 100644 --- a/lib/bb/siggen.py +++ b/lib/bb/siggen.py @@ -126,6 +126,7 @@ class SignatureGeneratorBasic(SignatureGenerator): self.unihash_cache = bb.cache.SimpleCache("1") self.unitaskhashes = self.unihash_cache.init_cache(data, "bb_unihashes.dat", {}) + self.localdirsexclude = (data.getVar("BB_SIGNATURE_LOCAL_DIRS_EXCLUDE") or "CVS .bzr .git .hg .osc .p4 .repo .svn").split() def init_rundepcheck(self, data): self.taskwhitelist = data.getVar("BB_HASHTASK_WHITELIST") or None @@ -222,9 +223,9 @@ class SignatureGeneratorBasic(SignatureGenerator): if task in dataCache.file_checksums[fn]: if self.checksum_cache: - checksums = self.checksum_cache.get_checksums(dataCache.file_checksums[fn][task], recipename) + checksums = self.checksum_cache.get_checksums(dataCache.file_checksums[fn][task], recipename, self.localdirsexclude) else: - checksums = bb.fetch2.get_file_checksums(dataCache.file_checksums[fn][task], recipename) + checksums = bb.fetch2.get_file_checksums(dataCache.file_checksums[fn][task], recipename, self.localdirsexclude) for (f,cs) in checksums: self.file_checksum_values[tid].append((f,cs)) |