From: Fabian Groffen Date: Tue, 6 Feb 2007 21:30:50 +0000 (-0000) Subject: Merged from trunk -r5896 -r5904 X-Git-Url: http://git.tremily.us/gitweb.cgi?a=commitdiff_plain;h=26a19f480b6109bdfa8b97a743d0d08e431965da;p=portage.git Merged from trunk -r5896 -r5904 For bug #165382, show a helpful message if an exception is raised from cpv_expand(). Check if entries contain the required hashes before writing the Manifest (genone) Make sure to fetch files if MANIFEST2_REQUIRED_HASH is missing. Document PORTAGE_WORKDIR_MODE for bug #8688. Thanks to Peter Hjalmarsson in bug #164617. svn path=/main/branches/prefix/; revision=5905 --- diff --git a/bin/emerge b/bin/emerge index 1e5b7fe61..bcbdb9323 100755 --- a/bin/emerge +++ b/bin/emerge @@ -1805,9 +1805,22 @@ class depgraph: # dep_wordreduce and dep_eval calls. try: portage.dep._dep_check_strict = False - success, atoms = portage.dep_check(depstr, - final_db, pkgsettings, myuse=myuse, - trees=dep_check_trees, myroot=myroot) + try: + success, atoms = portage.dep_check(depstr, + final_db, pkgsettings, myuse=myuse, + trees=dep_check_trees, myroot=myroot) + except Exception, e: + if isinstance(e, SystemExit): + raise + # This is helpful, for example, if a ValueError + # is thrown from cpv_expand due to multiple + # matches (this can happen if an atom lacks a + # category). + show_invalid_depstring_notice( + ("installed", myroot, pkg, "nomerge"), + depstr, str(e)) + del e + raise finally: portage.dep._dep_check_strict = True if not success: diff --git a/man/make.conf.5 b/man/make.conf.5 index 8e89cca75..168523efa 100644 --- a/man/make.conf.5 +++ b/man/make.conf.5 @@ -377,6 +377,9 @@ Defines the location of the temporary build directories. .br Defaults to /var/tmp. .TP +\fBPORTAGE_WORKDIR_MODE\fR = \fI"0700"\fR +This variable controls permissions for \fIWORKDIR\fR (see \fBebuild\fR(5)). +.TP \fBPORTDIR\fR = \fI[path]\fR Defines the location of your Portage tree. .br diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py index f8e65cb84..b7fa6ae47 100644 --- a/pym/portage/__init__.py +++ b/pym/portage/__init__.py @@ -2713,6 +2713,7 @@ def digestgen(myarchives, mysettings, overwrite=1, manifestonly=0, myportdb=None # exist before and after the transition. required_hash_types = set(portage.const.MANIFEST1_HASH_FUNCTIONS ).intersection(portage.const.MANIFEST2_HASH_FUNCTIONS) + required_hash_types.add(portage.const.MANIFEST2_REQUIRED_HASH) required_hash_types.add("size") dist_hashes = mf.fhashdict.get("DIST", {}) missing_hashes = set() diff --git a/pym/portage/manifest.py b/pym/portage/manifest.py index 92b5b8e85..08ac13932 100644 --- a/pym/portage/manifest.py +++ b/pym/portage/manifest.py @@ -6,7 +6,7 @@ import errno, os, sets if not hasattr(__builtins__, "set"): from sets import Set as set -import portage.exception, portage.versions, portage.const +import portage.versions, portage.const from portage.checksum import * from portage.exception import * from portage.util import write_atomic @@ -341,8 +341,15 @@ class Manifest(object): except FileNotFound: pass + def checkIntegrity(self): + for t in self.fhashdict.keys(): + for f in self.fhashdict[t]: + if not portage.const.MANIFEST2_REQUIRED_HASH in self.fhashdict[t][f].keys(): + raise MissingParameter("Missing %s checksum: %s %s" % (portage.const.MANIFEST2_REQUIRED_HASH, t, f)) + def write(self, sign=False, force=False): """ Write Manifest instance to disk, optionally signing it """ + self.checkIntegrity() try: if self.compat: self._writeDigests() @@ -478,7 +485,8 @@ class Manifest(object): (assumeDistHashesAlways and mystat is None) or \ (assumeDistHashesAlways and mystat is not None and \ len(distfilehashes[f]) == len(self.hashes) and \ - distfilehashes[f]["size"] == mystat.st_size)): + distfilehashes[f]["size"] == mystat.st_size)) and \ + portage.const.MANIFEST2_REQUIRED_HASH in distfilehashes[f].keys(): self.fhashdict["DIST"][f] = distfilehashes[f] else: try: