summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--[-rwxr-xr-x]lib/spack/spack/cmd/flake8.py54
1 files changed, 42 insertions, 12 deletions
diff --git a/lib/spack/spack/cmd/flake8.py b/lib/spack/spack/cmd/flake8.py
index 8648bc88d6..3893815855 100755..100644
--- a/lib/spack/spack/cmd/flake8.py
+++ b/lib/spack/spack/cmd/flake8.py
@@ -27,6 +27,7 @@ import os
import sys
import shutil
import tempfile
+import argparse
from llnl.util.filesystem import *
@@ -75,17 +76,18 @@ exemptions = dict((re.compile(file_pattern),
def filter_file(source, dest):
"""Filter a single file through all the patterns in exemptions."""
- for file_pattern, errors in exemptions.items():
- if not file_pattern.search(source):
- continue
+ with open(source) as infile:
+ parent = os.path.dirname(dest)
+ mkdirp(parent)
- with open(source) as infile:
- parent = os.path.dirname(dest)
- mkdirp(parent)
+ with open(dest, 'w') as outfile:
+ for file_pattern, errors in exemptions.items():
+ if not file_pattern.search(source):
+ continue
- with open(dest, 'w') as outfile:
for line in infile:
line = line.rstrip()
+
for code, patterns in errors.items():
for pattern in patterns:
if pattern.search(line):
@@ -99,6 +101,11 @@ def setup_parser(subparser):
'-k', '--keep-temp', action='store_true',
help="Do not delete temporary directory where flake8 runs. "
"Use for debugging, to see filtered files.")
+ subparser.add_argument(
+ '-r', '--root-relative', action='store_true', default=False,
+ help="print root-relative paths (default is cwd-relative)")
+ subparser.add_argument(
+ 'files', nargs=argparse.REMAINDER, help="specific files to check")
def flake8(parser, args):
@@ -108,28 +115,51 @@ def flake8(parser, args):
temp = tempfile.mkdtemp()
try:
+ file_list = args.files
+ if file_list:
+ def prefix_relative(path):
+ return os.path.relpath(
+ os.path.abspath(os.path.realpath(path)), spack.prefix)
+
+ file_list = [prefix_relative(p) for p in file_list]
+
with working_dir(spack.prefix):
- changed = changed_files('*.py', output=str)
- changed = [x for x in changed.split('\n') if x]
+ if not file_list:
+ file_list = changed_files('*.py', output=str)
+ file_list = [x for x in file_list.split('\n') if x]
+
shutil.copy('.flake8', os.path.join(temp, '.flake8'))
print '======================================================='
print 'flake8: running flake8 code checks on spack.'
print
print 'Modified files:'
- for filename in changed:
+ for filename in file_list:
print " %s" % filename.strip()
print('=======================================================')
# filter files into a temporary directory with exemptions added.
- for filename in changed:
+ for filename in file_list:
src_path = os.path.join(spack.prefix, filename)
dest_path = os.path.join(temp, filename)
filter_file(src_path, dest_path)
# run flake8 on the temporary tree.
with working_dir(temp):
- flake8('--format', 'pylint', *changed, fail_on_error=False)
+ output = flake8('--format', 'pylint', *file_list,
+ fail_on_error=False, output=str)
+
+ if args.root_relative:
+ # print results relative to repo root.
+ print output
+ else:
+ # print results relative to current working directory
+ def cwd_relative(path):
+ return '%s: [' % os.path.relpath(
+ os.path.join(spack.prefix, path.group(1)), os.getcwd())
+
+ for line in output.split('\n'):
+ print re.sub(r'^(.*): \[', cwd_relative, line)
if flake8.returncode != 0:
print "Flake8 found errors."