Mercurial > public > mercurial-scm > hg-stable
diff 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 |
line wrap: on
line diff
--- a/hgext/largefiles/lfutil.py Mon Aug 08 18:14:42 2016 +0200 +++ b/hgext/largefiles/lfutil.py Thu Jul 13 18:31:35 2017 -0700 @@ -58,10 +58,9 @@ util.oslink(src, dest) except OSError: # if hardlinks fail, fallback on atomic copy - with open(src, 'rb') as srcf: - with util.atomictempfile(dest) as dstf: - for chunk in util.filechunkiter(srcf): - dstf.write(chunk) + with open(src, 'rb') as srcf, util.atomictempfile(dest) as dstf: + for chunk in util.filechunkiter(srcf): + dstf.write(chunk) os.chmod(dest, os.stat(src).st_mode) def usercachepath(ui, hash): @@ -236,10 +235,9 @@ wvfs.makedirs(wvfs.dirname(wvfs.join(filename))) # The write may fail before the file is fully written, but we # don't use atomic writes in the working copy. - with open(path, 'rb') as srcfd: - with wvfs(filename, 'wb') as destfd: - gothash = copyandhash( - util.filechunkiter(srcfd), destfd) + with open(path, 'rb') as srcfd, wvfs(filename, 'wb') as destfd: + gothash = copyandhash( + util.filechunkiter(srcfd), destfd) if gothash != hash: repo.ui.warn(_('%s: data corruption in %s with hash %s\n') % (filename, path, gothash))