X-Git-Url: https://git.decadent.org.uk/gitweb/?p=dak.git;a=blobdiff_plain;f=dak%2Foverride_disparity.py;h=413dcaabfbfcca0cddc1ac2074711744b24b3371;hp=7a3b290656d1202edfd94db62857b2776fd6e7aa;hb=0d69fff35ef45fda573467873ae2f01ca1954650;hpb=a6b3f550d4281fcd392ee027e9ee330b850dbcc3 diff --git a/dak/override_disparity.py b/dak/override_disparity.py index 7a3b2906..413dcaab 100755 --- a/dak/override_disparity.py +++ b/dak/override_disparity.py @@ -37,7 +37,7 @@ Generate a list of override disparities import os import sys import apt_pkg -import commands +import yaml from daklib.config import Config from daklib.dbconn import * @@ -49,11 +49,12 @@ def usage (exit_code=0): print """Generate a list of override disparities Usage: - dak override-disparity [ -p ] [ -s ] + dak override-disparity [-f ] [ -p ] [ -s ] Options: -h, --help show this help and exit + -f, --file store output into given file -p, --package limit check on given package only -s, --suite choose suite to look for (default: unstable)""" @@ -62,6 +63,7 @@ Options: def main(): cnf = Config() Arguments = [('h','help','Override-Disparity::Options::Help'), + ('f','file','Override-Disparity::Options::File','HasArg'), ('s','suite','Override-Disparity::Options::Suite','HasArg'), ('p','package','Override-Disparity::Options::Package','HasArg')] @@ -71,44 +73,35 @@ def main(): if not cnf.has_key('Override-Disparity::Options::Suite'): cnf['Override-Disparity::Options::Suite'] = 'unstable' - apt_pkg.ParseCommandLine(cnf.Cnf, Arguments, sys.argv) - Options = cnf.SubTree('Override-Disparity::Options') + apt_pkg.parse_commandline(cnf.Cnf, Arguments, sys.argv) + Options = cnf.subtree('Override-Disparity::Options') if Options['help']: usage() depends = {} session = DBConn().session() - suite = Options['suite'] - components = cnf.ValueList('Suite::%s::Components' % suite) - arches = set([x.arch_string for x in get_suite_architectures(suite)]) + suite_name = Options['suite'] + suite = get_suite(suite_name, session) + if suite is None: + utils.fubar("Unknown suite '{0}'".format(suite_name)) + components = get_component_names(session) + arches = set([x.arch_string for x in get_suite_architectures(suite_name)]) arches -= set(['source', 'all']) for arch in arches: for component in components: - filename = '%s/dists/%s/%s/binary-%s/Packages.gz' % (cnf['Dir::Root'], suite, component, arch) - (fd, temp_filename) = utils.temp_filename() - (result, output) = commands.getstatusoutput('gunzip -c %s > %s' % (filename, temp_filename)) - if (result != 0): - utils.fubar('Gunzip invocation failed!\n%s\n' % (output), result) - filename = '%s/dists/%s/%s/debian-installer/binary-%s/Packages.gz' % (cnf['Dir::Root'], suite, component, arch) - if os.path.exists(filename): - (result, output) = commands.getstatusoutput('gunzip -c %s >> %s' % (filename, temp_filename)) - if (result != 0): - utils.fubar('Gunzip invocation failed!\n%s\n' % (output), result) - packages_file = utils.open_file(temp_filename) - Packages = apt_pkg.ParseTagFile(packages_file) - while Packages.Step(): - package = Packages.Section.Find('Package') - dep_list = Packages.Section.Find('Depends') + Packages = utils.get_packages_from_ftp(suite.archive.path, suite_name, component, arch) + while Packages.step(): + package = Packages.section.find('Package') + dep_list = Packages.section.find('Depends') if Options['package'] and package != Options['package']: continue if dep_list: - for d in apt_pkg.ParseDepends(dep_list): + for d in apt_pkg.parse_depends(dep_list): for i in d: if not depends.has_key(package): depends[package] = set() depends[package].add(i[0]) - os.unlink(temp_filename) priorities = {} query = """SELECT DISTINCT o.package, p.level, p.priority, m.name @@ -120,10 +113,14 @@ def main(): JOIN bin_associations ba ON ba.bin = b.id WHERE s.suite_name = '%s' AND ba.suite = s.id - AND p.level <> 0""" % suite + AND p.level <> 0""" % suite_name packages = session.execute(query) - session.commit() + out = {} + if Options.has_key('file'): + outfile = file(os.path.expanduser(Options['file']), 'w') + else: + outfile = sys.stdout for p in packages: priorities[p[0]] = [p[1], p[2], p[3], True] for d in sorted(depends.keys()): @@ -131,13 +128,18 @@ def main(): if priorities.has_key(d) and priorities.has_key(p): if priorities[d][0] < priorities[p][0]: if priorities[d][3]: - print 'Package: ' + d - print ' Priority: ' + priorities[d][1] - print ' Maintainer: ' + priorities[d][2] + if not out.has_key(d): + out[d] = {} + out[d]['priority'] = priorities[d][1] + out[d]['maintainer'] = unicode(priorities[d][2], 'utf-8') + out[d]['priority'] = priorities[d][1] priorities[d][3] = False - print ' Dependency: ' + p - print ' Priority: ' + priorities[p][1] - print ' Maintainer: ' + priorities[p][2] + if not out[d].has_key('dependency'): + out[d]['dependency'] = {} + out[d]['dependency'][p] = priorities[p][1] + yaml.safe_dump(out, outfile, default_flow_style=False) + if Options.has_key('file'): + outfile.close() if __name__ == '__main__': main()