From e9b7bc6914c0f1d9282f92748eaa3d308f5d03fd Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Wed, 7 Nov 2007 23:49:55 +0000 Subject: bitbake: fetcher updates - Add BB_GENERATE_MIRROR_TARBALLS option to allow disabling tarball creation to speedup git fetches, improve srcrev handling to remove some hacks and remove the need for external workarounds git-svn-id: https://svn.o-hand.com/repos/poky/trunk@3101 311d38ba-8fff-0310-9ca6-ca027cbcb966 --- bitbake/lib/bb/fetch/__init__.py | 19 ++++++++++++++++++- bitbake/lib/bb/fetch/bzr.py | 12 +++++------- bitbake/lib/bb/fetch/git.py | 17 ++++++++++------- bitbake/lib/bb/fetch/hg.py | 17 ++++++++--------- bitbake/lib/bb/fetch/svn.py | 16 ++++++---------- 5 files changed, 47 insertions(+), 34 deletions(-) (limited to 'bitbake') diff --git a/bitbake/lib/bb/fetch/__init__.py b/bitbake/lib/bb/fetch/__init__.py index eed7095819..1d41033f54 100644 --- a/bitbake/lib/bb/fetch/__init__.py +++ b/bitbake/lib/bb/fetch/__init__.py @@ -170,6 +170,8 @@ def localpaths(d): return local +srcrev_internal_call = False + def get_srcrev(d): """ Return the version string for the current package @@ -178,6 +180,19 @@ def get_srcrev(d): In the multi SCM case, we build a value based on SRCREV_FORMAT which must have been set. """ + + # + # Ugly code alert. localpath in the fetchers will try to evaluate SRCREV which + # could translate into a call to here. If it does, we need to catch this + # and provide some way so it knows get_srcrev is active instead of being + # some number etc. hence the srcrev_internal_call tracking and the magic + # "SRCREVINACTION" return value. + # + # Neater solutions welcome! + # + if bb.fetch.srcrev_internal_call: + return "SRCREVINACTION" + scms = [] # Only call setup_localpath on URIs which suppports_srcrev() urldata = init(bb.data.getVar('SRC_URI', d, 1).split(), d, False) @@ -273,12 +288,14 @@ class FetchData(object): def setup_localpath(self, d): self.setup = True if "localpath" in self.parm: + # if user sets localpath for file, use it instead. self.localpath = self.parm["localpath"] else: + bb.fetch.srcrev_internal_call = True self.localpath = self.method.localpath(self.url, self, d) + bb.fetch.srcrev_internal_call = False self.md5 = self.localpath + '.md5' self.lockfile = self.localpath + '.lock' - # if user sets localpath for file, use it instead. class Fetch(object): diff --git a/bitbake/lib/bb/fetch/bzr.py b/bitbake/lib/bb/fetch/bzr.py index c66d17fdd2..76dde3a0bd 100644 --- a/bitbake/lib/bb/fetch/bzr.py +++ b/bitbake/lib/bb/fetch/bzr.py @@ -48,16 +48,14 @@ class Bzr(Fetch): if 'rev' in ud.parm: ud.revision = ud.parm['rev'] else: - # ***Nasty hack*** - rev = data.getVar("SRCREV", d, 0) - if rev and "get_srcrev" in rev: - ud.revision = self.latest_revision(url, ud, d) - elif rev: + rev = data.getVar("SRCREV", d, 1) + if rev is "SRCREVINACTION": + rev = self.latest_revision(url, ud, d) + if rev: ud.revision = rev else: - ud.revision = "" + ud.revision = "" - ud.localfile = data.expand('bzr_%s_%s_%s.tar.gz' % (ud.host, ud.path.replace('/', '.'), ud.revision), d) return os.path.join(data.getVar("DL_DIR", d, True), ud.localfile) diff --git a/bitbake/lib/bb/fetch/git.py b/bitbake/lib/bb/fetch/git.py index 7d55ee9138..c26ee3fff3 100644 --- a/bitbake/lib/bb/fetch/git.py +++ b/bitbake/lib/bb/fetch/git.py @@ -50,12 +50,15 @@ class Git(Fetch): if 'protocol' in ud.parm: ud.proto = ud.parm['protocol'] - tag = data.getVar("SRCREV", d, 0) + tag = data.getVar("SRCREV", d, 1) if 'tag' in ud.parm: ud.tag = ud.parm['tag'] - elif tag and "get_srcrev" not in tag and len(tag) == 40: - ud.tag = tag + elif tag is "SRCREVINACTION": + ud.tag = self.latest_revision(url, ud, d) else: + ud.tag = tag + + if ud.tag == "master": ud.tag = self.latest_revision(url, ud, d) ud.localfile = data.expand('git_%s%s_%s.tar.gz' % (ud.host, ud.path.replace('/', '.'), ud.tag), d) @@ -93,12 +96,12 @@ class Git(Fetch): runfetchcmd("git pull --tags %s://%s%s" % (ud.proto, ud.host, ud.path), d) runfetchcmd("git prune-packed", d) runfetchcmd("git pack-redundant --all | xargs -r rm", d) - # old method of downloading tags - #runfetchcmd("rsync -a --verbose --stats --progress rsync://%s%s/ %s" % (ud.host, ud.path, os.path.join(repodir, ".git", "")), d) os.chdir(repodir) - bb.msg.note(1, bb.msg.domain.Fetcher, "Creating tarball of git repository") - runfetchcmd("tar -czf %s %s" % (repofile, os.path.join(".", ".git", "*") ), d) + mirror_tarballs = data.getVar("BB_GENERATE_MIRROR_TARBALLS", d, True) + if mirror_tarballs != "0": + bb.msg.note(1, bb.msg.domain.Fetcher, "Creating tarball of git repository") + runfetchcmd("tar -czf %s %s" % (repofile, os.path.join(".", ".git", "*") ), d) if os.path.exists(codir): prunedir(codir) diff --git a/bitbake/lib/bb/fetch/hg.py b/bitbake/lib/bb/fetch/hg.py index 8e8073e56d..6b93822803 100644 --- a/bitbake/lib/bb/fetch/hg.py +++ b/bitbake/lib/bb/fetch/hg.py @@ -57,15 +57,14 @@ class Hg(Fetch): if 'rev' in ud.parm: ud.revision = ud.parm['rev'] - else: - # - rev = data.getVar("SRCREV", d, 0) - if rev and "get_srcrev" in rev: - ud.revision = self.latest_revision(url, ud, d) - elif rev: - ud.revision = rev - else: - ud.revision = "" + #else: + # rev = data.getVar("SRCREV", d, 1) + # if rev is "SRCREVINACTION": + # rev = self.latest_revision(url, ud, d) + # if rev: + # ud.revision = rev + # else: + # ud.revision = "" ud.localfile = data.expand('%s_%s_%s_%s.tar.gz' % (ud.module.replace('/', '.'), ud.host, ud.path.replace('/', '.'), ud.revision), d) diff --git a/bitbake/lib/bb/fetch/svn.py b/bitbake/lib/bb/fetch/svn.py index 95b21fe20c..c3cebc390d 100644 --- a/bitbake/lib/bb/fetch/svn.py +++ b/bitbake/lib/bb/fetch/svn.py @@ -62,22 +62,18 @@ class Svn(Fetch): ud.revision = "" else: # - # ***Nasty hacks*** + # ***Nasty hack*** # If DATE in unexpanded PV, use ud.date (which is set from SRCDATE) - # Will warn people to switch to SRCREV here - # - # How can we tell when a user has overriden SRCDATE? - # check for "get_srcdate" in unexpanded SRCREV - ugly + # Should warn people to switch to SRCREV here # pv = data.getVar("PV", d, 0) if "DATE" in pv: ud.revision = "" else: - rev = data.getVar("SRCREV", d, 0) - if rev and "get_srcrev" in rev: - ud.revision = self.latest_revision(url, ud, d) - ud.date = "" - elif rev: + rev = data.getVar("SRCREV", d, 1) + if rev is "SRCREVINACTION": + rev = self.latest_revision(url, ud, d) + if rev: ud.revision = rev ud.date = "" else: -- cgit 1.2.3-korg