public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] portage r9868 - in main/branches/prefix: . bin man pym/_emerge pym/portage pym/portage/dbapi
@ 2008-04-13  9:42 Fabian Groffen (grobian)
  0 siblings, 0 replies; only message in thread
From: Fabian Groffen (grobian) @ 2008-04-13  9:42 UTC (permalink / raw
  To: gentoo-commits

Author: grobian
Date: 2008-04-13 09:42:21 +0000 (Sun, 13 Apr 2008)
New Revision: 9868

Modified:
   main/branches/prefix/RELEASE-NOTES
   main/branches/prefix/bin/ebuild.sh
   main/branches/prefix/man/emerge.1
   main/branches/prefix/man/make.conf.5
   main/branches/prefix/pym/_emerge/__init__.py
   main/branches/prefix/pym/_emerge/help.py
   main/branches/prefix/pym/portage/__init__.py
   main/branches/prefix/pym/portage/dbapi/bintree.py
   main/branches/prefix/pym/portage/getbinpkg.py
Log:
   Merged from trunk 9831:9860

   | 9832    | In config.setcpv() and load_infodir(), always set known good |
   | zmedico | values for CATEGORY and PF, since corruption of these can    |
   |         | cause problems.                                              |
   
   | 9834    | Remove all calls to config.load_infodir() since it doesn't   |
   | zmedico | seem to server any purpose now that the complete environment |
   |         | is loaded from environment.bz2.                              |
   
   | 9835    | Remove unused infodir variable.                              |
   | zmedico |                                                              |
   
   | 9837    | Make doebuild() bail out early with a PermissionDenied error |
   | zmedico | if there is no write access to $PKGDIR.                      |
   
   | 9839    | When dep_check() expands new-style virtuals, use USE flags   |
   | zmedico | from aux_get calls to evaluate any conditionals that the     |
   |         | depstrings might contain. This works properly for ebuilds    |
   |         | now that aux_get() is backed by Package instances containing |
   |         | the correct USE.                                             |
   
   | 9840    | Fix the code from the previous commit so that it doesn't try |
   | zmedico | to pull USE from a portdbapi instance (like when called by   |
   |         | repoman) since portdbapi doesn't return USE in aux_get()     |
   |         | calls.                                                       |
   
   | 9842    | Fix 'undefined name' errors found by pyflakes.               |
   | zmedico |                                                              |
   
   | 9844    | Make file_get() redirect FETCHCOMMAND output to stdout just  |
   | zmedico | like portage.fetch() does. Thanks to Ramereth for reporting. |
   
   | 9846    | Rename the undocumented --conistent option to                |
   | zmedico | --complete-graph and add some docs.                          |
   
   | 9848    | Add some notes for the parallel-fetch feature and the new    |
   | zmedico | --complete-graph option for emerge.                          |
   
   | 9850    | Make binarytree.prevent_collision() adjust permissions on    |
   | zmedico | directories and raise a PermissionDenied error if the        |
   |         | required directories is not writable.                        |
   
   | 9852    | Bug #215016 - When transforming of USE flags to USE_EXPAND   |
   | zmedico | variables, filter out flags that aren't considered to be     |
   |         | part of IUSE or implicit IUSE. This patch moves all IUSE     |
   |         | dependent code from config.regenerate() to config.setcpv().  |
   
   | 9854    | * Optimize config.setcpv() to return early if IUSE has not   |
   | zmedico | changed since the previous setcpv() call. * Add EBUILD_PHASE |
   |         | to the blacklisted variables list.                           |
   
   | 9856    | Bug #217444 - Send debug-print() output to stderr so that it |
   | zmedico | can't interfere with command substitution. Thanks to Fabio   |
   |         | Rossi <rossi.f@inwind.it> for this patch.                    |
   
   | 9858    | Fix the filtering for bug #215016: * fix broken comparison   |
   | zmedico | for he iuse filtering * filter out any duplicates that       |
   |         | variable may contain                                         |
   
   | 9860    | In --buildpkgonly mode, don't discard RDEPEND and PDEPEND if |
   | zmedico | --empty or --deep are enabled. The makes it possible to run  |
   |         | `emerge -eB world` and have every single package rebuilt     |
   |         | (without actually installing anything).                      |


Modified: main/branches/prefix/RELEASE-NOTES
===================================================================
--- main/branches/prefix/RELEASE-NOTES	2008-04-13 08:12:26 UTC (rev 9867)
+++ main/branches/prefix/RELEASE-NOTES	2008-04-13 09:42:21 UTC (rev 9868)
@@ -32,6 +32,23 @@
 * "world" does no longer include "system" unconditionally, but you can add
   "@system" to the worldfile to restore the old state.
 
+portage-2.1.5
+==================================
+
+* The parallel-fetch feature is now enabled by default. It is optimized
+  to avoid doing redundant checksums for previously downloaded files that have
+  the correct size. Run `tail -f /var/log/emerge-fetch.log` in a
+  terminal to view parallel-fetch progress. Add FEATURES="-parallel-fetch"
+  to /etc/make.conf if you want to disable this feature.
+
+* For extra careful dependency handling, emerge has a new --complete-graph
+  option that causes it to consider the deep dependencies of all packages from
+  the system and world sets. With this option enabled, emerge will bail out
+  if it determines that the given operation will break any dependencies of
+  the packages that have been added to the graph. Unlike the --deep option,
+  the --complete-graph option does not cause any more packages to be updated
+  than would have otherwise been updated with the option disabled.
+
 portage-2.1.4.1
 ==================================
 

Modified: main/branches/prefix/bin/ebuild.sh
===================================================================
--- main/branches/prefix/bin/ebuild.sh	2008-04-13 08:12:26 UTC (rev 9867)
+++ main/branches/prefix/bin/ebuild.sh	2008-04-13 09:42:21 UTC (rev 9868)
@@ -1124,7 +1124,7 @@
 
 		# extra user-configurable targets
 		if [ "$ECLASS_DEBUG_OUTPUT" == "on" ]; then
-			echo "debug: $1"
+			echo "debug: $1" >&2
 		elif [ -n "$ECLASS_DEBUG_OUTPUT" ]; then
 			echo "debug: $1" >> $ECLASS_DEBUG_OUTPUT
 		fi

Modified: main/branches/prefix/man/emerge.1
===================================================================
--- main/branches/prefix/man/emerge.1	2008-04-13 08:12:26 UTC (rev 9867)
+++ main/branches/prefix/man/emerge.1	2008-04-13 09:42:21 UTC (rev 9868)
@@ -248,6 +248,17 @@
 Used alongside \fB\-\-pretend\fR to cause the package name, new version, 
 and old version to be displayed in an aligned format for easy cut\-n\-paste.
 .TP
+.BR "\-\-complete\-graph"
+This causes \fBemerge\fR to consider the deep dependencies of all
+packages from the system and world sets. With this option enabled,
+\fBemerge\fR will bail out if it determines that the given operation will
+break any dependencies of the packages that have been added to the
+graph. Like the \fB\-\-deep\fR option, the \fB\-\-complete\-graph\fR
+option will significantly increase the time taken for dependency
+calculations. Note that, unlike the \fB\-\-deep\fR option, the
+\fB\-\-complete\-graph\fR option does not cause any more packages to
+be updated than would have otherwise been updated with the option disabled.
+.TP
 .BR \-\-config\-root=DIR
 Set the \fBPORTAGE_CONFIGROOT\fR environment variable.
 .TP

Modified: main/branches/prefix/man/make.conf.5
===================================================================
--- main/branches/prefix/man/make.conf.5	2008-04-13 08:12:26 UTC (rev 9867)
+++ main/branches/prefix/man/make.conf.5	2008-04-13 09:42:21 UTC (rev 9868)
@@ -242,7 +242,9 @@
 Disables xterm titlebar updates (which contains status info).
 .TP
 .B parallel\-fetch
-Fetch in the background while compiling.
+Fetch in the background while compiling. Run
+`tail \-f /var/log/emerge\-fetch.log` in a
+terminal to view parallel-fetch progress.
 .TP
 .B sandbox
 Enable sandbox\-ing when running \fBemerge\fR(1) and \fBebuild\fR(1).

Modified: main/branches/prefix/pym/_emerge/__init__.py
===================================================================
--- main/branches/prefix/pym/_emerge/__init__.py	2008-04-13 08:12:26 UTC (rev 9867)
+++ main/branches/prefix/pym/_emerge/__init__.py	2008-04-13 09:42:21 UTC (rev 9868)
@@ -203,7 +203,7 @@
 "--ask",          "--alphabetical",
 "--buildpkg",     "--buildpkgonly",
 "--changelog",    "--columns",
-"--consistent",
+"--complete-graph",
 "--debug",        "--deep",
 "--digest",
 "--emptytree",
@@ -390,7 +390,7 @@
 		myparams.discard("recurse")
 	if "--deep" in myopts:
 		myparams.add("deep")
-	if "--consistent" in myopts:
+	if "--complete-graph" in myopts:
 		myparams.add("consistent")
 	return myparams
 
@@ -2026,10 +2026,12 @@
 		for k in depkeys:
 			edepend[k] = metadata[k]
 
-		if mytype == "ebuild":
-			if "--buildpkgonly" in self.myopts:
-				edepend["RDEPEND"] = ""
-				edepend["PDEPEND"] = ""
+		if not pkg.built and \
+			"--buildpkgonly" in self.myopts and \
+			"deep" not in self.myparams and \
+			"empty" not in self.myparams:
+			edepend["RDEPEND"] = ""
+			edepend["PDEPEND"] = ""
 		bdeps_satisfied = False
 		if mytype in ("installed", "binary"):
 			if self.myopts.get("--with-bdeps", "n") == "y":
@@ -2867,7 +2869,7 @@
 		intially satisfied.
 
 		Since this method can consume enough time to disturb users, it is
-		currently only enabled by the --consistent option.
+		currently only enabled by the --complete-graph option.
 		"""
 		if "consistent" not in self.myparams:
 			# Skip this to avoid consuming enough time to disturb users.

Modified: main/branches/prefix/pym/_emerge/help.py
===================================================================
--- main/branches/prefix/pym/_emerge/help.py	2008-04-13 08:12:26 UTC (rev 9867)
+++ main/branches/prefix/pym/_emerge/help.py	2008-04-13 09:42:21 UTC (rev 9868)
@@ -17,7 +17,7 @@
 	print bold("Options:")+" "+green("-")+"["+green("abBcCdDefgGhkKlnNoOpqPsStuvV")+"] ["+green("--oneshot")+"] ["+green("--newuse")+"] ["+green("--noconfmem")+"]"
 	print      "                                          [ " + green("--color")+" < " + turquoise("y") + " | "+ turquoise("n")+" >  ] [ "+green("--columns")+" ]"
 	print      "                                     [ "+green("--reinstall ")+turquoise("changed-use")+" ] ["+green("--nospinner")+"]"
-	print "                                          [ "+green("--deep")+"  ] [" + green("--with-bdeps")+" < " + turquoise("y") + " | "+ turquoise("n")+" > ]"
+	print "                    [ "+green("--complete-graph")+"  ] [ "+green("--deep")+"  ] [" + green("--with-bdeps")+" < " + turquoise("y") + " | "+ turquoise("n")+" > ]"
 	print bold("Actions:")+" [ "+green("--clean")+" | "+green("--depclean")+" | "+green("--prune")+" | "+green("--regen")+" | "+green("--search")+" | "+green("--unmerge")+" ]"
 
 def help(myaction,myopts,havecolor=1):
@@ -220,6 +220,19 @@
 		print "              Display the pretend output in a tabular form. Versions are"
 		print "              aligned vertically."
 		print
+		print "       "+green("--complete-graph")
+		desc = "This causes emerge to consider the deep dependencies of all" + \
+			" packages from the system and world sets. With this option enabled," + \
+			" emerge will bail out if it determines that the given operation will" + \
+			" break any dependencies of the packages that have been added to the" + \
+			" graph. Like the --deep option, the --complete-graph" + \
+			" option will significantly increase the time taken for dependency" + \
+			" calculations. Note that, unlike the --deep option, the" + \
+			" --complete-graph option does not cause any more packages to" + \
+			" be updated than would have otherwise been updated with the option disabled."
+		for line in wrap(desc, desc_width):
+			print desc_indent + line
+		print
 		print "       "+green("--debug")+" ("+green("-d")+" short option)"
 		print "              Tell emerge to run the ebuild command in --debug mode. In this"
 		print "              mode, the bash build environment will run with the -x option,"

Modified: main/branches/prefix/pym/portage/__init__.py
===================================================================
--- main/branches/prefix/pym/portage/__init__.py	2008-04-13 08:12:26 UTC (rev 9867)
+++ main/branches/prefix/pym/portage/__init__.py	2008-04-13 09:42:21 UTC (rev 9868)
@@ -1014,7 +1014,6 @@
 
 		self.user_profile_dir = None
 		self.local_config = local_config
-		self._use_wildcards = False
 
 		if clone:
 			self._filter_calling_env = copy.deepcopy(clone._filter_calling_env)
@@ -1075,7 +1074,6 @@
 
 			self._accept_license = copy.deepcopy(clone._accept_license)
 			self._plicensedict = copy.deepcopy(clone._plicensedict)
-			self._use_wildcards = copy.deepcopy(clone._use_wildcards)
 		else:
 
 			def check_var_directory(varname, var):
@@ -1145,7 +1143,7 @@
 						parents = grabfile(parentsFile)
 						if not parents:
 							raise portage.exception.ParseError(
-								"Empty parent file: '%s'" % parents_file)
+								"Empty parent file: '%s'" % parentsFile)
 						for parentPath in parents:
 							parentPath = normalize_path(os.path.join(
 								currentPath, parentPath))
@@ -1304,7 +1302,8 @@
 			self.lookuplist.reverse()
 
 			# Blacklist vars that could interfere with portage internals.
-			for blacklisted in "CATEGORY", "PKGUSE", "PORTAGE_CONFIGROOT", \
+			for blacklisted in "CATEGORY", "EBUILD_PHASE", \
+				"PKGUSE", "PORTAGE_CONFIGROOT", \
 				"PORTAGE_IUSE", "PORTAGE_USE", "ROOT", "EPREFIX", "EROOT":
 				for cfg in self.lookuplist:
 					cfg.pop(blacklisted, None)
@@ -1380,11 +1379,6 @@
 					if not self.pusedict.has_key(cp):
 						self.pusedict[cp] = {}
 					self.pusedict[cp][key] = pusedict[key]
-					if not self._use_wildcards:
-						for x in pusedict[key]:
-							if x.endswith("_*"):
-								self._use_wildcards = True
-								break
 
 				#package.keywords
 				pkgdict = grabdict_package(
@@ -1837,6 +1831,13 @@
 				os.path.join(infodir, "CATEGORY"), noiselevel=-1)
 			self.configdict["pkg"].update(backup_pkg_metadata)
 			retval = 0
+
+		# Always set known good values for these variables, since
+		# corruption of these can cause problems:
+		cat, pf = catsplit(self.mycpv)
+		self.configdict["pkg"]["CATEGORY"] = cat
+		self.configdict["pkg"]["PF"] = pf
+
 		return retval
 
 	def setcpv(self, mycpv, use_cache=1, mydb=None):
@@ -1961,24 +1962,24 @@
 			has_changed = True
 		self.configdict["pkg"]["PKGUSE"] = self.puse[:] # For saving to PUSE file
 		self.configdict["pkg"]["USE"]    = self.puse[:] # this gets appended to USE
-		if iuse != self.configdict["pkg"].get("IUSE",""):
-			self.configdict["pkg"]["IUSE"] = iuse
-			test_use_changed = False
-			if "test" in self.features:
-				test_use_changed = \
-					bool(re.search(r'(^|\s)[-+]?test(\s|$)', iuse)) != \
-					("test" in self["USE"].split())
-			if self.get("EBUILD_PHASE") or \
-				self._use_wildcards or \
-				test_use_changed:
-				# Without this conditional, regenerate() would be called
-				# *every* time.
-				has_changed = True
-		# CATEGORY is essential for doebuild calls
-		self.configdict["pkg"]["CATEGORY"] = mycpv.split("/")[0]
+		previous_iuse = self.configdict["pkg"].get("IUSE")
+		self.configdict["pkg"]["IUSE"] = iuse
+
+		# Always set known good values for these variables, since
+		# corruption of these can cause problems:
+		cat, pf = catsplit(self.mycpv)
+		self.configdict["pkg"]["CATEGORY"] = cat
+		self.configdict["pkg"]["PF"] = pf
+
 		if has_changed:
 			self.reset(keeping_pkg=1,use_cache=use_cache)
 
+		# If this is not an ebuild phase and reset() has not been called,
+		# it's safe to return early here if IUSE has not changed.
+		if not (has_changed or ebuild_phase) and \
+			previous_iuse == iuse:
+			return
+
 		# Filter out USE flags that aren't part of IUSE. This has to
 		# be done for every setcpv() call since practically every
 		# package has different IUSE. Some flags are considered to
@@ -1990,7 +1991,7 @@
 		#  * Forced flags, such as those from {,package}use.force
 		#  * build and bootstrap flags used by bootstrap.sh
 
-		usesplit = self["USE"].split()
+		use = set(self["USE"].split())
 		iuse_implicit = set(x.lstrip("+-") for x in iuse.split())
 
 		# Flags derived from ARCH.
@@ -2006,7 +2007,7 @@
 		if use_expand_hidden:
 			use_expand_hidden = re.compile("^(%s)_.*" % \
 				("|".join(x.lower() for x in use_expand_hidden)))
-			for x in usesplit:
+			for x in use:
 				if use_expand_hidden.match(x):
 					iuse_implicit.add(x)
 
@@ -2032,11 +2033,95 @@
 				iuse_grep = ""
 			self.configdict["pkg"]["PORTAGE_IUSE"] = iuse_grep
 
+		ebuild_force_test = self.get("EBUILD_FORCE_TEST") == "1"
+		if ebuild_force_test and ebuild_phase and \
+			not hasattr(self, "_ebuild_force_test_msg_shown"):
+				self._ebuild_force_test_msg_shown = True
+				writemsg("Forcing test.\n", noiselevel=-1)
+		if "test" in self.features and "test" in iuse_implicit:
+			if "test" in self.usemask and not ebuild_force_test:
+				# "test" is in IUSE and USE=test is masked, so execution
+				# of src_test() probably is not reliable. Therefore,
+				# temporarily disable FEATURES=test just for this package.
+				self["FEATURES"] = " ".join(x for x in self.features \
+					if x != "test")
+				use.discard("test")
+			else:
+				use.add("test")
+				if ebuild_force_test:
+					self.usemask.discard("test")
+
+		# Use the calculated USE flags to regenerate the USE_EXPAND flags so
+		# that they are consistent.
+		use_expand = self.get("USE_EXPAND", "").split()
+		for var in use_expand:
+			prefix = var.lower() + "_"
+			prefix_len = len(prefix)
+			expand_flags = set([ x[prefix_len:] for x in use \
+				if x.startswith(prefix) ])
+			var_split = self.get(var, "").split()
+			# Preserve the order of var_split because it can matter for things
+			# like LINGUAS.
+			var_split = [ x for x in var_split if x in expand_flags ]
+			var_split.extend(expand_flags.difference(var_split))
+			has_wildcard = "*" in var_split
+			if has_wildcard:
+				var_split = [ x for x in var_split if x != "*" ]
+			has_iuse = set()
+			for x in iuse_implicit:
+				if x.startswith(prefix):
+					has_iuse.add(x[prefix_len:])
+			if has_wildcard:
+				# * means to enable everything in IUSE that's not masked
+				if has_iuse:
+					for x in iuse_implicit:
+						if x.startswith(prefix) and x not in self.usemask:
+							suffix = x[prefix_len:]
+							var_split.append(suffix)
+							use.add(x)
+				else:
+					# If there is a wildcard and no matching flags in IUSE then
+					# LINGUAS should be unset so that all .mo files are
+					# installed.
+					var_split = []
+			# Make the flags unique and filter them according to IUSE.
+			# Also, continue to preserve order for things like LINGUAS
+			# and filter any duplicates that variable may contain.
+			filtered_var_split = []
+			remaining = has_iuse.intersection(var_split)
+			for x in var_split:
+				if x in remaining:
+					remaining.remove(x)
+					filtered_var_split.append(x)
+			var_split = filtered_var_split
+
+			if var_split:
+				self[var] = " ".join(var_split)
+			else:
+				# Don't export empty USE_EXPAND vars unless the user config
+				# exports them as empty.  This is required for vars such as
+				# LINGUAS, where unset and empty have different meanings.
+				if has_wildcard:
+					# ebuild.sh will see this and unset the variable so
+					# that things like LINGUAS work properly
+					self[var] = "*"
+				else:
+					if has_iuse:
+						self[var] = ""
+					else:
+						# It's not in IUSE, so just allow the variable content
+						# to pass through if it is defined somewhere.  This
+						# allows packages that support LINGUAS but don't
+						# declare it in IUSE to use the variable outside of the
+						# USE_EXPAND context.
+						pass
+
 		# Filtered for the ebuild environment. Store this in a separate
 		# attribute since we still want to be able to see global USE
 		# settings for things like emerge --info.
+
 		self.configdict["pkg"]["PORTAGE_USE"] = " ".join(sorted(
-			x for x in usesplit if \
+			x for x in use if \
 			x in iuse_implicit))
 
 	def getMaskAtom(self, cpv, metadata):
@@ -2438,104 +2523,19 @@
 						continue
 					myflags.add(var_lower + "_" + x)
 
-		myflags.update(self.useforce)
-
-		iuse = self.configdict["pkg"].get("IUSE","").split()
-		iuse = [ x.lstrip("+-") for x in iuse ]
-		# FEATURES=test should imply USE=test
 		if not hasattr(self, "features"):
-			self.features = list(sorted(set(
-				self.configlist[-1].get("FEATURES","").split())))
+			self.features = sorted(set(
+				self.configlist[-1].get("FEATURES","").split()))
 		self["FEATURES"] = " ".join(self.features)
-		ebuild_force_test = self.get("EBUILD_FORCE_TEST") == "1"
-		if ebuild_force_test and \
-			self.get("EBUILD_PHASE") == "test" and \
-			not hasattr(self, "_ebuild_force_test_msg_shown"):
-				self._ebuild_force_test_msg_shown = True
-				writemsg("Forcing test.\n", noiselevel=-1)
-		if "test" in self.features and "test" in iuse:
-			if "test" in self.usemask and not ebuild_force_test:
-				# "test" is in IUSE and USE=test is masked, so execution
-				# of src_test() probably is not reliable. Therefore,
-				# temporarily disable FEATURES=test just for this package.
-				self["FEATURES"] = " ".join(x for x in self.features \
-					if x != "test")
-				myflags.discard("test")
-			else:
-				myflags.add("test")
-				if ebuild_force_test:
-					self.usemask.discard("test")
 
-		usesplit = [ x for x in myflags if \
-			x not in self.usemask]
-
-		# Use the calculated USE flags to regenerate the USE_EXPAND flags so
-		# that they are consistent.
-		for var in use_expand:
-			prefix = var.lower() + "_"
-			prefix_len = len(prefix)
-			expand_flags = set([ x[prefix_len:] for x in usesplit \
-				if x.startswith(prefix) ])
-			var_split = self.get(var, "").split()
-			# Preserve the order of var_split because it can matter for things
-			# like LINGUAS.
-			var_split = [ x for x in var_split if x in expand_flags ]
-			var_split.extend(expand_flags.difference(var_split))
-			has_wildcard = "*" in var_split
-			if has_wildcard:
-				var_split = [ x for x in var_split if x != "*" ]
-				self._use_wildcards = True
-			has_iuse = False
-			for x in iuse:
-				if x.startswith(prefix):
-					has_iuse = True
-					break
-			if has_wildcard:
-				# * means to enable everything in IUSE that's not masked
-				if has_iuse:
-					for x in iuse:
-						if x.startswith(prefix) and x not in self.usemask:
-							suffix = x[prefix_len:]
-							if suffix in var_split:
-								continue
-							var_split.append(suffix)
-							usesplit.append(x)
-				else:
-					# If there is a wildcard and no matching flags in IUSE then
-					# LINGUAS should be unset so that all .mo files are
-					# installed.
-					var_split = []
-			if var_split:
-				self[var] = " ".join(var_split)
-			else:
-				# Don't export empty USE_EXPAND vars unless the user config
-				# exports them as empty.  This is required for vars such as
-				# LINGUAS, where unset and empty have different meanings.
-				if has_wildcard:
-					# ebuild.sh will see this and unset the variable so
-					# that things like LINGUAS work properly
-					self[var] = "*"
-				else:
-					if has_iuse:
-						self[var] = ""
-					else:
-						# It's not in IUSE, so just allow the variable content
-						# to pass through if it is defined somewhere.  This
-						# allows packages that support LINGUAS but don't
-						# declare it in IUSE to use the variable outside of the
-						# USE_EXPAND context.
-						pass
-
+		myflags.update(self.useforce)
 		arch = self.configdict["defaults"].get("ARCH")
-		if arch and arch not in usesplit:
-			usesplit.append(arch)
+		if arch:
+			myflags.add(arch)
 
-		usesplit = [x for x in usesplit if \
-			x not in self.usemask]
+		myflags.difference_update(self.usemask)
+		self.configlist[-1]["USE"]= " ".join(sorted(myflags))
 
-		usesplit.sort()
-		self.configlist[-1]["USE"]= " ".join(usesplit)
-
 		self.already_in_regenerate = 0
 
 	def get_virts_p(self, myroot=None):
@@ -4825,12 +4825,6 @@
 			return spawn(_shell_quote(ebuild_sh_binary) + " " + mydo,
 				mysettings, debug=debug, free=1, logfile=logfile)
 		elif mydo == "setup":
-			infodir = os.path.join(
-				mysettings["PORTAGE_BUILDDIR"], "build-info")
-			if os.path.isdir(infodir):
-				"""Load USE flags for setup phase of a binary package.
-				Ideally, the environment.bz2 would be used instead."""
-				mysettings.load_infodir(infodir)
 			retval = spawn(
 				_shell_quote(ebuild_sh_binary) + " " + mydo, mysettings,
 				debug=debug, free=1, logfile=logfile)
@@ -4887,7 +4881,6 @@
 						noiselevel=-1)
 			return phase_retval
 		elif mydo in ("prerm", "postrm", "config", "info"):
-			mysettings.load_infodir(mysettings["O"])
 			retval =  spawn(
 				_shell_quote(ebuild_sh_binary) + " " + mydo,
 				mysettings, debug=debug, free=1, logfile=logfile)
@@ -5052,6 +5045,16 @@
 				actionmap[x]["dep"] = ' '.join(actionmap_deps[x])
 
 		if mydo in actionmap:
+			if mydo == "package":
+				# Make sure the package directory exists before executing
+				# this phase. This can raise PermissionDenied if
+				# the current user doesn't have write access to $PKGDIR.
+				parent_dir = os.path.join(mysettings["PKGDIR"],
+					mysettings["CATEGORY"])
+				portage.util.ensure_dirs(parent_dir)
+				if not os.access(parent_dir, os.W_OK):
+					raise portage.exception.PermissionDenied(
+						"access('%s', os.W_OK)" % parent_dir)
 			retval = spawnebuild(mydo,
 				actionmap, mysettings, debug, logfile=logfile)
 		elif mydo=="qmerge":
@@ -5400,12 +5403,21 @@
 		else:
 			a = ['||']
 		for y in pkgs:
-			depstring = " ".join(y[2].aux_get(y[0], dep_keys))
+			cpv, pv_split, db = y
+			depstring = " ".join(db.aux_get(cpv, dep_keys))
+			pkg_kwargs = kwargs.copy()
+			if isinstance(db, portdbapi):
+				# for repoman
+				pass
+			else:
+				# for emerge
+				use_split = db.aux_get(cpv, ["USE"])[0].split()
+				pkg_kwargs["myuse"] = use_split
 			if edebug:
 				print "Virtual Parent:   ", y[0]
 				print "Virtual Depstring:", depstring
 			mycheck = dep_check(depstring, mydbapi, mysettings, myroot=myroot,
-				trees=trees, **kwargs)
+				trees=trees, **pkg_kwargs)
 			if not mycheck[0]:
 				raise portage.exception.ParseError(
 					"%s: %s '%s'" % (y[0], mycheck[1], depstring))
@@ -6092,8 +6104,8 @@
 		"""Returns the complete fetch list for a given package."""
 		return self.portdb.getfetchlist(pkg_key, mysettings=self.settings,
 			all=True, mytree=self.mytree)[1]
-	def __contains__(self):
-		return pkg_key in self.keys()
+	def __contains__(self, cpv):
+		return cpv in self.keys()
 	def has_key(self, pkg_key):
 		"""Returns true if the given package exists within pkgdir."""
 		return pkg_key in self

Modified: main/branches/prefix/pym/portage/dbapi/bintree.py
===================================================================
--- main/branches/prefix/pym/portage/dbapi/bintree.py	2008-04-13 08:12:26 UTC (rev 9867)
+++ main/branches/prefix/pym/portage/dbapi/bintree.py	2008-04-13 09:42:21 UTC (rev 9868)
@@ -4,7 +4,8 @@
 
 from portage.dep import isvalidatom, isjustname, dep_getkey, match_from_list
 from portage.dbapi.virtual import fakedbapi
-from portage.exception import InvalidPackageName, InvalidAtom, PortageException
+from portage.exception import InvalidPackageName, InvalidAtom, \
+	PermissionDenied, PortageException
 from portage.output import green
 from portage.util import ensure_dirs, normalize_path, writemsg, writemsg_stdout
 from portage.versions import best, catpkgsplit, catsplit
@@ -291,6 +292,15 @@
 		${PKGDIR}/${CATEGORY}/${PF}.tbz2 so that both can coexist."""
 		if not self._all_directory:
 			return
+
+		# Copy group permissions for new directories that
+		# may have been created.
+		for path in ("All", catsplit(cpv)[0]):
+			path = os.path.join(self.pkgdir, path)
+			self._ensure_dir(path)
+			if not os.access(path, os.W_OK):
+				raise PermissionDenied("access('%s', W_OK)" % path)
+
 		full_path = self.getname(cpv)
 		if "All" == full_path.split(os.path.sep)[-2]:
 			return

Modified: main/branches/prefix/pym/portage/getbinpkg.py
===================================================================
--- main/branches/prefix/pym/portage/getbinpkg.py	2008-04-13 08:12:26 UTC (rev 9867)
+++ main/branches/prefix/pym/portage/getbinpkg.py	2008-04-13 09:42:21 UTC (rev 9868)
@@ -399,7 +399,12 @@
 	lexer = shlex.shlex(StringIO.StringIO(fcmd), posix=True)
 	lexer.whitespace_split = True
 	myfetch = [varexpand(x, mydict=variables) for x in lexer]
-	retval = spawn(myfetch, env=os.environ.copy())
+	fd_pipes= {
+		0:sys.stdin.fileno(),
+		1:sys.stdout.fileno(),
+		2:sys.stdout.fileno()
+	}
+	retval = spawn(myfetch, env=os.environ.copy(), fd_pipes=fd_pipes)
 	if retval != os.EX_OK:
 		sys.stderr.write("Fetcher exited with a failure condition.\n")
 		return 0

-- 
gentoo-commits@lists.gentoo.org mailing list



^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2008-04-13  9:42 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-04-13  9:42 [gentoo-commits] portage r9868 - in main/branches/prefix: . bin man pym/_emerge pym/portage pym/portage/dbapi Fabian Groffen (grobian)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox