[releng] find_unblocked_orphans: Move people query to DepChecker()
by Till Maas
commit 369bfcec18f452604c640fb9f238cb4ea07402f9
Author: Till Maas <opensource(a)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')
9 years, 7 months
[releng] find_unblocked_orphans: Use branch not tag
by Till Maas
commit bbe195e67e9a905deb83f9410d1466959e7c2bad
Author: Till Maas <opensource(a)till.name>
Date: Mon Oct 6 23:03:48 2014 +0200
find_unblocked_orphans: Use branch not tag
scripts/find_unblocked_orphans.py | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
---
diff --git a/scripts/find_unblocked_orphans.py b/scripts/find_unblocked_orphans.py
index e22fc34..cdbc02c 100755
--- a/scripts/find_unblocked_orphans.py
+++ b/scripts/find_unblocked_orphans.py
@@ -120,7 +120,7 @@ people_queue = Queue()
people_dict = get_cache("orphans-people.pickle", default={})
-def get_people(package, branch=RAWHIDE_RELEASE["tag"]):
+def get_people(package, branch=RAWHIDE_RELEASE["branch"]):
def associated(pkginfo, exclude=None):
"""
9 years, 7 months
[releng] find_unblocked_orphans: Use not in
by Till Maas
commit 5a3c9f38eb7f301798a90144f7f5cf3bf37d6e6c
Author: Till Maas <opensource(a)till.name>
Date: Mon Oct 6 22:26:16 2014 +0200
find_unblocked_orphans: Use not in
scripts/find_unblocked_orphans.py | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
---
diff --git a/scripts/find_unblocked_orphans.py b/scripts/find_unblocked_orphans.py
index f588cb4..e22fc34 100755
--- a/scripts/find_unblocked_orphans.py
+++ b/scripts/find_unblocked_orphans.py
@@ -497,7 +497,7 @@ def package_info(packages, release, orphans=None, failed=None):
info += "orphans (depended on): " + " ".join(orphans_breaking_deps)
info += "\n"
orphans_not_breaking_deps = [o for o in orphans if
- not o in dep_map or not dep_map[o]]
+ o not in dep_map or not dep_map[o]]
info += "orphans (not depended on): " + " ".join(
orphans_not_breaking_deps)
info += "\n"
@@ -509,7 +509,7 @@ def package_info(packages, release, orphans=None, failed=None):
info += "FTBFS (depended on): " + " ".join(ftbfs_breaking_deps)
info += "\n"
ftbfs_not_breaking_deps = [o for o in failed if
- not o in dep_map or not dep_map[o]]
+ o not in dep_map or not dep_map[o]]
info += "FTBFS (not depended on): " + " ".join(
ftbfs_not_breaking_deps)
info += "\n"
9 years, 7 months
[releng] find_unblocked_orphans: Introduce DepChecker()
by Till Maas
commit ce29f0dfdd4cdc4f80a80422c8c7cd7a729bf492
Author: Till Maas <opensource(a)till.name>
Date: Mon Oct 6 22:23:39 2014 +0200
find_unblocked_orphans: Introduce DepChecker()
Make it easier to check for other releases than Rawhide.
scripts/find_unblocked_orphans.py | 375 +++++++++++++++++++------------------
1 files changed, 191 insertions(+), 184 deletions(-)
---
diff --git a/scripts/find_unblocked_orphans.py b/scripts/find_unblocked_orphans.py
index b1ee20a..f588cb4 100755
--- a/scripts/find_unblocked_orphans.py
+++ b/scripts/find_unblocked_orphans.py
@@ -30,24 +30,29 @@ try:
except ImportError:
with_texttable = False
-# Set some variables
-# Some of these could arguably be passed in as args.
-# If this is pre-branch, these repos should be rawhide; otherwise,
-# they should be branched.
-DEFAULT_REPO = 'http://kojipkgs.fedoraproject.org/mash/rawhide/i386/os'
-DEFAULT_SOURCE_REPO = \
- 'http://kojipkgs.fedoraproject.org/mash/rawhide/source/SRPMS'
-TAG = 'f21' # tag to check in koji
-
-# pre-branch, this should be master'. Post-branch, it will be something like
-# fXY
-RAWHIDE_BRANCHNAME = 'master' # pkgdb name for the devel branch
+
+RAWHIDE_RELEASE = dict(
+ repo='https://kojipkgs.fedoraproject.org/mash/rawhide/i386/os',
+ source_repo='https://kojipkgs.fedoraproject.org/mash/rawhide/source/SRPMS',
+ tag='f22',
+ branch='master')
+
+BRANCHED_RELEASE = dict(
+ repo='https://kojipkgs.fedoraproject.org/mash/branched/i386/os',
+ source_repo='https://kojipkgs.fedoraproject.org/mash/branched/source/SRPMS',
+ tag='f21',
+ branch='f21')
+
+RELEASES = {
+ "rawhide": RAWHIDE_RELEASE,
+ "branched": BRANCHED_RELEASE,
+}
# pkgdb uid for orphan
ORPHAN_UID = 'orphan'
HEADER = """The following packages are orphaned or did not build for two
-releases and will be retired when Fedora ({0}) is branched, unless someone
+releases and will be retired when Fedora ({}) is branched, unless someone
adopts them. If you know for sure that the package should be retired, please do
so now with a proper reason:
https://fedoraproject.org/wiki/How_to_remove_a_package_at_end_of_life
@@ -57,7 +62,7 @@ occur not earlier than 2014-07-08. The packages will be retired shortly before.
Note: If you received this mail directly you (co)maintain one of the affected
packages or a package that depends on one.
-""".format(TAG.upper())
+"""
FOOTER = """The script creating this output is run and developed by Fedora
Release Engineering. Please report issues at its trac instance:
@@ -115,7 +120,7 @@ people_queue = Queue()
people_dict = get_cache("orphans-people.pickle", default={})
-def get_people(package, branch=RAWHIDE_BRANCHNAME):
+def get_people(package, branch=RAWHIDE_RELEASE["tag"]):
def associated(pkginfo, exclude=None):
"""
@@ -138,16 +143,17 @@ def get_people(package, branch=RAWHIDE_BRANCHNAME):
return people_
-def people_worker():
+def people_worker(tag):
while True:
package = people_queue.get()
if package not in people_dict:
- people_ = get_people(package)
+ people_ = get_people(package, tag)
people_dict[package] = people_
people_queue.task_done()
-def setup_yum(repo=DEFAULT_REPO, source_repo=DEFAULT_SOURCE_REPO):
+def setup_yum(repo=RAWHIDE_RELEASE["repo"],
+ source_repo=RAWHIDE_RELEASE["source_repo"]):
""" Setup YumBase with two repos
This code was mostly stolen from
http://yum.baseurl.org/wiki/YumCodeSnippet/SetupArbitraryRepo
@@ -168,28 +174,6 @@ def setup_yum(repo=DEFAULT_REPO, source_repo=DEFAULT_SOURCE_REPO):
yb.arch.archlist.append('src')
return yb
-sys.stderr.write("Setting up yum...")
-yb = setup_yum()
-sys.stderr.write("done\n")
-
-
-# This function was stolen from pungi
-def SRPM(package):
- """Given a package object, get a package object for the
- corresponding source rpm. Requires yum still configured
- and a valid package object."""
- srpm = package.sourcerpm.split('.src.rpm')[0]
- (sname, sver, srel) = srpm.rsplit('-', 2)
- try:
- srpmpo = yb.pkgSack.searchNevra(name=sname,
- ver=sver,
- rel=srel,
- arch='src')[0]
- return srpmpo
- except IndexError:
- print >> sys.stderr, "Error: Cannot find a source rpm for %s" % srpm
- sys.exit(1)
-
def orphan_packages(cache_filename='orphans.pickle'):
orphans = get_cache(cache_filename, default={})
@@ -209,7 +193,7 @@ def orphan_packages(cache_filename='orphans.pickle'):
return orphans
-def unblocked_packages(packages, tagID=TAG):
+def unblocked_packages(packages, tagID=RAWHIDE_RELEASE["tag"]):
unblocked = []
kojisession = koji.ClientSession('https://koji.fedoraproject.org/kojihub')
@@ -233,21 +217,22 @@ def unblocked_packages(packages, tagID=TAG):
return unblocked
-class BinSrcMapper(object):
- def __init__(self):
+class DepChecker(object):
+ def __init__(self, yumbase):
self._src_by_bin = None
self._bin_by_src = None
+ self.yumbase = yumbase
def create_mapping(self):
src_by_bin = {} # Dict of source pkg objects by binary package objects
bin_by_src = {} # Dict of binary pkgobjects by srpm name
- all_packages = yb.pkgSack.returnPackages()
+ all_packages = self.yumbase.pkgSack.returnPackages()
# Populate the dicts
for rpm_package in all_packages:
if rpm_package.arch == 'src':
continue
- srpm = SRPM(rpm_package)
+ srpm = self.SRPM(rpm_package)
src_by_bin[rpm_package] = srpm
if srpm.name in bin_by_src:
bin_by_src[srpm.name].append(rpm_package)
@@ -269,142 +254,155 @@ class BinSrcMapper(object):
self.create_mapping()
return self._src_by_bin
-sys.stderr.write("Setting up packager mapper...")
-package_mapper = BinSrcMapper()
-sys.stderr.write("done\n")
-
+ def find_dependent_packages(self, srpmname, ignore):
+ """ Return packages depending on packages built from SRPM ``srpmname``
+ that are built from different SRPMS not specified in ``ignore``.
-def find_dependent_packages(srpmname, ignore):
- """ Return packages depending on packages built from SRPM ``srpmname``
- that are built from different SRPMS not specified in ``ignore``.
+ :param ignore: list of SRPMs of packages that will not be returned
+ as dependent packages.
+ :type ignore: list() of str()
- :param ignore: list of SRPMs of packages that will not be returned as
- dependent packages.
- :type ignore: list() of str()
-
- :returns: OrderedDict dependent_package: list of requires only provided
- by package ``srpmname``
- {dep_pkg: [prov, ...]}
- """
- # Some of this code was stolen from repoquery
- dependent_packages = {}
+ :returns: OrderedDict dependent_package: list of requires only
+ provided by package ``srpmname`` {dep_pkg: [prov, ...]}
+ """
+ # Some of this code was stolen from repoquery
+ dependent_packages = {}
- # Handle packags not found in the repo
- try:
- rpms = package_mapper.by_src[srpmname]
- except KeyError:
- # If we don't have a package in the repo, there is nothing to do
- sys.stderr.write("Package {0} not found in repo\n".format(srpmname))
- rpms = []
-
- # provides of all packages built from ``srpmname``
- provides = []
- for pkg in rpms:
- # add all the provides from the package as strings
- string_provides = [yum.misc.prco_tuple_to_string(prov)
- for prov in pkg.provides]
- provides.extend(string_provides)
-
- # add all files as provides
- # pkg.files is a dict with keys like "file" and "dir"
- # values are a list of file/dir paths
- for paths in pkg.files.itervalues():
- # sometimes paths start with "//" instead of "/"
- # normalise "//" to "/":
- # os.path.normpath("//") == "//", but
- # os.path.normpath("///") == "/"
- file_provides = [os.path.normpath('//%s' % fn)
- for fn in paths]
- provides.extend(file_provides)
-
- # Zip through the provides and find what's needed
- for prov in provides:
- # check only base provide, ignore specific versions
- # "foo = 1.fc20" -> "foo"
- base_provide = prov.split()[0]
-
- # Elide provide if also provided by another package
- for pkg in yb.pkgSack.searchProvides(base_provide):
- # FIXME: might miss broken dependencies in case the other provider
- # depends on a to-be-removed package as well
- if pkg.sourcerpm.rsplit('-', 2)[0] not in ignore:
- break
- else:
- for dependent_pkg in yb.pkgSack.searchRequires(base_provide):
- # skip if the dependent rpm package belongs to the
- # to-be-removed Fedora package
- if dependent_pkg in package_mapper.by_src[srpmname]:
- continue
-
- # skip if the dependent rpm package is also a
- # package that should be removed
- if dependent_pkg.name in ignore:
- continue
-
- # use setdefault to either create an entry for the
- # dependent package or add the required prov
- dependent_packages.setdefault(dependent_pkg, set()).add(prov)
- return OrderedDict(sorted(dependent_packages.items()))
-
-
-def recursive_deps(packages, max_deps=20):
- # get a list of all rpm_pkgs that are to be removed
- rpm_pkg_names = []
- for name in packages:
- # Empty list if pkg is only for a different arch
- bin_pkgs = package_mapper.by_src.get(name, [])
- rpm_pkg_names.extend([p.name for p in bin_pkgs])
-
- # dict for all dependent package for each to-be-removed package
- dep_map = OrderedDict()
- for name in packages:
- ignore = rpm_pkg_names
- dep_map[name] = OrderedDict()
- to_check = [name]
- allow_more = True
- seen = []
- while True:
- sys.stderr.write("to_check: {0}\n".format(repr(to_check)))
- check_next = to_check.pop()
- seen.append(check_next)
- dependent_packages = find_dependent_packages(check_next, ignore)
- if dependent_packages:
- new_names = []
- new_srpm_names = set()
- for pkg, dependencies in dependent_packages.items():
- if pkg.arch != "src":
- srpm_name = package_mapper.by_bin[pkg].name
- else:
- srpm_name = pkg.name
- if srpm_name not in to_check and \
- srpm_name not in new_names and \
- srpm_name not in seen:
- new_names.append(srpm_name)
- new_srpm_names.add(srpm_name)
-
- for dep in dependencies:
- dep_map[name].setdefault(
- srpm_name,
- OrderedDict()
- ).setdefault(pkg, set()).add(dep)
-
- for srpm_name in new_srpm_names:
- people_queue.put(srpm_name)
-
- ignore.extend(new_names)
- if allow_more:
- to_check.extend(new_names)
- dep_count = len(set(dep_map[name].keys() + to_check))
- if dep_count > max_deps:
- allow_more = False
- to_check = to_check[0:max_deps]
- if not to_check:
- break
- if not allow_more:
- sys.stderr.write("More than {0} broken deps for package"
- "'{1}', dependency check not"
- " completed\n".format(max_deps, name))
- return dep_map
+ # Handle packags not found in the repo
+ try:
+ rpms = self.by_src[srpmname]
+ except KeyError:
+ # If we don't have a package in the repo, there is nothing to do
+ sys.stderr.write("Package {0} not found in repo\n".format(srpmname))
+ rpms = []
+
+ # provides of all packages built from ``srpmname``
+ provides = []
+ for pkg in rpms:
+ # add all the provides from the package as strings
+ string_provides = [yum.misc.prco_tuple_to_string(prov)
+ for prov in pkg.provides]
+ provides.extend(string_provides)
+
+ # add all files as provides
+ # pkg.files is a dict with keys like "file" and "dir"
+ # values are a list of file/dir paths
+ for paths in pkg.files.itervalues():
+ # sometimes paths start with "//" instead of "/"
+ # normalise "//" to "/":
+ # os.path.normpath("//") == "//", but
+ # os.path.normpath("///") == "/"
+ file_provides = [os.path.normpath('//%s' % fn)
+ for fn in paths]
+ provides.extend(file_provides)
+
+ # Zip through the provides and find what's needed
+ for prov in provides:
+ # check only base provide, ignore specific versions
+ # "foo = 1.fc20" -> "foo"
+ base_provide = prov.split()[0]
+
+ # Elide provide if also provided by another package
+ for pkg in self.yumbase.pkgSack.searchProvides(base_provide):
+ # FIXME: might miss broken dependencies in case the other
+ # provider depends on a to-be-removed package as well
+ if pkg.sourcerpm.rsplit('-', 2)[0] not in ignore:
+ break
+ else:
+ for dependent_pkg in self.yumbase.pkgSack.searchRequires(
+ base_provide):
+ # skip if the dependent rpm package belongs to the
+ # to-be-removed Fedora package
+ if dependent_pkg in self.by_src[srpmname]:
+ continue
+
+ # skip if the dependent rpm package is also a
+ # package that should be removed
+ if dependent_pkg.name in ignore:
+ continue
+
+ # use setdefault to either create an entry for the
+ # dependent package or add the required prov
+ dependent_packages.setdefault(dependent_pkg, set()).add(
+ prov)
+ return OrderedDict(sorted(dependent_packages.items()))
+
+ def recursive_deps(self, packages, max_deps=20):
+ # get a list of all rpm_pkgs that are to be removed
+ rpm_pkg_names = []
+ for name in packages:
+ # 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])
+
+ # dict for all dependent package for each to-be-removed package
+ dep_map = OrderedDict()
+ for name in packages:
+ ignore = rpm_pkg_names
+ dep_map[name] = OrderedDict()
+ to_check = [name]
+ allow_more = True
+ seen = []
+ while True:
+ sys.stderr.write("to_check: {0}\n".format(repr(to_check)))
+ check_next = to_check.pop()
+ seen.append(check_next)
+ dependent_packages = self.find_dependent_packages(check_next,
+ ignore)
+ if dependent_packages:
+ new_names = []
+ new_srpm_names = set()
+ for pkg, dependencies in dependent_packages.items():
+ if pkg.arch != "src":
+ srpm_name = self.by_bin[pkg].name
+ else:
+ srpm_name = pkg.name
+ if srpm_name not in to_check and \
+ srpm_name not in new_names and \
+ srpm_name not in seen:
+ new_names.append(srpm_name)
+ new_srpm_names.add(srpm_name)
+
+ for dep in dependencies:
+ dep_map[name].setdefault(
+ srpm_name,
+ OrderedDict()
+ ).setdefault(pkg, set()).add(dep)
+
+ for srpm_name in new_srpm_names:
+ people_queue.put(srpm_name)
+
+ ignore.extend(new_names)
+ if allow_more:
+ to_check.extend(new_names)
+ dep_count = len(set(dep_map[name].keys() + to_check))
+ if dep_count > max_deps:
+ allow_more = False
+ to_check = to_check[0:max_deps]
+ if not to_check:
+ break
+ if not allow_more:
+ sys.stderr.write("More than {0} broken deps for package"
+ "'{1}', dependency check not"
+ " completed\n".format(max_deps, name))
+ return dep_map
+
+ # This function was stolen from pungi
+ def SRPM(self, package):
+ """Given a package object, get a package object for the
+ corresponding source rpm. Requires yum still configured
+ and a valid package object."""
+ srpm = package.sourcerpm.split('.src.rpm')[0]
+ (sname, sver, srel) = srpm.rsplit('-', 2)
+ try:
+ srpmpo = self.yumbase.pkgSack.searchNevra(name=sname,
+ ver=sver,
+ rel=srel,
+ arch='src')[0]
+ return srpmpo
+ except IndexError:
+ print >> sys.stderr, "Error: Cannot find a source rpm for %s" % srpm
+ sys.exit(1)
def maintainer_table(packages):
@@ -464,12 +462,19 @@ def maintainer_info(affected_people):
return info
-def package_info(packages, orphans=None, failed=None):
+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)
+ sys.stderr.write("done\n")
info = ""
sys.stderr.write('Calculating dependencies...')
# Create yum object and depsolve out if requested.
# TODO: add app args to either depsolve or not
- dep_map = recursive_deps(packages)
+ dep_map = depchecker.recursive_deps(packages)
sys.stderr.write('done\n')
sys.stderr.write("Waiting for (co)maintainer information...")
@@ -515,7 +520,7 @@ def package_info(packages, orphans=None, failed=None):
return info, addresses
-def main():
+def main(release="rawhide"):
parser = argparse.ArgumentParser()
parser.add_argument("--skip-orphans", dest="skip_orphans",
help="Do not look for orphans",
@@ -535,7 +540,8 @@ def main():
# Start threads to get information about (co)maintainers for packages
for i in range(0, 2):
- people_thread = Thread(target=people_worker)
+ people_thread = Thread(target=people_worker,
+ args=(RELEASES[release]["tag"],))
people_thread.daemon = True
people_thread.start()
# keep pylint silent
@@ -545,8 +551,9 @@ def main():
unblocked = unblocked_packages(sorted(list(set(list(orphans) + failed))))
sys.stderr.write('done\n')
- print HEADER
- info, addresses = package_info(unblocked, orphans=orphans, failed=failed)
+ print HEADER.format(RELEASES[release]["tag"].upper())
+ info, addresses = package_info(unblocked, release, orphans=orphans,
+ failed=failed)
print info
print FOOTER
9 years, 7 months
Fedora Release Engineering meeting summary for 2014-10-06
by Dennis Gilmore
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
======================================
#fedora-meeting-1: RELENG (2014-10-06)
======================================
Meeting started by dgilmore at 15:32:33 UTC. The full logs are available
at
http://meetbot.fedoraproject.org/fedora-meeting-1/2014-10-06/releng.2014-...
.
Meeting summary
- ---------------
* init process (dgilmore, 15:32:44)
* #6014 multiple builds in primary koji are lackign arm buildroot info
(dgilmore, 15:34:01)
* ACTION: all rebuild all effected packages (dgilmore, 15:36:47)
* #5886 need method for distributing urgent fixes... urgently
(dgilmore, 15:38:00)
* LINK: https://fedorahosted.org/rel-eng/ticket/5886 (dgilmore,
15:38:03)
* LINK: https://fedoraproject.org/wiki/Urgent_updates_policy
(dgilmore, 15:40:42)
* LINK: https://fedoraproject.org/wiki/Urgent_updates_policy (tyll,
15:41:42)
* nothing new (tyll, 15:42:15)
* #5775 switch to partitioned image for EC2; remove editing of menu.lst
from image processing (dgilmore, 15:43:01)
* LINK: https://fedorahosted.org/rel-eng/ticket/5775 (dgilmore,
15:43:07)
* #5963 Orphaned vulnerable packages in EPEL (dgilmore, 15:46:56)
* LINK: https://fedorahosted.org/rel-eng/ticket/5963 (dgilmore,
15:47:02)
* ACTION: tyll to work on reporting dependncies to the list for the
packages listed in this ticket and follow the fedora orphaned
packages practices (dgilmore, 15:58:52)
* Secondary Architectures updates (dgilmore, 16:00:02)
* Secondary Architectures update - ppc (dgilmore, 16:00:04)
* Secondary Architectures update - s390 (dgilmore, 16:05:52)
* Secondary Architectures update - arm (dgilmore, 16:10:02)
* Open Floor (dgilmore, 16:19:24)
Meeting ended at 16:36:00 UTC.
Action Items
- ------------
* all rebuild all effected packages
* tyll to work on reporting dependncies to the list for the packages
listed in this ticket and follow the fedora orphaned packages
practices
Action Items, by person
- -----------------------
* tyll
* tyll to work on reporting dependncies to the list for the packages
listed in this ticket and follow the fedora orphaned packages
practices
* **UNASSIGNED**
* all rebuild all effected packages
People Present (lines said)
- ---------------------------
* dgilmore (100)
* nirik (43)
* tyll (25)
* pbrobinson (22)
* sharkcz (14)
* masta (9)
* zodbot (4)
* bochecha (2)
* sgallagh (1)
Generated by `MeetBot`_ 0.1.4
.. _`MeetBot`: http://wiki.debian.org/MeetBot
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2
iQIcBAEBAgAGBQJUMsU3AAoJEH7ltONmPFDR5qgP/2Jpyp1Qv36jcKB/eHyw7Whx
IvmLdJyqS3KXs7rfWGIawaNY9bExbQdiCQh2m68vkeClvOpGEThSH6+1vhP2e+EA
A8jjk1b5Pa0WJ3PYfC7JZ5rJsMkZYQghQB0KtBHw3+mBXUhHRKjMdR9SE+/ZssCx
Az+Sn9bJ7EjOLJVSkZPMXvOyKCvU7RysJmmMdZ3RMmUyqBMZiSi5rjiPp/IQXUKO
KnFG+xvta3mJYt3ntodWab7pS3DSf5GhqpEZ4iJitmnKhwkmUHotnz0SVNbt0yVJ
gxYgqgBbb9q7CN4/4HOBChcHxF7iYWoqTeZj8Qf477l30NODF1eHNPPNo5kL2b6x
MI2dZ0AAGhnoNkScS+ZSwG2t1LsfRIlHXC6+cSLdbhajjB+qc8Lq2nXwTL8u+Tir
Vbwms6bd1VLkhpbxnB3idwl7hHeSg58mX7POUJkoBmJVx6FtrGpoAdUM68qmL7GD
JFcPs7UjL2HNrOlqh4cmFRlUk99evsvmEKvF4d5yLyk944/mV0c4tlKRYnX6YVqz
xMB6tLwPjF5pDuuiMKR7Lk/4Sa1GKjfQfjoF7GzjotPu4GpPDklw4No8yeCZ+DxL
xwC6bPOf7lRWqhsqGOoRb7MLOrjfL/v1Due6wcmeJpT3/KhaQ3RgOvR3Ovzx2dvi
BEelJIv5eF2XY9N7QcaQ
=fd6C
-----END PGP SIGNATURE-----
9 years, 7 months
#6000: automate creation of excludelist for koji-shadow
by Fedora Release Engineering
#6000: automate creation of excludelist for koji-shadow
-----------------------------+------------------------
Reporter: sharkcz | Owner: rel-eng@…
Type: task | Status: new
Milestone: Fedora 20 Final | Component: koji
Keywords: meeting | Blocked By:
Blocking: |
-----------------------------+------------------------
koj-shadow depends on excludelist to skip packages that contain
ExcludeArch or ExclusiveArch tags making the package fail to build on
secondary arch. The list is created by the srpm-exlcuded-arch.py script
from releng git repo. It would be useful to automate the runs of this
script and send the results to the releng list for example once in a week.
This way the secondary arch maintainers could keep their copies up-to-
date.
--
Ticket URL: <https://fedorahosted.org/rel-eng/ticket/6000>
Fedora Release Engineering <http://fedorahosted.org/rel-eng>
Release Engineering for the Fedora Project
9 years, 7 months
[releng] buildepelbeta: Remove tabs
by Till Maas
commit 93852d2c8b815ebc6f57654cc402efedb6a3db3b
Author: Till Maas <opensource(a)till.name>
Date: Wed Oct 1 21:47:54 2014 +0200
buildepelbeta: Remove tabs
scripts/buildepelbeta | 14 +++++++-------
1 files changed, 7 insertions(+), 7 deletions(-)
---
diff --git a/scripts/buildepelbeta b/scripts/buildepelbeta
index 3cd2cfa..8223a4d 100755
--- a/scripts/buildepelbeta
+++ b/scripts/buildepelbeta
@@ -1,7 +1,7 @@
#!/bin/bash
# Copyright (C) 2013 Red Hat Inc.
-# SPDX-License-Identifier: GPL-2.0+
+# SPDX-License-Identifier: GPL-2.0+
# runs currently on relepel01.phx2.fedoraproject.org
@@ -12,8 +12,8 @@ MOCKCONFIG=rhel-compose-x86_64
[ -z "$DATE" ] && {
- echo "usage: buildepelbeta <date>"
- exit 1
+ echo "usage: buildepelbeta <date>"
+ exit 1
}
TMPDIR=`mktemp -d /tmp/epel.$DATE.XXXX`
@@ -29,10 +29,10 @@ echo "start" | fedmsg-logger \
pushd $TMPDIR
git clone git://git.fedorahosted.org/comps.git && {
- pushd comps
- make comps-epel7.xml
- cp comps-epel7.xml /mnt/koji/mash/epel-$DATE/logs/
- popd
+ pushd comps
+ make comps-epel7.xml
+ cp comps-epel7.xml /mnt/koji/mash/epel-$DATE/logs/
+ popd
}
popd
9 years, 7 months