commit:     1f4cfaff9b6b6d340d3a8e495043b540a6d40e8d
Author:     Alexander Berntsen <bernalex <AT> gentoo <DOT> org>
AuthorDate: Wed Oct 22 08:13:52 2014 +0000
Commit:     Alexander Berntsen <bernalex <AT> gentoo <DOT> org>
CommitDate: Wed Oct 22 12:41:00 2014 +0000
URL:        
http://sources.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=1f4cfaff

Implement --rage-clean

Implement --rage-clean which lets you --unmerge really furiously. Works
like --unmerge but without a delay.

Signed-off-by: Alexander Berntsen <bernalex <AT> gentoo.org>
Acked-by:      Zac Medico         <zmedico <AT> gentoo.org>

---
 RELEASE-NOTES          |  4 ++++
 man/emerge.1           | 15 ++++++++++-----
 pym/_emerge/actions.py | 14 +++++++-------
 pym/_emerge/main.py    |  2 +-
 pym/_emerge/unmerge.py | 35 +++++++++++++++++++++--------------
 5 files changed, 43 insertions(+), 27 deletions(-)

diff --git a/RELEASE-NOTES b/RELEASE-NOTES
index 899b48a..7912398 100644
--- a/RELEASE-NOTES
+++ b/RELEASE-NOTES
@@ -1,6 +1,10 @@
 Release Notes; upgrade information mainly.
 Features/major bugfixes are listed in NEWS
 
+portage-2.2.15
+==================================
+* New option --rage-clean that does --unmerge without delay.
+
 portage-2.2.14
 ==================================
 * Bug Fixes:

diff --git a/man/emerge.1 b/man/emerge.1
index 12e8b45..bbe71ac 100644
--- a/man/emerge.1
+++ b/man/emerge.1
@@ -258,11 +258,12 @@ portage tree as a tarball, which is much faster than 
emerge
 .TP
 .BR "\-\-unmerge " (\fB\-C\fR)
 \fBWARNING: This action can remove important packages!\fR Removes
-all matching packages.  This does no checking of dependencies, so
-it may remove packages necessary for the proper operation of your
-system.  Its arguments can be \fIatoms\fR or
-\fIebuilds\fR. For a dependency aware version of \fB\-\-unmerge\fR,
-use \fB\-\-depclean\fR or \fB\-\-prune\fR.
+all matching packages following a counter governed by \fBCLEAN_DELAY\fR.
+This does no checking of dependencies, so it may remove packages necessary
+for the proper operation of your system.  Its arguments can be \fIatoms\fR
+or \fIebuilds\fR. For a dependency aware version of \fB\-\-unmerge\fR, use
+\fB\-\-depclean\fR or \fB\-\-prune\fR.  For a version with
+\fBCLEAN_DELAY=0\fR, use \fB\-\-rage\-clean\fR.
 .TP
 .BR "\-\-version " (\fB\-V\fR)
 Displays the version number of \fBemerge\fR.
@@ -716,6 +717,10 @@ Disable the warning message that's shown prior to
 to be set in the \fBmake.conf\fR(5)
 \fBEMERGE_DEFAULT_OPTS\fR variable.
 .TP
+.BR "\-\-rage\-clean"
+\fBWARNING: This action can remove important packages!\fR
+\fB\-\-rage\-clean\fR does \fB\-\-unmerge\fR with \fBCLEAN_DELAY=0\fR.
+.TP
 .BR "\-\-read\-news [ y | n ]"
 Offer to read news via eselect if there are unread news. This option
 has no effect unless \fB\-\-ask\fR is enabled.

diff --git a/pym/_emerge/actions.py b/pym/_emerge/actions.py
index ee57cec..48b0826 100644
--- a/pym/_emerge/actions.py
+++ b/pym/_emerge/actions.py
@@ -2701,7 +2701,7 @@ def _sync_repo(emerge_config, repo):
 def action_uninstall(settings, trees, ldpath_mtimes,
        opts, action, files, spinner):
        # For backward compat, some actions do not require leading '='.
-       ignore_missing_eq = action in ('clean', 'unmerge')
+       ignore_missing_eq = action in ('clean', 'rage-clean', 'unmerge')
        root = settings['ROOT']
        eroot = settings['EROOT']
        vardb = trees[settings['EROOT']]['vartree'].dbapi
@@ -2857,10 +2857,10 @@ def action_uninstall(settings, trees, ldpath_mtimes,
                settings.backup_changes("PORTAGE_BACKGROUND")
                settings.lock()
 
-       if action in ('clean', 'unmerge') or \
+       if action in ('clean', 'rage-clean', 'unmerge') or \
                (action == 'prune' and "--nodeps" in opts):
                # When given a list of atoms, unmerge them in the order given.
-               ordered = action == 'unmerge'
+               ordered = action in ('rage-clean', 'unmerge')
                rval = unmerge(trees[settings['EROOT']]['root_config'], opts, 
action,
                        valid_atoms, ldpath_mtimes, ordered=ordered,
                        scheduler=sched_iface)
@@ -3490,7 +3490,7 @@ def expand_set_arguments(myfiles, myaction, root_config):
        for e in setconfig.errors:
                print(colorize("BAD", "Error during set creation: %s" % e))
 
-       unmerge_actions = ("unmerge", "prune", "clean", "depclean")
+       unmerge_actions = ("unmerge", "prune", "clean", "depclean", 
"rage-clean")
 
        for a in myfiles:
                if a.startswith(SETPREFIX):
@@ -3750,7 +3750,7 @@ def run_action(emerge_config):
        # only expand sets for actions taking package arguments
        oldargs = emerge_config.args[:]
        if emerge_config.action in ("clean", "config", "depclean",
-               "info", "prune", "unmerge", None):
+               "info", "prune", "unmerge", "rage-clean", None):
                newargs, retval = expand_set_arguments(
                        emerge_config.args, emerge_config.action,
                        emerge_config.target_config)
@@ -3831,7 +3831,7 @@ def run_action(emerge_config):
                if "--pretend" not in emerge_config.opts and \
                        emerge_config.action not in ("search", "info"):
                        need_superuser = emerge_config.action in ('clean', 
'depclean',
-                               'deselect', 'prune', 'unmerge') or not \
+                               'deselect', 'prune', 'unmerge', "rage-clean") 
or not \
                                (fetchonly or \
                                (buildpkgonly and portage.data.secpass >= 1) or 
\
                                emerge_config.action in ("metadata", "regen", 
"sync"))
@@ -3977,7 +3977,7 @@ def run_action(emerge_config):
                        emerge_config.opts, emerge_config.args, spinner)
 
        elif emerge_config.action in \
-               ('clean', 'depclean', 'deselect', 'prune', 'unmerge'):
+               ('clean', 'depclean', 'deselect', 'prune', 'unmerge', 
'rage-clean'):
                validate_ebuild_environment(emerge_config.trees)
                rval = action_uninstall(emerge_config.target_config.settings,
                        emerge_config.trees, 
emerge_config.target_config.mtimedb["ldpath"],

diff --git a/pym/_emerge/main.py b/pym/_emerge/main.py
index f5f2ec4..cf7966c 100644
--- a/pym/_emerge/main.py
+++ b/pym/_emerge/main.py
@@ -293,7 +293,7 @@ def parse_opts(tmpcmdline, silent=False):
        actions = frozenset([
                "clean", "check-news", "config", "depclean", "help",
                "info", "list-sets", "metadata", "moo",
-               "prune", "regen",  "search",
+               "prune", "rage-clean", "regen",  "search",
                "sync",  "unmerge", "version",
        ])
 

diff --git a/pym/_emerge/unmerge.py b/pym/_emerge/unmerge.py
index 30b1930..df29000 100644
--- a/pym/_emerge/unmerge.py
+++ b/pym/_emerge/unmerge.py
@@ -89,16 +89,18 @@ def _unmerge_display(root_config, myopts, unmerge_action,
                        else:
                                syslist.append(mycp)
                syslist = frozenset(syslist)
-       
+
                if not unmerge_files:
-                       if unmerge_action == "unmerge":
+                       if unmerge_action in ["rage-clean", "unmerge"]:
                                print()
-                               print(bold("emerge unmerge") + " can only be 
used with specific package names")
+                               print(bold("emerge %s") +
+                                               " can only be used with 
specific package names" %
+                                               unmerge_action)
                                print()
                                return 1, {}
                        else:
                                global_unmerge = 1
-       
+
                localtree = vartree
                # process all arguments and add all
                # valid db entries to candidate_catpkgs
@@ -108,7 +110,8 @@ def _unmerge_display(root_config, myopts, unmerge_action,
                else:
                        #we've got command-line arguments
                        if not unmerge_files:
-                               print("\nNo packages to unmerge have been 
provided.\n")
+                               print("\nNo packages to %s have been 
provided.\n" %
+                                               unmerge_action)
                                return 1, {}
                        for x in unmerge_files:
                                arg_parts = x.split('/')
@@ -208,7 +211,7 @@ def _unmerge_display(root_config, myopts, unmerge_action,
                        pkgmap.append(
                                {"protected": set(), "selected": set(), 
"omitted": set()})
                        mykey = len(pkgmap) - 1
-                       if unmerge_action=="unmerge":
+                       if unmerge_action in ["rage-clean", "unmerge"]:
                                        for y in mymatch:
                                                if y not in all_selected:
                                                        
pkgmap[mykey]["selected"].add(y)
@@ -330,13 +333,17 @@ def _unmerge_display(root_config, myopts, unmerge_action,
 
                        if unmerge_action != "clean" and root_config.root == 
"/":
                                skip_pkg = False
-                               if 
portage.match_from_list(portage.const.PORTAGE_PACKAGE_ATOM, [pkg]):
-                                       msg = ("Not unmerging package %s since 
there is no valid reason "
-                                               "for Portage to unmerge 
itself.") % (pkg.cpv,)
+                               if 
portage.match_from_list(portage.const.PORTAGE_PACKAGE_ATOM,
+                                               [pkg]):
+                                       msg = ("Not unmerging package %s "
+                                                       "since there is no 
valid reason for Portage to "
+                                                       "%s itself.") % 
(pkg.cpv, unmerge_action)
                                        skip_pkg = True
-                               elif 
vartree.dbapi._dblink(cpv).isowner(portage._python_interpreter):
-                                       msg = ("Not unmerging package %s since 
there is no valid reason "
-                                               "for Portage to unmerge 
currently used Python interpreter.") % (pkg.cpv,)
+                               elif vartree.dbapi._dblink(cpv).isowner(
+                                               portage._python_interpreter):
+                                       msg = ("Not unmerging package %s since 
there is no valid "
+                                                       "reason for Portage to 
%s currently used Python "
+                                                       "interpreter.") % 
(pkg.cpv, unmerge_action)
                                        skip_pkg = True
                                if skip_pkg:
                                        for line in textwrap.wrap(msg, 75):
@@ -539,8 +546,8 @@ def unmerge(root_config, myopts, unmerge_action,
                        print("Quitting.")
                        print()
                        return 128 + signal.SIGINT
-       #the real unmerging begins, after a short delay....
-       if clean_delay and not autoclean:
+       #the real unmerging begins, after a short delay unless we're raging....
+       if not unmerge_action == "rage-clean" and clean_delay and not autoclean:
                countdown(int(settings["CLEAN_DELAY"]), ">>> Unmerging")
 
        all_selected = set()

Reply via email to