]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Fix bugs in `compute-changes.py` logic for CIFuzz (#145232)
authorStan Ulbrych <89152624+StanFromIreland@users.noreply.github.com>
Wed, 4 Mar 2026 20:43:44 +0000 (20:43 +0000)
committerGitHub <noreply@github.com>
Wed, 4 Mar 2026 20:43:44 +0000 (22:43 +0200)
Lib/test/test_tools/test_compute_changes.py
Tools/build/compute-changes.py

index b20ff975fc2834676f77df718c8feef02bf01db1..c4e3ffdb4de6cf6f1893d985c216103a79f97729 100644 (file)
@@ -6,7 +6,8 @@ import unittest
 from pathlib import Path
 from unittest.mock import patch
 
-from test.test_tools import skip_if_missing, imports_under_tool
+from test.support import os_helper
+from test.test_tools import basepath, skip_if_missing, imports_under_tool
 
 skip_if_missing("build")
 
@@ -15,6 +16,7 @@ with patch.dict(os.environ, {"GITHUB_DEFAULT_BRANCH": "main"}):
         compute_changes = importlib.import_module("compute-changes")
 
 process_changed_files = compute_changes.process_changed_files
+is_fuzzable_library_file = compute_changes.is_fuzzable_library_file
 Outputs = compute_changes.Outputs
 ANDROID_DIRS = compute_changes.ANDROID_DIRS
 IOS_DIRS = compute_changes.IOS_DIRS
@@ -45,16 +47,16 @@ class TestProcessChangedFiles(unittest.TestCase):
                 self.assertFalse(result.run_tests)
 
     def test_ci_fuzz_stdlib(self):
-        for p in LIBRARY_FUZZER_PATHS:
-            with self.subTest(p=p):
-                if p.is_dir():
-                    f = p / "file"
-                elif p.is_file():
-                    f = p
-                else:
-                    continue
-                result = process_changed_files({f})
-                self.assertTrue(result.run_ci_fuzz_stdlib)
+        with os_helper.change_cwd(basepath):
+            for p in LIBRARY_FUZZER_PATHS:
+                with self.subTest(p=p):
+                    if p.is_dir():
+                        f = p / "file"
+                    elif p.is_file():
+                        f = p
+                    result = process_changed_files({f})
+                    self.assertTrue(result.run_ci_fuzz_stdlib)
+                    self.assertTrue(is_fuzzable_library_file(f))
 
     def test_android(self):
         for d in ANDROID_DIRS:
index 67d2b0609696601b2214b18924deb30748ec03f2..981e00e28b42a7f0ed654ac6f3b0947148ede5ca 100644 (file)
@@ -68,7 +68,8 @@ LIBRARY_FUZZER_PATHS = frozenset({
     Path("Lib/encodings/"),
     Path("Modules/_codecsmodule.c"),
     Path("Modules/cjkcodecs/"),
-    Path("Modules/unicodedata*"),
+    Path("Modules/unicodedata.c"),
+    Path("Modules/unicodedata_db.h"),
     # difflib
     Path("Lib/difflib.py"),
     # email
@@ -116,10 +117,10 @@ class Outputs:
 
 
 def compute_changes() -> None:
-    target_branch, head_ref = git_refs()
+    target_ref, head_ref = git_refs()
     if os.environ.get("GITHUB_EVENT_NAME", "") == "pull_request":
         # Getting changed files only makes sense on a pull request
-        files = get_changed_files(target_branch, head_ref)
+        files = get_changed_files(target_ref, head_ref)
         outputs = process_changed_files(files)
     else:
         # Otherwise, just run the tests
@@ -132,6 +133,7 @@ def compute_changes() -> None:
             run_wasi=True,
             run_windows_tests=True,
         )
+    target_branch = target_ref.removeprefix("origin/")
     outputs = process_target_branch(outputs, target_branch)
 
     if outputs.run_tests: