summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/cache.py
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2014-12-08 21:25:23 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2015-01-08 09:52:52 +0000
commit97d44bf526080c31188dfb5b0e0ffcd05a15455a (patch)
tree992c4630920fe14f7616d7c73c31b36921adfc75 /bitbake/lib/bb/cache.py
parent26cd67e63a9451455def3be8ef03114dcac81ea5 (diff)
downloadpoky-97d44bf526080c31188dfb5b0e0ffcd05a15455a.tar.gz
bitbake: cache/fetch2/siggen: Ensure we track include history for file checksums
Currently, if you reference a file url, its checksum is included in the task hash, however if you change to a different file at a different location, perhaps taking advantage of the FILESPATH functionality, the system will not reparse the file in question and change its checksum to match the new file. To correctly handle this, the system not only needs to know if the existing file still exists or not, but also check the existance of every file it would have looked at when computing the original file. We already do this in the bitbake parsing code for class inclusion. This change uses the same technique to log the file list we looked at and if files in these locations exist when they previously did not, to invalidate and reparse the file. Since data stored in the cache is flattened text, we have to use a string form of the data and split on the ":" character which is ugly, but is an internal detail we can improve later if a better method is found. The cache version changes to trigger a reparse since the previous cache data is now incompatible. [YOCTO #7019] (Bitbake rev: 6c0706a28d72c591f1b75b6e3f3b645859387c7e) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/bb/cache.py')
-rw-r--r--bitbake/lib/bb/cache.py9
1 files changed, 6 insertions, 3 deletions
diff --git a/bitbake/lib/bb/cache.py b/bitbake/lib/bb/cache.py
index ac0c27f922..715da07e8d 100644
--- a/bitbake/lib/bb/cache.py
+++ b/bitbake/lib/bb/cache.py
@@ -43,7 +43,7 @@ except ImportError:
43 logger.info("Importing cPickle failed. " 43 logger.info("Importing cPickle failed. "
44 "Falling back to a very slow implementation.") 44 "Falling back to a very slow implementation.")
45 45
46__cache_version__ = "147" 46__cache_version__ = "148"
47 47
48def getCacheFile(path, filename, data_hash): 48def getCacheFile(path, filename, data_hash):
49 return os.path.join(path, filename + "." + data_hash) 49 return os.path.join(path, filename + "." + data_hash)
@@ -529,8 +529,11 @@ class Cache(object):
529 if hasattr(info_array[0], 'file_checksums'): 529 if hasattr(info_array[0], 'file_checksums'):
530 for _, fl in info_array[0].file_checksums.items(): 530 for _, fl in info_array[0].file_checksums.items():
531 for f in fl.split(): 531 for f in fl.split():
532 if not ('*' in f or os.path.exists(f)): 532 if "*" in f:
533 logger.debug(2, "Cache: %s's file checksum list file %s was removed", 533 continue
534 f, exist = f.split(":")
535 if (exist == "True" and not os.path.exists(f)) or (exist == "False" and os.path.exists(f)):
536 logger.debug(2, "Cache: %s's file checksum list file %s changed",
534 fn, f) 537 fn, f)
535 self.remove(fn) 538 self.remove(fn)
536 return False 539 return False