From 4be703cde0c8771cb9f128ac826db18ab91767b7 Mon Sep 17 00:00:00 2001
From: Todd Gamblin <tgamblin@llnl.gov>
Date: Sun, 30 Oct 2016 15:57:59 -0700
Subject: [PATCH] Allow common args to be written the same way regular args
 are.

---
 lib/spack/spack/cmd/common/arguments.py | 68 +++++++------------------
 lib/spack/spack/util/pattern.py         |  6 +++
 2 files changed, 25 insertions(+), 49 deletions(-)

diff --git a/lib/spack/spack/cmd/common/arguments.py b/lib/spack/spack/cmd/common/arguments.py
index 8cb4a4b871..ade6844813 100644
--- a/lib/spack/spack/cmd/common/arguments.py
+++ b/lib/spack/spack/cmd/common/arguments.py
@@ -27,7 +27,7 @@
 
 import spack.store
 import spack.modules
-from spack.util.pattern import Bunch
+from spack.util.pattern import Args
 __all__ = ['add_common_arguments']
 
 _arguments = {}
@@ -60,56 +60,26 @@ def __call__(self, parser, namespace, values, option_string=None):
             specs = [x for x in specs if x.satisfies(values, strict=True)]
         namespace.specs = specs
 
-parms = Bunch(
-    flags=('constraint',),
-    kwargs={
-        'nargs': '*',
-        'help': 'Constraint to select a subset of installed packages',
-        'action': ConstraintAction
-    })
-_arguments['constraint'] = parms
+_arguments['constraint'] = Args(
+    'constraint', nargs='*', action=ConstraintAction,
+    help='Constraint to select a subset of installed packages')
 
-parms = Bunch(
-    flags=('-m', '--module-type'),
-    kwargs={
-        'help': 'Type of module files',
-        'default': 'tcl',
-        'choices': spack.modules.module_types
-    })
-_arguments['module_type'] = parms
+_arguments['module_type'] = Args(
+    '-m', '--module-type', help='Type of module files',
+    default='tcl', choices=spack.modules.module_types)
 
-parms = Bunch(
-    flags=('-y', '--yes-to-all'),
-    kwargs={
-        'action': 'store_true',
-        'dest': 'yes_to_all',
-        'help': 'Assume "yes" is the answer to every confirmation request.'
-    })
-_arguments['yes_to_all'] = parms
+_arguments['yes_to_all'] = Args(
+    '-y', '--yes-to-all', action='store_true', dest='yes_to_all',
+    help='Assume "yes" is the answer to every confirmation request.')
 
-parms = Bunch(
-    flags=('-r', '--dependencies'),
-    kwargs={
-        'action': 'store_true',
-        'dest': 'recurse_dependencies',
-        'help': 'Recursively traverse spec dependencies'
-    })
-_arguments['recurse_dependencies'] = parms
+_arguments['recurse_dependencies'] = Args(
+    '-r', '--dependencies', action='store_true', dest='recurse_dependencies',
+    help='Recursively traverse spec dependencies')
 
-parms = Bunch(
-    flags=('--clean',),
-    kwargs={
-        'action': 'store_false',
-        'dest': 'dirty',
-        'help': 'Clean environment before installing package.'
-    })
-_arguments['clean'] = parms
+_arguments['clean'] = Args(
+    '--clean', action='store_false', dest='dirty',
+    help='Clean environment before installing package.')
 
-parms = Bunch(
-    flags=('--dirty',),
-    kwargs={
-        'action': 'store_true',
-        'dest': 'dirty',
-        'help': 'Do NOT clean environment before installing.'
-    })
-_arguments['dirty'] = parms
+_arguments['dirty'] = Args(
+    '--dirty', action='store_true', dest='dirty',
+    help='Do NOT clean environment before installing.')
diff --git a/lib/spack/spack/util/pattern.py b/lib/spack/spack/util/pattern.py
index 2b7f06d46e..b5731ccf08 100644
--- a/lib/spack/spack/util/pattern.py
+++ b/lib/spack/spack/util/pattern.py
@@ -140,3 +140,9 @@ class Bunch(object):
 
     def __init__(self, **kwargs):
         self.__dict__.update(kwargs)
+
+
+class Args(Bunch):
+    """Subclass of Bunch to write argparse args more naturally."""
+    def __init__(self, *flags, **kwargs):
+        super(Args, self).__init__(flags=tuple(flags), kwargs=kwargs)
-- 
GitLab