From patchwork Sat Nov 5 23:16:25 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [8,of,8] py3: have bytes version of sys.argv From: Pulkit Goyal <7895pulkit@gmail.com> X-Patchwork-Id: 17360 Message-Id: To: mercurial-devel@mercurial-scm.org Date: Sun, 06 Nov 2016 04:46:25 +0530 # HG changeset patch # User Pulkit Goyal <7895pulkit@gmail.com> # Date 1478387186 -19800 # Sun Nov 06 04:36:26 2016 +0530 # Node ID b5fc4e71286dd4f33336e4f38e0b9fb17f51f1e3 # Parent 6eed3ee0df425da61d03bfe024dd082f3176ce5d py3: have bytes version of sys.argv sys.argv returns unicodes on Python 3. We need a bytes version for us. There was also a python bug/feature request which wanted then to implement one. They rejected and it is quoted in one of the comments that we can use fsencode() to get a bytes version of sys.argv. Though not sure about its correctness. Link to the comment: http://bugs.python.org/issue8776#msg217416 After this patch we will have pycompat.sysargv which will return us bytes version of sys.argv. If this patch goes in, i will like to make transformer rewrite sys.argv with pycompat.argv because there are lot of occurences. diff -r 6eed3ee0df42 -r b5fc4e71286d mercurial/pycompat.py --- a/mercurial/pycompat.py Sun Nov 06 04:17:19 2016 +0530 +++ b/mercurial/pycompat.py Sun Nov 06 04:36:26 2016 +0530 @@ -41,6 +41,7 @@ osname = os.name.encode('ascii') ospathsep = os.pathsep.encode('ascii') ossep = os.sep.encode('ascii') + sysargv = list(map(os.fsencode, sys.argv)) def sysstr(s): """Return a keyword str to be passed to Python functions such as @@ -89,6 +90,7 @@ osname = os.name ospathsep = os.pathsep ossep = os.sep + sysargv = sys.argv stringio = io.StringIO empty = _queue.Empty