summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2012-05-07 23:23:40 -0700
committerZac Medico <zmedico@gentoo.org>2012-05-07 23:23:40 -0700
commitbc18e1e7c3af475412e997489058c58942ebfdcb (patch)
tree807396453e764cfb42796aeef0b11c8d4dbb17a3
parentd448e1f1844fe1fe8b865f8f9080206b84c6f4e3 (diff)
downloadportage-bc18e1e7c3af475412e997489058c58942ebfdcb.tar.gz
portage-bc18e1e7c3af475412e997489058c58942ebfdcb.tar.bz2
portage-bc18e1e7c3af475412e997489058c58942ebfdcb.zip
COLLISION_IGNORE: support fnmatch patterns
This allows it to be combined with the COLLISION_IGNORE_UNOWNED variable from commit 33545ea18e8816addb3c54bb26a0cc788b8512e6, so only one variable is needed.
-rw-r--r--cnf/make.globals4
-rw-r--r--man/make.conf.515
-rw-r--r--pym/portage/dbapi/vartree.py23
-rw-r--r--pym/portage/package/ebuild/_config/special_env_vars.py2
4 files changed, 15 insertions, 29 deletions
diff --git a/cnf/make.globals b/cnf/make.globals
index fa76c09ee..975726ab6 100644
--- a/cnf/make.globals
+++ b/cnf/make.globals
@@ -59,12 +59,10 @@ FEATURES="assume-digests binpkg-logs distlocks ebuild-locks
# 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"
-
# Ignore file collisions for unowned *.pyo and *.pyc files, this helps during
# transition from compiling python modules in live file system to compiling
# them in src_install() function.
-COLLISION_IGNORE_UNOWNED="*.py[co]"
+COLLISION_IGNORE="/lib/modules/* *.py[co]"
# Enable preserve-libs for testing with portage versions that support it.
# This setting is commented out for portage versions that don't support it.
diff --git a/man/make.conf.5 b/man/make.conf.5
index 7b1d4c046..39c3f8e48 100644
--- a/man/make.conf.5
+++ b/man/make.conf.5
@@ -128,18 +128,13 @@ Determines how long the countdown delay will be after running
.br
Defaults to 5 seconds.
.TP
-\fBCOLLISION_IGNORE\fR = \fI[space delimited list of files and/or directories]\fR
+\fBCOLLISION_IGNORE\fR = \fI[space delimited list of shell patterns]\fR
This variable allows the user to disable \fIcollision\-protect\fR and
-\fIprotect\-owned\fR for specific files and/or directories.
+\fIprotect\-owned\fR for specific shell patterns. For backward
+compatibility, directories that are listed without a shell pattern will
+automatically have /* appended to them.
.br
-Defaults to /lib/modules.
-.TP
-\fBCOLLISION_IGNORE_UNOWNED\fR = \fI[space delimited list of shell patterns]\fR
-This variable allows the user to disable \fIcollision\-protect\fR and
-\fIprotect\-owned\fR for specific shell patterns for files that are
-not owned by any packages.
-.br
-Defaults to *.pyc and *.pyo patterns.
+Defaults to "/lib/modules/* *.py[co]".
.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"
diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py
index ee77fac4f..158fc4a02 100644
--- a/pym/portage/dbapi/vartree.py
+++ b/pym/portage/dbapi/vartree.py
@@ -3077,12 +3077,13 @@ class dblink(object):
os = _os_merge
- collision_ignore = set([normalize_path(myignore) for myignore in \
- portage.util.shlex_split(
- self.settings.get("COLLISION_IGNORE", ""))])
-
- unowned_ignore_patterns = self.settings.get(
- "COLLISION_IGNORE_UNOWNED", "").split()
+ collision_ignore = []
+ for x in portage.util.shlex_split(
+ self.settings.get("COLLISION_IGNORE", "")):
+ if os.path.isdir(os.path.join(self._eroot, x.lstrip(os.sep))):
+ x = normalize_path(x)
+ x += "/*"
+ collision_ignore.append(x)
# For collisions with preserved libraries, the current package
# will assume ownership and the libraries will be unregistered.
@@ -3185,15 +3186,7 @@ class dblink(object):
if not isowned:
f_match = full_path[len(self._eroot)-1:]
stopmerge = True
- if collision_ignore:
- if f_match in collision_ignore:
- stopmerge = False
- else:
- for myignore in collision_ignore:
- if f_match.startswith(myignore + os.path.sep):
- stopmerge = False
- break
- for pattern in unowned_ignore_patterns:
+ for pattern in collision_ignore:
if fnmatch.fnmatch(f_match, pattern):
stopmerge = False
break
diff --git a/pym/portage/package/ebuild/_config/special_env_vars.py b/pym/portage/package/ebuild/_config/special_env_vars.py
index 8eac38034..763237d85 100644
--- a/pym/portage/package/ebuild/_config/special_env_vars.py
+++ b/pym/portage/package/ebuild/_config/special_env_vars.py
@@ -134,7 +134,7 @@ environ_filter += [
# portage config variables and variables set directly by portage
environ_filter += [
"ACCEPT_CHOSTS", "ACCEPT_KEYWORDS", "ACCEPT_PROPERTIES", "AUTOCLEAN",
- "CLEAN_DELAY", "COLLISION_IGNORE", "COLLISION_IGNORE_UNOWNED",
+ "CLEAN_DELAY", "COLLISION_IGNORE",
"CONFIG_PROTECT", "CONFIG_PROTECT_MASK",
"EGENCACHE_DEFAULT_OPTS", "EMERGE_DEFAULT_OPTS",
"EMERGE_LOG_DIR",