[tor-commits] [tor/master] Make includes interface more like the rest of practracker

dgoulet at torproject.org dgoulet at torproject.org
Wed Aug 21 13:50:12 UTC 2019


commit 2a3c727dfed7465090c2b9bae2f5ac88b3c6dca0
Author: Nick Mathewson <nickm at torproject.org>
Date:   Mon Aug 5 17:31:49 2019 -0400

    Make includes interface more like the rest of practracker
    
    Everything else assumes that somebody else will open the file for it.
---
 scripts/maint/practracker/includes.py    | 17 ++++++++---------
 scripts/maint/practracker/practracker.py |  4 +++-
 2 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/scripts/maint/practracker/includes.py b/scripts/maint/practracker/includes.py
index fbd68f4f5..fcc527c98 100755
--- a/scripts/maint/practracker/includes.py
+++ b/scripts/maint/practracker/includes.py
@@ -103,11 +103,9 @@ class Rules(object):
                                 "Forbidden include of {}".format(include),
                                 is_advisory=self.is_advisory)
 
-    def applyToFile(self, fname):
-        with open_file(fname) as f:
-            #print(fname)
-            for error in self.applyToLines(iter(f), "{}:".format(fname)):
-                yield error
+    def applyToFile(self, fname, f):
+        for error in self.applyToLines(iter(f), "{}:".format(fname)):
+            yield error
 
     def noteUnusedRules(self):
         for p in self.patterns:
@@ -200,14 +198,14 @@ def toposort(graph, limit=100):
 
     return all_levels
 
-def consider_include_rules(fname):
+def consider_include_rules(fname, f):
     dirpath = os.path.split(fname)[0]
     rules_fname = os.path.join(dirpath, RULES_FNAME)
     rules = load_include_rules(os.path.join(dirpath, RULES_FNAME))
     if rules is None:
         return
 
-    for err in rules.applyToFile(fname):
+    for err in rules.applyToFile(fname, f):
         yield err
 
     list_unused = False
@@ -221,8 +219,9 @@ def walk_c_files(topdir="src"):
         for fname in fnames:
             if fname_is_c(fname):
                 fullpath = os.path.join(dirpath,fname)
-                for err in consider_include_rules(fullpath):
-                    yield err
+                with open(fullpath) as f:
+                    for err in consider_include_rules(fullpath, f):
+                        yield err
 
 def run_check_includes(topdir, list_unused=False, log_sorted_levels=False,
                        list_advisories=False):
diff --git a/scripts/maint/practracker/practracker.py b/scripts/maint/practracker/practracker.py
index 66ebb1277..20c8bb5b4 100755
--- a/scripts/maint/practracker/practracker.py
+++ b/scripts/maint/practracker/practracker.py
@@ -117,8 +117,10 @@ def consider_metrics_for_file(fname, f):
     for item in consider_function_size(fname, f):
         yield item
 
+    # Check for "upward" includes
+    f.seek(0)
     n = 0
-    for item in includes.consider_include_rules(real_fname):
+    for item in includes.consider_include_rules(real_fname, f):
         n += 1
     if n:
         yield problem.DependencyViolationItem(fname, n)





More information about the tor-commits mailing list