summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2008-12-07 00:20:43 +0000
committerZac Medico <zmedico@gentoo.org>2008-12-07 00:20:43 +0000
commitf37bac791acecf764df101f14c5692d2ff0a3b4f (patch)
treed8ce91dc9452d3b10d3e4ed3a28cac9ffac9aad6
parent7b9798ac894deda537c8d255c10edfa1d294a89a (diff)
downloadportage-f37bac791acecf764df101f14c5692d2ff0a3b4f.tar.gz
portage-f37bac791acecf764df101f14c5692d2ff0a3b4f.tar.bz2
portage-f37bac791acecf764df101f14c5692d2ff0a3b4f.zip
If pkg_nofetch needs to be spawned inside fetch() and it happens that
PORTAGE_BUILDDIR doesn't exist, like when called by digestgen(), use mkdtemp to create a private temporary directory so that pkg_nofetch can be spawned (directory needed to satisfy safe $PWD requirement of bug #239560). This is more user friendly since before the pkg_nofetch phase would simply be skipped in this case. Thanks to Petteri Räty <betelgeuse@g.o> for reporting. (trunk r12174) svn path=/main/branches/2.1.6/; revision=12175
-rw-r--r--pym/portage/__init__.py29
1 files changed, 29 insertions, 0 deletions
diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py
index 70f4423dd..9c2b13f0a 100644
--- a/pym/portage/__init__.py
+++ b/pym/portage/__init__.py
@@ -4121,6 +4121,33 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0, locks_in_subdir=".locks",
level=logging.ERROR, noiselevel=-1)
have_builddir = "PORTAGE_BUILDDIR" in mysettings and \
os.path.isdir(mysettings["PORTAGE_BUILDDIR"])
+
+ global_tmpdir = mysettings["PORTAGE_TMPDIR"]
+ private_tmpdir = None
+ if not parallel_fetchonly and not have_builddir:
+ # When called by digestgen(), it's normal that
+ # PORTAGE_BUILDDIR doesn't exist. It's helpful
+ # to show the pkg_nofetch output though, so go
+ # ahead and create a temporary PORTAGE_BUILDDIR.
+ # Use a temporary config instance to avoid altering
+ # the state of the one that's been passed in.
+ mysettings = config(clone=mysettings)
+ from tempfile import mkdtemp
+ try:
+ private_tmpdir = mkdtemp("", "._portage_fetch_.",
+ global_tmpdir)
+ except OSError, e:
+ if e.errno != portage.exception.PermissionDenied.errno:
+ raise
+ raise portage.exception.PermissionDenied(global_tmpdir)
+ mysettings["PORTAGE_TMPDIR"] = private_tmpdir
+ mysettings.backup_changes("PORTAGE_TMPDIR")
+ debug = mysettings.get("PORTAGE_DEBUG") == "1"
+ portage.doebuild_environment(mysettings["EBUILD"], "fetch",
+ mysettings["ROOT"], mysettings, debug, 1, None)
+ prepare_build_dirs(mysettings["ROOT"], mysettings, 0)
+ have_builddir = True
+
if not parallel_fetchonly and have_builddir:
# To spawn pkg_nofetch requires PORTAGE_BUILDDIR for
# ensuring sane $PWD (bug #239560) and storing elog
@@ -4145,6 +4172,8 @@ def fetch(myuris, mysettings, listonly=0, fetchonly=0, locks_in_subdir=".locks",
mysettings.pop("EBUILD_PHASE", None)
else:
mysettings["EBUILD_PHASE"] = ebuild_phase
+ if private_tmpdir is not None:
+ shutil.rmtree(private_tmpdir)
elif restrict_fetch:
pass