Mercurial > hg
changeset 34505:91250ff7d48a
py3: fix keyword arguments handling in mq
This patch fixes the handling of keyword arguments to functions on Python 3. On
python3, the keys of keyword arguments need to str which is unicode. So any
keyword argument will get will have str keys and any dictionary we pass as
kwargs must have all the keys as str.
This patch uses pycompat.(strkwargs|byteskwargs) to do so conversion between
bytes keys and str keys and use r'' if there are very less uses and conversion
can be prevented.
Differential Revision: https://phab.mercurial-scm.org/D972
author | Pulkit Goyal <7895pulkit@gmail.com> |
---|---|
date | Mon, 02 Oct 2017 04:46:17 +0530 |
parents | 8cef8f7d51d0 |
children | 1d804c22c671 |
files | hgext/mq.py |
diffstat | 1 files changed, 30 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/mq.py Thu Oct 05 20:41:50 2017 -0700 +++ b/hgext/mq.py Mon Oct 02 04:46:17 2017 +0530 @@ -2266,6 +2266,7 @@ Returns 0 on success.""" q = repo.mq + opts = pycompat.byteskwargs(opts) if patch: if patch not in q.series: @@ -2299,6 +2300,7 @@ Returns 0 on success.""" q = repo.mq + opts = pycompat.byteskwargs(opts) if patch: if patch not in q.series: raise error.Abort(_("patch %s is not in series file") % patch) @@ -2361,6 +2363,7 @@ Returns 0 if import succeeded. """ + opts = pycompat.byteskwargs(opts) with repo.lock(): # cause this may move phase q = repo.mq try: @@ -2415,7 +2418,7 @@ This command is deprecated. Without -c, it's implied by other relevant commands. With -c, use :hg:`init --mq` instead.""" - return qinit(ui, repo, create=opts.get('create_repo')) + return qinit(ui, repo, create=opts.get(r'create_repo')) @command("qclone", [('', 'pull', None, _('use pull protocol to copy metadata')), @@ -2445,6 +2448,7 @@ Return 0 on success. ''' + opts = pycompat.byteskwargs(opts) def patchdir(repo): """compute a patch repo url from a repo object""" url = repo.url() @@ -2526,8 +2530,8 @@ """print the entire series file Returns 0 on success.""" - repo.mq.qseries(repo, missing=opts.get('missing'), - summary=opts.get('summary')) + repo.mq.qseries(repo, missing=opts.get(r'missing'), + summary=opts.get(r'summary')) return 0 @command("qtop", seriesopts, _('hg qtop [-s]')) @@ -2543,7 +2547,7 @@ if t: q.qseries(repo, start=t - 1, length=1, status='A', - summary=opts.get('summary')) + summary=opts.get(r'summary')) else: ui.write(_("no patches applied\n")) return 1 @@ -2558,7 +2562,7 @@ if end == len(q.series): ui.write(_("all patches applied\n")) return 1 - q.qseries(repo, start=end, length=1, summary=opts.get('summary')) + q.qseries(repo, start=end, length=1, summary=opts.get(r'summary')) @command("qprev", seriesopts, _('hg qprev [-s]')) def prev(ui, repo, **opts): @@ -2575,7 +2579,7 @@ return 1 idx = q.series.index(q.applied[-2].name) q.qseries(repo, start=idx, length=1, status='A', - summary=opts.get('summary')) + summary=opts.get(r'summary')) def setupheaderopts(ui, opts): if not opts.get('user') and opts.get('currentuser'): @@ -2621,11 +2625,12 @@ Returns 0 on successful creation of a new patch. """ + opts = pycompat.byteskwargs(opts) msg = cmdutil.logmessage(ui, opts) q = repo.mq opts['msg'] = msg setupheaderopts(ui, opts) - q.new(repo, patch, *args, **opts) + q.new(repo, patch, *args, **pycompat.strkwargs(opts)) q.savedirty() return 0 @@ -2666,11 +2671,12 @@ Returns 0 on success. """ + opts = pycompat.byteskwargs(opts) q = repo.mq message = cmdutil.logmessage(ui, opts) setupheaderopts(ui, opts) with repo.wlock(): - ret = q.refresh(repo, pats, msg=message, **opts) + ret = q.refresh(repo, pats, msg=message, **pycompat.strkwargs(opts)) q.savedirty() return ret @@ -2694,7 +2700,7 @@ Returns 0 on success. """ ui.pager('qdiff') - repo.mq.diff(repo, pats, opts) + repo.mq.diff(repo, pats, pycompat.byteskwargs(opts)) return 0 @command('qfold', @@ -2716,6 +2722,7 @@ current patch header, separated by a line of ``* * *``. Returns 0 on success.""" + opts = pycompat.byteskwargs(opts) q = repo.mq if not files: raise error.Abort(_('qfold requires at least one patch name')) @@ -2774,6 +2781,7 @@ '''push or pop patches until named patch is at top of stack Returns 0 on success.''' + opts = pycompat.byteskwargs(opts) opts = fixkeepchangesopts(ui, opts) q = repo.mq patch = q.lookup(patch) @@ -2839,7 +2847,7 @@ applied = set(p.name for p in q.applied) patch = None args = list(args) - if opts.get('list'): + if opts.get(r'list'): if args or opts.get('none'): raise error.Abort(_('cannot mix -l/--list with options or ' 'arguments')) @@ -2933,6 +2941,7 @@ q = repo.mq mergeq = None + opts = pycompat.byteskwargs(opts) opts = fixkeepchangesopts(ui, opts) if opts.get('merge'): if opts.get('name'): @@ -2973,6 +2982,7 @@ Return 0 on success. """ + opts = pycompat.byteskwargs(opts) opts = fixkeepchangesopts(ui, opts) localupdate = True if opts.get('name'): @@ -3052,8 +3062,8 @@ This command is deprecated, use :hg:`rebase` instead.""" rev = repo.lookup(rev) q = repo.mq - q.restore(repo, rev, delete=opts.get('delete'), - qupdate=opts.get('update')) + q.restore(repo, rev, delete=opts.get(r'delete'), + qupdate=opts.get(r'update')) q.savedirty() return 0 @@ -3069,6 +3079,7 @@ This command is deprecated, use :hg:`rebase` instead.""" q = repo.mq + opts = pycompat.byteskwargs(opts) message = cmdutil.logmessage(ui, opts) ret = q.save(repo, msg=message) if ret: @@ -3138,6 +3149,7 @@ Returns 0 on success.''' q = repo.mq + opts = pycompat.byteskwargs(opts) guards = q.active() pushable = lambda i: q.pushable(q.applied[i].name)[0] if args or opts.get('none'): @@ -3226,9 +3238,9 @@ Returns 0 on success. """ - if not opts.get('applied') and not revrange: + if not opts.get(r'applied') and not revrange: raise error.Abort(_('no revisions specified')) - elif opts.get('applied'): + elif opts.get(r'applied'): revrange = ('qbase::qtip',) + revrange q = repo.mq @@ -3357,6 +3369,7 @@ fh.close() repo.vfs.rename('patches.queues.new', _allqueues) + opts = pycompat.byteskwargs(opts) if not name or opts.get('list') or opts.get('active'): current = _getcurrent() if opts.get('active'): @@ -3528,13 +3541,13 @@ def mqimport(orig, ui, repo, *args, **kwargs): if (util.safehasattr(repo, 'abortifwdirpatched') - and not kwargs.get('no_commit', False)): + and not kwargs.get(r'no_commit', False)): repo.abortifwdirpatched(_('cannot import over an applied patch'), - kwargs.get('force')) + kwargs.get(r'force')) return orig(ui, repo, *args, **kwargs) def mqinit(orig, ui, *args, **kwargs): - mq = kwargs.pop('mq', None) + mq = kwargs.pop(r'mq', None) if not mq: return orig(ui, *args, **kwargs)