aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bitbake/lib/bb/fetch2/git.py28
1 files changed, 20 insertions, 8 deletions
diff --git a/bitbake/lib/bb/fetch2/git.py b/bitbake/lib/bb/fetch2/git.py
index 811acbf6c6..82721c6cfa 100644
--- a/bitbake/lib/bb/fetch2/git.py
+++ b/bitbake/lib/bb/fetch2/git.py
@@ -57,6 +57,11 @@ class Git(FetchMethod):
if 'nocheckout' in ud.parm:
ud.nocheckout = True
+ # rebaseable means the upstream git repo may rebase in the future,
+ # and current revision may disappear from upstream repo
+ # rebaseable is false by default. set rebaseable=1 in SRC_URI if rebaseable.
+ ud.rebaseable = ud.parm.get("rebaseable","0") == "1"
+
branches = ud.parm.get("branch", "master").split(',')
if len(branches) != len(ud.names):
raise bb.fetch2.ParameterError("The number of name and branch parameters is not balanced", ud.url)
@@ -65,16 +70,9 @@ class Git(FetchMethod):
branch = branches[ud.names.index(name)]
ud.branches[name] = branch
- gitsrcname = '%s%s' % (ud.host, ud.path.replace('/', '.'))
- ud.mirrortarball = 'git2_%s.tar.gz' % (gitsrcname)
- ud.fullmirror = os.path.join(data.getVar("DL_DIR", d, True), ud.mirrortarball)
- ud.clonedir = os.path.join(data.expand('${GITDIR}', d), gitsrcname)
-
ud.basecmd = data.getVar("FETCHCMD_git", d, True) or "git"
- ud.write_tarballs = (data.getVar("BB_GENERATE_MIRROR_TARBALLS", d, True) or "0") != "0"
-
- ud.localfile = ud.clonedir
+ ud.write_tarballs = ((data.getVar("BB_GENERATE_MIRROR_TARBALLS", d, True) or "0") != "0") or ud.rebaseable
ud.setup_revisons(d)
@@ -84,6 +82,20 @@ class Git(FetchMethod):
ud.branches[name] = ud.revisions[name]
ud.revisions[name] = self.latest_revision(ud.url, ud, d, name)
+ gitsrcname = '%s%s' % (ud.host, ud.path.replace('/', '.'))
+ # for rebaseable git repo, it is necessary to keep mirror tar ball
+ # per revision, so that even the revision disappears from the
+ # upstream repo in the future, the mirror will remain intact and still
+ # contains the revision
+ if ud.rebaseable:
+ for name in ud.names:
+ gitsrcname = gitsrcname + '_' + ud.revisions[name]
+ ud.mirrortarball = 'git2_%s.tar.gz' % (gitsrcname)
+ ud.fullmirror = os.path.join(data.getVar("DL_DIR", d, True), ud.mirrortarball)
+ ud.clonedir = os.path.join(data.expand('${GITDIR}', d), gitsrcname)
+
+ ud.localfile = ud.clonedir
+
def localpath(self, url, ud, d):
return ud.clonedir