Patchwork [3,of,3,V3] py3: make keys of keyword arguments strings

login
register
mail settings
Submitter Pulkit Goyal
Date Dec. 8, 2016, 7:12 p.m.
Message ID <efbbd296135529d31b45.1481224359@pulkit-goyal>
Download mbox | patch
Permalink /patch/17880/
State Superseded
Headers show

Comments

Pulkit Goyal - Dec. 8, 2016, 7:12 p.m.
# HG changeset patch
# User Pulkit Goyal <7895pulkit@gmail.com>
# Date 1481085372 -19800
#      Wed Dec 07 10:06:12 2016 +0530
# Node ID efbbd296135529d31b453d8c0c2a072b43b63936
# Parent  a359ab71022408a864d58baba3b365ee262560df
py3: make keys of keyword arguments strings

keys of keyword arguments on Python 3 has to be string. We are dealing with
bytes in our codebase so the keys are also bytes. We need to convert the keys
to unicodes to make the code run. We have to also reverse this process so that
functions on args dictionary like get() etc. don't result in key not found.

Also after this patch, `hg version` now runs on Python 3.5. Hurray!

Patch

diff -r a359ab710224 -r efbbd2961355 mercurial/dispatch.py
--- a/mercurial/dispatch.py	Wed Dec 07 21:53:03 2016 +0530
+++ b/mercurial/dispatch.py	Wed Dec 07 10:06:12 2016 +0530
@@ -803,6 +803,7 @@ 
 
         msg = ' '.join(' ' in a and repr(a) or a for a in fullargs)
         ui.log("command", '%s\n', msg)
+        cmdoptions = pycompat.strkwargs(cmdoptions)
         d = lambda: util.checksignature(func)(ui, *args, **cmdoptions)
         try:
             return runcommand(lui, repo, cmd, fullargs, ui, options, d,
diff -r a359ab710224 -r efbbd2961355 tests/test-check-py3-commands.t
--- a/tests/test-check-py3-commands.t	Wed Dec 07 21:53:03 2016 +0530
+++ b/tests/test-check-py3-commands.t	Wed Dec 07 10:06:12 2016 +0530
@@ -9,6 +9,6 @@ 
   >   $PYTHON3 `which hg` $cmd 2>&1 2>&1 | tail -1
   > done
   version
-  TypeError: Can't convert 'bytes' object to str implicitly
+  warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   debuginstall
   TypeError: Can't convert 'bytes' object to str implicitly