repos.recursive_build_report: Refactor
Use BuildReporter.recursive_closure for the first stage of report generation. This leads to nice code cleanup.
This commit is contained in:
parent
1c0903b9dc
commit
94458d44ce
@ -369,9 +369,14 @@ class TripletReport:
|
||||
return False
|
||||
return True
|
||||
|
||||
def sources_set(self):
|
||||
def sources_for_deps(self):
|
||||
return set(p.source_name for k, d, p in self.triplets)
|
||||
|
||||
def sources_for_build(self):
|
||||
return set(p.source_name
|
||||
for k, d, p in self.triplets
|
||||
if _is_build_kind(k))
|
||||
|
||||
def basic_format(self, title=None, to=None):
|
||||
"""Format a report
|
||||
|
||||
@ -536,7 +541,7 @@ class BuildReporter:
|
||||
|
||||
while queue:
|
||||
cur = queue.pop()
|
||||
missing = self.report(cur).sources_set()
|
||||
missing = self.report(cur).sources_for_deps()
|
||||
unseen = missing.difference(seen)
|
||||
seen.extend(unseen)
|
||||
# don't recur into packages from stop_names
|
||||
@ -556,7 +561,7 @@ class BuildReporter:
|
||||
if name in stop_names:
|
||||
result.append('not going deeper (stop_names)')
|
||||
else:
|
||||
result.append(self._build_report(name).basic_format().strip())
|
||||
result.append(self.report(name).basic_format().strip())
|
||||
return to('\n'.join(result)) if to else '\n'.join(result)
|
||||
|
||||
|
||||
@ -590,52 +595,23 @@ def missing_rating_report(from_repo, to_repo):
|
||||
|
||||
def recursive_build_report(from_repo, to_repo, *source_names,
|
||||
ignore=(), ignore_sort=(), summary=True):
|
||||
reports = []
|
||||
build_source_deps = {}
|
||||
pkg_source_deps = {}
|
||||
requested_source_names = set(_src_name(s) for s in source_names)
|
||||
reporter = BuildReporter(from_repo, to_repo, ignore=ignore,
|
||||
prefer=requested_source_names)
|
||||
stack = list(requested_source_names)
|
||||
seen = set(stack)
|
||||
|
||||
while stack:
|
||||
cur = stack.pop()
|
||||
report = reporter.report(cur)
|
||||
cur_in_to = to_repo.sources.get(cur)
|
||||
cur_source_srpm = cur_in_to.source_rpm if cur_in_to else b'NONE'
|
||||
reports.append('\n== %s ==\n%s has %s\n' % (
|
||||
cur.decode(), to_repo.name, cur_source_srpm.decode()))
|
||||
reports.append(report.basic_format())
|
||||
|
||||
# find all sources in the report
|
||||
bld_deps = set(p.source_name
|
||||
for k, _d, p in report.triplets
|
||||
if _is_build_kind(k))
|
||||
pkg_deps = set(p.source_name
|
||||
for k, _d, p in report.triplets
|
||||
if not _is_build_kind(k))
|
||||
pkg_deps -= bld_deps
|
||||
|
||||
build_source_deps[cur] = sorted(bld_deps)
|
||||
pkg_source_deps[cur] = sorted(pkg_deps)
|
||||
|
||||
unseen = bld_deps.union(pkg_deps) - seen
|
||||
seen.update(unseen)
|
||||
stack.extend(unseen)
|
||||
names = reporter.recursive_closure(requested_source_names)
|
||||
reports = [reporter.format_reports(names), '']
|
||||
|
||||
if not summary:
|
||||
return '\n'.join(reports)
|
||||
|
||||
# expand the build requires with the pkg reqs of dependencies:
|
||||
full_req = {}
|
||||
names = set(build_source_deps)
|
||||
for source in build_source_deps:
|
||||
for source in names:
|
||||
chroot = from_repo.chroot_for(from_repo.sources[source].requires,
|
||||
prefer=names)
|
||||
dep_sources = set()
|
||||
for b in chroot.binaries.values():
|
||||
if b.source_name not in build_source_deps:
|
||||
if b.source_name not in names:
|
||||
continue
|
||||
if (b.source_name, source) in ignore_sort:
|
||||
continue
|
||||
@ -668,11 +644,15 @@ def recursive_build_report(from_repo, to_repo, *source_names,
|
||||
|
||||
reports.append('\n== SUMMARY ==\n')
|
||||
for source in order:
|
||||
br = reporter.report(source)
|
||||
before = br.sources_for_build()
|
||||
after = br.sources_for_deps() - before
|
||||
|
||||
reports.append('{} {:60} {} :: {}'.format(
|
||||
letter(source),
|
||||
from_repo.sources[source].source_rpm.decode(),
|
||||
b' '.join(build_source_deps[source]).decode(),
|
||||
b' '.join(pkg_source_deps[source]).decode()))
|
||||
b' '.join(sorted(before)).decode(),
|
||||
b' '.join(sorted(after)).decode()))
|
||||
|
||||
if cycles:
|
||||
reports.append('\nCycles:')
|
||||
|
Loading…
x
Reference in New Issue
Block a user