Show More
@@ -11,6 +11,7 b' import datetime' | |||
|
11 | 11 | import errno |
|
12 | 12 | import os |
|
13 | 13 | import re |
|
14 | import shlex | |
|
14 | 15 | import subprocess |
|
15 | 16 | |
|
16 | 17 | from mercurial.i18n import _ |
@@ -25,6 +26,58 b' from mercurial import (' | |||
|
25 | 26 | pickle = util.pickle |
|
26 | 27 | propertycache = util.propertycache |
|
27 | 28 | |
|
29 | def _encodeornone(d): | |
|
30 | if d is None: | |
|
31 | return | |
|
32 | return d.encode('latin1') | |
|
33 | ||
|
34 | class _shlexpy3proxy(object): | |
|
35 | ||
|
36 | def __init__(self, l): | |
|
37 | self._l = l | |
|
38 | ||
|
39 | def __iter__(self): | |
|
40 | return (_encodeornone(v) for v in self._l) | |
|
41 | ||
|
42 | def get_token(self): | |
|
43 | return _encodeornone(self._l.get_token()) | |
|
44 | ||
|
45 | @property | |
|
46 | def infile(self): | |
|
47 | return self._l.infile or '<unknown>' | |
|
48 | ||
|
49 | @property | |
|
50 | def lineno(self): | |
|
51 | return self._l.lineno | |
|
52 | ||
|
53 | def shlexer(data=None, filepath=None, wordchars=None, whitespace=None): | |
|
54 | if data is None: | |
|
55 | if pycompat.ispy3: | |
|
56 | data = open(filepath, 'r', encoding=r'latin1') | |
|
57 | else: | |
|
58 | data = open(filepath, 'r') | |
|
59 | else: | |
|
60 | if filepath is not None: | |
|
61 | raise error.ProgrammingError( | |
|
62 | 'shlexer only accepts data or filepath, not both') | |
|
63 | if pycompat.ispy3: | |
|
64 | data = data.decode('latin1') | |
|
65 | l = shlex.shlex(data, infile=filepath, posix=True) | |
|
66 | if whitespace is not None: | |
|
67 | l.whitespace_split = True | |
|
68 | if pycompat.ispy3: | |
|
69 | l.whitespace += whitespace.decode('latin1') | |
|
70 | else: | |
|
71 | l.whitespace += whitespace | |
|
72 | if wordchars is not None: | |
|
73 | if pycompat.ispy3: | |
|
74 | l.wordchars += wordchars.decode('latin1') | |
|
75 | else: | |
|
76 | l.wordchars += wordchars | |
|
77 | if pycompat.ispy3: | |
|
78 | return _shlexpy3proxy(l) | |
|
79 | return l | |
|
80 | ||
|
28 | 81 | def encodeargs(args): |
|
29 | 82 | def encodearg(s): |
|
30 | 83 | lines = base64.encodestring(s) |
General Comments 0
You need to be logged in to leave comments.
Login now