diff options
author | Yu Ke <ke.yu@intel.com> | 2010-12-27 09:31:38 +0800 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2011-01-10 20:24:33 +0000 |
commit | 1589a1172f9432aed1cc9ce006f68cddf3073774 (patch) | |
tree | 48616149e847a09c87668f6342b64dce15f4f57f /bitbake/lib | |
parent | 550c3bd82115b4bdb8235da53cfc18b1dc39ad96 (diff) | |
download | openembedded-core-1589a1172f9432aed1cc9ce006f68cddf3073774.tar.gz openembedded-core-1589a1172f9432aed1cc9ce006f68cddf3073774.tar.bz2 openembedded-core-1589a1172f9432aed1cc9ce006f68cddf3073774.zip |
Fetcher: break the "SRCREVINACTION" deadlock
Current fetcher has annoying "SRCREVINACTION" deadlock,
which occurs when SRCREV=${AUTOREV}=@bb.fetch.get_srcrev():
get_srcrev()->setup_localpath()->srcrev_internal_helper()
->evaluate SRCREV->get_srcrev()
current fetcher resolve the deadlock by introducing a
"SRCREVINACTION" condition check. Althoguh it works, it is
indeed not clean.
This patch use antoehr idea to break the deadlock: break
the dependency among SRCREV and get_srcrev(), i.e. assign
a specific keyword "AUTOINC" to AUTOREV. when Fetcher meet
this keyword, it will check and set the latest revision to
urldata.revision. get_srcrev later can use the urldata.revision
for value evaluation(SRCPV etc). In this case, SRCREV no longer
depends on get_srcrev, and there is not deadlock anymore.
Signed-off-by: Yu Ke <ke.yu@intel.com>
Diffstat (limited to 'bitbake/lib')
-rw-r--r-- | bitbake/lib/bb/fetch/__init__.py | 3 | ||||
-rw-r--r-- | bitbake/lib/bb/fetch2/__init__.py | 34 | ||||
-rw-r--r-- | bitbake/lib/bb/fetch2/bzr.py | 6 | ||||
-rw-r--r-- | bitbake/lib/bb/fetch2/git.py | 8 | ||||
-rw-r--r-- | bitbake/lib/bb/fetch2/hg.py | 10 | ||||
-rw-r--r-- | bitbake/lib/bb/fetch2/svn.py | 10 |
6 files changed, 18 insertions, 53 deletions
diff --git a/bitbake/lib/bb/fetch/__init__.py b/bitbake/lib/bb/fetch/__init__.py index f7153ebce9..07eb77dbfc 100644 --- a/bitbake/lib/bb/fetch/__init__.py +++ b/bitbake/lib/bb/fetch/__init__.py @@ -360,6 +360,9 @@ def localpaths(d): srcrev_internal_call = False +def get_autorev(d): + return get_srcrev(d) + def get_srcrev(d): """ Return the version string for the current package diff --git a/bitbake/lib/bb/fetch2/__init__.py b/bitbake/lib/bb/fetch2/__init__.py index 16cf1fa2be..b9cca91684 100644 --- a/bitbake/lib/bb/fetch2/__init__.py +++ b/bitbake/lib/bb/fetch2/__init__.py @@ -358,7 +358,8 @@ def localpaths(d): return local -srcrev_internal_call = False +def get_autorev(d): + return "AUTOINC" def get_srcrev(d): """ @@ -369,18 +370,6 @@ def get_srcrev(d): 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.fetch2.srcrev_internal_call: - return "SRCREVINACTION" - scms = [] # Only call setup_localpath on URIs which supports_srcrev() @@ -548,6 +537,8 @@ class FetchData(object): self.method = m if hasattr(m,"urldata_init"): m.urldata_init(self, d) + if m.supports_srcrev(): + self.revision = Fetch.srcrev_internal_helper(self, d); return raise NoMethodError("Missing implementation for url %s" % url) @@ -572,11 +563,7 @@ class FetchData(object): local = "" self.localpath = local if not local: - try: - bb.fetch2.srcrev_internal_call = True - self.localpath = self.method.localpath(self.url, self, d) - finally: - bb.fetch2.srcrev_internal_call = False + self.localpath = self.method.localpath(self.url, self, d) # We have to clear data's internal caches since the cached value of SRCREV is now wrong. # Horrible... bb.data.delVar("ISHOULDNEVEREXIST", d) @@ -682,8 +669,8 @@ class Fetch(object): """ Return: a) a source revision if specified - b) True if auto srcrev is in action - c) False otherwise + b) latest revision if SREREV="AUTOINC" + c) None if not specified """ if 'rev' in ud.parm: @@ -704,10 +691,9 @@ class Fetch(object): rev = data.getVar("SRCREV", d, 1) if rev == "INVALID": raise InvalidSRCREV("Please set SRCREV to a valid value") - if not rev: - return False - if rev is "SRCREVINACTION": - return True + if rev == "AUTOINC": + rev = ud.method.latest_revision(ud.url, ud, d) + return rev srcrev_internal_helper = staticmethod(srcrev_internal_helper) diff --git a/bitbake/lib/bb/fetch2/bzr.py b/bitbake/lib/bb/fetch2/bzr.py index 1368f172d3..97b042b2a5 100644 --- a/bitbake/lib/bb/fetch2/bzr.py +++ b/bitbake/lib/bb/fetch2/bzr.py @@ -43,12 +43,6 @@ class Bzr(Fetch): ud.pkgdir = os.path.join(data.expand('${BZRDIR}', d), ud.host, relpath) def localpath (self, url, ud, d): - revision = Fetch.srcrev_internal_helper(ud, d) - if revision is True: - ud.revision = self.latest_revision(url, ud, d) - elif revision: - ud.revision = revision - if not ud.revision: ud.revision = self.latest_revision(url, ud, d) diff --git a/bitbake/lib/bb/fetch2/git.py b/bitbake/lib/bb/fetch2/git.py index 58ed1f4108..c62145770f 100644 --- a/bitbake/lib/bb/fetch2/git.py +++ b/bitbake/lib/bb/fetch2/git.py @@ -62,13 +62,7 @@ class Git(Fetch): ud.basecmd = data.getVar("FETCHCMD_git", d, True) or "git" def localpath(self, url, ud, d): - - tag = Fetch.srcrev_internal_helper(ud, d) - if tag is True: - ud.tag = self.latest_revision(url, ud, d) - elif tag: - ud.tag = tag - + ud.tag = ud.revision if not ud.tag or ud.tag == "master": ud.tag = self.latest_revision(url, ud, d) diff --git a/bitbake/lib/bb/fetch2/hg.py b/bitbake/lib/bb/fetch2/hg.py index 80a155108c..0ba84330a5 100644 --- a/bitbake/lib/bb/fetch2/hg.py +++ b/bitbake/lib/bb/fetch2/hg.py @@ -64,14 +64,8 @@ class Hg(Fetch): def localpath(self, url, ud, d): if 'rev' in ud.parm: ud.revision = ud.parm['rev'] - else: - tag = Fetch.srcrev_internal_helper(ud, d) - if tag is True: - ud.revision = self.latest_revision(url, ud, d) - elif tag: - ud.revision = tag - else: - ud.revision = self.latest_revision(url, ud, d) + elif not ud.revision: + ud.revision = self.latest_revision(url, ud, d) 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/fetch2/svn.py b/bitbake/lib/bb/fetch2/svn.py index c0a7a548cc..1116795e87 100644 --- a/bitbake/lib/bb/fetch2/svn.py +++ b/bitbake/lib/bb/fetch2/svn.py @@ -73,15 +73,9 @@ class Svn(Fetch): if "DATE" in pv: ud.revision = "" else: - rev = Fetch.srcrev_internal_helper(ud, d) - if rev is True: - ud.revision = self.latest_revision(url, ud, d) + # use the initizlied revision + if ud.revision: ud.date = "" - elif rev: - ud.revision = rev - ud.date = "" - else: - ud.revision = "" ud.localfile = data.expand('%s_%s_%s_%s_%s.tar.gz' % (ud.module.replace('/', '.'), ud.host, ud.path.replace('/', '.'), ud.revision, ud.date), d) |