diff options
author | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-01-08 20:57:45 +0000 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-01-14 11:32:01 +0000 |
commit | 83a30dfd495f0b8e90b7b5725c946c659ecbd93d (patch) | |
tree | e9c4f702b9d02036602be3032afaaeb4493abf08 | |
parent | c45589a55c67bfd0bf9da5050141f4d18835e113 (diff) | |
download | poky-83a30dfd495f0b8e90b7b5725c946c659ecbd93d.tar.gz |
bitbake: fetch/git: Improve ls-remote handling for latest_revision
Currently the code ignores lightweight tags which has caused some user
complaints. We can't put the right search list in place easily since
the results don't come back in a good order, head happens to sort
before tags.
In the end I refactored the function so we get the complete list of
remotes and then we can filter it ourselves in the order we chose,
including checking for light weight tags, preferring the proper ones.
Hopefully this resolves the issues people have been seeing.
[YOCTO #6881]
(Bitbake rev: 07ad307065bb15a48f0015b9e4a643201abdc283)
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r-- | bitbake/lib/bb/fetch2/git.py | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/bitbake/lib/bb/fetch2/git.py b/bitbake/lib/bb/fetch2/git.py index f771fd02b6..44fc27193e 100644 --- a/bitbake/lib/bb/fetch2/git.py +++ b/bitbake/lib/bb/fetch2/git.py | |||
@@ -340,12 +340,19 @@ class Git(FetchMethod): | |||
340 | """ | 340 | """ |
341 | Compute the HEAD revision for the url | 341 | Compute the HEAD revision for the url |
342 | """ | 342 | """ |
343 | output = self._lsremote(ud, d, "") | ||
344 | # Tags of the form ^{} may not work, need to fallback to other form | ||
343 | if ud.unresolvedrev[name][:5] == "refs/": | 345 | if ud.unresolvedrev[name][:5] == "refs/": |
344 | search = "%s %s^{}" % (ud.unresolvedrev[name], ud.unresolvedrev[name]) | 346 | head = ud.unresolvedrev[name] |
347 | tag = ud.unresolvedrev[name] | ||
345 | else: | 348 | else: |
346 | search = "refs/heads/%s refs/tags/%s^{}" % (ud.unresolvedrev[name], ud.unresolvedrev[name]) | 349 | head = "refs/heads/%s" % ud.unresolvedrev[name] |
347 | output = self._lsremote(ud, d, search) | 350 | tag = "refs/tags/%s" % ud.unresolvedrev[name] |
348 | return output.split()[0] | 351 | for s in [head, tag + "^{}", tag]: |
352 | for l in output.split('\n'): | ||
353 | if s in l: | ||
354 | return l.split()[0] | ||
355 | raise bb.fetch2.FetchError("Unable to resolve '%s' in upstream git repository in git ls-remote output" % ud.unresolvedrev[name]) | ||
349 | 356 | ||
350 | def latest_versionstring(self, ud, d): | 357 | def latest_versionstring(self, ud, d): |
351 | """ | 358 | """ |