#!/usr/bin/python2 import sys import subprocess import os import tempfile args = sys.argv[1:] do_spm_repo = "--no-spm-repo" not in args if not do_spm_repo: args.remove("--no-spm-repo") keyslot = "--keyslot" in args if keyslot: args.remove("--keyslot") if len(args) < 3: print("bump_kernel_tag_mods [--no-spm-repo] [--keyslot]") raise SystemExit(1) kernel_tag = args.pop(0) compile_tag = args.pop(0) source_repo = args.pop(0) dest_repo = args.pop(0) sys.argv.append("--no-pid-handling") os.environ['KERNEL_DIR'] = "/usr/src/linux-" + compile_tag os.environ['ETP_REPO'] = source_repo import entropy.dep from entropy.server.interfaces import Server srv = Server() pkgs_map = {} try: repo = srv.open_repository(srv.repository()) pkg_ids = repo.searchTaggedPackages(kernel_tag) if not pkg_ids: print("!!! no packages for kernel_tag") injected_atoms = [] for pkg_id in injected_atoms: atom_str = entropy.dep.remove_tag(repo.retrieveAtom(pkg_id)) if do_spm_repo: spm_repo = repo.retrieveSpmRepository(pkg_id) if spm_repo is not None: atom_str += "::" + spm_repo injected_atoms.append(atom_str) if keyslot: injected_atoms = [entropy.dep.remove_tag_from_slot(repo.retrieveKeySlotAggregated(pkg_id)) for pkg_id in pkg_ids] else: injected_atoms = ["~" + entropy.dep.remove_tag(repo.retrieveAtom(pkg_id)) for pkg_id in pkg_ids] finally: srv.shutdown() if injected_atoms: print("packages: %s" % (' '.join(injected_atoms),)) else: print("nothing to do !!") raise SystemExit(0) tmp_dir = tempfile.mkdtemp() os.environ['PKGDIR'] = tmp_dir rc = subprocess.call(["emerge", "-Bav", "--keep-going"] + [x for x in injected_atoms]) if rc != 0: raise SystemExit(rc) tbz2s = [] for category in os.listdir(tmp_dir): path = os.path.join(tmp_dir, category) if not os.path.isdir(path): continue for sub_file in os.listdir(path): if not sub_file.endswith(".tbz2"): continue tbz2s.append(os.path.join(path, sub_file)) if tbz2s: os.environ['ETP_REPO'] = dest_repo rc = subprocess.call(["eit", "inject"] + tbz2s) if rc != 0: raise SystemExit(rc) raise SystemExit(0)