mirror of
https://github.com/facebook/sapling.git
synced 2024-10-09 08:18:15 +03:00
f1c575a099
Summary: This check is useful and detects real errors (ex. fbconduit). Unfortunately `arc lint` will run it with both py2 and py3 so a lot of py2 builtins will still be warned. I didn't find a clean way to disable py3 check. So this diff tries to fix them. For `xrange`, the change was done by a script: ``` import sys import redbaron headertypes = {'comment', 'endl', 'from_import', 'import', 'string', 'assignment', 'atomtrailers'} xrangefix = '''try: xrange(0) except NameError: xrange = range ''' def isxrange(x): try: return x[0].value == 'xrange' except Exception: return False def main(argv): for i, path in enumerate(argv): print('(%d/%d) scanning %s' % (i + 1, len(argv), path)) content = open(path).read() try: red = redbaron.RedBaron(content) except Exception: print(' warning: failed to parse') continue hasxrange = red.find('atomtrailersnode', value=isxrange) hasxrangefix = 'xrange = range' in content if hasxrangefix or not hasxrange: print(' no need to change') continue # find a place to insert the compatibility statement changed = False for node in red: if node.type in headertypes: continue # node.insert_before is an easier API, but it has bugs changing # other "finally" and "except" positions. So do the insert # manually. # # node.insert_before(xrangefix) line = node.absolute_bounding_box.top_left.line - 1 lines = content.splitlines(1) content = ''.join(lines[:line]) + xrangefix + ''.join(lines[line:]) changed = True break if changed: # "content" is faster than "red.dumps()" open(path, 'w').write(content) print(' updated') if __name__ == "__main__": sys.exit(main(sys.argv[1:])) ``` For other py2 builtins that do not have a py3 equivalent, some `# noqa` were added as a workaround for now. Reviewed By: DurhamG Differential Revision: D6934535 fbshipit-source-id: 546b62830af144bc8b46788d2e0fd00496838939
57 lines
1.5 KiB
Python
57 lines
1.5 KiB
Python
from __future__ import absolute_import, print_function
|
|
|
|
import os
|
|
from mercurial import (
|
|
ui as uimod,
|
|
)
|
|
|
|
hgrc = os.environ['HGRCPATH']
|
|
f = open(hgrc)
|
|
basehgrc = f.read()
|
|
f.close()
|
|
|
|
print(' hgrc settings command line options final result ')
|
|
print(' quiet verbo debug quiet verbo debug quiet verbo debug')
|
|
|
|
try:
|
|
xrange(0)
|
|
except NameError:
|
|
xrange = range
|
|
|
|
for i in xrange(64):
|
|
hgrc_quiet = bool(i & 1<<0)
|
|
hgrc_verbose = bool(i & 1<<1)
|
|
hgrc_debug = bool(i & 1<<2)
|
|
cmd_quiet = bool(i & 1<<3)
|
|
cmd_verbose = bool(i & 1<<4)
|
|
cmd_debug = bool(i & 1<<5)
|
|
|
|
f = open(hgrc, 'w')
|
|
f.write(basehgrc)
|
|
f.write('\n[ui]\n')
|
|
if hgrc_quiet:
|
|
f.write('quiet = True\n')
|
|
if hgrc_verbose:
|
|
f.write('verbose = True\n')
|
|
if hgrc_debug:
|
|
f.write('debug = True\n')
|
|
f.close()
|
|
|
|
u = uimod.ui.load()
|
|
if cmd_quiet or cmd_debug or cmd_verbose:
|
|
u.setconfig('ui', 'quiet', str(bool(cmd_quiet)))
|
|
u.setconfig('ui', 'verbose', str(bool(cmd_verbose)))
|
|
u.setconfig('ui', 'debug', str(bool(cmd_debug)))
|
|
|
|
check = ''
|
|
if u.debugflag:
|
|
if not u.verbose or u.quiet:
|
|
check = ' *'
|
|
elif u.verbose and u.quiet:
|
|
check = ' +'
|
|
|
|
print(('%2d %5s %5s %5s %5s %5s %5s -> %5s %5s %5s%s'
|
|
% (i, hgrc_quiet, hgrc_verbose, hgrc_debug,
|
|
cmd_quiet, cmd_verbose, cmd_debug,
|
|
u.quiet, u.verbose, u.debugflag, check)))
|