X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dak%2Fcruft_report.py;h=5c6ee8d0c3270c5ca7d846ac8967799b1529cf38;hb=0d69fff35ef45fda573467873ae2f01ca1954650;hp=98381bc1952fd6199aa32e1ea5cf21d157216543;hpb=aa4f71d8e30c23e458a8148be258c89bffbd405f;p=dak.git diff --git a/dak/cruft_report.py b/dak/cruft_report.py index 98381bc1..5c6ee8d0 100755 --- a/dak/cruft_report.py +++ b/dak/cruft_report.py @@ -61,7 +61,7 @@ Check for obsolete or duplicated packages. -m, --mode=MODE chose the MODE to run in (full, daily, bdo). -s, --suite=SUITE check suite SUITE. -R, --rdep-check check reverse dependencies - -w, --wanna-build-dump where to find the copies of http://buildd.debian.org/stats/*.txt""" + -w, --wanna-build-dump where to find the copies of https://buildd.debian.org/stats/*.txt""" sys.exit(exit_code) ################################################################################ @@ -209,29 +209,9 @@ def do_newer_version(lowersuite_name, highersuite_name, code, session): ################################################################################ -def queryWithoutSource(suite_id, session): - """searches for arch: all packages from suite that do no longer - reference a source package in the same suite - - subquery unique_binaries: selects all packages with only 1 version - in suite since 'dak rm' does not allow to specify version numbers""" - - query = """ - with unique_binaries as - (select package, max(version) as version, max(source) as source - from bin_associations_binaries - where architecture = 2 and suite = :suite_id - group by package having count(*) = 1) - select ub.package, ub.version - from unique_binaries ub - left join src_associations_src sas - on ub.source = sas.src and sas.suite = :suite_id - where sas.id is null - order by ub.package""" - return session.execute(query, { 'suite_id': suite_id }) def reportWithoutSource(suite_name, suite_id, session, rdeps=False): - rows = queryWithoutSource(suite_id, session) + rows = query_without_source(suite_id, session) title = 'packages without source in suite %s' % suite_name if rows.rowcount > 0: print '%s\n%s\n' % (title, '-' * len(title)) @@ -244,7 +224,7 @@ def reportWithoutSource(suite_name, suite_id, session, rdeps=False): print " dak rm -m %s -s %s -a all -p -R -b %s" % \ (message, suite_name, package) if rdeps: - if utils.check_reverse_depends([package], suite_name, ["all"], session, True): + if utils.check_reverse_depends([package], suite_name, [], session, True): print else: print " - No dependency problem found\n" @@ -284,90 +264,7 @@ def reportNewerAll(suite_name, session): print " dak rm -m %s -s %s -a %s -p -b %s\n" % \ (message, suite_name, oldarch, package) -def queryNBS(suite_id, session): - """This one is really complex. It searches arch != all packages that - are no longer built from current source packages in suite. - - temp table unique_binaries: will be populated with packages that - have only one version in suite because 'dak rm' does not allow - specifying version numbers - - temp table newest_binaries: will be populated with packages that are - built from current sources - - subquery uptodate_arch: returns all architectures built from current - sources - subquery unique_binaries_uptodate_arch: returns all packages in - architectures from uptodate_arch - - subquery unique_binaries_uptodate_arch_agg: same as - unique_binaries_uptodate_arch but with column architecture - aggregated to array - - subquery uptodate_packages: similar to uptodate_arch but returns all - packages built from current sources - - subquery outdated_packages: returns all packages with architectures - no longer built from current source - """ - - query = """ -create temp table unique_binaries ( - package text not null, - architecture integer not null, - source integer not null); - -insert into unique_binaries - select bab.package, bab.architecture, max(bab.source) - from bin_associations_binaries bab - where bab.suite = :suite_id and bab.architecture > 2 - group by package, architecture having count(*) = 1; - -create temp table newest_binaries ( - package text not null, - architecture integer not null, - source text not null, - version debversion not null); - -insert into newest_binaries - select ub.package, ub.architecture, nsa.source, nsa.version - from unique_binaries ub - join newest_src_association nsa - on ub.source = nsa.src and nsa.suite = :suite_id; - -with uptodate_arch as - (select architecture, source, version - from newest_binaries - group by architecture, source, version), - unique_binaries_uptodate_arch as - (select ub.package, ub.architecture, ua.source, ua.version - from unique_binaries ub - join source s - on ub.source = s.id - join uptodate_arch ua - on ub.architecture = ua.architecture and s.source = ua.source), - unique_binaries_uptodate_arch_agg as - (select ubua.package, - array(select unnest(array_agg(a.arch_string)) order by 1) as arch_list, - ubua.source, ubua.version - from unique_binaries_uptodate_arch ubua - join architecture a - on ubua.architecture = a.id - group by ubua.source, ubua.version, ubua.package), - uptodate_packages as - (select package, source, version - from newest_binaries - group by package, source, version), - outdated_packages as - (select array(select unnest(array_agg(package)) order by 1) as pkg_list, - arch_list, source, version - from unique_binaries_uptodate_arch_agg - where package not in - (select package from uptodate_packages) - group by arch_list, source, version) - select * from outdated_packages order by source""" - return session.execute(query, { 'suite_id': suite_id }) def reportNBS(suite_name, suite_id, rdeps=False): session = DBConn().session() @@ -681,19 +578,19 @@ def main (): components = get_component_names(session) for component in components: filename = "%s/dists/%s/%s/source/Sources.gz" % (suite.archive.path, suite_name, component) - # apt_pkg.ParseTagFile needs a real file handle and can't handle a GzipFile instance... + # apt_pkg.TagFile needs a real file handle and can't handle a GzipFile instance... (fd, temp_filename) = utils.temp_filename() (result, output) = commands.getstatusoutput("gunzip -c %s > %s" % (filename, temp_filename)) if (result != 0): sys.stderr.write("Gunzip invocation failed!\n%s\n" % (output)) sys.exit(result) sources = utils.open_file(temp_filename) - Sources = apt_pkg.ParseTagFile(sources) - while Sources.Step(): - source = Sources.Section.Find('Package') - source_version = Sources.Section.Find('Version') - architecture = Sources.Section.Find('Architecture') - binaries = Sources.Section.Find('Binary') + Sources = apt_pkg.TagFile(sources) + while Sources.step(): + source = Sources.section.find('Package') + source_version = Sources.section.find('Version') + architecture = Sources.section.find('Architecture') + binaries = Sources.section.find('Binary') binaries_list = [ i.strip() for i in binaries.split(',') ] if "bnb" in checks: @@ -730,7 +627,7 @@ def main (): if component == 'main/debian-installer' and re.match("kfreebsd", architecture): continue filename = "%s/dists/%s/%s/binary-%s/Packages.gz" % (suite.archive.path, suite_name, component, architecture) - # apt_pkg.ParseTagFile needs a real file handle + # apt_pkg.TagFile needs a real file handle (fd, temp_filename) = utils.temp_filename() (result, output) = commands.getstatusoutput("gunzip -c %s > %s" % (filename, temp_filename)) if (result != 0): @@ -742,11 +639,11 @@ def main (): nfu_entries = parse_nfu(architecture) packages = utils.open_file(temp_filename) - Packages = apt_pkg.ParseTagFile(packages) - while Packages.Step(): - package = Packages.Section.Find('Package') - source = Packages.Section.Find('Source', "") - version = Packages.Section.Find('Version') + Packages = apt_pkg.TagFile(packages) + while Packages.step(): + package = Packages.section.find('Package') + source = Packages.section.find('Source', "") + version = Packages.section.find('Version') if source == "": source = package if bin2source.has_key(package) and \