by default in order to minimize the impact of any bugs.
* If _wrapped_select_pkg_highest_available_imp returns an installed
package when the user has not explicitly requested for this package
to be replaced (typically via an atom on the command line), reject
the installed package and try to unmask one.
intended to be set in the \fBmake.conf\fR(5)
\fBEMERGE_DEFAULT_OPTS\fR variable.
.TP
+.BR "\-\-autounmask[=n]"
+Automatically unmask packages. If any configuration
+changes are required, then they will be displayed
+after the merge list and emerge will immediately
+abort. If the displayed configuration changes are
+satisfactory, you should copy and paste them into
+the specified configuration file(s). Currently,
+this only works for unstable KEYWORDS masks.
+.TP
.BR \-\-backtrack=COUNT
Specifies an integer number of times to backtrack if
dependency calculation fails due to a conflict or an
self._dynamic_config._visible_pkgs[pkg.root].cpv_inject(pkg)
return ret
+ def _want_installed_pkg(self, pkg):
+ """
+ Given an installed package returned from select_pkg, return
+ True if the user has not explicitly requested for this package
+ to be replaced (typically via an atom on the command line).
+ """
+ if "selective" not in self._dynamic_config.myparams and \
+ pkg.root == self._frozen_config.target_root:
+ try:
+ next(self._iter_atoms_for_pkg(pkg))
+ except StopIteration:
+ pass
+ except portage.exception.InvalidDependString:
+ pass
+ else:
+ return False
+ return True
+
def _select_pkg_highest_available_imp(self, root, atom, onlydeps=False):
pkg, existing = self._wrapped_select_pkg_highest_available_imp(root, atom, onlydeps=onlydeps)
- if pkg is None:
- pkg, existing = self._wrapped_select_pkg_highest_available_imp(root, atom, \
- onlydeps=onlydeps, allow_missing_keywords=True)
-
- if pkg is not None and not pkg.visible:
- self._dynamic_config._needed_user_config_changes.setdefault(pkg, set()).add("unstable keyword")
+ if self._frozen_config.myopts.get('--autounmask', 'n') is True:
+ if pkg is not None and \
+ pkg.installed and \
+ not self._want_installed_pkg(pkg):
+ pkg = None
+ if pkg is None:
+ pkg, existing = \
+ self._wrapped_select_pkg_highest_available_imp(
+ root, atom, onlydeps=onlydeps,
+ allow_missing_keywords=True)
+
+ if pkg is not None and not pkg.visible:
+ self._dynamic_config._needed_user_config_changes.setdefault(pkg, set()).add("unstable keyword")
return pkg, existing
"EMERGE_DEFAULT_OPTS variable."
for line in wrap(desc, desc_width):
print(desc_indent + line)
+ print()
+ print(" " + green("--autounmask") + "[=%s]" % turquoise("n"))
+ desc = "Automatically unmask packages. If any configuration " + \
+ "changes are required, then they will be displayed " + \
+ "after the merge list and emerge will immediately " + \
+ "abort. If the displayed configuration changes are " + \
+ "satisfactory, you should copy and paste them into " + \
+ "the specified configuration file(s). Currently, " + \
+ "this only works for unstable KEYWORDS masks."
+ for line in wrap(desc, desc_width):
+ print(desc_indent + line)
print()
print(" " + green("--backtrack") + " " + turquoise("COUNT"))
desc = "Specifies an integer number of times to backtrack if " + \
new_args = []
default_arg_opts = {
+ '--autounmask' : ('n',),
'--complete-graph' : ('n',),
'--deep' : valid_integers,
'--depclean-lib-check' : ('n',),
longopt_aliases = {"--cols":"--columns", "--skip-first":"--skipfirst"}
argument_options = {
+
+ "--autounmask": {
+ "help" : "automatically unmask packages",
+ "type" : "choice",
+ "choices" : ("True", "n")
+ },
+
"--accept-properties": {
"help":"temporarily override ACCEPT_PROPERTIES",
"action":"store"
myoptions, myargs = parser.parse_args(args=tmpcmdline)
+ if myoptions.autounmask in ("True",):
+ myoptions.autounmask = True
+
if myoptions.changed_use is not False:
myoptions.reinstall = "changed-use"
myoptions.changed_use = False