[PATCH 3 of 5 hglib] util: add cmdbuilder, a helper function to generate the command to run

Idan Kamara idankk86 at gmail.com
Mon Aug 8 16:39:48 CDT 2011


# HG changeset patch
# User Idan Kamara <idankk86 at gmail.com>
# Date 1312839565 -10800
# Node ID c99bc12d7dfe52f22c81597d40022d0ace9f1c88
# Parent  7c20afc3dd6bbe5bb382d6e088d4a5db589bc34e
util: add cmdbuilder, a helper function to generate the command to run

diff -r 7c20afc3dd6b -r c99bc12d7dfe hglib/util.py
--- a/hglib/util.py	Sat Jul 23 22:55:36 2011 +0300
+++ b/hglib/util.py	Tue Aug 09 00:39:25 2011 +0300
@@ -4,3 +4,57 @@
     ''' list(grouper(2, range(4))) -> [(0, 1), (2, 3)] '''
     args = [iter(iterable)] * n
     return itertools.izip(*args)
+
+def cmdbuilder(name, *args, **kwargs):
+    """
+    A helper for building the command arguments
+
+    args are the positional arguments
+
+    kwargs are the options
+    keys that are single lettered are prepended with '-', others with '--',
+    underscores are replaced with dashes
+
+    keys with False boolean values are ignored, lists add the key multiple times
+
+    None arguments are skipped
+
+    >>> cmdbuilder('cmd', a=True, b=False, c=None)
+    ['cmd', '-a']
+    >>> cmdbuilder('cmd', long=True)
+    ['cmd', '--long']
+    >>> cmdbuilder('cmd', str='s')
+    ['cmd', '--str', 's']
+    >>> cmdbuilder('cmd', d_ash=True)
+    ['cmd', '--d-ash']
+    >>> cmdbuilder('cmd', _=True)
+    ['cmd', '-']
+    >>> cmdbuilder('cmd', list=[1, 2])
+    ['cmd', '--list', '1', '--list', '2']
+    >>> cmdbuilder('cmd', None)
+    ['cmd']
+    """
+    cmd = [name]
+    for arg, val in kwargs.items():
+        if val is None:
+            continue
+
+        arg = arg.replace('_', '-')
+        if arg != '-':
+            arg = '-' + arg if len(arg) == 1 else '--' + arg
+        if isinstance(val, bool):
+            if val:
+                cmd.append(arg)
+        elif isinstance(val, list):
+            for v in val:
+                cmd.append(arg)
+                cmd.append(str(v))
+        else:
+            cmd.append(arg)
+            cmd.append(str(val))
+
+    for a in args:
+        if a is not None:
+            cmd.append(a)
+
+    return cmd


More information about the Mercurial-devel mailing list