Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
tests: handle "funny" exit code 127 produced by MSVC-compiled exes
The exit code 127 is well-documented to mean: command not found. Unfortunately, it is also used as fall-back in Cygwin's `pinfo::status_exit()` method (which maps things like Windows' `STATUS_ACCESS_VIOLATION` to `128 | SIGSEGV`). This is particularly unfortunate because there is no explicit mapping for `STATUS_STACK_OVERFLOW`. Meaning: when MSVC-compiled executables produce a stack overflow the exit code in the Cygwin Bash will be 127. Consequently, the same will be true for the MSYS2 Bash that is used by Git for Windows. Now, `jk/tree-name-and-depth-limit` introduces a pair of test cases that expect a command that produces a stack overflow to fail, which it typically does with exit code 139 (which means SIGSEGV). But since MSVC-compiled `git.exe` exits with `STATUS_STACK_OVERFLOW` which the MSYS2 runtime maps to 127, and since 127 is taken to mean "command not found" by `test_must_fail`, even though everything works as planned the two new test cases fail when run in `win+VS test`. Let's work around this by: 1) recording which C compiler was used, and 2) adding an MSVC-only exception to `test_must_fail` to treat 127 as a regular failure. There is a slight downside of this approach in that a real missing command could be mistaken for a failure. However, this would be caught on other platforms, and besides, we use `test_must_fail` only for `git` and `scalar` anymore, and we can be pretty certain that both are there. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
- Loading branch information