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