From 36c57c74f449c84e669e4f96412f104dfce00da7 Mon Sep 17 00:00:00 2001 From: Brian Warner Date: Wed, 6 Apr 2016 13:57:41 -1000 Subject: [PATCH] make tox env for code-checks This executes: check-debugging, check-interfaces, check-miscaptures, find-trailing-spaces, check-umids, pyflakes. Other changes: * fix check-umids.py to take starting points. run it as `check-umids.py src` instead of `check-umids.py src/allmydata/*.py` * check-debugging: rewrite in python to run from tox: tox doesn't like to run shell scripts. * put check-interfaces.py last: it produces lots of warnings, but passes anyways. The others only produce significant output if they fail. --- Makefile | 9 +++++--- misc/coding_tools/check-debugging.py | 22 ++++++++++++++++++ misc/coding_tools/check-debugging.sh | 9 -------- misc/coding_tools/check-umids.py | 34 +++++++++++++++------------- tox.ini | 14 ++++++++++++ 5 files changed, 60 insertions(+), 28 deletions(-) create mode 100755 misc/coding_tools/check-debugging.py delete mode 100755 misc/coding_tools/check-debugging.sh diff --git a/Makefile b/Makefile index 4df6c8ef1..a4a59c3ae 100644 --- a/Makefile +++ b/Makefile @@ -66,11 +66,15 @@ smoketest: .PHONY: code-checks #code-checks: build version-and-path check-interfaces check-miscaptures -find-trailing-spaces -check-umids pyflakes -code-checks: check-debugging check-miscaptures -find-trailing-spaces -check-umids pyflakes +code-checks: check-interfaces check-debugging check-miscaptures -find-trailing-spaces -check-umids pyflakes + +.PHONY: check-interfaces + $(PYTHON) misc/coding_tools/check-interfaces.py 2>&1 |tee violations.txt + @echo .PHONY: check-debugging check-debugging: - misc/coding_tools/check-debugging.sh + $(PYTHON) misc/coding_tools/check-debugging.py @echo .PHONY: check-miscaptures @@ -120,7 +124,6 @@ count-lines: # probably work. # src/allmydata/test/bench_dirnode.py -# misc/coding_tools/check-interfaces.py 2>&1 |tee violations.txt # The check-speed and check-grid targets are disabled, since they depend upon diff --git a/misc/coding_tools/check-debugging.py b/misc/coding_tools/check-debugging.py new file mode 100755 index 000000000..8dae80181 --- /dev/null +++ b/misc/coding_tools/check-debugging.py @@ -0,0 +1,22 @@ +#! /usr/bin/python + +# ./check-debugging.py src + +import sys, re, os + +ok = True +umids = {} + +for starting_point in sys.argv[1:]: + for root, dirs, files in os.walk(starting_point): + for fn in [f for f in files if f.endswith(".py")]: + fn = os.path.join(root, fn) + for lineno,line in enumerate(open(fn, "r").readlines()): + lineno = lineno+1 + mo = re.search(r"\.setDebugging\(True\)", line) + if mo: + print "Do not use defer.setDebugging(True) in production" + print "First used here: %s:%d" % (fn, lineno) + sys.exit(1) +print "No cases of defer.setDebugging(True) were found, good!" +sys.exit(0) diff --git a/misc/coding_tools/check-debugging.sh b/misc/coding_tools/check-debugging.sh deleted file mode 100755 index bfc0ca930..000000000 --- a/misc/coding_tools/check-debugging.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash - -OUTPUT=$(grep -R '\.setDebugging(True)' src/allmydata) - -if [[ -n $OUTPUT ]] ; then - echo "Do not use defer.setDebugging(True) in production:" - echo $OUTPUT - exit 1 -fi diff --git a/misc/coding_tools/check-umids.py b/misc/coding_tools/check-umids.py index 05e8825b9..0b6038f0f 100644 --- a/misc/coding_tools/check-umids.py +++ b/misc/coding_tools/check-umids.py @@ -1,27 +1,29 @@ #! /usr/bin/python -# ./rumid.py foo.py +# ./check-umids.py src import sys, re, os ok = True umids = {} -for fn in sys.argv[1:]: - fn = os.path.abspath(fn) - for lineno,line in enumerate(open(fn, "r").readlines()): - lineno = lineno+1 - if "umid" not in line: - continue - mo = re.search("umid=[\"\']([^\"\']+)[\"\']", line) - if mo: - umid = mo.group(1) - if umid in umids: - oldfn, oldlineno = umids[umid] - print "%s:%d: duplicate umid '%s'" % (fn, lineno, umid) - print "%s:%d: first used here" % (oldfn, oldlineno) - ok = False - umids[umid] = (fn,lineno) +for starting_point in sys.argv[1:]: + for root, dirs, files in os.walk(starting_point): + for fn in [f for f in files if f.endswith(".py")]: + fn = os.path.join(root, fn) + for lineno,line in enumerate(open(fn, "r").readlines()): + lineno = lineno+1 + if "umid" not in line: + continue + mo = re.search("umid=[\"\']([^\"\']+)[\"\']", line) + if mo: + umid = mo.group(1) + if umid in umids: + oldfn, oldlineno = umids[umid] + print "%s:%d: duplicate umid '%s'" % (fn, lineno, umid) + print "%s:%d: first used here" % (oldfn, oldlineno) + ok = False + umids[umid] = (fn,lineno) if ok: print "all umids are unique" diff --git a/tox.ini b/tox.ini index 71f5c1414..fa7179d64 100644 --- a/tox.ini +++ b/tox.ini @@ -26,6 +26,20 @@ commands = tahoe --version coverage run --branch -m allmydata.test.run_trial --rterrors --reporter=timing {posargs:allmydata} +[testenv:codechecks] +passenv = USERPROFILE HOMEDRIVE HOMEPATH +skip_install = True +deps = --editable=.[test] +commands = + pyflakes src static misc setup.py + python misc/coding_tools/check-umids.py src + python misc/coding_tools/check-debugging.py + python misc/coding_tools/find-trailing-spaces.py -r src static misc setup.py + python misc/coding_tools/check-miscaptures.py + # note: check-interfaces.py imports everything, so it must be run + # from a populated virtualenv + python misc/coding_tools/check-interfaces.py + [testenv:deprecations] basepython=python2.7 passenv = USERPROFILE HOMEDRIVE HOMEPATH