def _teardown(_exit_st): if nsargs.post: _rc = PackageBuilder.teardown( nsargs.post, cwd, _exit_st) if _exit_st == 0 and _rc != 0: _exit_st = _rc return _exit_st
def _teardown(_exit_st): if nsargs.post: _rc = PackageBuilder.teardown(nsargs.post, cwd, _exit_st) if _exit_st == 0 and _rc != 0: _exit_st = _rc return _exit_st
def matter_main(binary_pms, nsargs, cwd, specs): """ Main application code run after all the resources setup. """ try: binary_pms.validate_system() except BaseBinaryPMS.SystemValidationError as err: print_error("%s" % (err,)) return 1 print_info("matter loaded, starting to scan particles, pid: %s" % ( os.getpid(),)) def _teardown(_exit_st): if nsargs.post: _rc = PackageBuilder.teardown( nsargs.post, cwd, _exit_st) if _exit_st == 0 and _rc != 0: _exit_st = _rc return _exit_st # setup if nsargs.pre: _rc = PackageBuilder.setup(nsargs.pre, cwd) if _rc != 0: return _teardown(_rc) # sync portage if nsargs.sync: _rc = PackageBuilder.sync() if _rc != 0 and not nsargs.sync_best_effort: return _teardown(_rc) exit_st = 0 completed = collections.deque() not_found = collections.deque() not_installed = collections.deque() not_merged = collections.deque() uninstalled = collections.deque() missing_use = {} unstable_keywords = set() pmask_changes = set() license_changes = {} tainted_repositories = set() spec_count = 0 tot_spec = len(specs) preserved_libs = False emerge_config = binary_pms.load_emerge_config() for spec in specs: spec_count += 1 keep_going = spec["keep-going"] == "yes" local_completed = [] local_uninstalled = [] tot_pkgs = len(spec["packages"]) for pkg_count, packages in enumerate(spec["packages"], 1): builder = PackageBuilder( binary_pms, emerge_config, packages, spec, spec_count, tot_spec, pkg_count, tot_pkgs, nsargs.pretend) _rc = builder.run() not_found.extend(builder.get_not_found_packages()) not_installed.extend( builder.get_not_installed_packages()) not_merged.extend( builder.get_not_merged_packages()) uninstalled = builder.get_uninstalled_packages() uninstalled.extend(uninstalled) local_uninstalled.extend(uninstalled) # Merge at least the first layer of dicts. for k, v in builder.get_missing_use_packages().items(): obj = missing_use.setdefault(k, {}) obj.update(v) unstable_keywords.update( builder.get_needed_unstable_keywords()) pmask_changes.update( builder.get_needed_package_mask_changes()) # We need to merge the two dicts, not just update() # or we can lose the full set of licenses associated # to a single cpv. for k, v in builder.get_needed_license_changes().items(): obj = license_changes.setdefault(k, set()) obj.update(v) preserved_libs = binary_pms.check_preserved_libraries( emerge_config) if preserved_libs and not nsargs.disable_preserved_libs: # abort, library breakages detected exit_st = 1 print_error( "preserved libraries detected, aborting") break # ignore _rc, we may have built pkgs even if _rc != 0 built_packages = builder.get_built_packages() if built_packages: print_info("built packages, in queue: %s" % ( " ".join(built_packages),)) local_completed.extend( [x for x in built_packages \ if x not in local_completed]) tainted_repositories.add(spec["repository"]) # make some room print_info("") if _rc < 0: # ignore warning and go ahead continue else: exit_st = _rc if not keep_going: break # call post-build cleanup operations if local_completed or local_uninstalled: PackageBuilder.post_build(spec, emerge_config) completed.extend([x for x in local_completed \ if x not in completed]) # portage calls setcwd() os.chdir(cwd) if preserved_libs and not nsargs.disable_preserved_libs: # completely abort break if local_completed and nsargs.commit: _rc = binary_pms.commit( spec, local_completed) if exit_st == 0 and _rc != 0: exit_st = _rc if not keep_going: break PackageBuilder.clear_caches(emerge_config) if tainted_repositories and nsargs.push and nsargs.commit: if preserved_libs and nsargs.disable_preserved_libs: # cannot push anyway print_warning("Preserved libraries detected, cannot push !") elif not preserved_libs: for repository in tainted_repositories: _rc = binary_pms.push(repository) if exit_st == 0 and _rc != 0: exit_st = _rc # print summary print_generic("") print_generic("Summary") print_generic("Packages built:\n %s" % ( "\n ".join(sorted(completed)),)) print_generic("Packages not built:\n %s" % ( "\n ".join(sorted(not_merged)),)) print_generic("Packages not found:\n %s" % ( "\n ".join(sorted(not_found)),)) print_generic("Packages not installed:\n %s" % ( "\n ".join(sorted(not_installed)),)) print_generic("Packages uninstalled:\n %s" % ( "\n ".join(sorted(uninstalled)),)) if missing_use: print_generic("Packages not built due to missing USE flags:") for atom in sorted(missing_use.keys()): use_data = missing_use[atom] use_l = [] for use in sorted(use_data["changes"]): if use_data["changes"][use]: use_l.append(use) else: use_l.append("-" + use) print_generic("%s %s" % ( use_data["cp:slot"], " ".join(use_l))) print_generic("") if unstable_keywords: print_generic("Packages not built due to missing unstable keywords:") for atom in sorted(unstable_keywords): print_generic("%s" % (atom,)) print_generic("") if pmask_changes: print_generic("Packages not built due to needed package.mask changes:") for atom in sorted(pmask_changes): print_generic("%s" % (atom,)) print_generic("") print_generic("Preserved libs: %s" % ( preserved_libs,)) print_generic("") return _teardown(exit_st)
def matter_main(binary_pms, nsargs, cwd, specs): """ Main application code run after all the resources setup. """ try: binary_pms.validate_system() except BaseBinaryPMS.SystemValidationError as err: print_error("%s" % (err, )) return 1 print_info("matter loaded, starting to scan particles, pid: %s" % (os.getpid(), )) def _teardown(_exit_st): if nsargs.post: _rc = PackageBuilder.teardown(nsargs.post, cwd, _exit_st) if _exit_st == 0 and _rc != 0: _exit_st = _rc return _exit_st # setup if nsargs.pre: _rc = PackageBuilder.setup(nsargs.pre, cwd) if _rc != 0: return _teardown(_rc) # sync portage if nsargs.sync: _rc = PackageBuilder.sync() if _rc != 0 and not nsargs.sync_best_effort: return _teardown(_rc) exit_st = 0 completed = collections.deque() not_found = collections.deque() not_installed = collections.deque() not_merged = collections.deque() uninstalled = collections.deque() missing_use = {} unstable_keywords = set() pmask_changes = set() license_changes = {} tainted_repositories = set() spec_count = 0 tot_spec = len(specs) preserved_libs = False emerge_config = binary_pms.load_emerge_config() for spec in specs: spec_count += 1 keep_going = spec["keep-going"] == "yes" local_completed = [] local_uninstalled = [] tot_pkgs = len(spec["packages"]) for pkg_count, packages in enumerate(spec["packages"], 1): builder = PackageBuilder(binary_pms, emerge_config, packages, spec, spec_count, tot_spec, pkg_count, tot_pkgs, nsargs.pretend) _rc = builder.run() not_found.extend(builder.get_not_found_packages()) not_installed.extend(builder.get_not_installed_packages()) not_merged.extend(builder.get_not_merged_packages()) uninstalled = builder.get_uninstalled_packages() uninstalled.extend(uninstalled) local_uninstalled.extend(uninstalled) # Merge at least the first layer of dicts. for k, v in builder.get_missing_use_packages().items(): obj = missing_use.setdefault(k, {}) obj.update(v) unstable_keywords.update(builder.get_needed_unstable_keywords()) pmask_changes.update(builder.get_needed_package_mask_changes()) # We need to merge the two dicts, not just update() # or we can lose the full set of licenses associated # to a single cpv. for k, v in builder.get_needed_license_changes().items(): obj = license_changes.setdefault(k, set()) obj.update(v) preserved_libs = binary_pms.check_preserved_libraries( emerge_config) if preserved_libs and not nsargs.disable_preserved_libs: # abort, library breakages detected exit_st = 1 print_error("preserved libraries detected, aborting") break # ignore _rc, we may have built pkgs even if _rc != 0 built_packages = builder.get_built_packages() if built_packages: print_info("built packages, in queue: %s" % (" ".join(built_packages), )) local_completed.extend( [x for x in built_packages \ if x not in local_completed]) tainted_repositories.add(spec["repository"]) # make some room print_info("") if _rc < 0: # ignore warning and go ahead continue else: exit_st = _rc if not keep_going: break # call post-build cleanup operations if local_completed or local_uninstalled: PackageBuilder.post_build(spec, emerge_config) completed.extend([x for x in local_completed \ if x not in completed]) # portage calls setcwd() os.chdir(cwd) if preserved_libs and not nsargs.disable_preserved_libs: # completely abort break if local_completed and nsargs.commit: _rc = binary_pms.commit(spec, local_completed) if exit_st == 0 and _rc != 0: exit_st = _rc if not keep_going: break PackageBuilder.clear_caches(emerge_config) if tainted_repositories and nsargs.push and nsargs.commit: if preserved_libs and nsargs.disable_preserved_libs: # cannot push anyway print_warning("Preserved libraries detected, cannot push !") elif not preserved_libs: for repository in tainted_repositories: _rc = binary_pms.push(repository) if exit_st == 0 and _rc != 0: exit_st = _rc # print summary print_generic("") print_generic("Summary") print_generic("Packages built:\n %s" % ("\n ".join(sorted(completed)), )) print_generic("Packages not built:\n %s" % ("\n ".join(sorted(not_merged)), )) print_generic("Packages not found:\n %s" % ("\n ".join(sorted(not_found)), )) print_generic("Packages not installed:\n %s" % ("\n ".join(sorted(not_installed)), )) print_generic("Packages uninstalled:\n %s" % ("\n ".join(sorted(uninstalled)), )) if missing_use: print_generic("Packages not built due to missing USE flags:") for atom in sorted(missing_use.keys()): use_data = missing_use[atom] use_l = [] for use in sorted(use_data["changes"]): if use_data["changes"][use]: use_l.append(use) else: use_l.append("-" + use) print_generic("%s %s" % (use_data["cp:slot"], " ".join(use_l))) print_generic("") if unstable_keywords: print_generic("Packages not built due to missing unstable keywords:") for atom in sorted(unstable_keywords): print_generic("%s" % (atom, )) print_generic("") if pmask_changes: print_generic("Packages not built due to needed package.mask changes:") for atom in sorted(pmask_changes): print_generic("%s" % (atom, )) print_generic("") print_generic("Preserved libs: %s" % (preserved_libs, )) print_generic("") return _teardown(exit_st)