Add support for FEATURES="protect-owned" which is identical to the
authorZac Medico <zmedico@gentoo.org>
Sat, 30 Aug 2008 21:43:52 +0000 (21:43 -0000)
committerZac Medico <zmedico@gentoo.org>
Sat, 30 Aug 2008 21:43:52 +0000 (21:43 -0000)
collision-protect feature except that files may be overwritten if they are
not explicitly listed in the contents of a currently installed package.
This is particularly useful on systems that have lots of orphan files that
have been left behind by older versions of portage that did not support the
unmerge-orphans feature.

The additional tolerance makes this feature more suitable than
collision-protect for being enabled by default. In order to ensure smooth
operation of protect-owned in all cases, we also have to set
COLLISION_IGNORE="/lib/modules" since files inside this directory are
never unmerge. By enabling protect-owned by default, users are protected
from problems that may occur due interactions with file collisions and the
unmerge-orphans feature which is also enabled by default.

svn path=/main/trunk/; revision=11479

cnf/make.globals
man/make.conf.5
pym/portage/dbapi/vartree.py

index f379fb1c1cf3c7a52c36e1c04e879336e52f7e1c..8b9db7a04f7e223f8c973fbc75ac07aa3975e8be 100644 (file)
@@ -38,7 +38,13 @@ FETCHCOMMAND="/usr/bin/wget -t 5 -T 60 --passive-ftp -O \"\${DISTDIR}/\${FILE}\"
 RESUMECOMMAND="/usr/bin/wget -c -t 5 -T 60 --passive-ftp -O \"\${DISTDIR}/\${FILE}\" \"\${URI}\""
 
 # Default user options
-FEATURES="distlocks parallel-fetch sandbox sfperms strict unmerge-orphans userfetch"
+FEATURES="distlocks parallel-fetch protect-owned sandbox
+          sfperms strict unmerge-orphans userfetch"
+
+# Ignore file collisions in /lib/modules since files inside this directory
+# are never unmerged, and therefore collisions must be ignored in order for
+# FEATURES=protect-owned to operate smoothly in all cases.
+COLLISION_IGNORE="/lib/modules"
 
 # Enable for global testing
 FEATURES="${FEATURES} preserve-libs"
index 6eab4b2ddd8da6c5c392e21b969a52554c90eff3..4f8d3cdf0fa47c2c969768a304e4a7ef76fde7b0 100644 (file)
@@ -82,8 +82,10 @@ Determines how long the countdown delay will be after running `emerge clean`.
 Defaults to 5 seconds.
 .TP
 \fBCOLLISION_IGNORE\fR = \fI[space delimited list of files and/or directories]\fR
-This variable allows the user to disable \fIcollision\-protect\fR for specific
-files and/or directories.
+This variable allows the user to disable \fIcollision\-protect\fR and
+\fIprotect\-owned\fR for specific files and/or directories.
+.br
+Defaults to /lib/modules.
 .TP
 \fBCONFIG_PROTECT\fR = \fI[space delimited list of files and/or directories]\fR
 All files and/or directories that are defined here will have "config file protection"
@@ -171,7 +173,7 @@ ${PORTAGE_TMPDIR}/ccache.
 .B collision\-protect
 A QA\-feature to ensure that a package doesn't overwrite files it doesn't own.
 The \fICOLLISION_IGNORE\fR variable can be used to selectively disable this
-feature.
+feature. Also see the related \fIprotect\-owned\fR feature.
 .TP
 .B digest
 Autogenerate digests for packages when running the \fBemerge\fR(1) command.  If
@@ -267,6 +269,20 @@ Fetch in the background while compiling. Run
 `tail \-f /var/log/emerge\-fetch.log` in a
 terminal to view parallel-fetch progress.
 .TP
+.B protect\-owned
+This is identical to the \fIcollision\-protect\fR feature except that files
+may be overwritten if they are not explicitly listed in the contents of a
+currently installed package. This is particularly useful on systems that
+have lots of orphan files that have been left behind by older versions
+of portage that did not support the \fIunmerge\-orphans\fR feature. Like
+\fIcollision\-protect\fR, the \fICOLLISION_IGNORE\fR variable can be used to
+selectively disable this feature. It is recommended to leave either
+\fIprotect\-owned\fR or \fIcollision\-protect\fR enabled at all times,
+since otherwise file collisions between packages may result in files being
+overwritten or uninstalled at inappropriate times.
+If \fIcollision\-protect\fR is enabled then it takes precedence over
+\fIprotect\-owned\fR. 
+.TP
 .B sandbox
 Enable sandbox\-ing when running \fBemerge\fR(1) and \fBebuild\fR(1).
 .TP
@@ -321,7 +337,7 @@ the package compiled properly.  See \fItest\fR in \fBebuild\fR(1)
 and \fIsrc_test()\fR in \fBebuild\fR(5). This feature implies the "test"
 \fBUSE\fR flag.
 .TP
-.B unmerge-orphans
+.B unmerge\-orphans
 If a file is not claimed by another package in the same slot and it is not
 protected by \fICONFIG_PROTECT\fR, unmerge it even if the modification time or
 checksum differs from the file that was originally installed.
index 8d5d33d35528484181bc1f68748b6a55c50cee36..56e08402825f4a0ce65f27c0e55b0acd58b51692 100644 (file)
@@ -2918,12 +2918,15 @@ class dblink(object):
 
                if collisions:
                        collision_protect = "collision-protect" in self.settings.features
+                       protect_owned = "protect-owned" in self.settings.features
                        msg = "This package will overwrite one or more files that" + \
                        " may belong to other packages (see list below)."
-                       if not collision_protect:
-                               msg += " Add \"collision-protect\" to FEATURES in" + \
+                       if not (collision_protect or protect_owned):
+                               msg += " Add either \"collision-protect\" or" + \
+                               " \"protect-owned\" to FEATURES in" + \
                                " make.conf if you would like the merge to abort" + \
-                               " in cases like this."
+                               " in cases like this. See the make.conf man page for" + \
+                               " more information about these features."
                        if self.settings.get("PORTAGE_QUIET") != "1":
                                msg += " You can use a command such as" + \
                                " `portageq owners / <filename>` to identify the" + \
@@ -2991,6 +2994,9 @@ class dblink(object):
                        if collision_protect:
                                msg = "Package '%s' NOT merged due to file collisions." % \
                                        self.settings.mycpv
+                       elif protect_owned and owners:
+                               msg = "Package '%s' NOT merged due to file collisions." % \
+                                       self.settings.mycpv
                        else:
                                msg = "Package '%s' merged despite file collisions." % \
                                        self.settings.mycpv
@@ -2998,7 +3004,7 @@ class dblink(object):
                                "messages for the whole content of the above message."
                        eerror(wrap(msg, 70))
 
-                       if collision_protect:
+                       if collision_protect or (protect_owned and owners):
                                return 1
 
                # The merge process may move files out of the image directory,