Does SRCPV not already cover this in the majority of cases? SRCREV_FORMAT controls how the multiple revs end up in PV, and the change to PV results in rebuilding anyway. And iterating over d.keys() is inefficient, *if* you’re going to do this, operate on SRCREV, gather up the name= parameters from scm urls, and use that to drive it.
On Wed, May 8, 2019 at 7:10 AM Michael Ho <michael...@bmw.de> wrote: > Several fetchers support named sources that require setting a SRCREV with > the source name as a suffix. These named SRCREV variables are not captured > in the sstate hash calculation because they're only referenced within the > bitbake fetcher function. > > Add a snippet to the base.bbclass anonymous python to add all named SRCREV > variables to the vardeps of do_fetch to capture them in the sstate hash > calculation. > > Testing of the bug can be shown by running the following bitbake commands > with this patch set not applied: > > bitbake vulkan-demos | tee > sed -i 's/SRCREV_gli = ".*"/SRCREV_gli = "xxx"/' \ > ../meta/recipes-graphics/vulkan/vulkan-demos_git.bb > bitbake vulkan-demos | tee; > > Results in no errors despite a broken SRCREV because the vulkan-demos is > considered unchanged. > > After applying this patch the above commands instead result in a fetcher > error which is correct. > --- > meta/classes/base.bbclass | 10 ++++++++++ > 1 file changed, 10 insertions(+) > > diff --git a/meta/classes/base.bbclass b/meta/classes/base.bbclass > index 1636c6e..84a27f5 100644 > --- a/meta/classes/base.bbclass > +++ b/meta/classes/base.bbclass > @@ -638,6 +638,16 @@ python () { > > if needsrcrev: > d.setVar("SRCPV", "${@bb.fetch2.get_srcrev(d)}") > + # Gather all SRCREV_* references to add to the sstate hash > calculation > + # This may capture SRCREVs not used but it's difficult to try to > restrict it > + # to only what is needed > + for dkey in d.keys(): > + if dkey.startswith("SRCREV_"): > + # This anonymous python snippet is called multiple times > so we > + # need to be careful to not double up the appends here > and cause > + # the base hash to mismatch the task hash > + if dkey not in (d.getVarFlag("do_fetch", "vardeps") or > '').split(): > + d.appendVarFlag("do_fetch", "vardeps", " > {}".format(dkey)) > > set_packagetriplet(d) > > -- > 2.7.4 > > -- > _______________________________________________ > Openembedded-core mailing list > Openembedded-core@lists.openembedded.org > http://lists.openembedded.org/mailman/listinfo/openembedded-core > -- Christopher Larson kergoth at gmail dot com Founder - BitBake, OpenEmbedded, OpenZaurus Senior Software Engineer, Mentor Graphics
-- _______________________________________________ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core