* [PATCH 0/2] bitbake: fetch2: Add sanity check for SHA validity of tag and adjust SHA define order
@ 2013-12-24 8:06 Zhenhua Luo
2013-12-24 8:06 ` [PATCH 1/2] bitbake: fetch2/git: Add sanity check for SHA validity of tag Zhenhua Luo
` (2 more replies)
0 siblings, 3 replies; 13+ messages in thread
From: Zhenhua Luo @ 2013-12-24 8:06 UTC (permalink / raw)
To: bitbake-devel; +Cc: b40290, b40527
* 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.
* To allign with above change, the priority of revision needs to be adjusted as
following, otherwise SHA defined by SRCREV will be overriden by rev/tag defined
by SRC_URI.
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
Zhenhua Luo (2):
bitbake: fetch2/git: Add sanity check for SHA validity of tag
bitbake: fetch2: adjust the priority of revision definition
lib/bb/fetch2/__init__.py | 19 ++++++++++---------
lib/bb/fetch2/git.py | 29 +++++++++++++++++++++++++++--
2 files changed, 37 insertions(+), 11 deletions(-)
--
1.8.4.2
^ permalink raw reply [flat|nested] 13+ messages in thread* [PATCH 1/2] bitbake: fetch2/git: Add sanity check for SHA validity of tag 2013-12-24 8:06 [PATCH 0/2] bitbake: fetch2: Add sanity check for SHA validity of tag and adjust SHA define order Zhenhua Luo @ 2013-12-24 8:06 ` Zhenhua Luo 2014-01-03 13:43 ` Martin Jansa 2013-12-24 8:06 ` [PATCH 2/2] bitbake: fetch2: adjust the priority of revision definition Zhenhua Luo 2014-01-03 2:12 ` [PATCH 0/2] bitbake: fetch2: Add sanity check for SHA validity of tag and adjust SHA define order zhenhua.luo 2 siblings, 1 reply; 13+ messages in thread From: Zhenhua Luo @ 2013-12-24 8:06 UTC (permalink / raw) To: bitbake-devel; +Cc: b40290, b40527 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. Signed-off-by: Zhenhua Luo <zhenhua.luo@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 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH 1/2] bitbake: fetch2/git: Add sanity check for SHA validity of tag 2013-12-24 8:06 ` [PATCH 1/2] bitbake: fetch2/git: Add sanity check for SHA validity of tag Zhenhua Luo @ 2014-01-03 13:43 ` Martin Jansa 2014-01-06 4:25 ` zhenhua.luo 0 siblings, 1 reply; 13+ messages in thread From: Martin Jansa @ 2014-01-03 13:43 UTC (permalink / raw) To: Zhenhua Luo; +Cc: b40290, bitbake-devel, b40527 [-- Attachment #1: Type: text/plain, Size: 4513 bytes --] 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? 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. > Signed-off-by: Zhenhua Luo <zhenhua.luo@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@lists.openembedded.org > http://lists.openembedded.org/mailman/listinfo/bitbake-devel -- Martin 'JaMa' Jansa jabber: Martin.Jansa@gmail.com [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 205 bytes --] ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/2] bitbake: fetch2/git: Add sanity check for SHA validity of tag 2014-01-03 13:43 ` Martin Jansa @ 2014-01-06 4:25 ` zhenhua.luo 2014-01-06 9:12 ` Martin Jansa 0 siblings, 1 reply; 13+ messages in thread From: zhenhua.luo @ 2014-01-06 4:25 UTC (permalink / raw) To: Martin Jansa Cc: Zongchun.Yu@freescale.com, B40290@freescale.com, ting.liu@freescale.com, bitbake-devel@lists.openembedded.org, Richard Schmitt > -----Original Message----- > From: bitbake-devel-bounces@lists.openembedded.org [mailto:bitbake-devel- > bounces@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@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@lists.openembedded.org > > http://lists.openembedded.org/mailman/listinfo/bitbake-devel > > -- > Martin 'JaMa' Jansa jabber: Martin.Jansa@gmail.com ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/2] bitbake: fetch2/git: Add sanity check for SHA validity of tag 2014-01-06 4:25 ` zhenhua.luo @ 2014-01-06 9:12 ` Martin Jansa 2014-01-07 3:29 ` zhenhua.luo 0 siblings, 1 reply; 13+ messages in thread From: Martin Jansa @ 2014-01-06 9:12 UTC (permalink / raw) To: zhenhua.luo@freescale.com Cc: Zongchun.Yu@freescale.com, B40290@freescale.com, ting.liu@freescale.com, bitbake-devel@lists.openembedded.org, Richard Schmitt [-- Attachment #1: Type: text/plain, Size: 7850 bytes --] On Mon, Jan 06, 2014 at 04:25:00AM +0000, zhenhua.luo@freescale.com wrote: > > -----Original Message----- > > From: bitbake-devel-bounces@lists.openembedded.org [mailto:bitbake-devel- > > bounces@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? Yes, I was thinking about something like nobranch parameter which will explicitly say that selected SRCREV is known to be not included in any branch or any tag. In most cases it shouldn't be needed but still such corner cases exist (e.g. rebased repos). > > 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 This is OK, but you cannot check that it really corresponds and show warning if not, because it could be now allowed variant with older SHA as bellow. > * SRCREV is set to an older SHA in the tag, the older commit in the tag will be used This one is IMHO a bit confusing, because people can notice SRC_URI=.*;tag=foo and then they don't notice SRCREV in the recipe (or don't expect it to be older commit in foo tag) and they just assume that tag=foo means the tip of the tag will be used in build. In most cases such commit is also included in some branch and using just SRC_URI=.*;branch=foo + SRCREV would be less confusing. So I would show warning in this case. In very few exceptions (if any) where you really want SRCREV not included in any branch and included in some tag, but not corresponding to that tag you would use SRC_URI=.*;nobranch + SRCREV > * SRCREV is not set, commit corresponding to the tag will be used. > Does above implementation make sense? Or any other better method? We're doing something similar https://github.com/openwebos/meta-webos/blob/master/classes/webos_enhanced_submissions.bbclass with the advantage that we can say that all our components which inherit this class have to use annotated tags (with lightweight tags you can use SRCREV corresponding with tag which exists only in remote repository, but isn't in your downloads/premirror version, even when the SRCREV exists already - annotated tag has always new SRCREV so fetcher will always update the repo and we don't need to use git ls-remote to verify that SRCREV is matching the tag. > > > Signed-off-by: Zhenhua Luo <zhenhua.luo@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@lists.openembedded.org > > > http://lists.openembedded.org/mailman/listinfo/bitbake-devel > > > > -- > > Martin 'JaMa' Jansa jabber: Martin.Jansa@gmail.com -- Martin 'JaMa' Jansa jabber: Martin.Jansa@gmail.com [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 205 bytes --] ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/2] bitbake: fetch2/git: Add sanity check for SHA validity of tag 2014-01-06 9:12 ` Martin Jansa @ 2014-01-07 3:29 ` zhenhua.luo 2014-01-07 14:46 ` Martin Jansa 0 siblings, 1 reply; 13+ messages in thread From: zhenhua.luo @ 2014-01-07 3:29 UTC (permalink / raw) To: Martin Jansa Cc: Zongchun.Yu@freescale.com, B40290@freescale.com, ting.liu@freescale.com, bitbake-devel@lists.openembedded.org, Richard Schmitt It is a simple way to add "nobranch" option to skip the SHA validity check. I have posted a patch, please review. http://patches.openembedded.org/patch/64197/ Best Regards, Zhenhua > -----Original Message----- > From: Martin Jansa [mailto:martin.jansa@gmail.com] > Sent: Monday, January 06, 2014 5:13 PM > To: Luo Zhenhua-B19537 > Cc: Guo Chunrong-B40290; bitbake-devel@lists.openembedded.org; Yu > Zongchun-B40527; Schmitt Richard-B43082; Liu Ting-B28495 > Subject: Re: [bitbake-devel] [PATCH 1/2] bitbake: fetch2/git: Add sanity > check for SHA validity of tag > > On Mon, Jan 06, 2014 at 04:25:00AM +0000, zhenhua.luo@freescale.com wrote: > > > -----Original Message----- > > > From: bitbake-devel-bounces@lists.openembedded.org > > > [mailto:bitbake-devel- bounces@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? > > Yes, I was thinking about something like nobranch parameter which will > explicitly say that selected SRCREV is known to be not included in any > branch or any tag. > > In most cases it shouldn't be needed but still such corner cases exist > (e.g. rebased repos). > > > > 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 > > This is OK, but you cannot check that it really corresponds and show > warning if not, because it could be now allowed variant with older SHA as > bellow. > > > * SRCREV is set to an older SHA in the tag, the older commit in the > > tag will be used > > This one is IMHO a bit confusing, because people can notice > SRC_URI=.*;tag=foo > > and then they don't notice SRCREV in the recipe (or don't expect it to be > older commit in foo tag) and they just assume that tag=foo means the tip > of the tag will be used in build. > > In most cases such commit is also included in some branch and using just > SRC_URI=.*;branch=foo + SRCREV would be less confusing. > > So I would show warning in this case. > > In very few exceptions (if any) where you really want SRCREV not included > in any branch and included in some tag, but not corresponding to that tag > you would use SRC_URI=.*;nobranch + SRCREV > > > * SRCREV is not set, commit corresponding to the tag will be used. > > Does above implementation make sense? Or any other better method? > > We're doing something similar > https://github.com/openwebos/meta- > webos/blob/master/classes/webos_enhanced_submissions.bbclass > with the advantage that we can say that all our components which inherit > this class have to use annotated tags (with lightweight tags you can use > SRCREV corresponding with tag which exists only in remote repository, but > isn't in your downloads/premirror version, even when the SRCREV exists > already - annotated tag has always new SRCREV so fetcher will always > update the repo and we don't need to use git ls-remote to verify that > SRCREV is matching the tag. > > > > > Signed-off-by: Zhenhua Luo <zhenhua.luo@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@lists.openembedded.org > > > > http://lists.openembedded.org/mailman/listinfo/bitbake-devel > > > > > > -- > > > Martin 'JaMa' Jansa jabber: Martin.Jansa@gmail.com > > -- > Martin 'JaMa' Jansa jabber: Martin.Jansa@gmail.com ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/2] bitbake: fetch2/git: Add sanity check for SHA validity of tag 2014-01-07 3:29 ` zhenhua.luo @ 2014-01-07 14:46 ` Martin Jansa 2014-01-08 10:21 ` zhenhua.luo 0 siblings, 1 reply; 13+ messages in thread From: Martin Jansa @ 2014-01-07 14:46 UTC (permalink / raw) To: zhenhua.luo@freescale.com Cc: Zongchun.Yu@freescale.com, B40290@freescale.com, ting.liu@freescale.com, bitbake-devel@lists.openembedded.org, Richard Schmitt [-- Attachment #1: Type: text/plain, Size: 8496 bytes --] On Tue, Jan 07, 2014 at 03:29:22AM +0000, zhenhua.luo@freescale.com wrote: > It is a simple way to add "nobranch" option to skip the SHA validity check. I have posted a patch, please review. > > http://patches.openembedded.org/patch/64197/ The v2 looks good and it's already merged :). > > > > 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 > > > > This is OK, but you cannot check that it really corresponds and show > > warning if not, because it could be now allowed variant with older SHA as > > bellow. Be aware that for this to work correctly you need to run "git fetch --tags" or equivalent, because with lightweight tags you can have repo like this: SHA-1 A123 <- tag-1.0 B123 C123 <- master HEAD You're building C123 or tag-1.0 when C123 revision already exists, so fetcher creates clone including all 3 SHA-1s, it creates tarball with checkout and puts it on PREMIRROR. Someone in upstream adds tag-1.1 pointing to B123 SHA-1 A123 <- tag-1.0 B123 <- tag-1.1 C123 <- master HEAD Someone changes recipe to use: SRCREV = "B123" SRC_URI = "git://foo;tag=tag-1.1" Current fetcher starts by checking if "B123" SHA-1 exists in checkout in downloads directory (or even downloaded from PREMIRROR) and it returns yes, so it doesn't try to update it, but then if you try to check that B123 corresponds with "tag-1.1" it fails, because tag-1.1 doesn't exist yet in current checkout/premirror. With annotated tags it's not problem because every new tag has new SHA-1, so fetcher always updates the checkout first when checking for new tag. > > > * SRCREV is set to an older SHA in the tag, the older commit in the > > > tag will be used > > > > This one is IMHO a bit confusing, because people can notice > > SRC_URI=.*;tag=foo > > > > and then they don't notice SRCREV in the recipe (or don't expect it to be > > older commit in foo tag) and they just assume that tag=foo means the tip > > of the tag will be used in build. > > > > In most cases such commit is also included in some branch and using just > > SRC_URI=.*;branch=foo + SRCREV would be less confusing. > > > > So I would show warning in this case. > > > > In very few exceptions (if any) where you really want SRCREV not included > > in any branch and included in some tag, but not corresponding to that tag > > you would use SRC_URI=.*;nobranch + SRCREV I think that with nobranch patch now merged we should show warning when this case happens, people shouldn't use tag parameter when they don't want exactly that tag. > > > * SRCREV is not set, commit corresponding to the tag will be used. > > > Does above implementation make sense? Or any other better method? > > > > We're doing something similar > > https://github.com/openwebos/meta- > > webos/blob/master/classes/webos_enhanced_submissions.bbclass > > with the advantage that we can say that all our components which inherit > > this class have to use annotated tags (with lightweight tags you can use > > SRCREV corresponding with tag which exists only in remote repository, but > > isn't in your downloads/premirror version, even when the SRCREV exists > > already - annotated tag has always new SRCREV so fetcher will always > > update the repo and we don't need to use git ls-remote to verify that > > SRCREV is matching the tag. > > > > > > > Signed-off-by: Zhenhua Luo <zhenhua.luo@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@lists.openembedded.org > > > > > http://lists.openembedded.org/mailman/listinfo/bitbake-devel > > > > > > > > -- > > > > Martin 'JaMa' Jansa jabber: Martin.Jansa@gmail.com > > > > -- > > Martin 'JaMa' Jansa jabber: Martin.Jansa@gmail.com -- Martin 'JaMa' Jansa jabber: Martin.Jansa@gmail.com [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 205 bytes --] ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/2] bitbake: fetch2/git: Add sanity check for SHA validity of tag 2014-01-07 14:46 ` Martin Jansa @ 2014-01-08 10:21 ` zhenhua.luo 2014-01-08 11:32 ` Martin Jansa 0 siblings, 1 reply; 13+ messages in thread From: zhenhua.luo @ 2014-01-08 10:21 UTC (permalink / raw) To: Martin Jansa Cc: Zongchun.Yu@freescale.com, B40290@freescale.com, ting.liu@freescale.com, bitbake-devel@lists.openembedded.org, Richard Schmitt > -----Original Message----- > From: Martin Jansa [mailto:martin.jansa@gmail.com] > Sent: Tuesday, January 07, 2014 10:47 PM > > On Tue, Jan 07, 2014 at 03:29:22AM +0000, zhenhua.luo@freescale.com wrote: > > It is a simple way to add "nobranch" option to skip the SHA validity > check. I have posted a patch, please review. > > > > http://patches.openembedded.org/patch/64197/ > > The v2 looks good and it's already merged :). > > > > > 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 > > > > > > This is OK, but you cannot check that it really corresponds and show > > > warning if not, because it could be now allowed variant with older > > > SHA as bellow. > > Be aware that for this to work correctly you need to run "git fetch -- > tags" or equivalent, because with lightweight tags you can have repo like > this: > > SHA-1 > A123 <- tag-1.0 > B123 > C123 <- master HEAD > > You're building C123 or tag-1.0 when C123 revision already exists, so > fetcher creates clone including all 3 SHA-1s, it creates tarball with > checkout and puts it on PREMIRROR. > > Someone in upstream adds tag-1.1 pointing to B123 > > SHA-1 > A123 <- tag-1.0 > B123 <- tag-1.1 > C123 <- master HEAD > > Someone changes recipe to use: > SRCREV = "B123" > SRC_URI = "git://foo;tag=tag-1.1" > > Current fetcher starts by checking if "B123" SHA-1 exists in checkout in > downloads directory (or even downloaded from PREMIRROR) and it returns > yes, so it doesn't try to update it, but then if you try to check that > B123 corresponds with "tag-1.1" it fails, because tag-1.1 doesn't exist > yet in current checkout/premirror. > > With annotated tags it's not problem because every new tag has new SHA-1, > so fetcher always updates the checkout first when checking for new tag. [Luo Zhenhua-B19537] Thanks for the explanation. > > > > * SRCREV is set to an older SHA in the tag, the older commit > in > > > > the tag will be used > > > > > > This one is IMHO a bit confusing, because people can notice > > > SRC_URI=.*;tag=foo > > > > > > and then they don't notice SRCREV in the recipe (or don't expect it > > > to be older commit in foo tag) and they just assume that tag=foo > > > means the tip of the tag will be used in build. > > > > > > In most cases such commit is also included in some branch and using > > > just SRC_URI=.*;branch=foo + SRCREV would be less confusing. > > > > > > So I would show warning in this case. > > > > > > In very few exceptions (if any) where you really want SRCREV not > > > included in any branch and included in some tag, but not > > > corresponding to that tag you would use SRC_URI=.*;nobranch + SRCREV > > I think that with nobranch patch now merged we should show warning when > this case happens, people shouldn't use tag parameter when they don't > want exactly that tag. [Luo Zhenhua-B19537] You point is to show warning when SRCREV and tag are set, meanwhile SRCREV is not corresponding to the tag, right? Best Regards, Zhenhua ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/2] bitbake: fetch2/git: Add sanity check for SHA validity of tag 2014-01-08 10:21 ` zhenhua.luo @ 2014-01-08 11:32 ` Martin Jansa 2014-01-08 12:43 ` Richard Purdie 0 siblings, 1 reply; 13+ messages in thread From: Martin Jansa @ 2014-01-08 11:32 UTC (permalink / raw) To: zhenhua.luo@freescale.com Cc: Zongchun.Yu@freescale.com, B40290@freescale.com, ting.liu@freescale.com, bitbake-devel@lists.openembedded.org, Richard Schmitt [-- Attachment #1: Type: text/plain, Size: 3492 bytes --] On Wed, Jan 08, 2014 at 10:21:53AM +0000, zhenhua.luo@freescale.com wrote: > > -----Original Message----- > > From: Martin Jansa [mailto:martin.jansa@gmail.com] > > Sent: Tuesday, January 07, 2014 10:47 PM > > > > On Tue, Jan 07, 2014 at 03:29:22AM +0000, zhenhua.luo@freescale.com wrote: > > > It is a simple way to add "nobranch" option to skip the SHA validity > > check. I have posted a patch, please review. > > > > > > http://patches.openembedded.org/patch/64197/ > > > > The v2 looks good and it's already merged :). > > > > > > > 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 > > > > > > > > This is OK, but you cannot check that it really corresponds and show > > > > warning if not, because it could be now allowed variant with older > > > > SHA as bellow. > > > > Be aware that for this to work correctly you need to run "git fetch -- > > tags" or equivalent, because with lightweight tags you can have repo like > > this: > > > > SHA-1 > > A123 <- tag-1.0 > > B123 > > C123 <- master HEAD > > > > You're building C123 or tag-1.0 when C123 revision already exists, so > > fetcher creates clone including all 3 SHA-1s, it creates tarball with > > checkout and puts it on PREMIRROR. > > > > Someone in upstream adds tag-1.1 pointing to B123 > > > > SHA-1 > > A123 <- tag-1.0 > > B123 <- tag-1.1 > > C123 <- master HEAD > > > > Someone changes recipe to use: > > SRCREV = "B123" > > SRC_URI = "git://foo;tag=tag-1.1" > > > > Current fetcher starts by checking if "B123" SHA-1 exists in checkout in > > downloads directory (or even downloaded from PREMIRROR) and it returns > > yes, so it doesn't try to update it, but then if you try to check that > > B123 corresponds with "tag-1.1" it fails, because tag-1.1 doesn't exist > > yet in current checkout/premirror. > > > > With annotated tags it's not problem because every new tag has new SHA-1, > > so fetcher always updates the checkout first when checking for new tag. > [Luo Zhenhua-B19537] Thanks for the explanation. > > > > > > * SRCREV is set to an older SHA in the tag, the older commit > > in > > > > > the tag will be used > > > > > > > > This one is IMHO a bit confusing, because people can notice > > > > SRC_URI=.*;tag=foo > > > > > > > > and then they don't notice SRCREV in the recipe (or don't expect it > > > > to be older commit in foo tag) and they just assume that tag=foo > > > > means the tip of the tag will be used in build. > > > > > > > > In most cases such commit is also included in some branch and using > > > > just SRC_URI=.*;branch=foo + SRCREV would be less confusing. > > > > > > > > So I would show warning in this case. > > > > > > > > In very few exceptions (if any) where you really want SRCREV not > > > > included in any branch and included in some tag, but not > > > > corresponding to that tag you would use SRC_URI=.*;nobranch + SRCREV > > > > I think that with nobranch patch now merged we should show warning when > > this case happens, people shouldn't use tag parameter when they don't > > want exactly that tag. > [Luo Zhenhua-B19537] You point is to show warning when SRCREV and tag are set, meanwhile SRCREV is not corresponding to the tag, right? Yes -- Martin 'JaMa' Jansa jabber: Martin.Jansa@gmail.com [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 205 bytes --] ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/2] bitbake: fetch2/git: Add sanity check for SHA validity of tag 2014-01-08 11:32 ` Martin Jansa @ 2014-01-08 12:43 ` Richard Purdie 2014-01-20 21:14 ` Richard Purdie 0 siblings, 1 reply; 13+ messages in thread From: Richard Purdie @ 2014-01-08 12:43 UTC (permalink / raw) To: Martin Jansa Cc: Zongchun.Yu@freescale.com, B40290@freescale.com, ting.liu@freescale.com, bitbake-devel@lists.openembedded.org, Richard Schmitt On Wed, 2014-01-08 at 12:32 +0100, Martin Jansa wrote: > > [Luo Zhenhua-B19537] You point is to show warning when SRCREV and tag are set, meanwhile SRCREV is not corresponding to the tag, right? > > Yes We have several different issues around and the moment and I'm worried some cases are going to get lost. We really need a list of them along with the planed fix. As I see it we have: a) conflicting SRCREV and tag/rev url parameters Plan: bb.error on this case asking the user to say what they want b) dereferencing of tags when checking existance of commits Plan: Add ^{} to ls-remote command to allow dereferencing c) tags may get resolved to incorrect tags in sub directories Plan: Need to anchor tag/branch search expression What else are we missing? Ideally we could do with examples of these in the fetcher test code too... Cheers, Richard ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH 1/2] bitbake: fetch2/git: Add sanity check for SHA validity of tag 2014-01-08 12:43 ` Richard Purdie @ 2014-01-20 21:14 ` Richard Purdie 0 siblings, 0 replies; 13+ messages in thread From: Richard Purdie @ 2014-01-20 21:14 UTC (permalink / raw) To: Martin Jansa Cc: bitbake-devel@lists.openembedded.org, B40290@freescale.com, ting.liu@freescale.com, Zongchun.Yu@freescale.com, Richard Schmitt On Wed, 2014-01-08 at 12:43 +0000, Richard Purdie wrote: > On Wed, 2014-01-08 at 12:32 +0100, Martin Jansa wrote: > > > [Luo Zhenhua-B19537] You point is to show warning when SRCREV and tag are set, meanwhile SRCREV is not corresponding to the tag, right? > > > > Yes > > We have several different issues around and the moment and I'm worried > some cases are going to get lost. We really need a list of them along > with the planed fix. As I see it we have: > > a) conflicting SRCREV and tag/rev url parameters > > Plan: bb.error on this case asking the user to say what they want > > b) dereferencing of tags when checking existance of commits > > Plan: Add ^{} to ls-remote command to allow dereferencing > > c) tags may get resolved to incorrect tags in sub directories > > Plan: Need to anchor tag/branch search expression > > > What else are we missing? > > > Ideally we could do with examples of these in the fetcher test code > too... FWIW I have fixed the above issues with the patchset that I've sent out (and is in master-next). Are there any remaining issues? Cheers, Richard ^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH 2/2] bitbake: fetch2: adjust the priority of revision definition 2013-12-24 8:06 [PATCH 0/2] bitbake: fetch2: Add sanity check for SHA validity of tag and adjust SHA define order Zhenhua Luo 2013-12-24 8:06 ` [PATCH 1/2] bitbake: fetch2/git: Add sanity check for SHA validity of tag Zhenhua Luo @ 2013-12-24 8:06 ` Zhenhua Luo 2014-01-03 2:12 ` [PATCH 0/2] bitbake: fetch2: Add sanity check for SHA validity of tag and adjust SHA define order zhenhua.luo 2 siblings, 0 replies; 13+ messages in thread From: Zhenhua Luo @ 2013-12-24 8:06 UTC (permalink / raw) To: bitbake-devel; +Cc: b40290, b40527 The sanity check for commit validity has been added for branch, to support the commit included in tag rather than branch, the commit validity check should be supported for tag as well. To allign with above change, the priority of revision needs to be adjusted as following, otherwise SHA defined by SRCREV will be overriden by rev/tag defined by SRC_URI. New SHA check order: 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 Signed-off-by: Zhenhua Luo <zhenhua.luo@freescale.com> --- lib/bb/fetch2/__init__.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/lib/bb/fetch2/__init__.py b/lib/bb/fetch2/__init__.py index 8fdf59c..4c5c2e8 100644 --- a/lib/bb/fetch2/__init__.py +++ b/lib/bb/fetch2/__init__.py @@ -862,17 +862,12 @@ def try_mirrors(d, origud, mirrors, check = False): def srcrev_internal_helper(ud, d, name): """ Return: - a) a source revision if specified - b) latest revision if SRCREV="AUTOINC" - c) None if not specified + 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 """ - if 'rev' in ud.parm: - return ud.parm['rev'] - - if 'tag' in ud.parm: - return ud.parm['tag'] - rev = None pn = d.getVar("PN", True) if name != '': @@ -883,6 +878,12 @@ def srcrev_internal_helper(ud, d, name): rev = d.getVar("SRCREV_pn-%s" % pn, True) if not rev: rev = d.getVar("SRCREV", True) + if not rev: + if 'rev' in ud.parm: + return ud.parm['rev'] + if not rev: + if 'tag' in ud.parm: + return ud.parm['tag'] if rev == "INVALID": var = "SRCREV_pn-%s" % pn if name != '': -- 1.8.4.2 ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH 0/2] bitbake: fetch2: Add sanity check for SHA validity of tag and adjust SHA define order 2013-12-24 8:06 [PATCH 0/2] bitbake: fetch2: Add sanity check for SHA validity of tag and adjust SHA define order Zhenhua Luo 2013-12-24 8:06 ` [PATCH 1/2] bitbake: fetch2/git: Add sanity check for SHA validity of tag Zhenhua Luo 2013-12-24 8:06 ` [PATCH 2/2] bitbake: fetch2: adjust the priority of revision definition Zhenhua Luo @ 2014-01-03 2:12 ` zhenhua.luo 2 siblings, 0 replies; 13+ messages in thread From: zhenhua.luo @ 2014-01-03 2:12 UTC (permalink / raw) To: bitbake-devel@lists.openembedded.org Cc: B40290@freescale.com, ting.liu@freescale.com, Zongchun.Yu@freescale.com Any comment on the patch to support SHA validate of tag? Best Regards, Zhenhua > -----Original Message----- > From: Zhenhua Luo [mailto:zhenhua.luo@freescale.com] > Sent: Tuesday, December 24, 2013 4:07 PM > To: bitbake-devel@lists.openembedded.org > Cc: Liu Ting-B28495; Yu Zongchun-B40527; Guo Chunrong-B40290; Luo > Zhenhua-B19537 > Subject: [PATCH 0/2] bitbake: fetch2: Add sanity check for SHA validity > of tag and adjust SHA define order > > * 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. > > * To allign with above change, the priority of revision needs to be > adjusted as following, otherwise SHA defined by SRCREV will be overriden > by rev/tag defined by SRC_URI. > 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 > > Zhenhua Luo (2): > bitbake: fetch2/git: Add sanity check for SHA validity of tag > bitbake: fetch2: adjust the priority of revision definition > > lib/bb/fetch2/__init__.py | 19 ++++++++++--------- > lib/bb/fetch2/git.py | 29 +++++++++++++++++++++++++++-- > 2 files changed, 37 insertions(+), 11 deletions(-) > > -- > 1.8.4.2 > ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2014-01-20 21:14 UTC | newest] Thread overview: 13+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-12-24 8:06 [PATCH 0/2] bitbake: fetch2: Add sanity check for SHA validity of tag and adjust SHA define order Zhenhua Luo 2013-12-24 8:06 ` [PATCH 1/2] bitbake: fetch2/git: Add sanity check for SHA validity of tag Zhenhua Luo 2014-01-03 13:43 ` Martin Jansa 2014-01-06 4:25 ` zhenhua.luo 2014-01-06 9:12 ` Martin Jansa 2014-01-07 3:29 ` zhenhua.luo 2014-01-07 14:46 ` Martin Jansa 2014-01-08 10:21 ` zhenhua.luo 2014-01-08 11:32 ` Martin Jansa 2014-01-08 12:43 ` Richard Purdie 2014-01-20 21:14 ` Richard Purdie 2013-12-24 8:06 ` [PATCH 2/2] bitbake: fetch2: adjust the priority of revision definition Zhenhua Luo 2014-01-03 2:12 ` [PATCH 0/2] bitbake: fetch2: Add sanity check for SHA validity of tag and adjust SHA define order zhenhua.luo
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.