[bitbake-devel] [PATCH 1/2] bitbake: fetch2/git: Add sanity check for SHA validity of tag
zhenhua.luo at freescale.com
zhenhua.luo at freescale.com
Mon Jan 6 04:25:00 UTC 2014
> -----Original Message-----
> From: bitbake-devel-bounces at lists.openembedded.org [mailto:bitbake-devel-
> bounces at lists.openembedded.org] On Behalf Of Martin Jansa
> Sent: Friday, January 03, 2014 9:44 PM
>
> On Tue, Dec 24, 2013 at 04:06:32PM +0800, Zhenhua Luo wrote:
> > The change add the sanity check for SHA valididy when tag is defined
> > in SRC_URI, the check is useful for rebased git tree in which the
> > referred commit is not valid in branch and is saved in tag.
>
> I've tested this patch with corner case reported in:
> http://lists.openembedded.org/pipermail/openembedded-core/2013-
> December/087486.html
>
> and now I can "fix" yajl recipe fetch just by adding "tag=1.0.12" into
> the SRC_URI.
>
> But it's still a bit confusing for SRCREVs which are accessible from some
> tag, but aren't corresponding to that tag directly, people will assume
> that tag=foo in SRC_URI is really what will be used, but instead some
> older SRCREV can be used.
>
> Maybe we need 3rd option to prevent default "master" branch and handle
> SRCREVs not included in any branch and not matching any tag differently?
[Luo Zhenhua-B19537] Do you mean adding a new option to skip the validity check of SHA?
> Then we can add sanity check that when tag= and SRCREV are both used than
> SRCREV should point to SHA-1 of annotated tag or dereferrenced tag.
[Luo Zhenhua-B19537] I submitted another patch to adjust the revision definition priority(http://patches.openembedded.org/patch/63703/).
SHA define priority sequence.
a) a source revision if SHA is specified by SRCREV
b) a source revision if revision is specified in SRC_URI
c) latest revision if SRCREV="AUTOINC"
d) None if not specified
When tag is defined in SRC_URI, there are three SHA definition scenarios:
* SRCREV is set to SHA corresponding to the tag, commit corresponding to the tag will be used
* SRCREV is set to an older SHA in the tag, the older commit in the tag will be used
* SRCREV is not set, commit corresponding to the tag will be used.
Does above implementation make sense? Or any other better method?
Best Regards,
Zhenhua
> > Signed-off-by: Zhenhua Luo <zhenhua.luo at freescale.com>
> > ---
> > lib/bb/fetch2/git.py | 29 +++++++++++++++++++++++++++--
> > 1 file changed, 27 insertions(+), 2 deletions(-)
> >
> > diff --git a/lib/bb/fetch2/git.py b/lib/bb/fetch2/git.py index
> > bd107db..1c2d5d3 100644
> > --- a/lib/bb/fetch2/git.py
> > +++ b/lib/bb/fetch2/git.py
> > @@ -116,6 +116,15 @@ class Git(FetchMethod):
> > ud.branches[name] = branch
> > ud.unresolvedrev[name] = branch
> >
> > + tags = ud.parm.get("tag", "").split(',')
> > + if len(tags) != len(ud.names):
> > + raise bb.fetch2.ParameterError("The number of name and tag
> parameters is not balanced", ud.url)
> > + ud.tags = {}
> > + for name in ud.names:
> > + tag = tags[ud.names.index(name)]
> > + ud.tags[name] = tag
> > + ud.unresolvedrev[name] = tag
> > +
> > ud.basecmd = data.getVar("FETCHCMD_git", d, True) or "git"
> >
> > ud.write_tarballs =
> > ((data.getVar("BB_GENERATE_MIRROR_TARBALLS", d, True) or "0") != "0")
> or ud.rebaseable @@ -218,7 +227,10 @@ class Git(FetchMethod):
> > os.chdir(ud.clonedir)
> > for name in ud.names:
> > if not self._contains_ref(ud, d, name):
> > - raise bb.fetch2.FetchError("Unable to find revision %s
> in branch %s even from upstream" % (ud.revisions[name],
> ud.branches[name]))
> > + if ud.tags[name]:
> > + raise bb.fetch2.FetchError("Unable to find
> revision %s in tag %s even from upstream" % (ud.revisions[name],
> ud.tags[name]))
> > + else:
> > + raise bb.fetch2.FetchError("Unable to find
> > + revision %s in branch %s even from upstream" % (ud.revisions[name],
> > + ud.branches[name]))
> >
> > def build_mirror_data(self, ud, d):
> > # Generate a mirror tarball if needed @@ -288,6 +300,18 @@
> > class Git(FetchMethod):
> > return True
> >
> > def _contains_ref(self, ud, d, name):
> > + if len(ud.tags[name]) != 0:
> > + cmd = "%s tag --contains %s --list %s 2> /dev/null | wc -
> l" % (
> > + ud.basecmd, ud.revisions[name], ud.tags[name])
> > + try:
> > + output = runfetchcmd(cmd, d, quiet=True)
> > + except bb.fetch2.FetchError:
> > + return False
> > + if len(output.split()) > 1:
> > + raise bb.fetch2.FetchError("The command '%s' gave
> output with more then 1 line unexpectedly, output: '%s'" % (cmd, output))
> > + else:
> > + return output.split()[0] != "0"
> > +
> > cmd = "%s branch --contains %s --list %s 2> /dev/null | wc -
> l" % (
> > ud.basecmd, ud.revisions[name], ud.branches[name])
> > try:
> > @@ -296,7 +320,8 @@ class Git(FetchMethod):
> > return False
> > if len(output.split()) > 1:
> > raise bb.fetch2.FetchError("The command '%s' gave output
> with more then 1 line unexpectedly, output: '%s'" % (cmd, output))
> > - return output.split()[0] != "0"
> > + else:
> > + return output.split()[0] != "0"
> >
> > def _revision_key(self, ud, d, name):
> > """
> > --
> > 1.8.4.2
> >
> >
> > _______________________________________________
> > bitbake-devel mailing list
> > bitbake-devel at lists.openembedded.org
> > http://lists.openembedded.org/mailman/listinfo/bitbake-devel
>
> --
> Martin 'JaMa' Jansa jabber: Martin.Jansa at gmail.com
More information about the bitbake-devel
mailing list