Gentoo Archives: gentoo-commits

From: "Fabian Groffen (grobian)" <grobian@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] portage r10877 - main/branches/prefix/pym/_emerge
Date: Tue, 01 Jul 2008 16:55:45
Message-Id: E1KDj8l-0006NX-SA@stork.gentoo.org
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