[binutils-gdb] [pre-commit] Add file mode check
Tom de Vries via Gdb-cvs <[email protected]> Mon, 15 Jun 2026 08:16:49 +0000 (GMT)
| Newsgroups | gmane.comp.gdb.cvs |
|---|---|
| Message-ID | <20260615081649.C70464B99F68__2513.06033912755$1781511419$gmane$org@sourceware.org> |
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=b55fa8294aebd5e9587169f3c74decea7fec5c33 commit b55fa8294aebd5e9587169f3c74decea7fec5c33 Author: Tom de Vries <[email protected]> Date: Mon Jun 15 10:16:45 2026 +0200 [pre-commit] Add file mode check Claude Code mentioned in a review that a source file was marked executable. I've submitted a patch to fix this [1]. Detect this problem using pre-commit to prevent it from re-occurring. The state before commit 15363a3be77 ("[gdb] Drop executable mode in some files") gives us (abbreviated output using "..."): ... $ pre-commit run check-file-mode --all-files check-file-mode.........................................................Failed - hook id: check-file-mode - exit code: 1 100755 ... gdb/testsuite/gdb.base/jump_multiple_objfiles.h 100755 ... gdb/testsuite/gdb.fortran/nested-funcs.f90 100755 ... gdb/testsuite/gdb.fortran/oop_extend_type.f90 100755 ... gdb/amd64-tdep.c 100755 ... gdb/testsuite/lib/compiler.cc 100755 ... gdb/testsuite/gdb.fortran/nested-funcs.exp 100755 ... gdb/testsuite/gdb.fortran/vla-type.f90 100755 ... gdb/testsuite/gdb.arch/amd64-lam.c 100755 ... gdb/testsuite/gdb.base/jump_multiple_objfiles.exp 100755 ... gdb/testsuite/gdb.testsuite/gdb_test_multiple-lbl.gdb 100755 ... gdb/testsuite/gdb.btrace/exception.exp 100755 ... gdb/testsuite/gdb.fortran/vla-type.exp 100755 ... gdb/testsuite/gdb.base/jump_multiple_objfiles.c 100755 ... gdb/testsuite/gdb.base/jump_multiple_objfiles-foo.c 100755 ... gdb/testsuite/gdb.fortran/oop_extend_type.exp 100755 ... gdb/testsuite/gdb.fortran/print_type.exp ... Shell-checked new script gdb/contrib/check-file-mode.sh. Changes in v2: - make sure git failure makes the script fail - make case statement more readable Versions: - v1 https://sourceware.org/pipermail/gdb-patches/2026-June/227791.html [1] https://sourceware.org/pipermail/gdb-patches/2026-June/227780.html Diff: --- .pre-commit-config.yaml | 5 +++++ gdb/contrib/check-file-mode.sh | 47 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index fe8466433ac..d75468d0b48 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -112,6 +112,11 @@ repos: additional_dependencies: ["pyyaml"] always_run: true require_serial: true + - id: check-file-mode + name: check-file-mode + language: script + entry: gdb/contrib/check-file-mode.sh + files: '^(gdb|gdbserver|gdbsupport)/.*$' - repo: https://github.com/nmoroze/tclint rev: v0.8.0 hooks: diff --git a/gdb/contrib/check-file-mode.sh b/gdb/contrib/check-file-mode.sh new file mode 100755 index 00000000000..a6e05535e73 --- /dev/null +++ b/gdb/contrib/check-file-mode.sh @@ -0,0 +1,47 @@ +#!/bin/bash + +# Copyright (C) 2026 Free Software Foundation, Inc. +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +set -e +set -o pipefail + +no_exec_files=() +for f in "$@"; do + case $f in + */*.py \ + | */*.sh \ + | */configure \ + | gdb/gstack-1.in \ + | gdb/gcore-1.in \ + | gdb/po/gdbtext \ + | gdb/make-init-c \ + | gdb/testsuite/lib/notty-wrap \ + | gdb/testsuite/lib/pdtrace.in ) + continue + ;; + *) + no_exec_files=("${no_exec_files[@]}" "$f") + ;; + esac +done + +if [ ${#no_exec_files[@]} -eq 0 ]; then + exit 0 +fi + +# Flag files that are executable, but not meant to be executable. + +git ls-files --stage -- "${no_exec_files[@]}" \ + | (! grep '^100755 ')