summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKrzysztof Pawlik <nelchael@gentoo.org>2012-05-04 23:47:27 -0700
committerZac Medico <zmedico@gentoo.org>2012-05-04 23:47:27 -0700
commit33545ea18e8816addb3c54bb26a0cc788b8512e6 (patch)
treed0cc3616908e23a43884af9b3f1d5a812b42d67a
parentcomposite_db._visible: fix AttributeError (diff)
downloadportage-33545ea18e8816addb3c54bb26a0cc788b8512e6.tar.gz
portage-33545ea18e8816addb3c54bb26a0cc788b8512e6.tar.bz2
portage-33545ea18e8816addb3c54bb26a0cc788b8512e6.zip
Support COLLISION_IGNORE_UNOWNED="*.pyc *.pyo"
This will fix bug #410691.
-rw-r--r--cnf/make.globals5
-rw-r--r--man/make.conf.57
-rw-r--r--pym/portage/dbapi/vartree.py8
-rw-r--r--pym/portage/package/ebuild/_config/special_env_vars.py5
4 files changed, 23 insertions, 2 deletions
diff --git a/cnf/make.globals b/cnf/make.globals
index 0f6f54165..5f536c33a 100644
--- a/cnf/make.globals
+++ b/cnf/make.globals
@@ -61,6 +61,11 @@ FEATURES="assume-digests binpkg-logs distlocks ebuild-locks
# 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="*.pyc *.pyo"
+
# Enable preserve-libs for testing with portage versions that support it.
# This setting is commented out for portage versions that don't support it.
FEATURES="${FEATURES} preserve-libs"
diff --git a/man/make.conf.5 b/man/make.conf.5
index e8777c840..7b1d4c046 100644
--- a/man/make.conf.5
+++ b/man/make.conf.5
@@ -134,6 +134,13 @@ This variable allows the user to disable \fIcollision\-protect\fR and
.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.
+.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"
enabled for them. See the \fBCONFIGURATION FILES\fR section
diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py
index ec9f87c35..71b5d80e7 100644
--- a/pym/portage/dbapi/vartree.py
+++ b/pym/portage/dbapi/vartree.py
@@ -63,6 +63,7 @@ from _emerge.PollScheduler import PollScheduler
from _emerge.MiscFunctionsProcess import MiscFunctionsProcess
import errno
+import fnmatch
import gc
import grp
import io
@@ -3080,6 +3081,9 @@ class dblink(object):
portage.util.shlex_split(
self.settings.get("COLLISION_IGNORE", ""))])
+ unowned_ignore_patterns = self.settings.get(
+ "COLLISION_IGNORE_UNOWNED", "").split()
+
# For collisions with preserved libraries, the current package
# will assume ownership and the libraries will be unregistered.
if self.vartree.dbapi._plib_registry is None:
@@ -3188,6 +3192,10 @@ class dblink(object):
if f.startswith(myignore + os.path.sep):
stopmerge = False
break
+ for pattern in unowned_ignore_patterns:
+ if fnmatch.fnmatch(f, pattern):
+ stopmerge = False
+ break
if stopmerge:
collisions.append(f)
return collisions, symlink_collisions, plib_collisions
diff --git a/pym/portage/package/ebuild/_config/special_env_vars.py b/pym/portage/package/ebuild/_config/special_env_vars.py
index 132f8ebd8..8eac38034 100644
--- a/pym/portage/package/ebuild/_config/special_env_vars.py
+++ b/pym/portage/package/ebuild/_config/special_env_vars.py
@@ -134,8 +134,9 @@ environ_filter += [
# portage config variables and variables set directly by portage
environ_filter += [
"ACCEPT_CHOSTS", "ACCEPT_KEYWORDS", "ACCEPT_PROPERTIES", "AUTOCLEAN",
- "CLEAN_DELAY", "COLLISION_IGNORE", "CONFIG_PROTECT",
- "CONFIG_PROTECT_MASK", "EGENCACHE_DEFAULT_OPTS", "EMERGE_DEFAULT_OPTS",
+ "CLEAN_DELAY", "COLLISION_IGNORE", "COLLISION_IGNORE_UNOWNED",
+ "CONFIG_PROTECT", "CONFIG_PROTECT_MASK",
+ "EGENCACHE_DEFAULT_OPTS", "EMERGE_DEFAULT_OPTS",
"EMERGE_LOG_DIR",
"EMERGE_WARNING_DELAY",
"FETCHCOMMAND", "FETCHCOMMAND_FTP",