def check_override_compliance(package, priority, archive_path, suite_name, cnf, session): print "Checking compliance with related overrides..." depends = set() rdepends = set() 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: Packages = utils.get_packages_from_ftp(archive_path, suite_name, component, arch) while Packages.step(): package_name = Packages.section.find("Package") dep_list = Packages.section.find("Depends") if dep_list: if package_name == package: for d in apt_pkg.parse_depends(dep_list): for i in d: depends.add(i[0]) else: for d in apt_pkg.parse_depends(dep_list): for i in d: if i[0] == package: rdepends.add(package_name) query = """SELECT o.package, p.level, p.priority FROM override o JOIN suite s ON s.id = o.suite JOIN priority p ON p.id = o.priority WHERE s.suite_name = '%s' AND o.package in ('%s')""" % ( suite_name, "', '".join(depends.union(rdepends)), ) packages = session.execute(query) excuses = [] for p in packages: if p[0] == package or not p[1]: continue if p[0] in depends: if priority.level < p[1]: excuses.append( "%s would have priority %s, its dependency %s has priority %s" % (package, priority.priority, p[0], p[2]) ) if p[0] in rdepends: if priority.level > p[1]: excuses.append( "%s would have priority %s, its reverse dependency %s has priority %s" % (package, priority.priority, p[0], p[2]) ) if excuses: for ex in excuses: print ex else: print "Proposed override change complies with Debian Policy"
def check_override_compliance(package, priority, archive_path, suite_name, cnf, session): print "Checking compliance with related overrides..." depends = set() rdepends = set() 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: Packages = utils.get_packages_from_ftp(archive_path, suite_name, component, arch) while Packages.step(): package_name = Packages.section.find("Package") dep_list = Packages.section.find("Depends") if dep_list: if package_name == package: for d in apt_pkg.parse_depends(dep_list): for i in d: depends.add(i[0]) else: for d in apt_pkg.parse_depends(dep_list): for i in d: if i[0] == package: rdepends.add(package_name) query = """SELECT o.package, p.level, p.priority FROM override o JOIN suite s ON s.id = o.suite JOIN priority p ON p.id = o.priority WHERE s.suite_name = '%s' AND o.package in ('%s')""" \ % (suite_name, "', '".join(depends.union(rdepends))) packages = session.execute(query) excuses = [] for p in packages: if p[0] == package or not p[1]: continue if p[0] in depends: if priority.level < p[1]: excuses.append("%s would have priority %s, its dependency %s has priority %s" \ % (package, priority.priority, p[0], p[2])) if p[0] in rdepends: if priority.level > p[1]: excuses.append("%s would have priority %s, its reverse dependency %s has priority %s" \ % (package, priority.priority, p[0], p[2])) if excuses: for ex in excuses: print ex else: print "Proposed override change complies with Debian Policy"
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')] for i in ['help', 'package']: if not cnf.has_key('Override-Disparity::Options::%s' % (i)): cnf['Override-Disparity::Options::%s' % (i)] = '' if not cnf.has_key('Override-Disparity::Options::Suite'): cnf['Override-Disparity::Options::Suite'] = 'unstable' 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 = get_component_names(session) arches = set([x.arch_string for x in get_suite_architectures(suite)]) arches -= set(['source', 'all']) for arch in arches: for component in components: Packages = utils.get_packages_from_ftp(cnf['Dir::Root'], suite, 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 i in d: if not depends.has_key(package): depends[package] = set() depends[package].add(i[0]) priorities = {} query = """SELECT DISTINCT o.package, p.level, p.priority, m.name FROM override o JOIN suite s ON s.id = o.suite JOIN priority p ON p.id = o.priority JOIN binaries b ON b.package = o.package JOIN maintainer m ON m.id = b.maintainer JOIN bin_associations ba ON ba.bin = b.id WHERE s.suite_name = '%s' AND ba.suite = s.id AND p.level <> 0""" % suite packages = session.execute(query) 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()): for p in depends[d]: if priorities.has_key(d) and priorities.has_key(p): if priorities[d][0] < priorities[p][0]: if priorities[d][3]: 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 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()
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') ] for i in ['help', 'package']: if not cnf.has_key('Override-Disparity::Options::%s' % (i)): cnf['Override-Disparity::Options::%s' % (i)] = '' if not cnf.has_key('Override-Disparity::Options::Suite'): cnf['Override-Disparity::Options::Suite'] = 'unstable' apt_pkg.parse_commandline(cnf.Cnf, Arguments, sys.argv) Options = cnf.subtree('Override-Disparity::Options') if Options['help']: usage() depends = {} session = DBConn().session() 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: 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.parse_depends(dep_list): for i in d: if not depends.has_key(package): depends[package] = set() depends[package].add(i[0]) priorities = {} query = """SELECT DISTINCT o.package, p.level, p.priority, m.name FROM override o JOIN suite s ON s.id = o.suite JOIN priority p ON p.id = o.priority JOIN binaries b ON b.package = o.package JOIN maintainer m ON m.id = b.maintainer JOIN bin_associations ba ON ba.bin = b.id WHERE s.suite_name = '%s' AND ba.suite = s.id AND p.level <> 0""" % suite_name packages = session.execute(query) 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()): for p in depends[d]: if priorities.has_key(d) and priorities.has_key(p): if priorities[d][0] < priorities[p][0]: if priorities[d][3]: 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 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()
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"), ] for i in ["help", "package"]: if not cnf.has_key("Override-Disparity::Options::%s" % (i)): cnf["Override-Disparity::Options::%s" % (i)] = "" if not cnf.has_key("Override-Disparity::Options::Suite"): cnf["Override-Disparity::Options::Suite"] = "unstable" apt_pkg.parse_commandline(cnf.Cnf, Arguments, sys.argv) Options = cnf.subtree("Override-Disparity::Options") if Options["help"]: usage() depends = {} session = DBConn().session() 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: 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.parse_depends(dep_list): for i in d: if not depends.has_key(package): depends[package] = set() depends[package].add(i[0]) priorities = {} query = ( """SELECT DISTINCT o.package, p.level, p.priority, m.name FROM override o JOIN suite s ON s.id = o.suite JOIN priority p ON p.id = o.priority JOIN binaries b ON b.package = o.package JOIN maintainer m ON m.id = b.maintainer JOIN bin_associations ba ON ba.bin = b.id WHERE s.suite_name = '%s' AND ba.suite = s.id AND p.level <> 0""" % suite_name ) packages = session.execute(query) 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()): for p in depends[d]: if priorities.has_key(d) and priorities.has_key(p): if priorities[d][0] < priorities[p][0]: if priorities[d][3]: 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 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()