Handle pkg_pretend output properly
authorSebastian Luther <SebastianLuther@gmx.de>
Tue, 6 Apr 2010 16:16:08 +0000 (18:16 +0200)
committerZac Medico <zmedico@gentoo.org>
Wed, 7 Apr 2010 19:57:53 +0000 (12:57 -0700)
pym/_emerge/Scheduler.py
pym/portage/package/ebuild/doebuild.py

index bf39e6580ecc418301c582c3716a09da54d5e352..f7c644ec0ef872fc7604c35e4e665f6cf16c343a 100644 (file)
@@ -28,8 +28,8 @@ from portage.sets.base import InternalPackageSet
 from portage.util import writemsg, writemsg_level
 from portage.package.ebuild.digestcheck import digestcheck
 from portage.package.ebuild.digestgen import digestgen
+from portage.package.ebuild.prepare_build_dirs import prepare_build_dirs
 
-from _emerge.BinpkgFetcher import BinpkgFetcher
 from _emerge.BinpkgPrefetcher import BinpkgPrefetcher
 from _emerge.Blocker import Blocker
 from _emerge.BlockerDB import BlockerDB
@@ -880,23 +880,26 @@ class Scheduler(PollScheduler):
                        if "pretend" not in x.metadata.defined_phases:
                                continue
 
-                       if not shown_verifying_msg:
+                       if not shown_verifying_msg and self._background:
                                shown_verifying_msg = True
-                               self._status_msg("Running pkg_pretend")
+                               self._status_msg("Running pre-merge checks")
+
+                       if not self._background:
+                               out_str =">>> Running pre-merge checks for " + colorize("INFORM", x.cpv) + "\n"
+                               portage.util.writemsg_stdout(out_str, noiselevel=-1)
 
                        root_config = x.root_config
                        quiet_config = quiet_settings[root_config.root]
                        settings = self.pkgsettings[root_config.root]
-                       
+
                        if x.built:
                                bintree = root_config.trees["bintree"].dbapi.bintree
                                if bintree.isremote(x.cpv):
-                                       fetcher = BinpkgFetcher(background=False,
+                                       fetcher = BinpkgPrefetcher(background=self._background,
                                                logfile=self.settings.get("PORTAGE_LOG_FILE"), pkg=x, scheduler=self._sched_iface)
                                        fetcher.start()
                                        fetcher.wait()
-                                       bintree.inject(x.cpv)
-                                       
+
                                tbz2_file = bintree.getname(x.cpv)
                                ebuild_file_name = x.cpv.split("/")[1] + ".ebuild"
                                ebuild_file_contents = portage.xpak.tbz2(tbz2_file).getfile(ebuild_file_name)
@@ -907,23 +910,50 @@ class Scheduler(PollScheduler):
                                file.write(ebuild_file_contents)
                                file.close()
                                quiet_config["O"] = os.path.dirname(ebuild_path)
+                               tmpdir_orig = settings["PORTAGE_TMPDIR"]
+                               settings["PORTAGE_TMPDIR"] = tmpdir
 
-                               ret = portage.package.ebuild.doebuild.doebuild(ebuild_path, "pretend", \
+                               portage.package.ebuild.doebuild.doebuild_environment(ebuild_path, "pretend",
                                        root_config.root, settings, debug=(settings.get("PORTAGE_DEBUG", "") == 1),
-                                       mydbapi=self.trees[settings["ROOT"]]["bintree"].dbapi, tree="bintree")
-                               ret = os.EX_OK
-                               
-                               shutil.rmtree(tmpdir)
+                                       mydbapi=self.trees[settings["ROOT"]]["bintree"].dbapi, use_cache=1)
+                               prepare_build_dirs(root_config.root, settings, cleanup=0)
+                               pretend_phase = EbuildPhase(background=self._background, pkg=x, phase="pretend",
+                                       scheduler=self._sched_iface, settings=settings, tree="bintree")
+
+                               pretend_phase.start()
+                               ret = pretend_phase.wait()
+
+                               portage.elog.elog_process(x.cpv, settings)
+
+                               if ret == os.EX_OK:
+                                       shutil.rmtree(tmpdir)
+                               settings["PORTAGE_TMPDIR"] = tmpdir_orig
                        else:
                                portdb = root_config.trees["porttree"].dbapi
                                ebuild_path = portdb.findname(x.cpv)
                                if ebuild_path is None:
                                        raise AssertionError("ebuild not found for '%s'" % x.cpv)
                                quiet_config["O"] = os.path.dirname(ebuild_path)
-                       
-                               ret = portage.package.ebuild.doebuild.doebuild(ebuild_path, "pretend", \
+
+                               tmpdir = tempfile.mkdtemp()
+                               tmpdir_orig = settings["PORTAGE_TMPDIR"]
+                               settings["PORTAGE_TMPDIR"] = tmpdir
+
+                               portage.package.ebuild.doebuild.doebuild_environment(ebuild_path, "pretend",
                                        root_config.root, settings, debug=(settings.get("PORTAGE_DEBUG", "") == 1),
-                                       mydbapi=self.trees[settings["ROOT"]]["porttree"].dbapi, tree="porttree")
+                                       mydbapi=self.trees[settings["ROOT"]]["porttree"].dbapi, use_cache=1)
+                               prepare_build_dirs(root_config.root, settings, cleanup=0)
+                               pretend_phase = EbuildPhase(background=self._background, pkg=x, phase="pretend",
+                                       scheduler=self._sched_iface, settings=settings, tree="porttree")
+
+                               pretend_phase.start()
+                               ret = pretend_phase.wait()
+
+                               portage.elog.elog_process(x.cpv, settings)
+
+                               if ret == os.EX_OK:
+                                       shutil.rmtree(tmpdir)
+                               settings["PORTAGE_TMPDIR"] = tmpdir_orig
 
                        if ret != os.EX_OK:
                                failures += 1
index b64e10d48fed61d6805ea087503addd9ce589248..3121a05cf0bbd166c815d75f54c5917919cfd753 100644 (file)
@@ -522,7 +522,7 @@ def doebuild(myebuild, mydo, myroot, mysettings, debug=0, listonly=0,
                # we can temporarily override PORTAGE_TMPDIR with a random temp dir
                # so that there's no need for locking and it can be used even if the
                # user isn't in the portage group.
-               if mydo in ("info", "pretend"):
+               if mydo in ("info",):
                        tmpdir = tempfile.mkdtemp()
                        tmpdir_orig = mysettings["PORTAGE_TMPDIR"]
                        mysettings["PORTAGE_TMPDIR"] = tmpdir