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
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
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))