summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYu Ke <ke.yu@intel.com>2011-05-15 22:33:30 +0800
committerRichard Purdie <richard.purdie@linuxfoundation.org>2011-05-17 15:19:36 +0100
commitdf2a37abd00fc30837b60aaa0bef43c7838afeb4 (patch)
treea2516286d0e3d7400f6c599bc3d1e74e39657628
parent8bb06fd765d65b106717626e8dd1349860c49cc2 (diff)
downloadpoky-df2a37abd00fc30837b60aaa0bef43c7838afeb4.tar.gz
git fetcher: add support for rebaseable git repo
Some upstream git repo may rebase in the future, which means current revision may disappear from the upstream repo after the rebase. current git fetcher can not handle this case, because the git mirror tar ball is per repo, and may also change in the rebase and lost the current revision info. To fix this issue, this patch - add rebaseable tag in the SRC_URI - for rebaseable repo, make git mirror tar ball per revision, in this case, even upstream rebase, the git mirror still has the current revision info. - for rebaseable repo, generate mirror tar ball by default, since the repo may change in the future. (Bitbake rev: 92701d4c5372db48847c70da4ebd0736d79fd54b) Signed-off-by: Yu Ke <ke.yu@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-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):
57 if 'nocheckout' in ud.parm: 57 if 'nocheckout' in ud.parm:
58 ud.nocheckout = True 58 ud.nocheckout = True
59 59
60 # rebaseable means the upstream git repo may rebase in the future,
61 # and current revision may disappear from upstream repo
62 # rebaseable is false by default. set rebaseable=1 in SRC_URI if rebaseable.
63 ud.rebaseable = ud.parm.get("rebaseable","0") == "1"
64
60 branches = ud.parm.get("branch", "master").split(',') 65 branches = ud.parm.get("branch", "master").split(',')
61 if len(branches) != len(ud.names): 66 if len(branches) != len(ud.names):
62 raise bb.fetch2.ParameterError("The number of name and branch parameters is not balanced", ud.url) 67 raise bb.fetch2.ParameterError("The number of name and branch parameters is not balanced", ud.url)
@@ -65,16 +70,9 @@ class Git(FetchMethod):
65 branch = branches[ud.names.index(name)] 70 branch = branches[ud.names.index(name)]
66 ud.branches[name] = branch 71 ud.branches[name] = branch
67 72
68 gitsrcname = '%s%s' % (ud.host, ud.path.replace('/', '.'))
69 ud.mirrortarball = 'git2_%s.tar.gz' % (gitsrcname)
70 ud.fullmirror = os.path.join(data.getVar("DL_DIR", d, True), ud.mirrortarball)
71 ud.clonedir = os.path.join(data.expand('${GITDIR}', d), gitsrcname)
72
73 ud.basecmd = data.getVar("FETCHCMD_git", d, True) or "git" 73 ud.basecmd = data.getVar("FETCHCMD_git", d, True) or "git"
74 74
75 ud.write_tarballs = (data.getVar("BB_GENERATE_MIRROR_TARBALLS", d, True) or "0") != "0" 75 ud.write_tarballs = ((data.getVar("BB_GENERATE_MIRROR_TARBALLS", d, True) or "0") != "0") or ud.rebaseable
76
77 ud.localfile = ud.clonedir
78 76
79 ud.setup_revisons(d) 77 ud.setup_revisons(d)
80 78
@@ -84,6 +82,20 @@ class Git(FetchMethod):
84 ud.branches[name] = ud.revisions[name] 82 ud.branches[name] = ud.revisions[name]
85 ud.revisions[name] = self.latest_revision(ud.url, ud, d, name) 83 ud.revisions[name] = self.latest_revision(ud.url, ud, d, name)
86 84
85 gitsrcname = '%s%s' % (ud.host, ud.path.replace('/', '.'))
86 # for rebaseable git repo, it is necessary to keep mirror tar ball
87 # per revision, so that even the revision disappears from the
88 # upstream repo in the future, the mirror will remain intact and still
89 # contains the revision
90 if ud.rebaseable:
91 for name in ud.names:
92 gitsrcname = gitsrcname + '_' + ud.revisions[name]
93 ud.mirrortarball = 'git2_%s.tar.gz' % (gitsrcname)
94 ud.fullmirror = os.path.join(data.getVar("DL_DIR", d, True), ud.mirrortarball)
95 ud.clonedir = os.path.join(data.expand('${GITDIR}', d), gitsrcname)
96
97 ud.localfile = ud.clonedir
98
87 def localpath(self, url, ud, d): 99 def localpath(self, url, ud, d):
88 return ud.clonedir 100 return ud.clonedir
89 101