summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2010-03-02 20:26:08 +0000
committerZac Medico <zmedico@gentoo.org>2010-03-02 20:26:08 +0000
commit16891c2aee866c2074198cc50b12254f040e9be1 (patch)
tree20501d5b33595cef4818ef14a135a907a19289cd /pym/_emerge
parentAdd @rebuilt-binaries set which uses BUILD_TIME to pull in binary packages (diff)
downloadportage-multirepo-16891c2aee866c2074198cc50b12254f040e9be1.tar.gz
portage-multirepo-16891c2aee866c2074198cc50b12254f040e9be1.tar.bz2
portage-multirepo-16891c2aee866c2074198cc50b12254f040e9be1.zip
Add a --rebuilt-binaries[=n] option, causing automatic replacement of
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, so rebuilt binaries are installed with a user's typical update command. This isn't possible with the existing @rebuild-binaries package set since that only works with --selective=n and therefore can't be used with a typical world update. The package set framework should support this type of behavior sometime in the future. (trunk r15364) svn path=/main/branches/2.1.7/; revision=15591
Diffstat (limited to 'pym/_emerge')
-rw-r--r--pym/_emerge/depgraph.py23
-rw-r--r--pym/_emerge/help.py9
-rw-r--r--pym/_emerge/main.py12
3 files changed, 42 insertions, 2 deletions
diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
index c53abb87..d297986a 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 d61f090b..64f3e1d5 100644
--- a/pym/_emerge/help.py
+++ b/pym/_emerge/help.py
@@ -503,6 +503,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 b7cc8f7c..7d1c2c7e 100644
--- a/pym/_emerge/main.py
+++ b/pym/_emerge/main.py
@@ -317,6 +317,7 @@ def insert_optional_args(args):
'--getbinpkgonly' : ('n',),
'--jobs' : valid_integers,
'--keep-going' : ('n',),
+ '--rebuilt-binaries' : ('n',),
'--root-deps' : ('rdeps',),
'--select' : ('n',),
'--selective' : ('n',),
@@ -542,6 +543,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"
@@ -654,6 +662,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