summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/providers.py
diff options
context:
space:
mode:
authorRichard Purdie <richard@openedhand.com>2007-04-01 15:04:49 +0000
committerRichard Purdie <richard@openedhand.com>2007-04-01 15:04:49 +0000
commit7371e6323c3fb6b0545712e3cf84606644073e77 (patch)
treee08f25669ec0f0e9d11334909f3b68c0ab6aca19 /bitbake/lib/bb/providers.py
parent8b36dc217443aeeec8493d39561d2bb010336774 (diff)
downloadpoky-7371e6323c3fb6b0545712e3cf84606644073e77.tar.gz
bitbake: Update to 1.8.1 (inc. various bug fixes, epoch support)
git-svn-id: https://svn.o-hand.com/repos/poky/trunk@1419 311d38ba-8fff-0310-9ca6-ca027cbcb966
Diffstat (limited to 'bitbake/lib/bb/providers.py')
-rw-r--r--bitbake/lib/bb/providers.py47
1 files changed, 26 insertions, 21 deletions
diff --git a/bitbake/lib/bb/providers.py b/bitbake/lib/bb/providers.py
index fdd6cd10d1..78f45122ff 100644
--- a/bitbake/lib/bb/providers.py
+++ b/bitbake/lib/bb/providers.py
@@ -61,19 +61,27 @@ def findBestProvider(pn, cfgData, dataCache, pkg_pn = None, item = None):
61 61
62 preferred_v = bb.data.getVar('PREFERRED_VERSION_%s' % pn, localdata, True) 62 preferred_v = bb.data.getVar('PREFERRED_VERSION_%s' % pn, localdata, True)
63 if preferred_v: 63 if preferred_v:
64 m = re.match('(.*)_(.*)', preferred_v) 64 m = re.match('(\d+:)*(.*)(_.*)*', preferred_v)
65 if m: 65 if m:
66 preferred_v = m.group(1) 66 if m.group(1):
67 preferred_r = m.group(2) 67 preferred_e = int(m.group(1)[:-1])
68 else:
69 preferred_e = None
70 preferred_v = m.group(2)
71 if m.group(3):
72 preferred_r = m.group(3)[1:]
73 else:
74 preferred_r = None
68 else: 75 else:
76 preferred_e = None
69 preferred_r = None 77 preferred_r = None
70 78
71 for file_set in tmp_pn: 79 for file_set in tmp_pn:
72 for f in file_set: 80 for f in file_set:
73 pv,pr = dataCache.pkg_pvpr[f] 81 pe,pv,pr = dataCache.pkg_pepvpr[f]
74 if preferred_v == pv and (preferred_r == pr or preferred_r == None): 82 if preferred_v == pv and (preferred_r == pr or preferred_r == None) and (preferred_e == pe or preferred_e == None):
75 preferred_file = f 83 preferred_file = f
76 preferred_ver = (pv, pr) 84 preferred_ver = (pe, pv, pr)
77 break 85 break
78 if preferred_file: 86 if preferred_file:
79 break; 87 break;
@@ -81,6 +89,8 @@ def findBestProvider(pn, cfgData, dataCache, pkg_pn = None, item = None):
81 pv_str = '%s-%s' % (preferred_v, preferred_r) 89 pv_str = '%s-%s' % (preferred_v, preferred_r)
82 else: 90 else:
83 pv_str = preferred_v 91 pv_str = preferred_v
92 if not (preferred_e is None):
93 pv_str = '%s:%s' % (preferred_e, pv_str)
84 itemstr = "" 94 itemstr = ""
85 if item: 95 if item:
86 itemstr = " (for item %s)" % item 96 itemstr = " (for item %s)" % item
@@ -97,11 +107,11 @@ def findBestProvider(pn, cfgData, dataCache, pkg_pn = None, item = None):
97 latest_p = 0 107 latest_p = 0
98 latest_f = None 108 latest_f = None
99 for file_name in files: 109 for file_name in files:
100 pv,pr = dataCache.pkg_pvpr[file_name] 110 pe,pv,pr = dataCache.pkg_pepvpr[file_name]
101 dp = dataCache.pkg_dp[file_name] 111 dp = dataCache.pkg_dp[file_name]
102 112
103 if (latest is None) or ((latest_p == dp) and (utils.vercmp(latest, (pv, pr)) < 0)) or (dp > latest_p): 113 if (latest is None) or ((latest_p == dp) and (utils.vercmp(latest, (pe, pv, pr)) < 0)) or (dp > latest_p):
104 latest = (pv, pr) 114 latest = (pe, pv, pr)
105 latest_f = file_name 115 latest_f = file_name
106 latest_p = dp 116 latest_p = dp
107 if preferred_file is None: 117 if preferred_file is None:
@@ -110,10 +120,7 @@ def findBestProvider(pn, cfgData, dataCache, pkg_pn = None, item = None):
110 120
111 return (latest,latest_f,preferred_ver, preferred_file) 121 return (latest,latest_f,preferred_ver, preferred_file)
112 122
113# 123def filterProviders(providers, item, cfgData, dataCache):
114# RP - build_cache_fail needs to move elsewhere
115#
116def filterProviders(providers, item, cfgData, dataCache, build_cache_fail = {}):
117 """ 124 """
118 Take a list of providers and filter/reorder according to the 125 Take a list of providers and filter/reorder according to the
119 environment variables and previous build results 126 environment variables and previous build results
@@ -135,12 +142,6 @@ def filterProviders(providers, item, cfgData, dataCache, build_cache_fail = {}):
135 preferred_versions[pn] = bb.providers.findBestProvider(pn, cfgData, dataCache, pkg_pn, item)[2:4] 142 preferred_versions[pn] = bb.providers.findBestProvider(pn, cfgData, dataCache, pkg_pn, item)[2:4]
136 eligible.append(preferred_versions[pn][1]) 143 eligible.append(preferred_versions[pn][1])
137 144
138
139 for p in eligible:
140 if p in build_cache_fail:
141 bb.msg.debug(1, bb.msg.domain.Provider, "rejecting already-failed %s" % p)
142 eligible.remove(p)
143
144 if len(eligible) == 0: 145 if len(eligible) == 0:
145 bb.msg.error(bb.msg.domain.Provider, "no eligible providers for %s" % item) 146 bb.msg.error(bb.msg.domain.Provider, "no eligible providers for %s" % item)
146 return 0 147 return 0
@@ -162,7 +163,7 @@ def filterProviders(providers, item, cfgData, dataCache, build_cache_fail = {}):
162 # if so, bump it to the head of the queue 163 # if so, bump it to the head of the queue
163 for p in providers: 164 for p in providers:
164 pn = dataCache.pkg_fn[p] 165 pn = dataCache.pkg_fn[p]
165 pv, pr = dataCache.pkg_pvpr[p] 166 pe, pv, pr = dataCache.pkg_pepvpr[p]
166 167
167 stamp = '%s.do_populate_staging' % dataCache.stamp[p] 168 stamp = '%s.do_populate_staging' % dataCache.stamp[p]
168 if os.path.exists(stamp): 169 if os.path.exists(stamp):
@@ -171,7 +172,11 @@ def filterProviders(providers, item, cfgData, dataCache, build_cache_fail = {}):
171 # package was made ineligible by already-failed check 172 # package was made ineligible by already-failed check
172 continue 173 continue
173 oldver = "%s-%s" % (pv, pr) 174 oldver = "%s-%s" % (pv, pr)
174 newver = '-'.join(newvers) 175 if pe > 0:
176 oldver = "%s:%s" % (pe, oldver)
177 newver = "%s-%s" % (newvers[1], newvers[2])
178 if newvers[0] > 0:
179 newver = "%s:%s" % (newvers[0], newver)
175 if (newver != oldver): 180 if (newver != oldver):
176 extra_chat = "%s (%s) already staged but upgrading to %s to satisfy %s" % (pn, oldver, newver, item) 181 extra_chat = "%s (%s) already staged but upgrading to %s to satisfy %s" % (pn, oldver, newver, item)
177 else: 182 else: