Пример #1
0
def merge_packages(pkg1,
                   pkg2,
                   name1,
                   name2,
                   banned_packages=set(),
                   rewriter=None):
    """
    Merges two previously loaded/parsed (using load_packages_file) packages
    dictionaries, preferring `pkg1` over `pkg2`, and optionally discarding any
    banned packages.
    """
    new_pkgs = {}
    package_names = set(pkg1.keys()).union(set(pkg2.keys()))
    obsoletepkgs = []

    for pkg in package_names:
        pkg1_pkg = pkg1.get(pkg)
        pkg2_pkg = pkg2.get(pkg)

        if pkg1_pkg and pkg2_pkg:
            if rewriter:
                pkg1_pkg = rewriter(pkg1_pkg, name1)
            new_pkgs[pkg] = pkg1_pkg
            if package_newer(pkg1_pkg, pkg2_pkg):
                obsoletepkgs.append(
                    '%s,%s,%s,%s' %
                    (globalvars.suite, pkg1_pkg.get('Package'),
                     pkg1_pkg.get('Version'), pkg2_pkg.get('Version')))
        elif pkg1_pkg:
            if not package_banned(pkg1_pkg, banned_packages):
                if rewriter:
                    pkg1_pkg = rewriter(pkg1_pkg, name1)
                new_pkgs[pkg] = pkg1_pkg
        elif pkg2_pkg:
            if not package_banned(pkg2_pkg, banned_packages):
                if rewriter:
                    pkg2_pkg = rewriter(pkg2_pkg, name2)
                new_pkgs[pkg] = pkg2_pkg
        else:
            assert False, 'Impossibru'

    if obsoletepkgs:
        obsoletepkgs = '\n'.join(obsoletepkgs) + '\n'
        logtofile('%s-oldpackages.txt' % globalvars.suite,
                  obsoletepkgs,
                  redo=False)

    return new_pkgs
Пример #2
0
def package_banned(pkg, banned_pkgs):
    """
    Returns True is the package contains a banned dependency.
    Currently checks and parses both the 'Depends:' and the 'Pre-Depends'
    fields of the package.
    """
    if pkg.get('Package') in banned_pkgs:
        logtofile('bannedpackages.txt',
                  '%s,%s\n' % (globalvars.suite, pkg.get('Package')))
        return True

    depends = parse_dependencies(pkg.get('Depends', ''))
    pre_depends = parse_dependencies(pkg.get('Pre-Depends', ''))

    depends.extend(pre_depends)

    if depends_on(depends, set(['libsystemd0'])):
        logtofile('libsystemd.txt',
                  '%s,%s\n' % (globalvars.suite, pkg.get('Package')))

    isbanned = depends_on_all_banned(depends, banned_pkgs)
    if isbanned:
        logtofile('bannedpackages.txt',
                  '%s,%s\n' % (globalvars.suite, pkg.get('Package')))
    return isbanned
Пример #3
0
def package_banned(pkg, banned_pkgs):
    """
    Returns True is the package contains a banned dependency.
    Currently checks and parses both the 'Depends:' and the 'Pre-Depends'
    fields of the package.
    """
    if pkg.get('Package') in banned_pkgs:
        logtofile('bannedpackages.txt',
                  '%s,%s\n' % (globalvars.suite, pkg.get('Package')))
        return True

    depends = parse_dependencies(pkg.get('Depends', ''))
    pre_depends = parse_dependencies(pkg.get('Pre-Depends', ''))

    depends = [v for v in depends]
    pre_depends = [v for v in pre_depends]

    deps = set(depends).union(set(pre_depends))

    if 'libsystemd0' in deps:
        logtofile('libsystemd.txt',
                  '%s,%s\n' % (globalvars.suite, pkg.get('Package')))

    if bool(deps.intersection(banned_pkgs)):
        logtofile('bannedpackages.txt',
                  '%s,%s\n' % (globalvars.suite, pkg.get('Package')))
    return bool(deps.intersection(banned_pkgs))