Pārlūkot izejas kodu

Practracker: improve exclude-directory logic

Instead of excluding directories at the last minute if they happen
to appear in our filenames, we exclude them early, before recursing
into all their subdirectories.

Part of 29746.
Nick Mathewson 5 gadi atpakaļ
vecāks
revīzija
43f163de80
1 mainītis faili ar 10 papildinājumiem un 4 dzēšanām
  1. 10 4
      scripts/maint/practracker/util.py

+ 10 - 4
scripts/maint/practracker/util.py

@@ -2,15 +2,24 @@ import os
 
 
 # We don't want to run metrics for unittests, automatically-generated C files,
 # We don't want to run metrics for unittests, automatically-generated C files,
 # external libraries or git leftovers.
 # external libraries or git leftovers.
-EXCLUDE_SOURCE_DIRS = {"/src/test/", "/src/trunnel/", "/src/ext/", "/.git/"}
+EXCLUDE_SOURCE_DIRS = {"src/test/", "src/trunnel/", "src/rust/",
+                       "src/ext/", ".git/"}
+
+def _norm(p):
+    return os.path.normcase(os.path.normpath(p))
 
 
 def get_tor_c_files(tor_topdir):
 def get_tor_c_files(tor_topdir):
     """
     """
     Return a list with the .c filenames we want to get metrics of.
     Return a list with the .c filenames we want to get metrics of.
     """
     """
     files_list = []
     files_list = []
+    exclude_dirs = { _norm(os.path.join(tor_topdir, p)) for p in EXCLUDE_SOURCE_DIRS }
+
 
 
     for root, directories, filenames in os.walk(tor_topdir):
     for root, directories, filenames in os.walk(tor_topdir):
+        # Remove all the directories that are excluded.
+        directories[:] = [ d for d in directories
+                           if _norm(os.path.join(root,d)) not in exclude_dirs ]
         directories.sort()
         directories.sort()
         filenames.sort()
         filenames.sort()
         for filename in filenames:
         for filename in filenames:
@@ -18,10 +27,7 @@ def get_tor_c_files(tor_topdir):
             if not filename.endswith(".c"):
             if not filename.endswith(".c"):
                 continue
                 continue
 
 
-            # Exclude the excluded paths
             full_path = os.path.join(root,filename)
             full_path = os.path.join(root,filename)
-            if any(os.path.normcase(exclude_dir) in full_path for exclude_dir in EXCLUDE_SOURCE_DIRS):
-                continue
 
 
             files_list.append(full_path)
             files_list.append(full_path)