mirror of
https://github.com/facebook/sapling.git
synced 2024-10-11 09:17:30 +03:00
61 lines
1.8 KiB
Python
61 lines
1.8 KiB
Python
|
#!/usr/bin/env python
|
||
|
from __future__ import absolute_import, print_function
|
||
|
|
||
|
import re
|
||
|
import sys
|
||
|
|
||
|
"""
|
||
|
Check if a test is using foreign extensions without proper checks
|
||
|
"""
|
||
|
|
||
|
# foreign extensions
|
||
|
exts = ['directaccess', 'evolve', 'inhibit', 'remotenames']
|
||
|
extre = re.compile(r'(%s)' % '|'.join(exts))
|
||
|
|
||
|
checkres = [
|
||
|
(re.compile(r'^\s*>\s*%s\s*=\s*$' % extre.pattern),
|
||
|
'use "$ . $TESTDIR/require-ext.sh %(name)s" to skip the test'
|
||
|
' if %(name)s is not available'),
|
||
|
(re.compile(r'^\s*\$.*--config[ =\']*extensions.%s=' % extre.pattern),
|
||
|
'use "$ . $TESTDIR/require-ext.sh %(name)s" to skip the test'
|
||
|
' if %(name)s is not available'),
|
||
|
]
|
||
|
|
||
|
# $ . $TESTDIR/require-ext.sh foreignext
|
||
|
requirere = re.compile(r'require-ext\.sh ((?:%s|\s+)+)' % extre.pattern)
|
||
|
|
||
|
def checkfile(path):
|
||
|
errors = []
|
||
|
with open(path) as f:
|
||
|
required = set()
|
||
|
for i, line in enumerate(f):
|
||
|
msg = None
|
||
|
m = requirere.search(line)
|
||
|
if m:
|
||
|
required.update(m.group(1).split())
|
||
|
for regex, msg in checkres:
|
||
|
m = regex.search(line)
|
||
|
if not m:
|
||
|
continue
|
||
|
name = m.group(1)
|
||
|
if name in required:
|
||
|
continue
|
||
|
# line[:-1] is to remove the last "\n"
|
||
|
errors.append((path, i + 1, line[:-1], msg % {'name': name}))
|
||
|
# only one error per extension per file
|
||
|
required.add(name)
|
||
|
return errors
|
||
|
|
||
|
def checkfiles(paths):
|
||
|
errors = []
|
||
|
for path in sys.argv[1:]:
|
||
|
errors += checkfile(path)
|
||
|
return sorted(set(errors))
|
||
|
|
||
|
def printerrors(errors):
|
||
|
# same format with check-code.py
|
||
|
for fname, lineno, line, msg in errors:
|
||
|
print('%s:%d:\n > %s\n %s' % (fname, lineno, line, msg))
|
||
|
|
||
|
printerrors(checkfiles(sys.argv[1:]))
|