Hi Jate, On Wednesday 19 June 2013 11:08:10 Jate Sujjavanich wrote: > This allows sstate-cache to be shared between builds in different > directories. > > Differences in the full path were triggering a false positive when there > were actually no changes. > > Signed-off-by: Jate Sujjavanich <jate.sujjavan...@myfuelmaster.com> > --- > bitbake/lib/bb/fetch2/__init__.py | 14 +++++++++----- > bitbake/lib/bb/siggen.py | 3 ++- > 2 files changed, 11 insertions(+), 6 deletions(-) > > diff --git a/bitbake/lib/bb/fetch2/__init__.py > b/bitbake/lib/bb/fetch2/__init__.py index dd1cc93..7ab44d7 100644 > --- a/bitbake/lib/bb/fetch2/__init__.py > +++ b/bitbake/lib/bb/fetch2/__init__.py > @@ -900,8 +900,7 @@ def get_checksum_file_list(d): > > return " ".join(filelist) > > - > -def get_file_checksums(filelist, pn): > +def get_file_checksums(filelist, pn, topdir): > """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 > @@ -917,7 +916,12 @@ def get_file_checksums(filelist, pn): bb.warn("Unable > to get checksum for %s SRC_URI entry %s: %s" % (pn, os.path.basename(f), > e)) return None > return checksum > + > + (recipe_root, _) = os.path.split(topdir) > > + def remove_recipe_parent(data): > + return data.replace(recipe_root, '').strip('/') > + > checksums = [] > for pth in filelist.split(): > checksum = None > @@ -927,7 +931,7 @@ def get_file_checksums(filelist, pn): > for f in glob.glob(pth): > checksum = checksum_file(f) > if checksum: > - checksums.append((f, checksum)) > + checksums.append((remove_recipe_parent(f), > + checksum)) > elif os.path.isdir(pth): > # Handle directories > for root, dirs, files in os.walk(pth): > @@ -935,12 +939,12 @@ def get_file_checksums(filelist, pn): > fullpth = os.path.join(root, name) > checksum = checksum_file(fullpth) > if checksum: > - checksums.append((fullpth, checksum)) > + > + checksums.append((remove_recipe_parent(fullpth), checksum)) > else: > checksum = checksum_file(pth) > > if checksum: > - checksums.append((pth, checksum)) > + checksums.append((remove_recipe_parent(pth), checksum)) > > checksums.sort(key=operator.itemgetter(1)) > return checksums > diff --git a/bitbake/lib/bb/siggen.py b/bitbake/lib/bb/siggen.py index > 8861337..c64acfe 100644 --- a/bitbake/lib/bb/siggen.py > +++ b/bitbake/lib/bb/siggen.py > @@ -74,6 +74,7 @@ class SignatureGeneratorBasic(SignatureGenerator): > self.pkgnameextract = re.compile("(?P<fn>.*)\..*") > self.basewhitelist = set((data.getVar("BB_HASHBASE_WHITELIST", > True) or "").split()) self.taskwhitelist = None > + self.topdir = data.getVar("TOPDIR", True) > self.init_rundepcheck(data) > > def init_rundepcheck(self, data): > @@ -187,7 +188,7 @@ class SignatureGeneratorBasic(SignatureGenerator): > self.runtaskdeps[k].append(dep) > > if task in dataCache.file_checksums[fn]: > - 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.topdir) > for (f,cs) in checksums: > self.file_checksum_values[k][f] = cs > data = data + cs
Good catch! The only thing is, this will not help for files within different layers which may not be underneath TOPDIR; I think we'll need a function that determines which layer the file is under (longest path match from data.getVar('BBLAYERS', True).split()) and then take that path off the beginning. Additionally, this is a patch against bitbake so it will need to go to the bitbake-de...@lists.openembedded.org mailing list. Cheers, Paul -- Paul Eggleton Intel Open Source Technology Centre _______________________________________________ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core