[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