meson: tolerate errors from git ls-files --deduplicate

When using the Meson build system with versions of Git before 2.31, that does not yet know the `git ls-files --deduplicate` option, one can observe the following error: ../meson.build:697:19: ERROR: Command `/usr/bin/git -C /home/martin/code/git ls-files --deduplicate '*.h' ':!contrib' ':!compat/inet_ntop.c' ':!compat/inet_pton.c' ':!compat/nedmalloc' ':!compat/obstack.*' ':!compat/poll' ':!compat/regex' ':!sha1collisiondetection' ':!sha1dc' ':!t/unit-tests/clar' ':!t/t[0-9][0-9][0-9][0-9]*' ':!xdiff'` failed with status 129. The failing command is used to find all header files in our code base, which is required for static analysis. Static analysis is an entirely optional feature that distributors typically don't care about, and we already know to skip running the command when we are not in a Git repository. But we do not handle the above failure gracefully, even though we could. Fix this by passing `check: false` to `run_command`, which makes it tolerate failures. Then check `returncode()` manually to decide whether to inspect the output. Signed-off-by: Martin Storsjö <martin@martin.st> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Martin Storsjö committed Aug 1, 2025 at 19:28 UTC 3bdd8974137d0348f599a9ba9d93f6ea9804e19a
1 file changed +8 -3
meson.build
+8 -3
@@ -694,9 +694,14 @@ third_party_excludes = [
694
695 headers_to_check = []
696 if git.found() and fs.exists(meson.project_source_root() / '.git')
697 - foreach header : run_command(git, '-C', meson.project_source_root(), 'ls-files', '--deduplicate', '*.h', third_party_excludes, check: true).stdout().split()
698 - headers_to_check += header
699 - endforeach
697 + ls_headers = run_command(git, '-C', meson.project_source_root(), 'ls-files', '--deduplicate', '*.h', third_party_excludes, check: false)
698 + if ls_headers.returncode() == 0
699 + foreach header : ls_headers.stdout().split()
700 + headers_to_check += header
701 + endforeach
702 + else
703 + warning('could not list headers, disabling static analysis targets')
704 + endif
705 endif
706
707 if not get_option('breaking_changes')