[releng] find_unblocked_orphans: Move people query to DepChecker()
Till Maas
till at fedoraproject.org
Mon Oct 6 21:13:15 UTC 2014
commit 369bfcec18f452604c640fb9f238cb4ea07402f9
Author: Till Maas <opensource at till.name>
Date: Mon Oct 6 23:12:24 2014 +0200
find_unblocked_orphans: Move people query to DepChecker()
scripts/find_unblocked_orphans.py | 74 +++++++++++++++++-------------------
1 files changed, 35 insertions(+), 39 deletions(-)
---
diff --git a/scripts/find_unblocked_orphans.py b/scripts/find_unblocked_orphans.py
index cdbc02c..8fb5193 100755
--- a/scripts/find_unblocked_orphans.py
+++ b/scripts/find_unblocked_orphans.py
@@ -116,10 +116,6 @@ def write_cache(data, filename, cachedir='~/.cache'):
pickle.dump(data, pickle_file)
-people_queue = Queue()
-people_dict = get_cache("orphans-people.pickle", default={})
-
-
def get_people(package, branch=RAWHIDE_RELEASE["branch"]):
def associated(pkginfo, exclude=None):
"""
@@ -143,15 +139,6 @@ def get_people(package, branch=RAWHIDE_RELEASE["branch"]):
return people_
-def people_worker(tag):
- while True:
- package = people_queue.get()
- if package not in people_dict:
- people_ = get_people(package, tag)
- people_dict[package] = people_
- people_queue.task_done()
-
-
def setup_yum(repo=RAWHIDE_RELEASE["repo"],
source_repo=RAWHIDE_RELEASE["source_repo"]):
""" Setup YumBase with two repos
@@ -209,7 +196,6 @@ def unblocked_packages(packages, tagID=RAWHIDE_RELEASE["tag"]):
[pkg] = result
if not pkg[0]['blocked']:
package_name = pkg[0]['package_name']
- people_queue.put(package_name)
unblocked.append(package_name)
else:
print "ERROR: {pkgname}: {error}".format(
@@ -218,10 +204,16 @@ def unblocked_packages(packages, tagID=RAWHIDE_RELEASE["tag"]):
class DepChecker(object):
- def __init__(self, yumbase):
+ def __init__(self, release):
self._src_by_bin = None
self._bin_by_src = None
+ self.release = release
+ yumbase = setup_yum(repo=RELEASES[release]["repo"],
+ source_repo=RELEASES[release]["source_repo"])
self.yumbase = yumbase
+ self.people_queue = Queue()
+ self.people_cache = "orphans-people-{}.pickle".format(release)
+ self.people_dict = get_cache(self.people_cache, default={})
def create_mapping(self):
src_by_bin = {} # Dict of source pkg objects by binary package objects
@@ -327,10 +319,27 @@ class DepChecker(object):
prov)
return OrderedDict(sorted(dependent_packages.items()))
+ def people_worker(self):
+ branch = RELEASES[self.release]["branch"]
+ while True:
+ package = self.people_queue.get()
+ if package not in self.people_dict:
+ people_ = get_people(package, branch)
+ self.people_dict[package] = people_
+ self.people_queue.task_done()
+
def recursive_deps(self, packages, max_deps=20):
+ # Start threads to get information about (co)maintainers for packages
+ for i in range(0, 2):
+ people_thread = Thread(target=self.people_worker)
+ people_thread.daemon = True
+ people_thread.start()
+ # keep pylint silent
+ del i
# get a list of all rpm_pkgs that are to be removed
rpm_pkg_names = []
for name in packages:
+ self.people_queue.put(name)
# Empty list if pkg is only for a different arch
bin_pkgs = self.by_src.get(name, [])
rpm_pkg_names.extend([p.name for p in bin_pkgs])
@@ -370,7 +379,7 @@ class DepChecker(object):
).setdefault(pkg, set()).add(dep)
for srpm_name in new_srpm_names:
- people_queue.put(srpm_name)
+ self.people_queue.put(srpm_name)
ignore.extend(new_names)
if allow_more:
@@ -385,6 +394,11 @@ class DepChecker(object):
sys.stderr.write("More than {0} broken deps for package"
"'{1}', dependency check not"
" completed\n".format(max_deps, name))
+
+ sys.stderr.write("Waiting for (co)maintainer information...")
+ self.people_queue.join()
+ sys.stderr.write("done\n")
+ write_cache(self.people_dict, self.people_cache)
return dep_map
# This function was stolen from pungi
@@ -405,7 +419,7 @@ class DepChecker(object):
sys.exit(1)
-def maintainer_table(packages):
+def maintainer_table(packages, people_dict):
affected_people = {}
if with_texttable:
@@ -432,7 +446,7 @@ def maintainer_table(packages):
return table, affected_people
-def dependency_info(dep_map, affected_people):
+def dependency_info(dep_map, affected_people, people_dict):
info = ""
for package_name, subdict in dep_map.items():
if subdict:
@@ -463,12 +477,8 @@ def maintainer_info(affected_people):
def package_info(packages, release, orphans=None, failed=None):
- sys.stderr.write("Setting up yum...")
- yumbase = setup_yum(repo=RELEASES[release]["repo"],
- source_repo=RELEASES[release]["source_repo"])
- sys.stderr.write("done\n")
sys.stderr.write("Setting up dependency checker...")
- depchecker = DepChecker(yumbase)
+ depchecker = DepChecker(release)
sys.stderr.write("done\n")
info = ""
sys.stderr.write('Calculating dependencies...')
@@ -477,15 +487,10 @@ def package_info(packages, release, orphans=None, failed=None):
dep_map = depchecker.recursive_deps(packages)
sys.stderr.write('done\n')
- sys.stderr.write("Waiting for (co)maintainer information...")
- people_queue.join()
- sys.stderr.write("done\n")
- write_cache(people_dict, "orphans-people.pickle")
-
- table, affected_people = maintainer_table(packages)
+ table, affected_people = maintainer_table(packages, depchecker.people_dict)
info += table
info += "\nThe following packages require above mentioned packages:\n"
- info += dependency_info(dep_map, affected_people)
+ info += dependency_info(dep_map, affected_people, depchecker.people_dict)
info += "Affected (co)maintainers\n"
info += maintainer_info(affected_people)
@@ -538,15 +543,6 @@ def main(release="rawhide"):
orphans = orphan_packages()
sys.stderr.write('done\n')
- # Start threads to get information about (co)maintainers for packages
- for i in range(0, 2):
- people_thread = Thread(target=people_worker,
- args=(RELEASES[release]["tag"],))
- people_thread.daemon = True
- people_thread.start()
- # keep pylint silent
- del i
-
sys.stderr.write('Getting builds from koji...')
unblocked = unblocked_packages(sorted(list(set(list(orphans) + failed))))
sys.stderr.write('done\n')
More information about the rel-eng
mailing list