Mercurial > hg-stable
changeset 31922:0f41f1e3c75c
parser: preserve order of keyword arguments
This helps building dict(key1=value1, ...) in deterministic way.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sun, 09 Apr 2017 11:58:27 +0900 |
parents | 2156934b7917 |
children | 68c910fa9ee2 |
files | mercurial/parser.py mercurial/templater.py |
diffstat | 2 files changed, 9 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/parser.py Mon Apr 03 22:07:09 2017 +0900 +++ b/mercurial/parser.py Sun Apr 09 11:58:27 2017 +0900 @@ -154,7 +154,7 @@ "arguments") % {'func': funcname, 'nargs': len(poskeys) + len(keys)}) - args = {} + args = util.sortdict() # consume positional arguments for k, x in zip(poskeys, trees[:kwstart]): args[k] = x @@ -165,7 +165,7 @@ args[k] = x # remainder should be keyword arguments if optkey: - args[optkey] = {} + args[optkey] = util.sortdict() for x in trees[kwstart:]: if x[0] != keyvaluenode or x[1][0] != keynode: raise error.ParseError(_("%(func)s got an invalid argument")
--- a/mercurial/templater.py Mon Apr 03 22:07:09 2017 +0900 +++ b/mercurial/templater.py Sun Apr 09 11:58:27 2017 +0900 @@ -474,15 +474,15 @@ ... x = _parseexpr(expr) ... n = getsymbol(x[1]) ... return _buildfuncargs(x[2], context, exprmethods, n, argspec) - >>> sorted(fargs('a(l=1, k=2)', 'k l m').keys()) - ['k', 'l'] + >>> fargs('a(l=1, k=2)', 'k l m').keys() + ['l', 'k'] >>> args = fargs('a(opts=1, k=2)', '**opts') - >>> args.keys(), sorted(args['opts'].keys()) - (['opts'], ['k', 'opts']) + >>> args.keys(), args['opts'].keys() + (['opts'], ['opts', 'k']) """ def compiledict(xs): - return dict((k, compileexp(x, context, curmethods)) - for k, x in xs.iteritems()) + return util.sortdict((k, compileexp(x, context, curmethods)) + for k, x in xs.iteritems()) def compilelist(xs): return [compileexp(x, context, curmethods) for x in xs] @@ -494,7 +494,7 @@ _poskeys, varkey, _keys, optkey = argspec = parser.splitargspec(argspec) treeargs = parser.buildargsdict(getlist(exp), funcname, argspec, keyvaluenode='keyvalue', keynode='symbol') - compargs = {} + compargs = util.sortdict() if varkey: compargs[varkey] = compilelist(treeargs.pop(varkey)) if optkey: