1 |
Author: grobian |
2 |
Date: 2008-07-01 16:55:38 +0000 (Tue, 01 Jul 2008) |
3 |
New Revision: 10877 |
4 |
|
5 |
Modified: |
6 |
main/branches/prefix/pym/_emerge/__init__.py |
7 |
Log: |
8 |
Merged from trunk 10824:10833 |
9 |
|
10 |
| 10825 | Split the MergeTask._merge() method into 3 smaller methods. | |
11 |
| zmedico | The new methods are _execute_task() and _post_merge(). | |
12 |
|
13 |
| 10826 | Split out an EbuildFetcher class. | |
14 |
| zmedico | | |
15 |
|
16 |
| 10827 | Split out a BinpkgFetcher class. | |
17 |
| zmedico | | |
18 |
|
19 |
| 10828 | * Split out a BinpkgMerge class. * Fix typos in | |
20 |
| zmedico | _get_hash_key() methods. | |
21 |
|
22 |
| 10829 | Split out an EbuildMerge class. | |
23 |
| zmedico | | |
24 |
|
25 |
| 10830 | Fix typo. | |
26 |
| zmedico | | |
27 |
|
28 |
| 10831 | Split out an EbuildBuild class. | |
29 |
| zmedico | | |
30 |
|
31 |
| 10832 | * Split out an EbuildBinpkg class. * Remove unused | |
32 |
| zmedico | EbuildBuild.ldpath_mtimes attribute. | |
33 |
|
34 |
| 10833 | Split out a PackageUninstall class. | |
35 |
| zmedico | | |
36 |
|
37 |
|
38 |
Modified: main/branches/prefix/pym/_emerge/__init__.py |
39 |
=================================================================== |
40 |
--- main/branches/prefix/pym/_emerge/__init__.py 2008-07-01 16:48:46 UTC (rev 10876) |
41 |
+++ main/branches/prefix/pym/_emerge/__init__.py 2008-07-01 16:55:38 UTC (rev 10877) |
42 |
@@ -1458,6 +1458,210 @@ |
43 |
v = 0 |
44 |
self._pkg.mtime = v |
45 |
|
46 |
+class EbuildFetcher(Task): |
47 |
+ |
48 |
+ __slots__ = ("fetch_all", "pkg", "pretend", "settings") |
49 |
+ |
50 |
+ def _get_hash_key(self): |
51 |
+ hash_key = getattr(self, "_hash_key", None) |
52 |
+ if hash_key is None: |
53 |
+ self._hash_key = ("EbuildFetcher", self.pkg._get_hash_key()) |
54 |
+ return self._hash_key |
55 |
+ |
56 |
+ def execute(self): |
57 |
+ portdb = self.pkg.root_config.trees["porttree"].dbapi |
58 |
+ ebuild_path = portdb.findname(self.pkg.cpv) |
59 |
+ debug = self.settings.get("PORTAGE_DEBUG") == "1" |
60 |
+ retval = portage.doebuild(ebuild_path, "fetch", |
61 |
+ self.settings["ROOT"], self.settings, debug, |
62 |
+ self.pretend, fetchonly=1, fetchall=self.fetch_all, |
63 |
+ mydbapi=portdb, tree="porttree") |
64 |
+ return retval |
65 |
+ |
66 |
+class EbuildBuild(Task): |
67 |
+ |
68 |
+ __slots__ = ("pkg", "pretend", "settings") |
69 |
+ |
70 |
+ def _get_hash_key(self): |
71 |
+ hash_key = getattr(self, "_hash_key", None) |
72 |
+ if hash_key is None: |
73 |
+ self._hash_key = ("EbuildBuild", self.pkg._get_hash_key()) |
74 |
+ return self._hash_key |
75 |
+ |
76 |
+ def execute(self): |
77 |
+ root_config = self.pkg.root_config |
78 |
+ portdb = root_config.trees["porttree"].dbapi |
79 |
+ vartree = root_config.trees["vartree"] |
80 |
+ ebuild_path = portdb.findname(self.pkg.cpv) |
81 |
+ debug = self.settings.get("PORTAGE_DEBUG") == "1" |
82 |
+ |
83 |
+ retval = portage.doebuild(ebuild_path, "install", |
84 |
+ root_config.root, self.settings, debug, vartree=vartree, |
85 |
+ mydbapi=portdb, tree="porttree") |
86 |
+ return retval |
87 |
+ |
88 |
+class EbuildBinpkg(Task): |
89 |
+ |
90 |
+ __slots__ = ("pkg", "pretend", "settings") |
91 |
+ |
92 |
+ def _get_hash_key(self): |
93 |
+ hash_key = getattr(self, "_hash_key", None) |
94 |
+ if hash_key is None: |
95 |
+ self._hash_key = ("EbuildBinpkg", self.pkg._get_hash_key()) |
96 |
+ return self._hash_key |
97 |
+ |
98 |
+ def execute(self): |
99 |
+ pkg = self.pkg |
100 |
+ root_config = pkg.root_config |
101 |
+ portdb = root_config.trees["porttree"].dbapi |
102 |
+ bintree = root_config.trees["bintree"] |
103 |
+ ebuild_path = portdb.findname(self.pkg.cpv) |
104 |
+ settings = self.settings |
105 |
+ debug = settings.get("PORTAGE_DEBUG") == "1" |
106 |
+ |
107 |
+ bintree.prevent_collision(pkg.cpv) |
108 |
+ binpkg_tmpfile = os.path.join(bintree.pkgdir, |
109 |
+ pkg.cpv + ".tbz2." + str(os.getpid())) |
110 |
+ settings["PORTAGE_BINPKG_TMPFILE"] = binpkg_tmpfile |
111 |
+ settings.backup_changes("PORTAGE_BINPKG_TMPFILE") |
112 |
+ |
113 |
+ try: |
114 |
+ retval = portage.doebuild(ebuild_path, |
115 |
+ "package", root_config.root, |
116 |
+ settings, debug, mydbapi=portdb, |
117 |
+ tree="porttree") |
118 |
+ finally: |
119 |
+ self.settings.pop("PORTAGE_BINPKG_TMPFILE", None) |
120 |
+ |
121 |
+ if retval == os.EX_OK: |
122 |
+ bintree.inject(pkg.cpv, filename=binpkg_tmpfile) |
123 |
+ |
124 |
+ return retval |
125 |
+ |
126 |
+class EbuildMerge(Task): |
127 |
+ |
128 |
+ __slots__ = ("find_blockers", "ldpath_mtimes", |
129 |
+ "pkg", "pretend", "settings") |
130 |
+ |
131 |
+ def _get_hash_key(self): |
132 |
+ hash_key = getattr(self, "_hash_key", None) |
133 |
+ if hash_key is None: |
134 |
+ self._hash_key = ("EbuildMerge", self.pkg._get_hash_key()) |
135 |
+ return self._hash_key |
136 |
+ |
137 |
+ def execute(self): |
138 |
+ root_config = self.pkg.root_config |
139 |
+ settings = self.settings |
140 |
+ retval = portage.merge(settings["CATEGORY"], |
141 |
+ settings["PF"], settings["D"], |
142 |
+ os.path.join(settings["PORTAGE_BUILDDIR"], |
143 |
+ "build-info"), root_config.root, settings, |
144 |
+ myebuild=settings["EBUILD"], |
145 |
+ mytree="porttree", mydbapi=root_config.trees["porttree"].dbapi, |
146 |
+ vartree=root_config.trees["vartree"], |
147 |
+ prev_mtimes=self.ldpath_mtimes, |
148 |
+ blockers=self.find_blockers) |
149 |
+ return retval |
150 |
+ |
151 |
+class PackageUninstall(Task): |
152 |
+ |
153 |
+ __slots__ = ("ldpath_mtimes", "opts", "pkg", "settings") |
154 |
+ |
155 |
+ def _get_hash_key(self): |
156 |
+ hash_key = getattr(self, "_hash_key", None) |
157 |
+ if hash_key is None: |
158 |
+ self._hash_key = ("PackageUninstall", self.pkg._get_hash_key()) |
159 |
+ return self._hash_key |
160 |
+ |
161 |
+ def execute(self): |
162 |
+ try: |
163 |
+ unmerge(self.pkg.root_config, self.opts, "unmerge", |
164 |
+ [self.pkg.cpv], self.ldpath_mtimes, clean_world=0, |
165 |
+ raise_on_error=1) |
166 |
+ except UninstallFailure, e: |
167 |
+ return e.status |
168 |
+ return os.EX_OK |
169 |
+ |
170 |
+class BinpkgFetcher(Task): |
171 |
+ |
172 |
+ __slots__ = ("use_locks", "pkg", "pretend", |
173 |
+ "pkg_path", "remote") |
174 |
+ |
175 |
+ def __init__(self, **kwargs): |
176 |
+ Task.__init__(self, **kwargs) |
177 |
+ pkg = self.pkg |
178 |
+ self.pkg_path = pkg.root_config.trees["bintree"].getname(pkg.cpv) |
179 |
+ |
180 |
+ def _get_hash_key(self): |
181 |
+ hash_key = getattr(self, "_hash_key", None) |
182 |
+ if hash_key is None: |
183 |
+ self._hash_key = ("BinpkgFetcher", self.pkg._get_hash_key()) |
184 |
+ return self._hash_key |
185 |
+ |
186 |
+ def execute(self): |
187 |
+ tbz2_lock = None |
188 |
+ use_locks = self.use_locks |
189 |
+ pkg = self.pkg |
190 |
+ pretend = self.pretend |
191 |
+ bintree = pkg.root_config.trees["bintree"] |
192 |
+ pkgdir = bintree.pkgdir |
193 |
+ pkg_path = self.pkg_path |
194 |
+ rval = os.EX_OK |
195 |
+ |
196 |
+ try: |
197 |
+ try: |
198 |
+ if not pretend and use_locks and os.access(pkgdir, os.W_OK): |
199 |
+ portage.util.ensure_dirs(os.path.dirname(pkg_path)) |
200 |
+ tbz2_lock = portage.locks.lockfile(pkg_path, |
201 |
+ wantnewlockfile=1) |
202 |
+ if bintree.isremote(pkg.cpv): |
203 |
+ self.remote = True |
204 |
+ if not pretend: |
205 |
+ bintree.gettbz2(pkg.cpv) |
206 |
+ finally: |
207 |
+ if tbz2_lock is not None: |
208 |
+ portage.locks.unlockfile(tbz2_lock) |
209 |
+ except portage.exception.FileNotFound: |
210 |
+ writemsg("!!! Fetching Binary failed " + \ |
211 |
+ "for '%s'\n" % pkg.cpv, noiselevel=-1) |
212 |
+ rval = 1 |
213 |
+ except portage.exception.DigestException, e: |
214 |
+ writemsg("\n!!! Digest verification failed:\n", |
215 |
+ noiselevel=-1) |
216 |
+ writemsg("!!! %s\n" % e.value[0], |
217 |
+ noiselevel=-1) |
218 |
+ writemsg("!!! Reason: %s\n" % e.value[1], |
219 |
+ noiselevel=-1) |
220 |
+ writemsg("!!! Got: %s\n" % e.value[2], |
221 |
+ noiselevel=-1) |
222 |
+ writemsg("!!! Expected: %s\n" % e.value[3], |
223 |
+ noiselevel=-1) |
224 |
+ if not pretend: |
225 |
+ os.unlink(pkg_path) |
226 |
+ rval = 1 |
227 |
+ return rval |
228 |
+ |
229 |
+class BinpkgMerge(Task): |
230 |
+ |
231 |
+ __slots__ = ("find_blockers", "ldpath_mtimes", |
232 |
+ "pkg", "pretend", "pkg_path", "settings") |
233 |
+ |
234 |
+ def _get_hash_key(self): |
235 |
+ hash_key = getattr(self, "_hash_key", None) |
236 |
+ if hash_key is None: |
237 |
+ self._hash_key = ("BinpkgMerge", self.pkg._get_hash_key()) |
238 |
+ return self._hash_key |
239 |
+ |
240 |
+ def execute(self): |
241 |
+ root_config = self.pkg.root_config |
242 |
+ retval = portage.pkgmerge(self.pkg_path, root_config.root, |
243 |
+ self.settings, |
244 |
+ mydbapi=root_config.trees["bintree"].dbapi, |
245 |
+ vartree=root_config.trees["vartree"], |
246 |
+ prev_mtimes=self.ldpath_mtimes, |
247 |
+ blockers=self.find_blockers) |
248 |
+ return retval |
249 |
+ |
250 |
class DependencyArg(object): |
251 |
def __init__(self, arg=None, root_config=None): |
252 |
self.arg = arg |
253 |
@@ -5932,6 +6136,17 @@ |
254 |
self.curval = 0 |
255 |
self._spawned_pids = [] |
256 |
|
257 |
+ class _pkg_failure(portage.exception.PortageException): |
258 |
+ """ |
259 |
+ An instance of this class is raised by unmerge() when |
260 |
+ an uninstallation fails. |
261 |
+ """ |
262 |
+ status = 1 |
263 |
+ def __init__(self, *pargs): |
264 |
+ portage.exception.PortageException.__init__(self, pargs) |
265 |
+ if pargs: |
266 |
+ self.status = pargs[0] |
267 |
+ |
268 |
def _find_blockers(self, new_pkg): |
269 |
""" |
270 |
Returns a callable which should be called only when |
271 |
@@ -6088,8 +6303,6 @@ |
272 |
mylist = self._mergelist |
273 |
favorites = self._favorites |
274 |
mtimedb = self._mtimedb |
275 |
- from portage.elog import elog_process |
276 |
- from portage.elog.filtering import filter_mergephases |
277 |
buildpkgonly = "--buildpkgonly" in self.myopts |
278 |
failed_fetches = [] |
279 |
fetchonly = "--fetchonly" in self.myopts or \ |
280 |
@@ -6141,10 +6354,6 @@ |
281 |
del shown_verifying_msg, quiet_settings |
282 |
|
283 |
root_config = self.trees[self.target_root]["root_config"] |
284 |
- system_set = root_config.sets["system"] |
285 |
- args_set = InternalPackageSet(favorites) |
286 |
- world_set = root_config.sets["world"] |
287 |
- |
288 |
mymergelist = mylist |
289 |
myfeat = self.settings.features[:] |
290 |
bad_resume_opts = set(["--ask", "--changelog", "--skipfirst", |
291 |
@@ -6204,7 +6413,6 @@ |
292 |
if x[0] == "blocks": |
293 |
continue |
294 |
pkg_type, myroot, pkg_key, operation = x |
295 |
- pkgindex=2 |
296 |
built = pkg_type != "ebuild" |
297 |
installed = pkg_type == "installed" |
298 |
portdb = self.trees[myroot]["porttree"].dbapi |
299 |
@@ -6212,7 +6420,6 @@ |
300 |
vartree = self.trees[myroot]["vartree"] |
301 |
vardb = vartree.dbapi |
302 |
root_config = self.trees[myroot]["root_config"] |
303 |
- pkgsettings = self.pkgsettings[myroot] |
304 |
if pkg_type == "blocks": |
305 |
pass |
306 |
elif pkg_type == "ebuild": |
307 |
@@ -6224,20 +6431,54 @@ |
308 |
mydbapi = vardb |
309 |
else: |
310 |
raise AssertionError("Package type: '%s'" % pkg_type) |
311 |
- if not installed: |
312 |
+ if not x.installed: |
313 |
mergecount += 1 |
314 |
- pkg = x |
315 |
+ try: |
316 |
+ self._execute_task(bad_resume_opts, |
317 |
+ failed_fetches, |
318 |
+ mydbapi, mergecount, |
319 |
+ myfeat, mymergelist, x, xterm_titles) |
320 |
+ except self._pkg_failure, e: |
321 |
+ return e.status |
322 |
+ return self._post_merge(mtimedb, xterm_titles, failed_fetches) |
323 |
+ |
324 |
+ def _execute_task(self, bad_resume_opts, |
325 |
+ failed_fetches, mydbapi, mergecount, myfeat, |
326 |
+ mymergelist, pkg, xterm_titles): |
327 |
+ favorites = self._favorites |
328 |
+ mtimedb = self._mtimedb |
329 |
+ from portage.elog import elog_process |
330 |
+ from portage.elog.filtering import filter_mergephases |
331 |
+ pkgsettings = self.pkgsettings[pkg.root] |
332 |
+ buildpkgonly = "--buildpkgonly" in self.myopts |
333 |
+ fetch_all = "--fetch-all-uri" in self.myopts |
334 |
+ fetchonly = fetch_all or "--fetchonly" in self.myopts |
335 |
+ |
336 |
+ oneshot = "--oneshot" in self.myopts or \ |
337 |
+ "--onlydeps" in self.myopts |
338 |
+ pretend = "--pretend" in self.myopts |
339 |
+ ldpath_mtimes = mtimedb["ldpath"] |
340 |
+ xterm_titles = "notitles" not in self.settings.features |
341 |
+ |
342 |
+ x = pkg |
343 |
+ root_config = pkg.root_config |
344 |
+ system_set = root_config.sets["system"] |
345 |
+ args_set = InternalPackageSet(favorites) |
346 |
+ world_set = root_config.sets["world"] |
347 |
+ vartree = self.trees[pkg.root]["vartree"] |
348 |
+ portdb = root_config.trees["porttree"].dbapi |
349 |
+ bindb = root_config.trees["bintree"].dbapi |
350 |
+ pkg_type, myroot, pkg_key, operation = x |
351 |
+ pkgindex = 2 |
352 |
metadata = pkg.metadata |
353 |
- |
354 |
if pkg.installed: |
355 |
if not (buildpkgonly or fetchonly or pretend): |
356 |
- try: |
357 |
- unmerge(root_config, self.myopts, "unmerge", |
358 |
- [pkg.cpv], mtimedb["ldpath"], clean_world=0, |
359 |
- raise_on_error=1) |
360 |
- except UninstallFailure, e: |
361 |
- return e.status |
362 |
- continue |
363 |
+ uninstall = PackageUninstall(ldpath_mtimes=ldpath_mtimes, |
364 |
+ opts=self.myopts, pkg=pkg, settings=pkgsettings) |
365 |
+ retval = uninstall.execute() |
366 |
+ if retval != os.EX_OK: |
367 |
+ raise self._pkg_failure(retval) |
368 |
+ return |
369 |
|
370 |
if x[0]=="blocks": |
371 |
pkgindex=3 |
372 |
@@ -6263,25 +6504,17 @@ |
373 |
if x[0] in ["ebuild","blocks"]: |
374 |
if x[0] == "blocks" and "--fetchonly" not in self.myopts: |
375 |
raise Exception, "Merging a blocker" |
376 |
- elif "--fetchonly" in self.myopts or \ |
377 |
- "--fetch-all-uri" in self.myopts: |
378 |
- if "--fetch-all-uri" in self.myopts: |
379 |
- retval = portage.doebuild(y, "fetch", myroot, |
380 |
- pkgsettings, self.edebug, |
381 |
- "--pretend" in self.myopts, fetchonly=1, |
382 |
- fetchall=1, mydbapi=portdb, tree="porttree") |
383 |
- else: |
384 |
- retval = portage.doebuild(y, "fetch", myroot, |
385 |
- pkgsettings, self.edebug, |
386 |
- "--pretend" in self.myopts, fetchonly=1, |
387 |
- mydbapi=portdb, tree="porttree") |
388 |
+ elif fetchonly: |
389 |
+ fetcher = EbuildFetcher(fetch_all=fetch_all, |
390 |
+ pkg=pkg, pretend=pretend, settings=pkgsettings) |
391 |
+ retval = fetcher.execute() |
392 |
if (retval is None) or retval: |
393 |
print |
394 |
print "!!! Fetch for",y,"failed, continuing..." |
395 |
print |
396 |
failed_fetches.append(pkg_key) |
397 |
self.curval += 1 |
398 |
- continue |
399 |
+ return |
400 |
|
401 |
portage.doebuild_environment(y, "setup", myroot, |
402 |
pkgsettings, self.edebug, 1, portdb) |
403 |
@@ -6311,7 +6544,8 @@ |
404 |
pkgsettings, self.edebug, cleanup=1, |
405 |
mydbapi=portdb, tree="porttree") |
406 |
if retval != os.EX_OK: |
407 |
- return retval |
408 |
+ raise self._pkg_failure(retval) |
409 |
+ |
410 |
if "--buildpkg" in self.myopts or issyspkg: |
411 |
if issyspkg: |
412 |
print ">>> This is a system package, " + \ |
413 |
@@ -6321,19 +6555,12 @@ |
414 |
short_msg = "emerge: (%s of %s) %s Compile" % \ |
415 |
(mergecount, len(mymergelist), pkg_key) |
416 |
emergelog(xterm_titles, msg, short_msg=short_msg) |
417 |
- self.trees[myroot]["bintree"].prevent_collision(pkg_key) |
418 |
- binpkg_tmpfile = os.path.join(pkgsettings["PKGDIR"], |
419 |
- pkg_key + ".tbz2." + str(os.getpid())) |
420 |
- pkgsettings["PORTAGE_BINPKG_TMPFILE"] = binpkg_tmpfile |
421 |
- pkgsettings.backup_changes("PORTAGE_BINPKG_TMPFILE") |
422 |
- retval = portage.doebuild(y, "package", myroot, |
423 |
- pkgsettings, self.edebug, mydbapi=portdb, |
424 |
- tree="porttree") |
425 |
- del pkgsettings["PORTAGE_BINPKG_TMPFILE"] |
426 |
+ |
427 |
+ build = EbuildBinpkg(pkg=pkg, pretend=pretend, |
428 |
+ settings=pkgsettings) |
429 |
+ retval = build.execute() |
430 |
if retval != os.EX_OK: |
431 |
- return retval |
432 |
- bintree = self.trees[myroot]["bintree"] |
433 |
- bintree.inject(pkg_key, filename=binpkg_tmpfile) |
434 |
+ raise self._pkg_failure(retval) |
435 |
|
436 |
if "--buildpkgonly" not in self.myopts: |
437 |
msg = " === (%s of %s) Merging (%s::%s)" % \ |
438 |
@@ -6351,7 +6578,7 @@ |
439 |
vartree=vartree, prev_mtimes=ldpath_mtimes, |
440 |
blockers=self._find_blockers(pkg)) |
441 |
if retval != os.EX_OK: |
442 |
- return retval |
443 |
+ raise self._pkg_failure(retval) |
444 |
elif "noclean" not in pkgsettings.features: |
445 |
portage.doebuild(y, "clean", myroot, |
446 |
pkgsettings, self.edebug, mydbapi=portdb, |
447 |
@@ -6362,23 +6589,21 @@ |
448 |
short_msg = "emerge: (%s of %s) %s Compile" % \ |
449 |
(mergecount, len(mymergelist), pkg_key) |
450 |
emergelog(xterm_titles, msg, short_msg=short_msg) |
451 |
- retval = portage.doebuild(y, "install", myroot, |
452 |
- pkgsettings, self.edebug, vartree=vartree, |
453 |
- mydbapi=portdb, tree="porttree", |
454 |
- prev_mtimes=ldpath_mtimes) |
455 |
+ |
456 |
+ build = EbuildBuild(ldpath_mtimes=ldpath_mtimes, |
457 |
+ pkg=pkg, pretend=pretend, settings=pkgsettings) |
458 |
+ retval = build.execute() |
459 |
if retval != os.EX_OK: |
460 |
- return retval |
461 |
+ raise self._pkg_failure(retval) |
462 |
|
463 |
- retval = portage.merge(pkgsettings["CATEGORY"], |
464 |
- pkgsettings["PF"], pkgsettings["D"], |
465 |
- os.path.join(pkgsettings["PORTAGE_BUILDDIR"], |
466 |
- "build-info"), myroot, pkgsettings, |
467 |
- myebuild=pkgsettings["EBUILD"], |
468 |
- mytree="porttree", mydbapi=portdb, |
469 |
- vartree=vartree, prev_mtimes=ldpath_mtimes, |
470 |
- blockers=self._find_blockers(pkg)) |
471 |
+ merge = EbuildMerge( |
472 |
+ find_blockers=self._find_blockers(pkg), |
473 |
+ ldpath_mtimes=ldpath_mtimes, |
474 |
+ pkg=pkg, pretend=pretend, settings=pkgsettings) |
475 |
+ retval = merge.execute() |
476 |
+ |
477 |
if retval != os.EX_OK: |
478 |
- return retval |
479 |
+ raise self._pkg_failure(retval) |
480 |
finally: |
481 |
if builddir_lock: |
482 |
elog_process(pkg.cpv, pkgsettings, |
483 |
@@ -6401,64 +6626,38 @@ |
484 |
|
485 |
elif x[0]=="binary": |
486 |
#merge the tbz2 |
487 |
- mytbz2 = self.trees[myroot]["bintree"].getname(pkg_key) |
488 |
+ fetcher = BinpkgFetcher(pkg=pkg, pretend=pretend, |
489 |
+ use_locks=("distlocks" in pkgsettings.features)) |
490 |
+ mytbz2 = fetcher.pkg_path |
491 |
if "--getbinpkg" in self.myopts: |
492 |
- tbz2_lock = None |
493 |
- try: |
494 |
- if "distlocks" in pkgsettings.features and \ |
495 |
- os.access(pkgsettings["PKGDIR"], os.W_OK): |
496 |
- portage.util.ensure_dirs(os.path.dirname(mytbz2)) |
497 |
- tbz2_lock = portage.locks.lockfile(mytbz2, |
498 |
- wantnewlockfile=1) |
499 |
- if self.trees[myroot]["bintree"].isremote(pkg_key): |
500 |
- msg = " --- (%s of %s) Fetching Binary (%s::%s)" %\ |
501 |
- (mergecount, len(mymergelist), pkg_key, mytbz2) |
502 |
- short_msg = "emerge: (%s of %s) %s Fetch" % \ |
503 |
- (mergecount, len(mymergelist), pkg_key) |
504 |
- emergelog(xterm_titles, msg, short_msg=short_msg) |
505 |
- try: |
506 |
- self.trees[myroot]["bintree"].gettbz2(pkg_key) |
507 |
- except portage.exception.FileNotFound: |
508 |
- writemsg("!!! Fetching Binary failed " + \ |
509 |
- "for '%s'\n" % pkg_key, noiselevel=-1) |
510 |
- if not fetchonly: |
511 |
- return 1 |
512 |
- failed_fetches.append(pkg_key) |
513 |
- except portage.exception.DigestException, e: |
514 |
- writemsg("\n!!! Digest verification failed:\n", |
515 |
- noiselevel=-1) |
516 |
- writemsg("!!! %s\n" % e.value[0], |
517 |
- noiselevel=-1) |
518 |
- writemsg("!!! Reason: %s\n" % e.value[1], |
519 |
- noiselevel=-1) |
520 |
- writemsg("!!! Got: %s\n" % e.value[2], |
521 |
- noiselevel=-1) |
522 |
- writemsg("!!! Expected: %s\n" % e.value[3], |
523 |
- noiselevel=-1) |
524 |
- os.unlink(mytbz2) |
525 |
- if not fetchonly: |
526 |
- return 1 |
527 |
- failed_fetches.append(pkg_key) |
528 |
- finally: |
529 |
- if tbz2_lock: |
530 |
- portage.locks.unlockfile(tbz2_lock) |
531 |
+ retval = fetcher.execute() |
532 |
+ if fetcher.remote: |
533 |
+ msg = " --- (%s of %s) Fetching Binary (%s::%s)" %\ |
534 |
+ (mergecount, len(mymergelist), pkg_key, mytbz2) |
535 |
+ short_msg = "emerge: (%s of %s) %s Fetch" % \ |
536 |
+ (mergecount, len(mymergelist), pkg_key) |
537 |
+ emergelog(xterm_titles, msg, short_msg=short_msg) |
538 |
|
539 |
+ if retval != os.EX_OK: |
540 |
+ failed_fetches.append(pkg.cpv) |
541 |
+ if not fetchonly: |
542 |
+ raise self._pkg_failure() |
543 |
+ |
544 |
if "--fetchonly" in self.myopts or \ |
545 |
"--fetch-all-uri" in self.myopts: |
546 |
self.curval += 1 |
547 |
- continue |
548 |
+ return |
549 |
|
550 |
short_msg = "emerge: ("+str(mergecount)+" of "+str(len(mymergelist))+") "+x[pkgindex]+" Merge Binary" |
551 |
emergelog(xterm_titles, " === ("+str(mergecount)+\ |
552 |
" of "+str(len(mymergelist))+") Merging Binary ("+\ |
553 |
x[pkgindex]+"::"+mytbz2+")", short_msg=short_msg) |
554 |
- retval = portage.pkgmerge(mytbz2, x[1], pkgsettings, |
555 |
- mydbapi=bindb, |
556 |
- vartree=self.trees[myroot]["vartree"], |
557 |
- prev_mtimes=ldpath_mtimes, |
558 |
- blockers=self._find_blockers(pkg)) |
559 |
+ merge = BinpkgMerge(find_blockers=self._find_blockers(pkg), |
560 |
+ ldpath_mtimes=ldpath_mtimes, pkg=pkg, pretend=pretend, |
561 |
+ pkg_path=fetcher.pkg_path, settings=pkgsettings) |
562 |
+ retval = merge.execute() |
563 |
if retval != os.EX_OK: |
564 |
- return retval |
565 |
+ raise self._pkg_failure(retval) |
566 |
#need to check for errors |
567 |
if not buildpkgonly: |
568 |
if not (fetchonly or oneshot or pretend) and \ |
569 |
@@ -6532,6 +6731,7 @@ |
570 |
self.curval += 1 |
571 |
self._poll_child_processes() |
572 |
|
573 |
+ def _post_merge(self, mtimedb, xterm_titles, failed_fetches): |
574 |
if "--pretend" not in self.myopts: |
575 |
emergelog(xterm_titles, " *** Finished. Cleaning up...") |
576 |
|
577 |
|
578 |
-- |
579 |
gentoo-commits@l.g.o mailing list |