llvmorg-github-actions[bot] wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang-format

Author: Kumar Mayank (mayanksinha17)

<details>
<summary>Changes</summary>

Fixes #<!-- -->215630

The Windows `git-clang-format.bat` launcher currently invokes `py -3`
directly, which fails on systems where Python 3 is available as
`python.exe` but the optional `py.exe` launcher is not installed.

This change:

- Uses `python` when it is available on PATH.
- Falls back to `py -3` when `python` is unavailable.
- Preserves the existing script path handling and argument forwarding.
- Adds a Windows regression test covering both launcher paths and
  non-zero exit-code propagation.

Testing:
- Targeted Windows launcher regression cases: PASS
- Python available / py unavailable: PASS
- Python unavailable / py available: PASS
- Python non-zero exit code propagation: PASS
- Paths/arguments containing spaces and quotes: PASS
- `git diff --check`: PASS

A full LLVM Lit run was not available locally because this checkout does
not currently have a configured CMake/Ninja build directory.

---
Full diff: https://github.com/llvm/llvm-project/pull/224925.diff


2 Files Affected:

- (added) clang/test/Format/git-clang-format-windows.test (+19) 
- (modified) clang/tools/clang-format/git-clang-format.bat (+7-1) 


``````````diff
diff --git a/clang/test/Format/git-clang-format-windows.test 
b/clang/test/Format/git-clang-format-windows.test
new file mode 100644
index 00000000000000..b20e803deee564
--- /dev/null
+++ b/clang/test/Format/git-clang-format-windows.test
@@ -0,0 +1,19 @@
+// REQUIRES: system-windows
+
+// RUN: rm -rf %t.dir
+// RUN: mkdir -p %t.dir/mock_bin
+
+// Case 1: python is in PATH, py and python3 are unavailable.
+// RUN: echo @echo MOCK_PYTHON %%* > %t.dir/mock_bin/python.bat
+// RUN: cmd /c "set PATH=%t.dir\mock_bin;%SystemRoot%\System32& 
\"%S/../../tools/clang-format/git-clang-format.bat\" --style=\"{BasedOnStyle: 
LLVM}\" \"test file.cpp\"" | FileCheck --check-prefix=CHECK-PYTHON %s
+// CHECK-PYTHON: MOCK_PYTHON "{{.*}}git-clang-format" --style="{BasedOnStyle: 
LLVM}" "test file.cpp"
+
+// Case 2: python is unavailable, fallback to py -3.
+// RUN: rm -f %t.dir/mock_bin/python.bat
+// RUN: echo @echo MOCK_PY %%* > %t.dir/mock_bin/py.bat
+// RUN: cmd /c "set PATH=%t.dir\mock_bin;%SystemRoot%\System32& 
\"%S/../../tools/clang-format/git-clang-format.bat\" --style=\"{BasedOnStyle: 
LLVM}\" \"test file.cpp\"" | FileCheck --check-prefix=CHECK-PY %s
+// CHECK-PY: MOCK_PY -3 "{{.*}}git-clang-format" --style="{BasedOnStyle: 
LLVM}" "test file.cpp"
+
+// Case 3: Error exit code preservation (ensuring fallback is not executed on 
failure).
+// RUN: echo @exit /b 42 > %t.dir/mock_bin/python.bat
+// RUN: not cmd /c "set PATH=%t.dir\mock_bin;%SystemRoot%\System32& 
\"%S/../../tools/clang-format/git-clang-format.bat\""
diff --git a/clang/tools/clang-format/git-clang-format.bat 
b/clang/tools/clang-format/git-clang-format.bat
index a40276e63c5848..b6bd7c992561fc 100644
--- a/clang/tools/clang-format/git-clang-format.bat
+++ b/clang/tools/clang-format/git-clang-format.bat
@@ -1 +1,7 @@
-py -3 "%~dpn0" %*
+@echo off
+where /q python
+if not errorlevel 1 (
+  python "%~dpn0" %*
+) else (
+  py -3 "%~dpn0" %*
+)

``````````

</details>


https://github.com/llvm/llvm-project/pull/224925
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to