tor

The Tor anonymity network
git clone https://git.dasho.dev/tor.git
Log | Files | Refs | README | LICENSE

commit a5e1fa3a036b0200e049625c427080881b276730
parent 78768aafe1068bd76419944bea1ed3453d85edfe
Author: Nick Mathewson <nickm@torproject.org>
Date:   Wed, 17 Jul 2019 15:06:34 +0200

Practracker: add a --list-overstrict option

This option lists every exception that is stricter than it needs to
be.

Part of 30752

Diffstat:
Mscripts/maint/practracker/practracker.py | 12++++++++++++
Mscripts/maint/practracker/problem.py | 17+++++++++++++++++
2 files changed, 29 insertions(+), 0 deletions(-)

diff --git a/scripts/maint/practracker/practracker.py b/scripts/maint/practracker/practracker.py @@ -56,6 +56,7 @@ else: def consider_file_size(fname, f): """Consider file size issues for 'f' and return the number of new issues was found""" file_size = metrics.get_file_len(f) + if file_size > MAX_FILE_SIZE: p = problem.FileSizeProblem(fname, file_size) if ProblemVault.register_problem(p): @@ -164,6 +165,8 @@ def main(argv): parser = argparse.ArgumentParser(prog=progname) parser.add_argument("--regen", action="store_true", help="Regenerate the exceptions file") + parser.add_argument("--list-overstrict", action="store_true", + help="List over-strict exceptions") parser.add_argument("--exceptions", help="Override the location for the exceptions file") parser.add_argument("topdir", default=".", nargs="?", @@ -213,6 +216,15 @@ See doc/HACKING/HelpfulTools.md for more information on using practracker.\ """.format(found_new_issues, exceptions_file) print(new_issues_str) + if args.list_overstrict: + def k_fn(tup): + return tup[0].key() + for (ex,p) in sorted(ProblemVault.list_overstrict_exceptions(), key=k_fn): + if p is None: + print(ex, "->", 0) + else: + print(ex, "->", p.metric_value) + sys.exit(found_new_issues) if __name__ == '__main__': diff --git a/scripts/maint/practracker/problem.py b/scripts/maint/practracker/problem.py @@ -22,6 +22,9 @@ class ProblemVault(object): def __init__(self, exception_fname=None): # Exception dictionary: { problem.key() : Problem object } self.exceptions = {} + # Exception dictionary: maps key to the problem it was used to + # suppress. + self.used_exception_for = {} if exception_fname == None: return @@ -71,9 +74,23 @@ class ProblemVault(object): if problem.is_worse_than(self.exceptions[problem.key()]): print(problem) return True + else: + self.used_exception_for[problem.key()] = problem return False + def list_overstrict_exceptions(self): + """Return an iterator of tuples containing (ex,prob) where ex is an + exceptions in this vault that are stricter than it needs to be, and + prob is the worst problem (if any) that it covered. + """ + for k in self.exceptions: + e = self.exceptions[k] + p = self.used_exception_for.get(k) + if p is None or e.is_worse_than(p): + yield (e, p) + + class Problem(object): """ A generic problem in our source code. See the subclasses below for the