Mercurial > hg-stable
comparison hgext/largefiles/lfutil.py @ 33438:8056481caa81
codemod: simplify nested withs
This is the result of running:
python codemod_nestedwith.py **/*.py
where codemod_nestedwith.py looks like this:
#!/usr/bin/env python
# codemod_nestedwith.py - codemod tool to rewrite nested with
#
# Copyright 2017 Facebook, Inc.
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
from __future__ import absolute_import, print_function
import sys
import redbaron
def readpath(path):
with open(path) as f:
return f.read()
def writepath(path, content):
with open(path, 'w') as f:
f.write(content)
def main(argv):
if not argv:
print('Usage: codemod_nestedwith.py FILES')
for i, path in enumerate(argv):
print('(%d/%d) scanning %s' % (i + 1, len(argv), path))
changed = False
red = redbaron.RedBaron(readpath(path))
processed = set()
for node in red.find_all('with'):
if node in processed or node.type != 'with':
continue
top = node
child = top[0]
while True:
if len(top) > 1 or child.type != 'with':
break
# estimate line length after merging two "with"s
new = '%swith %s:' % (top.indentation, top.contexts.dumps())
new += ', %s' % child.contexts.dumps()
# only do the rewrite if the end result is within 80 chars
if len(new) > 80:
break
processed.add(child)
top.contexts.extend(child.contexts)
top.value = child.value
top.value.decrease_indentation(4)
child = child[0]
changed = True
if changed:
print('updating %s' % path)
writepath(path, red.dumps())
if __name__ == "__main__":
sys.exit(main(sys.argv[1:]))
Differential Revision: https://phab.mercurial-scm.org/D77
author | Jun Wu <quark@fb.com> |
---|---|
date | Thu, 13 Jul 2017 18:31:35 -0700 |
parents | fb320398a21c |
children | 255c761a52db |
comparison
equal
deleted
inserted
replaced
33437:0720e6265c8a | 33438:8056481caa81 |
---|---|
56 util.makedirs(os.path.dirname(dest)) | 56 util.makedirs(os.path.dirname(dest)) |
57 try: | 57 try: |
58 util.oslink(src, dest) | 58 util.oslink(src, dest) |
59 except OSError: | 59 except OSError: |
60 # if hardlinks fail, fallback on atomic copy | 60 # if hardlinks fail, fallback on atomic copy |
61 with open(src, 'rb') as srcf: | 61 with open(src, 'rb') as srcf, util.atomictempfile(dest) as dstf: |
62 with util.atomictempfile(dest) as dstf: | 62 for chunk in util.filechunkiter(srcf): |
63 for chunk in util.filechunkiter(srcf): | 63 dstf.write(chunk) |
64 dstf.write(chunk) | |
65 os.chmod(dest, os.stat(src).st_mode) | 64 os.chmod(dest, os.stat(src).st_mode) |
66 | 65 |
67 def usercachepath(ui, hash): | 66 def usercachepath(ui, hash): |
68 '''Return the correct location in the "global" largefiles cache for a file | 67 '''Return the correct location in the "global" largefiles cache for a file |
69 with the given hash. | 68 with the given hash. |
234 if path is None: | 233 if path is None: |
235 return False | 234 return False |
236 wvfs.makedirs(wvfs.dirname(wvfs.join(filename))) | 235 wvfs.makedirs(wvfs.dirname(wvfs.join(filename))) |
237 # The write may fail before the file is fully written, but we | 236 # The write may fail before the file is fully written, but we |
238 # don't use atomic writes in the working copy. | 237 # don't use atomic writes in the working copy. |
239 with open(path, 'rb') as srcfd: | 238 with open(path, 'rb') as srcfd, wvfs(filename, 'wb') as destfd: |
240 with wvfs(filename, 'wb') as destfd: | 239 gothash = copyandhash( |
241 gothash = copyandhash( | 240 util.filechunkiter(srcfd), destfd) |
242 util.filechunkiter(srcfd), destfd) | |
243 if gothash != hash: | 241 if gothash != hash: |
244 repo.ui.warn(_('%s: data corruption in %s with hash %s\n') | 242 repo.ui.warn(_('%s: data corruption in %s with hash %s\n') |
245 % (filename, path, gothash)) | 243 % (filename, path, gothash)) |
246 wvfs.unlink(filename) | 244 wvfs.unlink(filename) |
247 return False | 245 return False |