[Collab-qa-commits] r2089 - multi-arch

Jakub Wilk jwilk at alioth.debian.org
Tue Nov 22 23:41:27 UTC 2011


Author: jwilk
Date: 2011-11-22 23:41:27 +0000 (Tue, 22 Nov 2011)
New Revision: 2089

Added:
   multi-arch/dependency-validator
Log:
Add a script that looks for Multi-Arch:no packages with Multi-Arch:same reverse-dependencies.



Added: multi-arch/dependency-validator
===================================================================
--- multi-arch/dependency-validator	                        (rev 0)
+++ multi-arch/dependency-validator	2011-11-22 23:41:27 UTC (rev 2089)
@@ -0,0 +1,103 @@
+#!/usr/bin/python3
+
+# Copyright © 2011 Jakub Wilk <jwilk at debian.org>
+
+# Redistribution and use in source and compiled forms, with or without
+# modification, are permitted under any circumstances. No warranty.
+
+'''
+Looks for 'Multi-Arch: no' package with 'Multi-Arch: same'
+reverse-dependencies.
+'''
+
+import argparse
+import os
+import sys
+
+import apt_pkg
+
+import misc
+
+default_architecture = 'i386'
+
+class Package(object):
+
+    def __init__(self, pkgdata):
+        self.name = pkgdata['Package']
+        self.multiarch = pkgdata.get('Multi-Arch')
+        self.depends = apt_pkg.parse_depends(pkgdata.get('Depends', ''))
+        self.broken = set()
+
+    def brokenness(self):
+        return len(self.broken), self.name
+
+    def validate(self, universe):
+        if self.multiarch != 'same':
+            return
+        for group in self.depends:
+            dependency = None
+            for dep_name, _, _ in group:
+                try:
+                    dependency = universe[dep_name]
+                except LookupError:
+                    continue
+                if dependency.multiarch is not None:
+                    group = []
+                    break
+            if group:
+                for dep_name, _, _ in group:
+                    try:
+                        dependency = universe[dep_name]
+                    except LookupError:
+                        continue
+                    dependency.broken.add(self.name)
+
+def do_qa(options):
+    for section in 'main', 'contrib', 'non-free':
+        url = '{mirror}/dists/{dist}/{section}/binary-{arch}/Packages.gz'.format(
+            mirror=options.mirror,
+            dist=options.distribution,
+            section=section,
+            arch=options.architecture
+        )
+        universe = {}
+        with misc.download(url, pipe='gzip -dc') as package_tags:
+            for pkgdata in apt_pkg.TagFile(package_tags):
+                package = Package(pkgdata)
+                universe[package.name] = package
+        for package in universe.values():
+            package.validate(universe)
+        for package in sorted(universe.values(), key=Package.brokenness, reverse=True):
+            if package.broken:
+                print('Package: {pkg}'.format(pkg=package.name))
+                print('Reverse-Depends: {dep}'.format(dep=', '.join(package.broken)))
+                print()
+
+def main():
+    misc.setup_proxies()
+    misc.setup_locale()
+    parser = argparse.ArgumentParser(description=__doc__)
+    parser.add_argument('--mirror', default=misc.default_mirror,
+        metavar='<mirror>',
+        help='use this mirror (default: {mirror})'.format(mirror=misc.default_mirror)
+    )
+    parser.add_argument('--distribution', default=misc.default_distribution,
+        metavar='<dist>',
+        help='check this distribution (default: {dist})'.format(dist=misc.default_distribution)
+    )
+    parser.add_argument('--architecture', default=default_architecture,
+        metavar='<arch>',
+        help='check this architectures (default: {arch})'.format(arch=default_architecture)
+    )
+    parser.add_argument('--log-file', type=argparse.FileType('a'), default=sys.stderr,
+        metavar='<file>',
+        help='log progress into this file (default: stderr)'
+    )
+    options = parser.parse_args()
+    misc.setup_log_file(options.log_file)
+    do_qa(options)
+
+if __name__ == '__main__':
+    main()
+
+# vim:ts=4 sw=4 et


Property changes on: multi-arch/dependency-validator
___________________________________________________________________
Added: svn:executable
   + *




More information about the Collab-qa-commits mailing list