Patchwork [bitbake-devel,v2] fetch2/git: Dereference unresolved names with ls-remote

login
register
mail settings
Submitter Richard Purdie
Date Jan. 20, 2014, 8:47 p.m.
Message ID <1390250850.874.43.camel@ted>
Download mbox | patch
Permalink /patch/65295/
State New
Headers show

Comments

Richard Purdie - Jan. 20, 2014, 8:47 p.m.
We need to deference tags when trying to map them to commit IDs with
ls-remote. If we don't do this, a given commit might not show up
later in a specific branch. There appears to be no good reason not
to do this.

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
---

v2: Only apply ^{} to tags, not heads
Bernhard Reutner-Fischer - Feb. 3, 2014, 10:11 p.m.
On Mon, Jan 20, 2014 at 08:47:30PM +0000, Richard Purdie wrote:
> We need to deference tags when trying to map them to commit IDs with
> ls-remote. If we don't do this, a given commit might not show up
> later in a specific branch. There appears to be no good reason not
> to do this.
> 
> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
> ---
> 
> v2: Only apply ^{} to tags, not heads
> 
> diff --git a/bitbake/lib/bb/fetch2/git.py b/bitbake/lib/bb/fetch2/git.py
> index d73f0cb..f7c26b3 100644
> --- a/bitbake/lib/bb/fetch2/git.py
> +++ b/bitbake/lib/bb/fetch2/git.py
> @@ -326,7 +326,7 @@ class Git(FetchMethod):
>          else:
>              username = ""
>  
> -        cmd = "%s ls-remote %s://%s%s%s refs/heads/%s refs/tags/%s" % \
> +        cmd = "%s ls-remote %s://%s%s%s refs/heads/%s refs/tags/%s^{}" % \
>                (ud.basecmd, ud.proto, username, ud.host, ud.path, ud.unresolvedrev[name], ud.unresolvedrev[name])
>          if ud.proto.lower() != 'file':
>              bb.fetch2.check_network_access(d, cmd)

Hi Richard,

This and the previous df2e0972cd1db7abd5ec8b7cb295fb0c42e284a4 are very
inconvenient for my workflow (¹).
I usually have the toolchain locally for hacking, so my gcc,
binutils-gdb, uClibc and selected apps etc look like e.g.:

$ egrep "SRC(REV|PV|_URI )" meta/recipes-devtools/gcc/gcc-4.9.inc
SRCREV = "HEAD"
PV = "4.9.0+git${SRCPV}"
SRC_URI = "git:///scratch/src/gcc-4.9.mine/;branch=fixups-rtl;protocol=file;rebaseable=1"

This worked fine until your abovementioned changes. Can you advise how
my SRC_URI should look like so i am able to keep developing and
test changes now with the lot of oe-core and meta-openembedded as
checks?

thanks,

To reproduce:
$ git init /tmp/yuck
Initialized empty Git repository in /tmp/yuck/.git/
$ cd !$
$ echo | tee a > b
$ git add a
$ git commit -q -m '1c' a
$ git ls-remote file:///tmp/yuck/ HEAD
7532c4dab272c062c117b731e97889122dc10e67	HEAD
$ git ls-remote file:///tmp/yuck/ refs/heads/HEAD refs/tags/HEAD^{}
$

¹) think http://xkcd.com/1172/ but IMHO a tad less obscure since i'm
affected ;)
Richard Purdie - Feb. 3, 2014, 11:43 p.m.
On Mon, 2014-02-03 at 23:11 +0100, Bernhard Reutner-Fischer wrote:
> On Mon, Jan 20, 2014 at 08:47:30PM +0000, Richard Purdie wrote:
> > We need to deference tags when trying to map them to commit IDs with
> > ls-remote. If we don't do this, a given commit might not show up
> > later in a specific branch. There appears to be no good reason not
> > to do this.
> > 
> > Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
> > ---
> > 
> > v2: Only apply ^{} to tags, not heads
> > 
> > diff --git a/bitbake/lib/bb/fetch2/git.py b/bitbake/lib/bb/fetch2/git.py
> > index d73f0cb..f7c26b3 100644
> > --- a/bitbake/lib/bb/fetch2/git.py
> > +++ b/bitbake/lib/bb/fetch2/git.py
> > @@ -326,7 +326,7 @@ class Git(FetchMethod):
> >          else:
> >              username = ""
> >  
> > -        cmd = "%s ls-remote %s://%s%s%s refs/heads/%s refs/tags/%s" % \
> > +        cmd = "%s ls-remote %s://%s%s%s refs/heads/%s refs/tags/%s^{}" % \
> >                (ud.basecmd, ud.proto, username, ud.host, ud.path, ud.unresolvedrev[name], ud.unresolvedrev[name])
> >          if ud.proto.lower() != 'file':
> >              bb.fetch2.check_network_access(d, cmd)
> 
> Hi Richard,
> 
> This and the previous df2e0972cd1db7abd5ec8b7cb295fb0c42e284a4 are very
> inconvenient for my workflow (¹).
> I usually have the toolchain locally for hacking, so my gcc,
> binutils-gdb, uClibc and selected apps etc look like e.g.:
> 
> $ egrep "SRC(REV|PV|_URI )" meta/recipes-devtools/gcc/gcc-4.9.inc
> SRCREV = "HEAD"
> PV = "4.9.0+git${SRCPV}"
> SRC_URI = "git:///scratch/src/gcc-4.9.mine/;branch=fixups-rtl;protocol=file;rebaseable=1"
> 
> This worked fine until your abovementioned changes. Can you advise how
> my SRC_URI should look like so i am able to keep developing and
> test changes now with the lot of oe-core and meta-openembedded as
> checks?
> 
> thanks,
> 
> To reproduce:
> $ git init /tmp/yuck
> Initialized empty Git repository in /tmp/yuck/.git/
> $ cd !$
> $ echo | tee a > b
> $ git add a
> $ git commit -q -m '1c' a
> $ git ls-remote file:///tmp/yuck/ HEAD
> 7532c4dab272c062c117b731e97889122dc10e67	HEAD
> $ git ls-remote file:///tmp/yuck/ refs/heads/HEAD refs/tags/HEAD^{}
> $
> 
> ¹) think http://xkcd.com/1172/ but IMHO a tad less obscure since i'm
> affected ;)

The xkcd link made me smile :).

There may be a case here for adding in a conditional on a local repo
(file:// type) and the revision being HEAD. It is a pretty special case
but one we can probably accommodate relatively easily...

Cheers,

Richard

Patch

diff --git a/bitbake/lib/bb/fetch2/git.py b/bitbake/lib/bb/fetch2/git.py
index d73f0cb..f7c26b3 100644
--- a/bitbake/lib/bb/fetch2/git.py
+++ b/bitbake/lib/bb/fetch2/git.py
@@ -326,7 +326,7 @@  class Git(FetchMethod):
         else:
             username = ""
 
-        cmd = "%s ls-remote %s://%s%s%s refs/heads/%s refs/tags/%s" % \
+        cmd = "%s ls-remote %s://%s%s%s refs/heads/%s refs/tags/%s^{}" % \
               (ud.basecmd, ud.proto, username, ud.host, ud.path, ud.unresolvedrev[name], ud.unresolvedrev[name])
         if ud.proto.lower() != 'file':
             bb.fetch2.check_network_access(d, cmd)