From ab02df8cd17bd1cfd0501f91da0b270c680a77d8 Mon Sep 17 00:00:00 2001 From: Stefano Rivera Date: Fri, 11 Nov 2011 16:31:10 +0200 Subject: [PATCH] Update to newer webservice output. Verbose listing. --- reverse-depends | 82 +++++++++++++++++++++++++++++++++++------ ubuntutools/rdepends.py | 4 +- 2 files changed, 72 insertions(+), 14 deletions(-) diff --git a/reverse-depends b/reverse-depends index ddd70e2..13d4cd8 100755 --- a/reverse-depends +++ b/reverse-depends @@ -18,7 +18,7 @@ import optparse from distro_info import UbuntuDistroInfo -from ubuntutools.rdepends import rdepends +from ubuntutools.rdepends import query_rdepends def main(): @@ -28,7 +28,7 @@ def main(): help='Query dependencies in RELEASE. Default: devel') parser.add_option('-R', '--without-recommends', action='store_false', dest='recommends', default=True, - help='Only examine Depends relationships, ' + help='Only consider Depends relationships, ' 'not Recommends.') parser.add_option('-s', '--with-suggests', action='store_true', dest='suggests', default=False, @@ -37,9 +37,16 @@ def main(): action='store_const', dest='arch', const='source', help='Query build dependencies (synonym for ' '--arch=source') - parser.add_option('-a', '--arch', metavar='ARCH', default='i386', - help='Query dependencies in ARCH' - '(default: i386)') + parser.add_option('-a', '--arch', metavar='ARCH', default='any', + help='Query dependencies in ARCH ' + '(default: any)') + parser.add_option('-c', '--component', metavar='COMPONENT', + action='append', + help='Only consider reverse-dependencies in COMPONENT. ' + 'Can be specified multiple times. (default: all)') + parser.add_option('-l', '--list', + action='store_true', default=False, + help='Display a simple, machine-readable list') parser.add_option('-u', '--service-url', metavar='URL', dest='server', default=None, help='Reverse Depedencies webservice URL' @@ -55,22 +62,73 @@ def main(): if options.server is not None: opts['server'] = options.server - data = rdepends(package, options.release, options.arch, **opts) + data = query_rdepends(package, options.release, options.arch, **opts) if options.arch == 'source': - fields = ('Build-Depends', 'Build-Depends-Indep') + fields = ('Reverse-Build-Depends', 'Reverse-Build-Depends-Indep') else: - fields = ['Depends'] + fields = ['Reverse-Depends'] if options.recommends: - fields.append('Recommends') + fields.append('Reverse-Recommends') if options.suggests: - fields.append('Suggests') + fields.append('Reverse-Suggests') + for field in data.keys(): + if field not in fields: + del data[field] + + if options.component: + for field, rdeps in data.items(): + filtered = [rdep for rdep in rdeps + if rdep['Component'] in options.component] + if not filtered: + del data[field] + else: + data[field] = filtered + + if options.list: + display_consise(data) + else: + display_verbose(data) + + +def display_verbose(data): + if not data: + print "No reverse dependencies found" + return + + all_archs = set() + # This isn't accurate, but we make up for it by displaying what we found + for rdeps in data.itervalues(): + for rdep in rdeps: + if 'Architectures' in rdep: + all_archs.update(rdep['Architectures']) + + for field, rdeps in data.iteritems(): + print field + print '=' * len(field) + for rdep in rdeps: + if all_archs and set(rdep['Architectures']) != all_archs: + print '* %s [%s]' % (rdep['Package'], + ', '.join(sorted(rdep['Architectures']))) + else: + print '* %s' % rdep['Package'] + print + + if all_archs: + print ("Packages without architectures listed are " + "reverse-dependencies in: %s" + % ', '.join(sorted(list(all_archs)))) + + +def display_consise(data): result = set() - for field in fields: - result.update(data.get(field, [])) + for rdeps in data.itervalues(): + for rdep in rdeps: + result.add(rdep['Package']) print u'\n'.join(sorted(list(result))) + if __name__ == '__main__': main() diff --git a/ubuntutools/rdepends.py b/ubuntutools/rdepends.py index 7679f1e..ab999b5 100644 --- a/ubuntutools/rdepends.py +++ b/ubuntutools/rdepends.py @@ -17,8 +17,8 @@ import os import urllib2 -def rdepends(package, release, arch, - server='http://qa.ubuntuwire.org/rdepends'): +def query_rdepends(package, release, arch, + server='http://qa.ubuntuwire.org/rdepends'): """Look up a packages reverse-dependencies on the Ubuntuwire Reverse- webservice """