Mercurial > python-hglib
changeset 158:2104fc9aa513
util: make cmdbuilder work with bytes (issue4520)
author | Brett Cannon <brett@python.org> |
---|---|
date | Fri, 27 Mar 2015 10:45:26 -0400 |
parents | 6564544576b9 |
children | 16496e0f3c09 |
files | hglib/util.py |
diffstat | 1 files changed, 25 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/hglib/util.py Wed Mar 25 20:23:41 2015 -0400 +++ b/hglib/util.py Fri Mar 27 10:45:26 2015 -0400 @@ -15,6 +15,7 @@ else: from itertools import izip integertypes = (long, int) + bytes = str # Defined in Python 2.6/2.7, but to the same value. def b(s): """Encode the string as bytes.""" @@ -69,6 +70,12 @@ return b('') +def _cmdval(val): + if isinstance(val, bytes): + return val + else: + return strtobytes(val) + def cmdbuilder(name, *args, **kwargs): """ A helper for building the command arguments @@ -83,27 +90,28 @@ 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'] + >>> cmdbuilder(b('cmd'), a=True, b=False, c=None) == [b('cmd'), b('-a')] + True + >>> cmdbuilder(b('cmd'), long=True) == [b('cmd'), b('--long')] + True + >>> cmdbuilder(b('cmd'), str=b('s')) == [b('cmd'), b('--str'), b('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'), list=[1, 2]) == expect + True + >>> cmdbuilder(b('cmd'), None) == [b('cmd')] + True """ cmd = [name] for arg, val in kwargs.items(): if val is None: continue - arg = arg.replace(b('_'), b('-')) + arg = arg.encode('latin-1').replace(b('_'), b('-')) if arg != b('-'): if len(arg) == 1: arg = b('-') + arg @@ -115,10 +123,10 @@ elif isinstance(val, list): for v in val: cmd.append(arg) - cmd.append(str(v)) + cmd.append(_cmdval(v)) else: cmd.append(arg) - cmd.append(str(val)) + cmd.append(_cmdval(val)) for a in args: if a is not None: