diff options
-rw-r--r-- | man/emerge.1 | 7 | ||||
-rw-r--r-- | pym/_emerge/depgraph.py | 23 | ||||
-rw-r--r-- | pym/_emerge/help.py | 9 | ||||
-rw-r--r-- | pym/_emerge/main.py | 12 |
4 files changed, 49 insertions, 2 deletions
diff --git a/man/emerge.1 b/man/emerge.1 index 471490614..6c2727de8 100644 --- a/man/emerge.1 +++ b/man/emerge.1 @@ -477,6 +477,13 @@ output from portage's displays. Redirect all build output to logs alone, and do not display it on stdout. .TP +.BR "\-\-rebuilt\-binaries[=n]" +Replace installed packages with binary packages that have +been rebuilt. Rebuilds are detected by comparison of +BUILD_TIME package metadata. This option is enabled +automatically when using binary packages (see +\fB\-\-usepkg\fR and \fB\-\-getbinpkg\fR). +.TP .BR "\-\-reinstall changed\-use" Tells emerge to include installed packages where USE flags have changed since installation. Unlike \fB\-\-newuse\fR, this option does diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py index 38a48d6fe..ac6744a6b 100644 --- a/pym/_emerge/depgraph.py +++ b/pym/_emerge/depgraph.py @@ -2396,6 +2396,9 @@ class depgraph(object): atom_set = InternalPackageSet(initial_atoms=(atom,)) existing_node = None myeb = None + usepkg = "--usepkg" in self._frozen_config.myopts + rebuilt_binaries = usepkg and \ + self._frozen_config.myopts.get('--rebuilt-binaries') != 'n' usepkgonly = "--usepkgonly" in self._frozen_config.myopts empty = "empty" in self._dynamic_config.myparams selective = "selective" in self._dynamic_config.myparams @@ -2615,10 +2618,26 @@ class depgraph(object): if pkg.cp == cp] break + if existing_node is not None and \ + existing_node in matched_packages: + return existing_node, existing_node + if len(matched_packages) > 1: + if rebuilt_binaries: + inst_pkg = None + built_pkg = None + for pkg in matched_packages: + if pkg.installed: + inst_pkg = pkg + elif pkg.built: + built_pkg = pkg + if built_pkg is not None and inst_pkg is not None: + if built_pkg >= inst_pkg and \ + built_pkg.metadata['BUILD_TIME'] != \ + inst_pkg.metadata['BUILD_TIME']: + return built_pkg, built_pkg + if avoid_update: - if existing_node is not None: - return existing_node, existing_node for pkg in matched_packages: if pkg.installed: return pkg, existing_node diff --git a/pym/_emerge/help.py b/pym/_emerge/help.py index 88b818cfb..a30b6dadc 100644 --- a/pym/_emerge/help.py +++ b/pym/_emerge/help.py @@ -506,6 +506,15 @@ def help(myopts, havecolor=1): for line in wrap(desc, desc_width): print(desc_indent + line) print() + print(" "+green("--rebuilt-binaries[=n]")) + desc = "Replace installed packages with binary packages that have " + \ + "been rebuilt. Rebuilds are detected by comparison of " + \ + "BUILD_TIME package metadata. This option is enabled " + \ + "automatically when using binary packages (see " + \ + "--usepkg and --getbinpkg)." + for line in wrap(desc, desc_width): + print(desc_indent + line) + print() print(" "+green("--reinstall ") + turquoise("changed-use")) print(" Tells emerge to include installed packages where USE flags have") print(" changed since installation. Unlike --newuse, this option does") diff --git a/pym/_emerge/main.py b/pym/_emerge/main.py index f96654eea..a92ae0351 100644 --- a/pym/_emerge/main.py +++ b/pym/_emerge/main.py @@ -395,6 +395,7 @@ def insert_optional_args(args): '--getbinpkgonly' : ('n',), '--jobs' : valid_integers, '--keep-going' : ('n',), + '--rebuilt-binaries' : ('n',), '--root-deps' : ('rdeps',), '--select' : ('n',), '--selective' : ('n',), @@ -620,6 +621,13 @@ def parse_opts(tmpcmdline, silent=False): "choices" : ("True", "n") }, + "--rebuilt-binaries": { + "help" : "replace installed packages with binary " + \ + "packages that have been rebuilt", + "type" : "choice", + "choices" : ("True", "n") + }, + "--root": { "help" : "specify the target root filesystem for merging packages", "action" : "store" @@ -732,6 +740,10 @@ def parse_opts(tmpcmdline, silent=False): else: myoptions.keep_going = None + if myoptions.rebuilt_binaries in ("True",): + # The depgraph will enable this by default unless 'n' is specified. + myoptions.rebuilt_binaries = None + if myoptions.root_deps == "True": myoptions.root_deps = True |