sapling/mercurial
Jun Wu f1c575a099 flake8: enable F821 check
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
2018-04-13 21:51:09 -07:00
..
cext lazymanifest: do not read uninitialized memory 2018-04-13 21:51:01 -07:00
cffi codemod: use pycompat.isdarwin 2017-10-12 23:34:34 -07:00
default.d mergetools.rc: find OSX FileMerge in the new location inside Xcode 4.3 2015-10-16 11:37:34 +02:00
help hgsubversion: move its help text to mercurial/help 2018-04-13 21:51:02 -07:00
hgweb flake8: enable F821 check 2018-04-13 21:51:09 -07:00
httpclient codemod: use single blank line 2018-04-13 21:51:08 -07:00
pure flake8: enable F821 check 2018-04-13 21:51:09 -07:00
templates hgweb: stop using HTML comments in <script> 2017-12-15 12:15:58 +08:00
thirdparty codemod: use single blank line 2018-04-13 21:51:08 -07:00
__init__.py thirdparty: move selectors2 module to where it should be 2017-11-30 22:43:03 +09:00
ancestor.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
archival.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
bdiff.c bdiff: remove trailing newlines 2017-10-04 10:51:39 -04:00
bdiff.h bdiff: include compat.h in header to define ssize_t 2017-10-13 22:38:24 +09:00
bitmanipulation.h bitmanipulation: reformat with clang-format 2017-10-04 10:52:50 -04:00
bookmarks.py bookmark: add methods to binary encode and decode bookmark values 2017-10-15 14:59:55 +02:00
branchmap.py branchmap: remove superfluous pass statements 2017-09-30 07:42:59 -04:00
bundle2.py codemod: use single blank line 2018-04-13 21:51:08 -07:00
bundlerepo.py bundlerepo: always copy bundle parts before processing 2018-01-03 05:35:56 -08:00
byterange.py codemod: use single blank line 2018-04-13 21:51:08 -07:00
changegroup.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
changelog.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
chgserver.py chgserver: import sys module 2018-01-03 05:35:56 -08:00
cmdutil.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
color.py py3: handle keyword arguments correctly in color.py 2017-12-10 04:45:27 +05:30
commands.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
commandserver.py commandserver: unblock SIGCHLD 2018-01-03 05:35:56 -08:00
compat.h encoding: add function to test if a str consists of ASCII characters 2017-04-23 12:59:42 +09:00
config.py config: allow remapping the default section 2017-10-14 17:41:41 +09:00
configitems.py config: change default debugger to ipdb 2018-04-13 21:51:04 -07:00
context.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
copies.py copies: group wdir-handling in one place 2017-12-14 00:25:03 -08:00
crecord.py hg: remove version check from crecord 2018-04-13 21:50:59 -07:00
dagop.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
dagparser.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
dagutil.py codemod: use single blank line 2018-04-13 21:51:08 -07:00
debugcommands.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
destutil.py show: implement "stack" view 2017-07-01 22:38:42 -07:00
dirstate.py hg: improve perf interactions with treedirstate 2018-04-13 21:50:58 -07:00
dirstateguard.py dirstate: update backup functions to take full backup filename 2017-07-12 15:24:07 -07:00
discovery.py push: restrict common discovery to the pushed set 2017-12-06 23:33:01 +01:00
dispatch.py buck: fix tests with opt build 2018-04-13 21:51:09 -07:00
drawdag.py test-lfs-bundle: new test testing lfs bundle exchanging behavior 2018-04-13 21:51:05 -07:00
dummycert.pem
encoding.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
error.py extensions: forbid "foo=" from importing foreign mercurial modules 2018-01-09 17:06:09 -08:00
exchange.py codemod: use single blank line 2018-04-13 21:51:08 -07:00
exewrapper.c exewrapper: format with clang-format 2017-10-04 11:04:18 -04:00
extensions.py buck: fix tests with opt build 2018-04-13 21:51:09 -07:00
fancyopts.py fancyopts: add early-options parser compatible with getopt() 2017-11-23 22:04:53 +09:00
filelog.py python3: replace sorted(<dict>.iterkeys()) with sorted(<dict>) 2017-08-22 20:06:58 -04:00
filemerge.py filemerge: fix backing up an in-memory file to a custom location 2018-01-16 17:23:40 -08:00
fileset.py hg: fix check execute 2018-04-13 21:50:57 -07:00
formatter.py templater: load aliases from [templatealias] section in map file 2017-10-14 18:06:42 +09:00
graphmod.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
hbisect.py codemod: use single blank line 2018-04-13 21:51:08 -07:00
help.py codemod: use single blank line 2018-04-13 21:51:08 -07:00
hg.py share: fix hg unshare 2018-04-13 21:50:53 -07:00
hook.py py3: handle keyword arguments correctly in hook.py 2017-12-10 04:46:50 +05:30
httpconnection.py codemod: use single blank line 2018-04-13 21:51:08 -07:00
httppeer.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
i18n.py i18n: cache translated messages per encoding 2017-10-13 21:36:10 +09:00
interpreter.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
keepalive.py codemod: use single blank line 2018-04-13 21:51:08 -07:00
localrepo.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
lock.py lock: allow to configure when the lock messages are displayed 2017-11-29 20:39:59 -05:00
logexchange.py remotenames: rename related file and storage dir to logexchange 2017-12-07 00:26:45 +05:30
lsprof.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
lsprofcalltree.py lsprofcalltree: use print function 2016-01-02 11:45:29 -08:00
mail.py py3: make sure the first argument of time.strftime() is str 2017-11-29 08:44:06 +05:30
main.py buck: fix tests with opt build 2018-04-13 21:51:09 -07:00
manifest.py flake8: resolve some F checks 2018-04-13 21:51:09 -07:00
match.py match: remove doc about undefined behavior of visitdir() 2017-11-30 22:32:13 +09:00
mdiff.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
merge.py codemod: use single blank line 2018-04-13 21:51:08 -07:00
mergeutil.py checkunresolved: move to new package to help avoid import cycles 2016-11-21 21:31:45 -05:00
minirst.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
mpatch.c mpatch: switch alignment of wrapped line from tab to spaces with clang-format 2017-10-04 11:00:04 -04:00
mpatch.h mpatch: reformat function prototypes with clang-format 2017-10-04 10:56:33 -04:00
namespaces.py log: translate column labels at once (issue5750) 2017-12-02 16:29:49 +09:00
node.py node: use byte literals to construct nullid and wdirid 2016-03-12 14:04:57 -08:00
obsolete.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
obsutil.py perftweaks: move effectflag removal logic to core 2018-04-13 21:50:52 -07:00
parser.py doctest: use print_function and convert bytes to unicode where needed 2017-09-03 14:56:31 +09:00
patch.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
pathutil.py pathutil: add doctests for canonpath() 2017-11-03 22:22:50 -04:00
peer.py peer: ensure command names are always ascii bytestrs 2017-10-15 00:05:00 -04:00
phases.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
policy.py osutil: add a function to unblock signals 2018-01-03 05:35:56 -08:00
posix.py flake8: resolve some F checks 2018-04-13 21:51:09 -07:00
profiling.py configitems: register the 'profiling.type' config 2017-06-30 03:44:00 +02:00
progress.py progress: add spinner context manager for easy spinners 2018-04-13 21:51:08 -07:00
pushkey.py Preserve order of revisions after hg pullbackup 2018-04-13 21:51:05 -07:00
pvec.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
pycompat.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
rcutil.py codemod: use pycompat.iswindows 2017-10-12 23:30:46 -07:00
registrar.py registrar: don't i18n ProgrammingError message 2017-10-18 22:10:08 -07:00
repair.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
repository.py repository: formalize wire protocol interface 2017-08-13 11:04:42 -07:00
repoview.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
revlog.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
revset.py codemod: use single blank line 2018-04-13 21:51:08 -07:00
revsetlang.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
rewriteutil.py rewriteutil: add a precheck function to check if revs can be rewritten 2017-11-24 03:44:50 +05:30
scmposix.py codemod: use pycompat.isdarwin 2017-10-12 23:34:34 -07:00
scmutil.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
scmwindows.py pager: use less as a fallback on Unix 2017-04-28 20:51:14 +09:00
server.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
setdiscovery.py setdiscover: allow to ignore part of the local graph 2017-12-06 22:44:51 +01:00
similar.py similar: remove caching from the module level 2017-01-13 11:42:36 -08:00
simplemerge.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
smartset.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
sparse.py merge: add merge action 'pr' to rename files during update 2017-10-02 14:05:30 -07:00
sshpeer.py sshpeer: allow for additional environment passing to ssh exe 2017-12-14 14:31:57 +00:00
sshserver.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
sslutil.py py3: handle keyword arguments correctly in sslutil.py 2017-12-10 04:48:59 +05:30
statichttprepo.py statichttprepo: do not use platform path separator to build a URL 2017-10-28 17:23:52 +09:00
statprof.py flake8: resolve some F checks 2018-04-13 21:51:09 -07:00
store.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
streamclone.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
subrepo.py codemod: use single blank line 2018-04-13 21:51:08 -07:00
tagmerge.py hgext: use relative imports wherever possible 2018-04-13 21:50:56 -07:00
tags.py codemod: use single blank line 2018-04-13 21:51:08 -07:00
templatefilters.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
templatekw.py log: translate column labels at once (issue5750) 2017-12-02 16:29:49 +09:00
templater.py hg: fix check code errors 2018-04-13 21:50:58 -07:00
transaction.py codemod: use single blank line 2018-04-13 21:51:08 -07:00
treediscovery.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
txnutil.py txnutil: factor out the logic to read file in according to HG_PENDING 2017-02-21 01:20:59 +09:00
ui.py hg: log time spent waiting for the pager 2018-04-13 21:51:01 -07:00
unionrepo.py revlog: update signature of dummy addgroup() in bundlerepo and unionrepo 2017-09-15 23:58:45 +09:00
upgrade.py upgrade: simplify workaround for repo.ui.copy() 2017-12-10 19:43:35 +09:00
url.py lfs: add git to the User-Agent header for blob transfers 2017-12-14 13:04:08 -05:00
urllibcompat.py urllibcompat: move some adapters from pycompat to urllibcompat 2017-10-04 11:58:00 -04:00
util.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
verify.py hg: fastverify: unify and fold into core 2018-04-13 21:51:03 -07:00
vfs.py workers: don't use backgroundfilecloser in threads 2017-12-11 16:51:13 -08:00
win32.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
windows.py ssh: quote parameters using shellquote (SEC) 2017-08-04 23:54:12 -07:00
wireproto.py flake8: enable F821 check 2018-04-13 21:51:09 -07:00
worker.py worker: handle interrupt on windows 2017-12-18 15:18:37 -08:00