aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <zecke@selfish.org>2005-05-31 22:57:05 +0000
committerHolger Hans Peter Freyther <zecke@selfish.org>2005-05-31 22:57:05 +0000
commit92eb4f94106f2b438a92bff9de4dcb29de76f6d2 (patch)
tree90efc23350e76ed3804ef59c7db8debbe276a833
parent98514dd57444c298fd7e993846727dfd93abe33e (diff)
downloadbitbake-92eb4f94106f2b438a92bff9de4dcb29de76f6d2.tar.gz
bitbake/bin/bitbake:
Create a common method to get the preferred version given a package name. This patch was done by proti (seb BEI frankengul.org) and made work by myself. The list in list logic does not seem 'obvious' and I need to consider how to kill it. (when I understand what the file_set should represent)
-rwxr-xr-xbin/bitbake204
1 files changed, 76 insertions, 128 deletions
diff --git a/bin/bitbake b/bin/bitbake
index 0d4f51778..ecc433296 100755
--- a/bin/bitbake
+++ b/bin/bitbake
@@ -243,6 +243,76 @@ class BBCooker:
self.building_list.remove(fn)
self.build_path.remove(pathstr)
+ def findBestProvider( self, pn ):
+ """
+ If there is a PREFERRED_VERSION, find the highest-priority bbfile
+ providing that version. If not, find the latest version provided by
+ an bbfile in the highest-priority set.
+ """
+ pkg_pn = self.status.pkg_pn
+
+ files = pkg_pn[pn]
+ priorities = {}
+ for f in files:
+ priority = self.status.bbfile_priority[f]
+ if priority not in priorities:
+ priorities[priority] = []
+ priorities[priority].append(f)
+ p_list = priorities.keys()
+ p_list.sort(lambda a, b: a - b)
+ tmp_pn = []
+ for p in p_list:
+ tmp_pn = [priorities[p]] + tmp_pn
+ pkg_pn[pn] = tmp_pn
+
+ preferred_file = None
+
+ preferred_v = bb.data.getVar('PREFERRED_VERSION_%s' % pn, make.cfg, 1)
+ if preferred_v:
+ m = re.match('(.*)_(.*)', preferred_v)
+ if m:
+ preferred_v = m.group(1)
+ preferred_r = m.group(2)
+ else:
+ preferred_r = None
+
+ for file_set in pkg_pn[pn]:
+ for f in file_set:
+ pv,pr = self.status.pkg_pvpr[f]
+ if preferred_v == pv and (preferred_r == pr or preferred_r == None):
+ preferred_file = f
+ preferred_ver = (pv, pr)
+ break
+ if preferred_file:
+ break
+ if preferred_r:
+ pv_str = '%s-%s' % (preferred_v, preferred_r)
+ else:
+ pv_str = preferred_v
+ if preferred_file is None:
+ bb.note("preferred version %s of %s not available" % (pv_str, pn))
+ else:
+ bb.debug(1, "selecting %s as PREFERRED_VERSION %s of package %s" % (preferred_file, pv_str, pn))
+
+ # get highest priority file set
+ files = pkg_pn[pn][0]
+ latest = None
+ latest_p = 0
+ latest_f = None
+ for file_name in files:
+ pv,pr = self.status.pkg_pvpr[file_name]
+ dp = self.status.pkg_dp[file_name]
+
+ if (latest is None) or ((latest_p == dp) and (make.vercmp(latest, (pv, pr)) < 0)) or (dp > latest_p):
+ latest = (pv, pr)
+ latest_f = file_name
+ latest_p = dp
+ if preferred_file is None:
+ preferred_file = latest_f
+ preferred_ver = latest
+
+ return (latest,latest_f,preferred_ver, preferred_file)
+
def showVersions( self ):
pkg_pn = self.status.pkg_pn
preferred_versions = {}
@@ -250,66 +320,9 @@ class BBCooker:
# Sort by priority
for pn in pkg_pn.keys():
- files = pkg_pn[pn]
- priorities = {}
- for f in files:
- priority = self.status.bbfile_priority[f]
- if priority not in priorities:
- priorities[priority] = []
- priorities[priority].append(f)
- p_list = priorities.keys()
- p_list.sort(lambda a, b: a - b)
- pkg_pn[pn] = []
- for p in p_list:
- pkg_pn[pn] = [ priorities[p] ] + pkg_pn[pn]
-
- for pn in pkg_pn.keys():
- preferred_file = None
- preferred_v = bb.data.getVar('PREFERRED_VERSION_%s' % pn, make.cfg, 1)
- if preferred_v:
- preferred_r = None
- m = re.match('(.*)_(.*)', preferred_v)
- if m:
- preferred_v = m.group(1)
- preferred_r = m.group(2)
-
- for file_set in pkg_pn[pn]:
- for f in file_set:
- pv,pr = self.status.pkg_pvpr[f]
- if preferred_v == pv and (preferred_r == pr or preferred_r == None):
- preferred_file = f
- preferred_ver = (pv, pr)
- break
- if preferred_file:
- break
- if preferred_r:
- pv_str = '%s-%s' % (preferred_v, preferred_r)
- else:
- pv_str = preferred_v
- if preferred_file is None:
- bb.note("preferred version %s of %s not available" % (pv_str, pn))
- else:
- bb.debug(1, "selecting %s as PREFERRED_VERSION %s of package %s" % (preferred_file, pv_str, pn))
-
- # get highest priority file set
- files = pkg_pn[pn][0]
- latest = None
- latest_p = 0
- latest_f = None
- for f in files:
- pv,pr = self.status.pkg_pvpr[f]
- dp = self.status.pkg_dp[f]
-
- if (latest is None) or ((latest_p == dp) and (make.vercmp(latest, (pv, pr)) < 0)) or (dp > latest_p):
- latest = (pv, pr)
- latest_f = f
- latest_p = dp
- if preferred_file is None:
- preferred_file = latest_f
- preferred_ver = latest
-
- preferred_versions[pn] = (preferred_ver, preferred_file)
- latest_versions[pn] = (latest, latest_f)
+ (last_ver,last_file,pref_ver,pref_file) = self.findBestProvider(pn)
+ preferred_versions[pn] = (pref_ver, pref_file)
+ latest_versions[pn] = (last_ver, last_file)
pkg_list = pkg_pn.keys()
pkg_list.sort()
@@ -355,75 +368,10 @@ class BBCooker:
bb.debug(1, "providers for %s are: %s" % (item, pkg_pn.keys()))
- # Sort by priority
for pn in pkg_pn.keys():
- files = pkg_pn[pn]
- priorities = {}
- for f in files:
- priority = self.status.bbfile_priority[f]
- if priority not in priorities:
- priorities[priority] = []
- priorities[priority].append(f)
- p_list = priorities.keys()
- p_list.sort(lambda a, b: a - b)
- pkg_pn[pn] = []
- for p in p_list:
- pkg_pn[pn] = [ priorities[p] ] + pkg_pn[pn]
-
- # If there is a PREFERRED_VERSION, find the highest-priority bbfile providing that
- # version. If not, find the latest version provided by an bbfile in the
- # highest-priority set.
- for pn in pkg_pn.keys():
- preferred_file = None
-
- preferred_v = bb.data.getVar('PREFERRED_VERSION_%s' % pn, make.cfg, 1)
- if preferred_v:
- preferred_r = None
- m = re.match('(.*)_(.*)', preferred_v)
- if m:
- preferred_v = m.group(1)
- preferred_r = m.group(2)
-
- for file_set in pkg_pn[pn]:
- for f in file_set:
- pv,pr = self.status.pkg_pvpr[f]
- if preferred_v == pv and (preferred_r == pr or preferred_r == None):
- preferred_file = f
- preferred_ver = (pv, pr)
- break
- if preferred_file:
- break
- if preferred_r:
- pv_str = '%s-%s' % (preferred_v, preferred_r)
- else:
- pv_str = preferred_v
- if preferred_file is None:
- bb.note("preferred version %s of %s not available" % (pv_str, pn))
- else:
- bb.debug(1, "selecting %s as PREFERRED_VERSION %s of package %s" % (preferred_file, pv_str, pn))
-
- if preferred_file is None:
- # get highest priority file set
- files = pkg_pn[pn][0]
- latest = None
- latest_p = 0
- latest_f = None
- for f in files:
- pv,pr = self.status.pkg_pvpr[f]
- dp = self.status.pkg_dp[f]
-
- if (latest is None) or ((latest_p == dp) and (make.vercmp(latest, (pv, pr)) < 0)) or (dp > latest_p):
- latest = (pv, pr)
- latest_f = f
- latest_p = dp
- preferred_file = latest_f
- preferred_ver = latest
-
- bb.debug(1, "selecting %s as latest version of provider %s" % (preferred_file, pn))
-
- preferred_versions[pn] = (preferred_ver, preferred_file)
- eligible.append(preferred_file)
-
+ preferred_versions[pn] = self.findBestProvider(pn)[2:4]
+ eligible.append(preferred_versions[pn][1])
+
for p in eligible:
if p in self.build_cache_fail:
bb.debug(1, "rejecting already-failed %s" % p)