##// END OF EJS Templates
byteify-strings: add --inplace option to write back result
Yuya Nishihara -
r38405:9f42e4a8 default
parent child Browse files
Show More
@@ -10,8 +10,12 b''
10 from __future__ import absolute_import
10 from __future__ import absolute_import
11
11
12 import argparse
12 import argparse
13 import contextlib
14 import errno
13 import io
15 import io
16 import os
14 import sys
17 import sys
18 import tempfile
15 import token
19 import token
16 import tokenize
20 import tokenize
17
21
@@ -162,14 +166,44 b' def process(fin, fout):'
162 tokens = replacetokens(list(tokens), fullname='<dummy>')
166 tokens = replacetokens(list(tokens), fullname='<dummy>')
163 fout.write(tokenize.untokenize(tokens))
167 fout.write(tokenize.untokenize(tokens))
164
168
169 def tryunlink(fname):
170 try:
171 os.unlink(fname)
172 except OSError as err:
173 if err.errno != errno.ENOENT:
174 raise
175
176 @contextlib.contextmanager
177 def editinplace(fname):
178 n = os.path.basename(fname)
179 d = os.path.dirname(fname)
180 fp = tempfile.NamedTemporaryFile(prefix='.%s-' % n, suffix='~', dir=d,
181 delete=False)
182 try:
183 yield fp
184 fp.close()
185 if os.name == 'nt':
186 tryunlink(fname)
187 os.rename(fp.name, fname)
188 finally:
189 fp.close()
190 tryunlink(fp.name)
191
165 def main():
192 def main():
166 ap = argparse.ArgumentParser()
193 ap = argparse.ArgumentParser()
194 ap.add_argument('-i', '--inplace', action='store_true', default=False,
195 help='edit files in place')
167 ap.add_argument('files', metavar='FILE', nargs='+', help='source file')
196 ap.add_argument('files', metavar='FILE', nargs='+', help='source file')
168 args = ap.parse_args()
197 args = ap.parse_args()
169 for fname in args.files:
198 for fname in args.files:
170 with open(fname, 'rb') as fin:
199 if args.inplace:
171 fout = sys.stdout.buffer
200 with editinplace(fname) as fout:
172 process(fin, fout)
201 with open(fname, 'rb') as fin:
202 process(fin, fout)
203 else:
204 with open(fname, 'rb') as fin:
205 fout = sys.stdout.buffer
206 process(fin, fout)
173
207
174 if __name__ == '__main__':
208 if __name__ == '__main__':
175 main()
209 main()
General Comments 0
You need to be logged in to leave comments. Login now