summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2008-05-08 21:18:01 +0000
committerZac Medico <zmedico@gentoo.org>2008-05-08 21:18:01 +0000
commit2690b6b2a53c4cc6b3d83b79edd13b7eee40fa1b (patch)
treedbc81752f15f709f460d75f0907cc617540b46f0
parent1b5ced0bb46c4b0669c3d45209e4f97d7e372822 (diff)
downloadportage-2690b6b2a53c4cc6b3d83b79edd13b7eee40fa1b.tar.gz
portage-2690b6b2a53c4cc6b3d83b79edd13b7eee40fa1b.tar.bz2
portage-2690b6b2a53c4cc6b3d83b79edd13b7eee40fa1b.zip
Make some confmem behavior modifications in order to try and make it
less confusing for people who have forgotten about the --noconfmem option or are completely unaware of it. Thanks to Joe Peterson <lavajoe@gentoo.org> for suggesting these: * Always behave like --noconfmem is enabled for downgrades. * Purge confmem entries when a package is unmerged rather than replaced. svn path=/main/trunk/; revision=10250
-rw-r--r--pym/portage/dbapi/vartree.py24
1 files changed, 23 insertions, 1 deletions
diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py
index abc7916c8..e04f861b5 100644
--- a/pym/portage/dbapi/vartree.py
+++ b/pym/portage/dbapi/vartree.py
@@ -1403,7 +1403,11 @@ class dblink(object):
vartree=self.vartree))
dest_root = normalize_path(self.vartree.root).rstrip(os.path.sep) + \
os.path.sep
- dest_root_len = len(dest_root)
+ dest_root_len = len(dest_root) - 1
+
+ conf_mem_file = os.path.join(dest_root, CONFIG_MEMORY_FILE)
+ cfgfiledict = grabdict(conf_mem_file)
+ stale_confmem = []
unmerge_orphans = "unmerge-orphans" in self.settings.features
@@ -1468,6 +1472,9 @@ class dblink(object):
continue
if obj.startswith(dest_root):
relative_path = obj[dest_root_len:]
+ if not others_in_slot and \
+ relative_path in cfgfiledict:
+ stale_confmem.append(relative_path)
is_owned = False
for dblnk in others_in_slot:
if dblnk.isowner(relative_path, dest_root):
@@ -1592,6 +1599,12 @@ class dblink(object):
show_unmerge("---", "!empty", "dir", obj)
del e
+ # Remove stale entries from config memory.
+ if stale_confmem:
+ for filename in stale_confmem:
+ del cfgfiledict[filename]
+ writedict(cfgfiledict, conf_mem_file)
+
#remove self from vartree database so that our own virtual gets zapped if we're the last node
self.vartree.zap(self.mycpv)
@@ -2206,6 +2219,15 @@ class dblink(object):
else:
cfgfiledict["IGNORE"]=0
+ # Always behave like --noconfmem is enabled for downgrades
+ # so that people who don't know about this option are less
+ # likely to get confused when doing upgrade/downgrade cycles.
+ pv_split = catpkgsplit(self.mycpv)[1:]
+ for other in others_in_slot:
+ if pkgcmp(pv_split, catpkgsplit(other.mycpv)[1:]) < 0:
+ cfgfiledict["IGNORE"] = 1
+ break
+
# Don't bump mtimes on merge since some application require
# preservation of timestamps. This means that the unmerge phase must
# check to see if file belongs to an installed instance in the same