diff options
author | Zac Medico <zmedico@gentoo.org> | 2008-05-08 21:18:01 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2008-05-08 21:18:01 +0000 |
commit | 2690b6b2a53c4cc6b3d83b79edd13b7eee40fa1b (patch) | |
tree | dbc81752f15f709f460d75f0907cc617540b46f0 | |
parent | 1b5ced0bb46c4b0669c3d45209e4f97d7e372822 (diff) | |
download | portage-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.py | 24 |
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 |