Mercurial > public > mercurial-scm > python-hglib
diff hglib/util.py @ 193:32e8d51ec16c
util: make cmdbuilder() robust for faulty parsing of early options
Also fixed handling of positional arguments.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sat, 11 Nov 2017 19:52:48 +0900 |
parents | 0f81ed8e147b |
children | 2d0ec6097d78 |
line wrap: on
line diff
--- a/hglib/util.py Sat Nov 11 20:21:26 2017 +0900 +++ b/hglib/util.py Sat Nov 11 19:52:48 2017 +0900 @@ -94,43 +94,50 @@ True >>> cmdbuilder(b('cmd'), long=True) == [b('cmd'), b('--long')] True - >>> cmdbuilder(b('cmd'), str=b('s')) == [b('cmd'), b('--str'), b('s')] + >>> cmdbuilder(b('cmd'), s=b('hort')) == [b('cmd'), b('-short')] + True + >>> cmdbuilder(b('cmd'), str=b('s')) == [b('cmd'), b('--str=s')] True >>> cmdbuilder(b('cmd'), d_ash=True) == [b('cmd'), b('--d-ash')] True >>> cmdbuilder(b('cmd'), _=True) == [b('cmd'), b('-')] True - >>> expect = [b('cmd'), b('--list'), b('1'), b('--list'), b('2')] + >>> cmdbuilder(b('cmd'), l=[1, 2]) == [b('cmd'), b('-l1'), b('-l2')] + True + >>> expect = [b('cmd'), b('--list=1'), b('--list=2')] >>> cmdbuilder(b('cmd'), list=[1, 2]) == expect True >>> cmdbuilder(b('cmd'), None) == [b('cmd')] True + >>> cmdbuilder(b('cmd'), b('-a')) == [b('cmd'), b('--'), b('-a')] + True """ cmd = [name] for arg, val in kwargs.items(): if val is None: continue - arg = arg.encode('latin-1').replace(b('_'), b('-')) + arg = pfx = arg.encode('latin-1').replace(b('_'), b('-')) if arg != b('-'): if len(arg) == 1: - arg = b('-') + arg + arg = pfx = b('-') + arg else: arg = b('--') + arg + pfx = arg + b('=') if isinstance(val, bool): if val: cmd.append(arg) elif isinstance(val, list): for v in val: - cmd.append(arg) - cmd.append(_cmdval(v)) + cmd.append(pfx + _cmdval(v)) else: - cmd.append(arg) - cmd.append(_cmdval(val)) + cmd.append(pfx + _cmdval(val)) + args = [a for a in args if a is not None] + if args: + cmd.append(b('--')) for a in args: - if a is not None: - cmd.append(a) + cmd.append(a) return cmd