Bug #264291 - Fix inappropriate build dir creation for emerge --fetchonly.
authorZac Medico <zmedico@gentoo.org>
Mon, 30 Mar 2009 19:46:41 +0000 (19:46 -0000)
committerZac Medico <zmedico@gentoo.org>
Mon, 30 Mar 2009 19:46:41 +0000 (19:46 -0000)
svn path=/main/trunk/; revision=13252

pym/_emerge/__init__.py
pym/portage/__init__.py

index 3facb56e696bc380856ab7e4f48d9e101896bf98..2f28b4e175fefca53d04f48a5227e0a979788efa 100644 (file)
@@ -1788,8 +1788,6 @@ class EbuildFetchonly(SlotObject):
                portdb = root_config.trees["porttree"].dbapi
                ebuild_path = portdb.findname(pkg.cpv)
                debug = settings.get("PORTAGE_DEBUG") == "1"
-               portage.prepare_build_dirs(self.pkg.root, self.settings, 0)
-
                retval = portage.doebuild(ebuild_path, "fetch",
                        self.settings["ROOT"], self.settings, debug=debug,
                        listonly=self.pretend, fetchonly=1, fetchall=self.fetch_all,
index e2328edab92f99fe296cf18bcdb3384448deb632..919b2108b3057429aa142192f81897fedd393b9c 100644 (file)
@@ -5841,6 +5841,7 @@ def doebuild(myebuild, mydo, myroot, mysettings, debug=0, listonly=0,
                                logfile=None, returnpid=returnpid)
                        return retval
 
+               restrict = set(mysettings.get('PORTAGE_RESTRICT', '').split())
                # get possible slot information from the deps file
                if mydo == "depend":
                        writemsg("!!! DEBUG: dbkey: %s\n" % str(dbkey), 2)
@@ -5949,8 +5950,13 @@ def doebuild(myebuild, mydo, myroot, mysettings, debug=0, listonly=0,
                                mysettings["PF"], myroot, mysettings, vartree=vartree)
 
                # Build directory creation isn't required for any of these.
+               # In the fetch phase, the directory is needed only for RESTRICT=fetch
+               # in order to satisfy the sane $PWD requirement (from bug #239560)
+               # when pkg_nofetch is spawned.
                have_build_dirs = False
-               if not parallel_fetchonly and mydo not in ("digest", "help", "manifest"):
+               if not parallel_fetchonly and \
+                       mydo not in ('digest', 'help', 'manifest') and \
+                       not (mydo == 'fetch' and 'fetch' not in restrict):
                        mystatus = prepare_build_dirs(myroot, mysettings, cleanup)
                        if mystatus:
                                return mystatus