diff options
author | Zac Medico <zmedico@gentoo.org> | 2008-12-07 00:20:43 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2008-12-07 00:20:43 +0000 |
commit | f37bac791acecf764df101f14c5692d2ff0a3b4f (patch) | |
tree | d8ce91dc9452d3b10d3e4ed3a28cac9ffac9aad6 | |
parent | 7b9798ac894deda537c8d255c10edfa1d294a89a (diff) | |
download | portage-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__.py | 29 |
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 |