]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.12] gh-109408: Add the docs whitespace check from patchcheck to pre-commit (GH...
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Tue, 10 Oct 2023 08:39:55 +0000 (10:39 +0200)
committerGitHub <noreply@github.com>
Tue, 10 Oct 2023 08:39:55 +0000 (08:39 +0000)
gh-109408: Add the docs whitespace check from patchcheck to pre-commit (GH-109854)
(cherry picked from commit 7426ed0347d66f7ef61ea7ae6c3163258b8fb128)

Co-authored-by: Hugo van Kemenade <hugovk@users.noreply.github.com>
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com>
Co-authored-by: Adam Turner <9087854+AA-Turner@users.noreply.github.com>
.pre-commit-config.yaml
Tools/patchcheck/patchcheck.py

index 3e17bb6f0256a6641960e7095dbf599519d5ae98..82863ad326f04d60d1f6a68a452c480ce25071e1 100644 (file)
@@ -17,7 +17,7 @@ repos:
         types: [python]
         exclude: Lib/test/tokenizedata/coding20731.py
       - id: trailing-whitespace
-        types_or: [c, python, rst]
+        types_or: [c, inc, python, rst]
 
   - repo: https://github.com/sphinx-contrib/sphinx-lint
     rev: v0.6.8
index e3959ce428c7c50a93e23ab88686d49b3c1e5e49..af1f0584bb54035e8221ce805aa63a1f096bcbdc 100755 (executable)
@@ -30,7 +30,8 @@ SRCDIR = get_python_source_dir()
 
 def n_files_str(count):
     """Return 'N file(s)' with the proper plurality on 'file'."""
-    return "{} file{}".format(count, "s" if count != 1 else "")
+    s = "s" if count != 1 else ""
+    return f"{count} file{s}"
 
 
 def status(message, modal=False, info=None):
@@ -84,7 +85,7 @@ def get_git_remote_default_branch(remote_name):
 
     It is typically called 'main', but may differ
     """
-    cmd = "git remote show {}".format(remote_name).split()
+    cmd = f"git remote show {remote_name}".split()
     env = os.environ.copy()
     env['LANG'] = 'C'
     try:
@@ -171,9 +172,9 @@ def report_modified_files(file_paths):
     if count == 0:
         return n_files_str(count)
     else:
-        lines = ["{}:".format(n_files_str(count))]
+        lines = [f"{n_files_str(count)}:"]
         for path in file_paths:
-            lines.append("  {}".format(path))
+            lines.append(f"  {path}")
         return "\n".join(lines)
 
 
@@ -212,27 +213,6 @@ def normalize_c_whitespace(file_paths):
     return fixed
 
 
-ws_re = re.compile(br'\s+(\r?\n)$')
-
-@status("Fixing docs whitespace", info=report_modified_files)
-def normalize_docs_whitespace(file_paths):
-    fixed = []
-    for path in file_paths:
-        abspath = os.path.join(SRCDIR, path)
-        try:
-            with open(abspath, 'rb') as f:
-                lines = f.readlines()
-            new_lines = [ws_re.sub(br'\1', line) for line in lines]
-            if new_lines != lines:
-                shutil.copyfile(abspath, abspath + '.bak')
-                with open(abspath, 'wb') as f:
-                    f.writelines(new_lines)
-                fixed.append(path)
-        except Exception as err:
-            print('Cannot fix %s: %s' % (path, err))
-    return fixed
-
-
 @status("Docs modified", modal=True)
 def docs_modified(file_paths):
     """Report if any file in the Doc directory has been changed."""
@@ -251,6 +231,7 @@ def reported_news(file_paths):
     return any(p.startswith(os.path.join('Misc', 'NEWS.d', 'next'))
                for p in file_paths)
 
+
 @status("configure regenerated", modal=True, info=str)
 def regenerated_configure(file_paths):
     """Check if configure has been regenerated."""
@@ -259,6 +240,7 @@ def regenerated_configure(file_paths):
     else:
         return "not needed"
 
+
 @status("pyconfig.h.in regenerated", modal=True, info=str)
 def regenerated_pyconfig_h_in(file_paths):
     """Check if pyconfig.h.in has been regenerated."""
@@ -267,6 +249,7 @@ def regenerated_pyconfig_h_in(file_paths):
     else:
         return "not needed"
 
+
 def ci(pull_request):
     if pull_request == 'false':
         print('Not a pull request; skipping')
@@ -275,19 +258,18 @@ def ci(pull_request):
     file_paths = changed_files(base_branch)
     python_files = [fn for fn in file_paths if fn.endswith('.py')]
     c_files = [fn for fn in file_paths if fn.endswith(('.c', '.h'))]
-    doc_files = [fn for fn in file_paths if fn.startswith('Doc') and
-                 fn.endswith(('.rst', '.inc'))]
     fixed = []
     fixed.extend(normalize_whitespace(python_files))
     fixed.extend(normalize_c_whitespace(c_files))
-    fixed.extend(normalize_docs_whitespace(doc_files))
     if not fixed:
         print('No whitespace issues found')
     else:
-        print(f'Please fix the {len(fixed)} file(s) with whitespace issues')
-        print('(on UNIX you can run `make patchcheck` to make the fixes)')
+        count = len(fixed)
+        print(f'Please fix the {n_files_str(count)} with whitespace issues')
+        print('(on Unix you can run `make patchcheck` to make the fixes)')
         sys.exit(1)
 
+
 def main():
     base_branch = get_base_branch()
     file_paths = changed_files(base_branch)
@@ -300,8 +282,6 @@ def main():
     normalize_whitespace(python_files)
     # C rules enforcement.
     normalize_c_whitespace(c_files)
-    # Doc whitespace enforcement.
-    normalize_docs_whitespace(doc_files)
     # Docs updated.
     docs_modified(doc_files)
     # Misc/ACKS changed.