]> git.decadent.org.uk Git - dak.git/blobdiff - dak/cruft_report.py
Merge remote-tracking branch 'jcristau/cs-set-log-suite'
[dak.git] / dak / cruft_report.py
index 6d7db38512fe7b2a061a83384ff89fe3d3d9445a..fbbc0446d2156fe5643261ee8eefa438f9ba833d 100755 (executable)
@@ -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))
@@ -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()
@@ -449,6 +346,7 @@ SELECT ss.src, ss.source, ss.version,
     LEFT JOIN bin_associations_binaries bab
        ON ss.src = bab.source AND ss.suite = bab.suite
     WHERE s.suite_name = :suite_name AND bab.id IS NULL
+      AND now() - ss.install_date > '1 day'::interval
     ORDER BY install_date"""
     args = { 'suite_name': suite_name }
     return session.execute(query, args)
@@ -681,19 +579,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 +628,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 +640,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 \