Patchwork [bitbake-devel] fetch2/git: Anchor names when using ls-remote

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

Comments

Richard Purdie - Jan. 20, 2014, 3:21 p.m.
When specifying tags, they're searched for unanchored so foo/bar could
match:

refs/heads/abc/foo/bar
refs/heads/xyz/foo/bar
refs/heads/foo/bar

This change anchors the expressions so they are based against heads
or tags (or any other base level tree that has been created).

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
---
Olof Johansson - Jan. 20, 2014, 3:57 p.m.
On 14-01-20 16:21 +0100, Richard Purdie wrote:
> When specifying tags, they're searched for unanchored so foo/bar could
> match:
> 
> refs/heads/abc/foo/bar
> refs/heads/xyz/foo/bar
> refs/heads/foo/bar
> 
> This change anchors the expressions so they are based against heads
> or tags (or any other base level tree that has been created).

Afaict, ls-remote matches the wildcard character against any
character, including /.

$ git ls-remote gittest refs/*/foo/bar
69ab4bdbb5f3725ca594a2abdb636ee8fc25e1c4        refs/tags/abc/foo/bar
c8647b027d88af180e90d842577518b73ef6a167        refs/tags/foo/bar
149c3c329515086af1ae4e24b12b17100ae16256        refs/tags/xyz/foo/bar
Martin Jansa - Jan. 20, 2014, 4:18 p.m.
On Mon, Jan 20, 2014 at 04:57:34PM +0100, Olof Johansson wrote:
> On 14-01-20 16:21 +0100, Richard Purdie wrote:
> > When specifying tags, they're searched for unanchored so foo/bar could
> > match:
> > 
> > refs/heads/abc/foo/bar
> > refs/heads/xyz/foo/bar
> > refs/heads/foo/bar
> > 
> > This change anchors the expressions so they are based against heads
> > or tags (or any other base level tree that has been created).
> 
> Afaict, ls-remote matches the wildcard character against any
> character, including /.
> 
> $ git ls-remote gittest refs/*/foo/bar
> 69ab4bdbb5f3725ca594a2abdb636ee8fc25e1c4        refs/tags/abc/foo/bar
> c8647b027d88af180e90d842577518b73ef6a167        refs/tags/foo/bar
> 149c3c329515086af1ae4e24b12b17100ae16256        refs/tags/xyz/foo/bar

Yes, I've seen the same behavior:

http://lists.openembedded.org/pipermail/bitbake-devel/2013-August/003724.html
Richard Purdie - Jan. 20, 2014, 4:28 p.m.
On Mon, 2014-01-20 at 17:18 +0100, Martin Jansa wrote:
> On Mon, Jan 20, 2014 at 04:57:34PM +0100, Olof Johansson wrote:
> > On 14-01-20 16:21 +0100, Richard Purdie wrote:
> > > When specifying tags, they're searched for unanchored so foo/bar could
> > > match:
> > > 
> > > refs/heads/abc/foo/bar
> > > refs/heads/xyz/foo/bar
> > > refs/heads/foo/bar
> > > 
> > > This change anchors the expressions so they are based against heads
> > > or tags (or any other base level tree that has been created).
> > 
> > Afaict, ls-remote matches the wildcard character against any
> > character, including /.
> > 
> > $ git ls-remote gittest refs/*/foo/bar
> > 69ab4bdbb5f3725ca594a2abdb636ee8fc25e1c4        refs/tags/abc/foo/bar
> > c8647b027d88af180e90d842577518b73ef6a167        refs/tags/foo/bar
> > 149c3c329515086af1ae4e24b12b17100ae16256        refs/tags/xyz/foo/bar
> 
> Yes, I've seen the same behavior:
> 
> http://lists.openembedded.org/pipermail/bitbake-devel/2013-August/003724.html
> 

Hmm, ok, we can explicitly do:

git ls-remote xxx refs/heads/X refs/tags/X

which should resolve this...

Cheers,

Richard
Martin Jansa - Jan. 20, 2014, 4:39 p.m.
On Mon, Jan 20, 2014 at 04:28:16PM +0000, Richard Purdie wrote:
> On Mon, 2014-01-20 at 17:18 +0100, Martin Jansa wrote:
> > On Mon, Jan 20, 2014 at 04:57:34PM +0100, Olof Johansson wrote:
> > > On 14-01-20 16:21 +0100, Richard Purdie wrote:
> > > > When specifying tags, they're searched for unanchored so foo/bar could
> > > > match:
> > > > 
> > > > refs/heads/abc/foo/bar
> > > > refs/heads/xyz/foo/bar
> > > > refs/heads/foo/bar
> > > > 
> > > > This change anchors the expressions so they are based against heads
> > > > or tags (or any other base level tree that has been created).
> > > 
> > > Afaict, ls-remote matches the wildcard character against any
> > > character, including /.
> > > 
> > > $ git ls-remote gittest refs/*/foo/bar
> > > 69ab4bdbb5f3725ca594a2abdb636ee8fc25e1c4        refs/tags/abc/foo/bar
> > > c8647b027d88af180e90d842577518b73ef6a167        refs/tags/foo/bar
> > > 149c3c329515086af1ae4e24b12b17100ae16256        refs/tags/xyz/foo/bar
> > 
> > Yes, I've seen the same behavior:
> > 
> > http://lists.openembedded.org/pipermail/bitbake-devel/2013-August/003724.html
> > 
> 
> Hmm, ok, we can explicitly do:
> 
> git ls-remote xxx refs/heads/X refs/tags/X
> 
> which should resolve this...

Looks better to me.

Or if we can be very strict we could use refs/heads/ only when there
isn't tag param and refs/tags/ when there is, which would prevent using
tag=dead8928392 (as git revision not name of tag).

I don't know how many recipes are using tag= param like this, we do in
meta-webos, but I would rather fixed that before upgrading to next
release.

Patch

diff --git a/bitbake/lib/bb/fetch2/git.py b/bitbake/lib/bb/fetch2/git.py
index ed55f43..0a2e7bc 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 %s^{}" % \
+        cmd = "%s ls-remote %s://%s%s%s refs/*/%s^{}" % \
               (ud.basecmd, ud.proto, username, ud.host, ud.path, ud.unresolvedrev[name])
         if ud.proto.lower() != 'file':
             bb.fetch2.check_network_access(d, cmd)