diff options
author | Zac Medico <zmedico@gentoo.org> | 2006-12-08 06:28:28 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2006-12-08 06:28:28 +0000 |
commit | 363296999e2acfddb8f47defc45d5ba4e2dfc3a1 (patch) | |
tree | 0efcbe1bc182ac56ed0d33a3c9ccc91210da2e9f | |
parent | 6f1244a648d8dd5a8b15a99ca13ce62f2a5535bc (diff) | |
download | portage-363296999e2acfddb8f47defc45d5ba4e2dfc3a1.tar.gz portage-363296999e2acfddb8f47defc45d5ba4e2dfc3a1.tar.bz2 portage-363296999e2acfddb8f47defc45d5ba4e2dfc3a1.zip |
For bug #157370, make `emerge --regen` cleanse stale cache entries.
svn path=/main/trunk/; revision=5220
-rwxr-xr-x | bin/emerge | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/bin/emerge b/bin/emerge index 66030eda6..0ebac0b0c 100755 --- a/bin/emerge +++ b/bin/emerge @@ -3622,6 +3622,15 @@ def action_regen(settings, portdb): pass sys.stdout.flush() mynodes = portdb.cp_all() + from cache.cache_errors import CacheError + dead_nodes = {} + for mytree in portdb.porttrees: + try: + dead_nodes[mytree] = set(portdb.auxdb[mytree].iterkeys()) + except CacheError, e: + print "\n error listing cache entries for " + \ + "'%s': %s, continuing..." % (mytree, e) + dead_nodes = None for x in mynodes: mymatches = portdb.xmatch("match-all",x) portage.writemsg_stdout("processing %s\n" % x) @@ -3633,6 +3642,18 @@ def action_regen(settings, portdb): raise except Exception, e: print "\n error processing %(cpv)s, continuing... (%(e)s)" % {"cpv":y,"e":str(e)} + if dead_nodes: + for mytree in portdb.porttrees: + if portdb.findname2(y, mytree=mytree)[0]: + dead_nodes[mytree].discard(y) + if dead_nodes: + for mytree, nodes in dead_nodes.iteritems(): + auxdb = portdb.auxdb[mytree] + for y in nodes: + try: + del auxdb[y] + except KeyError, CacheError: + pass print "done!" def action_config(settings, trees, myopts, myfiles): |