[poky] [PATCH 1/1] git fetcher: add support for rebaseable git repo
Khem Raj
raj.khem at gmail.com
Fri May 20 09:30:51 PDT 2011
On 5/15/2011 6:16 PM, Yu Ke wrote:
> From: Yu Ke<ke.yu at intel.com>
>
> 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.
Do we have the options to SRC_URI documented somewhere ?
if yes then this should be added there too.
>
> Signed-off-by: Yu Ke<ke.yu at intel.com>
> ---
> bitbake/lib/bb/fetch2/git.py | 28 ++++++++++++++++++++--------
> 1 files changed, 20 insertions(+), 8 deletions(-)
>
> diff --git a/bitbake/lib/bb/fetch2/git.py b/bitbake/lib/bb/fetch2/git.py
> index 811acbf..82721c6 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
>
More information about the poky
mailing list