From: Zac Medico <zmedico@gentoo.org>
Date: Sat, 18 Sep 2010 09:28:55 +0000 (-0700)
Subject: Bug #337826 - Fix spawn_nofetch() to create the private
X-Git-Tag: v2.2_rc84~13
X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=fd309031cea3bab8d024737375501f2df9c3c2bf;p=portage.git

Bug #337826 - Fix spawn_nofetch() to create the private
PORTAGE_TMPDIR before calling doebuild_environment().
---

diff --git a/pym/portage/package/ebuild/_spawn_nofetch.py b/pym/portage/package/ebuild/_spawn_nofetch.py
index b68c94a54..175d88bd1 100644
--- a/pym/portage/package/ebuild/_spawn_nofetch.py
+++ b/pym/portage/package/ebuild/_spawn_nofetch.py
@@ -45,19 +45,9 @@ def spawn_nofetch(portdb, ebuild_path, settings=None):
 	if 'PORTAGE_PARALLEL_FETCHONLY' in settings:
 		return
 
-	doebuild_environment(ebuild_path, 'nofetch',
-		settings=settings, db=portdb)
-	restrict = settings['PORTAGE_RESTRICT'].split()
-	defined_phases = settings['DEFINED_PHASES'].split()
-	if not defined_phases:
-		# When DEFINED_PHASES is undefined, assume all
-		# phases are defined.
-		defined_phases = EBUILD_PHASES
-
-	if 'fetch' not in restrict and \
-		'nofetch' not in defined_phases:
-		return
-
+	# We must create our private PORTAGE_TMPDIR before calling
+	# doebuild_environment(), since lots of variables such
+	# as PORTAGE_BUILDDIR refer to paths inside PORTAGE_TMPDIR.
 	portage_tmpdir = settings.get('PORTAGE_TMPDIR')
 	if not portage_tmpdir or not os.access(portage_tmpdir, os.W_OK):
 		portage_tmpdir = None
@@ -66,6 +56,19 @@ def spawn_nofetch(portdb, ebuild_path, settings=None):
 	settings.backup_changes('PORTAGE_TMPDIR')
 
 	try:
+		doebuild_environment(ebuild_path, 'nofetch',
+			settings=settings, db=portdb)
+		restrict = settings['PORTAGE_RESTRICT'].split()
+		defined_phases = settings['DEFINED_PHASES'].split()
+		if not defined_phases:
+			# When DEFINED_PHASES is undefined, assume all
+			# phases are defined.
+			defined_phases = EBUILD_PHASES
+
+		if 'fetch' not in restrict and \
+			'nofetch' not in defined_phases:
+			return
+
 		prepare_build_dirs(settings=settings)
 		ebuild_phase = EbuildPhase(background=False,
 			phase='nofetch', scheduler=PollScheduler().sched_iface,