diff options
author | Richard Purdie <rpurdie@linux.intel.com> | 2007-03-19 23:12:00 +0000 |
---|---|---|
committer | Richard Purdie <rpurdie@linux.intel.com> | 2007-03-19 23:12:00 +0000 |
commit | 3f90c8336a8298f8f9ecb51e9a60bb55e3e0a50b (patch) | |
tree | 4e8f8faaa87badd57328a3b267480e541011d917 /lib/bb | |
parent | 607fb683509e032a64198d998a46f7e6056118b6 (diff) | |
download | bitbake-3f90c8336a8298f8f9ecb51e9a60bb55e3e0a50b.tar.gz |
Add PE (Package Epoch) support from Philipp Zabel (pH5)
Diffstat (limited to 'lib/bb')
-rw-r--r-- | lib/bb/cache.py | 7 | ||||
-rw-r--r-- | lib/bb/providers.py | 36 | ||||
-rw-r--r-- | lib/bb/utils.py | 8 |
3 files changed, 34 insertions, 17 deletions
diff --git a/lib/bb/cache.py b/lib/bb/cache.py index 934d230e6..f2b549110 100644 --- a/lib/bb/cache.py +++ b/lib/bb/cache.py @@ -39,7 +39,7 @@ except ImportError: import pickle bb.msg.note(1, bb.msg.domain.Cache, "Importing cPickle failed. Falling back to a very slow implementation.") -__cache_version__ = "125" +__cache_version__ = "126" class Cache: """ @@ -251,6 +251,7 @@ class Cache: """ pn = self.getVar('PN', file_name, True) + pe = int(self.getVar('PE', file_name, True) or "0") pv = self.getVar('PV', file_name, True) pr = self.getVar('PR', file_name, True) dp = int(self.getVar('DEFAULT_PREFERENCE', file_name, True) or "0") @@ -272,7 +273,7 @@ class Cache: # build FileName to PackageName lookup table cacheData.pkg_fn[file_name] = pn - cacheData.pkg_pvpr[file_name] = (pv,pr) + cacheData.pkg_pepvpr[file_name] = (pe,pv,pr) cacheData.pkg_dp[file_name] = dp # Build forward and reverse provider hashes @@ -407,7 +408,7 @@ class CacheData: self.possible_world = [] self.pkg_pn = {} self.pkg_fn = {} - self.pkg_pvpr = {} + self.pkg_pepvpr = {} self.pkg_dp = {} self.pn_provides = {} self.all_depends = Set() diff --git a/lib/bb/providers.py b/lib/bb/providers.py index b96fd2ec1..39b3842b3 100644 --- a/lib/bb/providers.py +++ b/lib/bb/providers.py @@ -61,19 +61,27 @@ def findBestProvider(pn, cfgData, dataCache, pkg_pn = None, item = None): preferred_v = bb.data.getVar('PREFERRED_VERSION_%s' % pn, localdata, True) if preferred_v: - m = re.match('(.*)_(.*)', preferred_v) + m = re.match('(\d+:)*(.*)(_.*)*', preferred_v) if m: - preferred_v = m.group(1) - preferred_r = m.group(2) + if m.group(1): + preferred_e = int(m.group(1)[:-1]) + else: + preferred_e = None + preferred_v = m.group(2) + if m.group(3): + preferred_r = m.group(3)[1:] + else: + preferred_r = None else: + preferred_e = None preferred_r = None for file_set in tmp_pn: for f in file_set: - pv,pr = dataCache.pkg_pvpr[f] - if preferred_v == pv and (preferred_r == pr or preferred_r == None): + pe,pv,pr = dataCache.pkg_pepvpr[f] + if preferred_v == pv and (preferred_r == pr or preferred_r == None) and (preferred_e == pe or preferred_e == None): preferred_file = f - preferred_ver = (pv, pr) + preferred_ver = (pe, pv, pr) break if preferred_file: break; @@ -81,6 +89,8 @@ def findBestProvider(pn, cfgData, dataCache, pkg_pn = None, item = None): pv_str = '%s-%s' % (preferred_v, preferred_r) else: pv_str = preferred_v + if not (preferred_e is None): + pv_str = '%d:%s' % (preferred_e, pv_str) itemstr = "" if item: itemstr = " (for item %s)" % item @@ -97,11 +107,11 @@ def findBestProvider(pn, cfgData, dataCache, pkg_pn = None, item = None): latest_p = 0 latest_f = None for file_name in files: - pv,pr = dataCache.pkg_pvpr[file_name] + pe,pv,pr = dataCache.pkg_pepvpr[file_name] dp = dataCache.pkg_dp[file_name] - if (latest is None) or ((latest_p == dp) and (utils.vercmp(latest, (pv, pr)) < 0)) or (dp > latest_p): - latest = (pv, pr) + if (latest is None) or ((latest_p == dp) and (utils.vercmp(latest, (pe, pv, pr)) < 0)) or (dp > latest_p): + latest = (pe, pv, pr) latest_f = file_name latest_p = dp if preferred_file is None: @@ -153,7 +163,7 @@ def filterProviders(providers, item, cfgData, dataCache): # if so, bump it to the head of the queue for p in providers: pn = dataCache.pkg_fn[p] - pv, pr = dataCache.pkg_pvpr[p] + pe, pv, pr = dataCache.pkg_pepvpr[p] stamp = '%s.do_populate_staging' % dataCache.stamp[p] if os.path.exists(stamp): @@ -162,7 +172,11 @@ def filterProviders(providers, item, cfgData, dataCache): # package was made ineligible by already-failed check continue oldver = "%s-%s" % (pv, pr) - newver = '-'.join(newvers) + if pe > 0: + oldver = "%d:%s" % (pe, oldver) + newver = "%s-%s" % (newvers[1], newvers[2]) + if newvers[0] > 0: + newver = "%d:%s" % (newvers[0], newver) if (newver != oldver): extra_chat = "%s (%s) already staged but upgrading to %s to satisfy %s" % (pn, oldver, newver, item) else: diff --git a/lib/bb/utils.py b/lib/bb/utils.py index 411f43a10..f8860ff24 100644 --- a/lib/bb/utils.py +++ b/lib/bb/utils.py @@ -62,10 +62,12 @@ def vercmp_part(a, b): return -1 def vercmp(ta, tb): - (va, ra) = ta - (vb, rb) = tb + (ea, va, ra) = ta + (eb, vb, rb) = tb - r = vercmp_part(va, vb) + r = ea-eb + if (r == 0): + r = vercmp_part(va, vb) if (r == 0): r = vercmp_part(ra, rb) return r |