D2525: convert: add some utility code for working with shlex on Python 3
durin42 (Augie Fackler)
phabricator at mercurial-scm.org
Thu Mar 1 20:53:59 EST 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rHG52a44d7f998b: convert: add some utility code for working with shlex on Python 3 (authored by durin42, committed by ).
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D2525?vs=6301&id=6317
REVISION DETAIL
https://phab.mercurial-scm.org/D2525
AFFECTED FILES
hgext/convert/common.py
CHANGE DETAILS
diff --git a/hgext/convert/common.py b/hgext/convert/common.py
--- a/hgext/convert/common.py
+++ b/hgext/convert/common.py
@@ -11,6 +11,7 @@
import errno
import os
import re
+import shlex
import subprocess
from mercurial.i18n import _
@@ -25,6 +26,58 @@
pickle = util.pickle
propertycache = util.propertycache
+def _encodeornone(d):
+ if d is None:
+ return
+ return d.encode('latin1')
+
+class _shlexpy3proxy(object):
+
+ def __init__(self, l):
+ self._l = l
+
+ def __iter__(self):
+ return (_encodeornone(v) for v in self._l)
+
+ def get_token(self):
+ return _encodeornone(self._l.get_token())
+
+ @property
+ def infile(self):
+ return self._l.infile or '<unknown>'
+
+ @property
+ def lineno(self):
+ return self._l.lineno
+
+def shlexer(data=None, filepath=None, wordchars=None, whitespace=None):
+ if data is None:
+ if pycompat.ispy3:
+ data = open(filepath, 'r', encoding=r'latin1')
+ else:
+ data = open(filepath, 'r')
+ else:
+ if filepath is not None:
+ raise error.ProgrammingError(
+ 'shlexer only accepts data or filepath, not both')
+ if pycompat.ispy3:
+ data = data.decode('latin1')
+ l = shlex.shlex(data, infile=filepath, posix=True)
+ if whitespace is not None:
+ l.whitespace_split = True
+ if pycompat.ispy3:
+ l.whitespace += whitespace.decode('latin1')
+ else:
+ l.whitespace += whitespace
+ if wordchars is not None:
+ if pycompat.ispy3:
+ l.wordchars += wordchars.decode('latin1')
+ else:
+ l.wordchars += wordchars
+ if pycompat.ispy3:
+ return _shlexpy3proxy(l)
+ return l
+
def encodeargs(args):
def encodearg(s):
lines = base64.encodestring(s)
To: durin42, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list