53 return self._l.lineno |
53 return self._l.lineno |
54 |
54 |
55 |
55 |
56 def shlexer(data=None, filepath=None, wordchars=None, whitespace=None): |
56 def shlexer(data=None, filepath=None, wordchars=None, whitespace=None): |
57 if data is None: |
57 if data is None: |
58 if pycompat.ispy3: |
58 data = open(filepath, b'r', encoding='latin1') |
59 data = open(filepath, b'r', encoding='latin1') |
|
60 else: |
|
61 data = open(filepath, b'r') |
|
62 else: |
59 else: |
63 if filepath is not None: |
60 if filepath is not None: |
64 raise error.ProgrammingError( |
61 raise error.ProgrammingError( |
65 b'shlexer only accepts data or filepath, not both' |
62 b'shlexer only accepts data or filepath, not both' |
66 ) |
63 ) |
67 if pycompat.ispy3: |
64 data = data.decode('latin1') |
68 data = data.decode('latin1') |
|
69 l = shlex.shlex(data, infile=filepath, posix=True) |
65 l = shlex.shlex(data, infile=filepath, posix=True) |
70 if whitespace is not None: |
66 if whitespace is not None: |
71 l.whitespace_split = True |
67 l.whitespace_split = True |
72 if pycompat.ispy3: |
68 l.whitespace += whitespace.decode('latin1') |
73 l.whitespace += whitespace.decode('latin1') |
|
74 else: |
|
75 l.whitespace += whitespace |
|
76 if wordchars is not None: |
69 if wordchars is not None: |
77 if pycompat.ispy3: |
70 l.wordchars += wordchars.decode('latin1') |
78 l.wordchars += wordchars.decode('latin1') |
71 return _shlexpy3proxy(l) |
79 else: |
|
80 l.wordchars += wordchars |
|
81 if pycompat.ispy3: |
|
82 return _shlexpy3proxy(l) |
|
83 return l |
|
84 |
|
85 |
|
86 if pycompat.ispy3: |
|
87 base64_encodebytes = base64.encodebytes |
|
88 base64_decodebytes = base64.decodebytes |
|
89 else: |
|
90 base64_encodebytes = base64.encodestring |
|
91 base64_decodebytes = base64.decodestring |
|
92 |
72 |
93 |
73 |
94 def encodeargs(args): |
74 def encodeargs(args): |
95 def encodearg(s): |
75 def encodearg(s): |
96 lines = base64_encodebytes(s) |
76 lines = base64.encodebytes(s) |
97 lines = [l.splitlines()[0] for l in pycompat.iterbytestr(lines)] |
77 lines = [l.splitlines()[0] for l in pycompat.iterbytestr(lines)] |
98 return b''.join(lines) |
78 return b''.join(lines) |
99 |
79 |
100 s = pickle.dumps(args) |
80 s = pickle.dumps(args) |
101 return encodearg(s) |
81 return encodearg(s) |
102 |
82 |
103 |
83 |
104 def decodeargs(s): |
84 def decodeargs(s): |
105 s = base64_decodebytes(s) |
85 s = base64.decodebytes(s) |
106 return pickle.loads(s) |
86 return pickle.loads(s) |
107 |
87 |
108 |
88 |
109 class MissingTool(Exception): |
89 class MissingTool(Exception): |
110 pass |
90 pass |