diff options
author | Zac Medico <zmedico@gentoo.org> | 2012-06-22 15:33:07 -0700 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2012-06-22 15:33:07 -0700 |
commit | d1a59831eb2a5205d050884c760cca1d73be8fdf (patch) | |
tree | 5f011c32c3d17615489704aad1fb41a5ae54fbf5 /pym | |
parent | e4ba8f36e6a4624f4fec61c7ce8bed0e3bd2fa01 (diff) | |
download | portage-d1a59831eb2a5205d050884c760cca1d73be8fdf.tar.gz portage-d1a59831eb2a5205d050884c760cca1d73be8fdf.tar.bz2 portage-d1a59831eb2a5205d050884c760cca1d73be8fdf.zip |
Add UNINSTALL_IGNORE variable for bug #421659.
UNINSTALL_IGNORE = [space delimited list of fnmatch patterns]
This variable prevents uninstallation of files that match
specific fnmatch(3) patterns. In order to ignore file collisions
with these files at install time, the same patterns can be
added to the COLLISION_IGNORE variable.
Diffstat (limited to 'pym')
-rw-r--r-- | pym/portage/dbapi/vartree.py | 28 | ||||
-rw-r--r-- | pym/portage/package/ebuild/_config/special_env_vars.py | 2 |
2 files changed, 16 insertions, 14 deletions
diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py index b8405d483..60bab73ba 100644 --- a/pym/portage/dbapi/vartree.py +++ b/pym/portage/dbapi/vartree.py @@ -2064,7 +2064,9 @@ class dblink(object): #process symlinks second-to-last, directories last. mydirs = set() - modprotect = os.path.join(self._eroot, "lib/modules/") + + uninstall_ignore = portage.util.shlex_split( + self.settings.get("UNINSTALL_IGNORE", "")) def unlink(file_name, lstatobj): if bsd_chflags: @@ -2171,6 +2173,18 @@ class dblink(object): if lstatobj is None: show_unmerge("---", unmerge_desc["!found"], file_type, obj) continue + + f_match = obj[len(eroot)-1:] + ignore = False + for pattern in uninstall_ignore: + if fnmatch.fnmatch(f_match, pattern): + ignore = True + break + + if ignore: + show_unmerge("---", unmerge_desc["cfgpro"], file_type, obj) + continue + # don't use EROOT, CONTENTS entries already contain EPREFIX if obj.startswith(real_root): relative_path = obj[real_root_len:] @@ -2214,18 +2228,6 @@ class dblink(object): continue elif relative_path in cfgfiledict: stale_confmem.append(relative_path) - # next line includes a tweak to protect modules from being unmerged, - # but we don't protect modules from being overwritten if they are - # upgraded. We effectively only want one half of the config protection - # functionality for /lib/modules. For portage-ng both capabilities - # should be able to be independently specified. - # TODO: For rebuilds, re-parent previous modules to the new - # installed instance (so they are not orphans). For normal - # uninstall (not rebuild/reinstall), remove the modules along - # with all other files (leave no orphans). - if obj.startswith(modprotect): - show_unmerge("---", unmerge_desc["cfgpro"], file_type, obj) - continue # Don't unlink symlinks to directories here since that can # remove /lib and /usr/lib symlinks. diff --git a/pym/portage/package/ebuild/_config/special_env_vars.py b/pym/portage/package/ebuild/_config/special_env_vars.py index 4795e88bc..a01c17714 100644 --- a/pym/portage/package/ebuild/_config/special_env_vars.py +++ b/pym/portage/package/ebuild/_config/special_env_vars.py @@ -164,7 +164,7 @@ environ_filter += [ "RESUMECOMMAND", "RESUMECOMMAND_FTP", "RESUMECOMMAND_HTTP", "RESUMECOMMAND_HTTPS", "RESUMECOMMAND_RSYNC", "RESUMECOMMAND_SFTP", - "SYNC", "USE_EXPAND_HIDDEN", "USE_ORDER", + "SYNC", "UNINSTALL_IGNORE", "USE_EXPAND_HIDDEN", "USE_ORDER", ] environ_filter = frozenset(environ_filter) |