Beispiel #1
0
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"
Beispiel #2
0
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"
Beispiel #3
0
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()
Beispiel #4
0
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()
Beispiel #5
0
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()