aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2007-10-22 05:45:58 +0000
committerZac Medico <zmedico@gentoo.org>2007-10-22 05:45:58 +0000
commit84c668f9c6e2bf708d76c94e8e19a3725ccab017 (patch)
tree024de1ff7e71e6f8297958f563576c79943e1d6a /bin/emaint
parentBug #196680 - Handle a CacheError inside mirror_cache() when (diff)
downloadportage-84c668f9c6e2bf708d76c94e8e19a3725ccab017.tar.gz
portage-84c668f9c6e2bf708d76c94e8e19a3725ccab017.tar.bz2
portage-84c668f9c6e2bf708d76c94e8e19a3725ccab017.zip
Bug #184118 - Add an emaint "cleanresume" action that deletes
any existing resume lists from the mtimedb. Thanks to Arfrever Frehtes Taifersar Arahesis for the initial patch. svn path=/main/trunk/; revision=8224
Diffstat (limited to 'bin/emaint')
-rwxr-xr-xbin/emaint51
1 files changed, 50 insertions, 1 deletions
diff --git a/bin/emaint b/bin/emaint
index 40abc9e0d..64af1f01a 100755
--- a/bin/emaint
+++ b/bin/emaint
@@ -343,6 +343,54 @@ class ProgressHandler(object):
def display(self):
raise NotImplementedError(self)
+class CleanResume(object):
+ def name():
+ return "cleanresume"
+ name = staticmethod(name)
+
+ def check(self, onProgress=None):
+ messages = []
+ mtimedb = portage.mtimedb
+ resume_keys = ("resume", "resume_backup")
+ maxval = len(resume_keys)
+ if onProgress:
+ onProgress(maxval, 0)
+ for i, k in enumerate(resume_keys):
+ try:
+ d = mtimedb.get(k)
+ if d is None:
+ continue
+ if not isinstance(d, dict):
+ messages.append("unrecognized resume list: '%s'" % k)
+ continue
+ mergelist = d.get("mergelist")
+ if mergelist is None or not hasattr(mergelist, "__len__"):
+ messages.append("unrecognized resume list: '%s'" % k)
+ continue
+ messages.append("resume list '%s' contains %d packages" % \
+ (k, len(mergelist)))
+ finally:
+ if onProgress:
+ onProgress(maxval, i+1)
+ return messages
+
+ def fix(self, onProgress=None):
+ delete_count = 0
+ mtimedb = portage.mtimedb
+ resume_keys = ("resume", "resume_backup")
+ maxval = len(resume_keys)
+ if onProgress:
+ onProgress(maxval, 0)
+ for i, k in enumerate(resume_keys):
+ try:
+ if mtimedb.pop(k, None) is not None:
+ delete_count += 1
+ finally:
+ if onProgress:
+ onProgress(maxval, i+1)
+ if delete_count:
+ mtimedb.commit()
+
def emaint_main(myargv):
# TODO: Create a system that allows external modules to be added without
@@ -351,7 +399,8 @@ def emaint_main(myargv):
"world" : WorldHandler,
"binhost":BinhostHandler,
"moveinst":MoveInstalled,
- "movebin":MoveBinary
+ "movebin":MoveBinary,
+ "cleanresume":CleanResume
}
module_names = modules.keys()