aboutsummaryrefslogtreecommitdiffstats
path: root/lib/bb
diff options
context:
space:
mode:
authorRichard Purdie <rpurdie@linux.intel.com>2007-03-19 23:12:00 +0000
committerRichard Purdie <rpurdie@linux.intel.com>2007-03-19 23:12:00 +0000
commit3f90c8336a8298f8f9ecb51e9a60bb55e3e0a50b (patch)
tree4e8f8faaa87badd57328a3b267480e541011d917 /lib/bb
parent607fb683509e032a64198d998a46f7e6056118b6 (diff)
downloadbitbake-3f90c8336a8298f8f9ecb51e9a60bb55e3e0a50b.tar.gz
Add PE (Package Epoch) support from Philipp Zabel (pH5)
Diffstat (limited to 'lib/bb')
-rw-r--r--lib/bb/cache.py7
-rw-r--r--lib/bb/providers.py36
-rw-r--r--lib/bb/utils.py8
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