diff options
author | Richard Purdie <richard@openedhand.com> | 2007-04-01 15:04:49 +0000 |
---|---|---|
committer | Richard Purdie <richard@openedhand.com> | 2007-04-01 15:04:49 +0000 |
commit | 7371e6323c3fb6b0545712e3cf84606644073e77 (patch) | |
tree | e08f25669ec0f0e9d11334909f3b68c0ab6aca19 /bitbake/lib/bb/providers.py | |
parent | 8b36dc217443aeeec8493d39561d2bb010336774 (diff) | |
download | poky-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.py | 47 |
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 | # | 123 | def filterProviders(providers, item, cfgData, dataCache): |
114 | # RP - build_cache_fail needs to move elsewhere | ||
115 | # | ||
116 | def 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: |