From 5ef47e4d0c334407bafc3d2c6cd8d54eb26a4d45 Mon Sep 17 00:00:00 2001 From: Fabio Erculiani Date: Wed, 26 Dec 2012 00:10:33 +0100 Subject: [PATCH] [antimatter] lock/unlock vardb while scanning --- matter/antimatter.py | 77 +++++++++++++++++++++++++------------------- 1 file changed, 44 insertions(+), 33 deletions(-) diff --git a/matter/antimatter.py b/matter/antimatter.py index bc78c40a4..486942e09 100755 --- a/matter/antimatter.py +++ b/matter/antimatter.py @@ -384,46 +384,57 @@ class AntiMatter(object): vardb, portdb = self._get_dbs() result = [] - cpv_all = vardb.cpv_all() - cpv_all.sort() - for count, package in enumerate(cpv_all): + vardb.lock() + try: + cpv_all = vardb.cpv_all() + cpv_all.sort() + for count, package in enumerate(cpv_all): - count_str = "[%s of %s]" % ( - count, len(cpv_all),) + count_str = "[%s of %s]" % ( + count, len(cpv_all),) - slot, repo = vardb.aux_get(package, ["SLOT", "repository"]) + try: + slot, repo = vardb.aux_get( + package, ["SLOT", "repository"]) + except KeyError: + # package vanished, can still + # happen even if locked? + continue - atom = portage.dep.Atom( - "=%s:%s::%s" % (package, slot, repo), - allow_wildcard=True, - allow_repo=True) + atom = portage.dep.Atom( + "=%s:%s::%s" % (package, slot, repo), + allow_wildcard=True, + allow_repo=True) - if self._nsargs.verbose: - print_warning("%s :: %s" % (count_str, atom), - back=True) - - key_slot = "%s:%s" % (atom.cp, atom.slot) - - best_visible = portage.best(portdb.match(key_slot)) - - if not best_visible: - # dropped upstream - pkg = AntiMatterPackage( - vardb, portdb, atom, None, -1) - result.append(pkg) if self._nsargs.verbose: - print_error( - " %s no longer upstream or masked" % (key_slot,)) - continue + print_warning("%s :: %s" % (count_str, atom), + back=True) - cmp_res = portage.versions.pkgcmp( - portage.versions.pkgsplit(best_visible), - portage.versions.pkgsplit(package)) + key_slot = "%s:%s" % (atom.cp, atom.slot) + + best_visible = portage.best(portdb.match(key_slot)) + + if not best_visible: + # dropped upstream + pkg = AntiMatterPackage( + vardb, portdb, atom, None, -1) + result.append(pkg) + if self._nsargs.verbose: + print_error( + " %s no longer upstream or masked" % (key_slot,)) + continue + + cmp_res = portage.versions.pkgcmp( + portage.versions.pkgsplit(best_visible), + portage.versions.pkgsplit(package)) + + pkg = AntiMatterPackage( + vardb, portdb, atom, + best_visible, cmp_res) + result.append(pkg) + finally: + vardb.unlock() - pkg = AntiMatterPackage( - vardb, portdb, atom, - best_visible, cmp_res) - result.append(pkg) if cpv_all and self._nsargs.verbose: print_generic("")