[bitbake-devel] [PATCH] fetch2/git: allow using 'HEAD' as a branch name

Markus Lehtonen markus.lehtonen at linux.intel.com
Wed May 18 09:31:41 UTC 2016


This change makes it possible to e.g. build a currently checked out
revision of a local Git repository and use AUTOREV. It will be possible
to build HEAD of remote repositories, too, of course, but this is
probably not that practical.

In order to use this one must also use the nobranch parameter, i.e. have
'branch=HEAD;nobranch=1' in the SRC_URI, because 'HEAD' is really not a
Git branch as such. The wording in "branch=HEAD;nobranch=1" is probably a
bit counter-intuitive and illogical but this seems to be the only easy
way to make this work without complicating the fetcher even further.
Another solution would be e.g. to introduce an alternative 'ref'
parameter which could be used in place of 'branch' to give any ref. The
effect would basically be the same (with better wording) with yet a bit
more complex fetcher code.

[YOCTO #9351]

Signed-off-by: Markus Lehtonen <markus.lehtonen at linux.intel.com>
---
 lib/bb/fetch2/git.py | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/lib/bb/fetch2/git.py b/lib/bb/fetch2/git.py
index 526668b..99d7dc1 100644
--- a/lib/bb/fetch2/git.py
+++ b/lib/bb/fetch2/git.py
@@ -344,12 +344,15 @@ class Git(FetchMethod):
         output = self._lsremote(ud, d, "")
         # Tags of the form ^{} may not work, need to fallback to other form
         if ud.unresolvedrev[name][:5] == "refs/":
-            head = ud.unresolvedrev[name]
-            tag = ud.unresolvedrev[name]
+            search_list = [ud.unresolvedrev[name],
+                           ud.unresolvedrev[name] + "^{}"]
+        elif ud.unresolvedrev[name] == 'HEAD':
+            search_list = ['HEAD']
         else:
             head = "refs/heads/%s" % ud.unresolvedrev[name]
             tag = "refs/tags/%s" % ud.unresolvedrev[name]
-        for s in [head, tag + "^{}", tag]:
+            search_list = [head, tag + "^{}", tag]
+        for s in search_list:
             for l in output.split('\n'):
                 if s in l:
                     return l.split()[0]
-- 
2.6.6




More information about the bitbake-devel mailing list