parse/cache/cooker: Preserve order in the file inclusion list
PATCH 1/1 parse/cache/cooker: Preserve order in the file inclusion list
The data returned by get_file_depends() may me used in contexts like checksums where order is important. The current usage of sets means that some of the checksums can change in circumstances they should not.
This patch changes to use lists, thereby removing the problem.
---
bitbake/lib/bb/cache.py +2 -2
@@ -405,12 +405,12 @@ class Cache(object): """Parse the specified filename, returning the recipe information""" infos = [] datastores = cls.load_bbfile(filename, appends, configdata) - depends = set() + depends = [] for variant, data in sorted(datastores.iteritems(), key=lambda i: i[0], reverse=True): virtualfn = cls.realfn2virtual(filename, variant) - depends |= (data.getVar("__depends", False) or set()) + depends = depends + (data.getVar("__depends", False) or []) if depends and not variant: data.setVar("__depends", depends)
bitbake/lib/bb/cooker.py +2 -2
@@ -692,8 +692,8 @@ class BBCooker: # Generate a list of parsed configuration files by searching the files # listed in the __depends and __base_depends variables with a .conf suffix. conffiles = [] - dep_files = self.configuration.data.getVar('__depends') or set() - dep_files.union(self.configuration.data.getVar('__base_depends') or set()) + dep_files = self.configuration.data.getVar('__base_depends') or [] + dep_files = dep_files + (self.configuration.data.getVar('__depends') or []) for f in dep_files: if f[0].endswith(".conf"):
bitbake/lib/bb/parse/__init__.py +3 -4
@@ -73,8 +73,7 @@ def update_mtime(f): def mark_dependency(d, f): if f.startswith('./'): f = "%s/%s" % (os.getcwd(), f[2:]) - deps = d.getVar('__depends') or set() - deps.update([(f, cached_mtime(f))]) + deps = (d.getVar('__depends') or []) + [(f, cached_mtime(f))] d.setVar('__depends', deps) def supports(fn, data):
@@ -134,8 +133,8 @@ def vars_from_file(mypkg, d): def get_file_depends(d): '''Return the dependent files''' dep_files = [] - depends = d.getVar('__depends', True) or set() - depends = depends.union(d.getVar('__base_depends', True) or set()) + depends = d.getVar('__base_depends', True) or [] + depends = depends + (d.getVar('__depends', True) or []) for (fn, _) in depends: dep_files.append(os.path.abspath(fn)) return " ".join(dep_files)
Quoted 5 lines · Richard Purdie
The data returned by
get_file_depends()may me used in contexts like checksums where order is important. The current usage of sets means that some of the checksums can change in circumstances they should not.This patch changes to use lists, thereby removing the problem.
Should this cover also BBINCLUDED variable in parsing cache?
Sometimes I see all recipes reparsed without any reason (no change in metadata).
Comparing output of bitbake -p (with added patch to dump parse data, shows order of BBINCLUDED changing.
e.g. from yesterday:
OE om-gta02@shr ~/shr-core $ diff 20121118.BBINCLUDED 20121119.BBINCLUDED 12c12
< /OE/shr-core/openembedded-core/meta/conf/machine/include/tune-arm920t.inc
---
Quoted 1 line
/OE/shr-core/openembedded-core/meta/classes/mirrors.bbclass
45a46
Quoted 1 line
/OE/shr-core/meta-smartphone/meta-shr/conf/distro/shr.conf
51c52
< /OE/shr-core/openembedded-core/meta/classes/mirrors.bbclass
---
Quoted 1 line
/OE/shr-core/openembedded-core/meta/conf/machine/include/tune-arm920t.inc
54d54
< /OE/shr-core/meta-smartphone/meta-shr/conf/distro/shr.conf 60d59
< /OE/shr-core/openembedded-core/meta/conf/distro/include/tcmode-default.inc 62a62
Quoted 1 line
/OE/shr-core/openembedded-core/meta/conf/distro/include/tcmode-default.inc
Cheers,
Quoted 69 lines
Signed-off-by Richard Purdie <[email protected]>---
bitbake/lib/bb/cache.py +2
-2@@ -405,12 +405,12 @@ class Cache(object): """Parse the specified filename, returning the recipe information""" infos = [] datastores = cls.load_bbfile(filename, appends, configdata) - depends = set() + depends = [] for variant, data in sorted(datastores.iteritems(), key=lambda i: i[0], reverse=True): virtualfn = cls.realfn2virtual(filename, variant) - depends |= (data.getVar("__depends", False) or set()) + depends = depends + (data.getVar("__depends", False) or []) if depends and not variant: data.setVar("__depends", depends)bitbake/lib/bb/cooker.py +2
-2@@ -692,8 +692,8 @@ class BBCooker: # Generate a list of parsed configuration files by searching the files # listed in the __depends and __base_depends variables with a .conf suffix. conffiles = [] - dep_files = self.configuration.data.getVar('__depends') or set() - dep_files.union(self.configuration.data.getVar('__base_depends') or set()) + dep_files = self.configuration.data.getVar('__base_depends') or [] + dep_files = dep_files + (self.configuration.data.getVar('__depends') or []) for f in dep_files: if f[0].endswith(".conf"):bitbake/lib/bb/parse/__init__.py +3
-4@@ -73,8 +73,7 @@ def update_mtime(f): def mark_dependency(d, f): if f.startswith('./'): f = "%s/%s" % (os.getcwd(), f[2:]) - deps = d.getVar('__depends') or set() - deps.update([(f, cached_mtime(f))]) + deps = (d.getVar('__depends') or []) + [(f, cached_mtime(f))] d.setVar('__depends', deps) def supports(fn, data):@@ -134,8 +133,8 @@ def vars_from_file(mypkg, d): def get_file_depends(d): '''Return the dependent files''' dep_files = [] - depends = d.getVar('__depends', True) or set() - depends = depends.union(d.getVar('__base_depends', True) or set()) + depends = d.getVar('__base_depends', True) or [] + depends = depends + (d.getVar('__depends', True) or []) for (fn, _) in depends: dep_files.append(os.path.abspath(fn)) return " ".join(dep_files)_______________________________________________
bitbake-devel mailing list
[email protected]
http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/bitbake-devel
Signature · 1 line
Martin 'JaMa' Jansa jabber: [email protected]
Quoted 7 lines · Martin Jansa
Quoted 5 lines · Richard Purdie
The data returned by
get_file_depends()may me used in contexts like checksums where order is important. The current usage of sets means that some of the checksums can change in circumstances they should not.This patch changes to use lists, thereby removing the problem.
Quoted 7 lines
Should this cover also BBINCLUDED variable in parsing cache?
Sometimes I see all recipes reparsed without any reason (no change in metadata).
Comparing output of bitbake -p (with added patch to dump parse data, shows order of BBINCLUDED changing.
Yes, this is exactly why I'm proposing this patch.
Cheers,
Richard