From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id gWPvJy0imGqR9x4AWB0awg (envelope-from ) for ; Wed, 02 Sep 2026 09:18:37 -0400 Authentication-Results: simark.ca; dkim=pass (1024-bit key; unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=G0g/8SH6; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=r5SR6WL/; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=OhNfOnct; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=+vK58Dwt; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 97CC11E166; Wed, 02 Sep 2026 09:18:37 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-5.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=ham autolearn_force=no version=4.0.1 Received: from vm01.sourceware.org (vm01.sourceware.org [IPv6:2620:52:6:3111::32]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 167871E033 for ; Wed, 02 Sep 2026 09:18:36 -0400 (EDT) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id DE0594BA79A4 for ; Wed, 2 Sep 2026 13:18:34 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org DE0594BA79A4 Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=G0g/8SH6; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=r5SR6WL/; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=OhNfOnct; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=+vK58Dwt Received: from smtp-out2.suse.de (smtp-out2.suse.de [IPv6:2a07:de40:b251:101:10:150:64:2]) by sourceware.org (Postfix) with ESMTPS id 030704BA2E36 for ; Wed, 2 Sep 2026 13:17:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 030704BA2E36 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 030704BA2E36 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=2a07:de40:b251:101:10:150:64:2 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1788355070; cv=none; b=gwlVZc2oeEqLPfulh1pO9NSbk7pQQSe1dy6YnIMleYJ0AGhNQUQD0zBlcHaSmdxffpvDWp2Q8Dk13PEXJ1xhIuU22NzxH2Y8K7cq7YrwsXKiGbFfABZSnUydqVuYfeHa05yIipy3GkmoXxlh2cCyRXFksc1+4csNhdJ6S73QBS0= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1788355070; c=relaxed/simple; bh=ohG71hD48T+ZFbQp5aeLDm8UrcgNEFG+wGCNw/4Qadw=; h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature:From: To:Subject:Date:Message-ID:MIME-Version; b=MzRksNIWhXp2xvNUKV4PzgEUr6Gd5h7UNRY2Y3cZ3KTVBxzkmvpJ3cEqZuL7j2JiAOgpryM9NTZ0bmvKwQMq7hf/43iH4G1Okvj3gLSEhqfLsN7lrfv4x5e/5BE8KeYBeaoByeRd0GG89Pl8u2wC+wlo1G2PF7FjFovVoMW8g7A= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=G0g/8SH6; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=r5SR6WL/; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=OhNfOnct; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=+vK58Dwt DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 030704BA2E36 Received: from imap1.dmz-prg2.suse.org (unknown [10.150.64.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 854541F812 for ; Wed, 2 Sep 2026 13:17:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1788355064; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=exWaR9Zk+ILP3n0aOHylKk0+JnJdEecVNvcjNhAn6EM=; b=G0g/8SH6JLbmcpD5QYaR3oO6y3HPoCMl4WX1p6BTPw2xKOIkC70yprLGQ4tfiziETYYHWu MbogtRZNVzdF7FppKXjKUcVBGQM7+jKS2jEfT0Ov8QAJLZGXlhc2T4eXNqPOzqkEJeapK9 z9zRUuo5+P7eo3j9FJePGZtWp4vbIPY= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1788355064; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=exWaR9Zk+ILP3n0aOHylKk0+JnJdEecVNvcjNhAn6EM=; b=r5SR6WL/rMExOO5kXktsquQ/LZwUhMFw6N2y0OqG2zEzpnPOAWRDWsvXzClKzxL+L+5FSv eF+KJXyd8VGHotCg== Authentication-Results: smtp-out2.suse.de; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1788355060; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=exWaR9Zk+ILP3n0aOHylKk0+JnJdEecVNvcjNhAn6EM=; b=OhNfOnctlBInWA8oue9+XT0x/+MiChZUBHeUf/YcQFh00TfdCcDEviYJ2xIsBPFFJKyL+E KszG7R0MAlxo8dVDJpfnTX63Nh2Fygf4mQjWs1hs/WZT51Ar+Ev2L1iCRM0Q/8JSw/Goo1 NOAWaT/9C00Oyhp9gQWdftZ7Vg1P4Dg= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1788355060; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=exWaR9Zk+ILP3n0aOHylKk0+JnJdEecVNvcjNhAn6EM=; b=+vK58DwtF/ZaEw3X7ho6pXknFLak9bJXWQzlKeE8eCQF69bBAggowoqIgW9b0HGoUmTKy0 w6vaPLOGQGGuEcDQ== Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id 5949513738 for ; Wed, 2 Sep 2026 13:17:40 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id iPZxFPQhmGqQTAAAD6G6ig (envelope-from ) for ; Wed, 02 Sep 2026 13:17:40 +0000 From: Tom de Vries To: gdb-patches@sourceware.org Subject: [RFC 1/3] [pre-commit] Add shfmt Date: Wed, 2 Sep 2026 15:17:37 +0200 Message-ID: <20260902131739.2125928-2-tdevries@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260902131739.2125928-1-tdevries@suse.de> References: <20260902131739.2125928-1-tdevries@suse.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spamd-Result: default: False [-2.80 / 50.00]; BAYES_HAM(-3.00)[100.00%]; MID_CONTAINS_FROM(1.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; R_MISSING_CHARSET(0.50)[]; NEURAL_HAM_SHORT(-0.20)[-0.996]; MIME_GOOD(-0.10)[text/plain]; ARC_NA(0.00)[]; RCPT_COUNT_ONE(0.00)[1]; RCVD_VIA_SMTP_AUTH(0.00)[]; MIME_TRACE(0.00)[0:+]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; PREVIOUSLY_DELIVERED(0.00)[gdb-patches@sourceware.org]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[imap1.dmz-prg2.suse.org:helo,suse.de:mid]; RCVD_COUNT_TWO(0.00)[2]; TO_MATCH_ENVRCPT_ALL(0.00)[]; TO_DN_NONE(0.00)[]; RCVD_TLS_ALL(0.00)[] X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces~public-inbox=simark.ca@sourceware.org Add a new pre-commit hook shfmt, disabled. A few notable changes in formatting compared to 'emacs' style are: ... $ cat test.sh.bak case "$1" in foo \ | bar ) : ;; esac var=$(foo \ bar) $ cp test.sh.bak test.sh; ./gdb/contrib/shfmt.sh test.sh $ diff -u test.sh.bak test.sh @@ -1,11 +1,11 @@ case "$1" in - foo \ - | bar ) + foo | \ + bar) : ;; esac var=$(foo \ - bar) + bar) ... The hook uses https://github.com/scop/pre-commit-shfmt.git, which provides a .pre-commit-hooks.yaml file. The file presents three alternatives: - shfmt (prebuilt upstream executable) - shfmt-src (build from source) - shfmt-docker (Docker image) I've chosen the shfmt-src one. It relies on dependency mvdan.cc/sh/v3/cmd/shfmt@v3.13.1, which points to go package https://pkg.go.dev/mvdan.cc/sh/v3/cmd/shfmt, which uses repository https://github.com/mvdan/sh. --- .pre-commit-config.yaml | 12 ++++++ gdb/contrib/pre-commit.py | 6 ++- gdb/contrib/shfmt.sh | 83 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 100 insertions(+), 1 deletion(-) create mode 100755 gdb/contrib/shfmt.sh diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 0b4285e6c82..2d2b5e38ca1 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -114,6 +114,18 @@ repos: # Enable strict mode to make sure we see and fix warnings. args: [--strict] + # Shell script hooks. + - repo: https://github.com/scop/pre-commit-shfmt.git + rev: v3.13.1-1 + hooks: + - id: shfmt-src + alias: shfmt + entry: gdb/contrib/shfmt.sh + files: *gdb_files + args: [] + # Disabled. + stages: [manual] + # Local hooks. - repo: local hooks: diff --git a/gdb/contrib/pre-commit.py b/gdb/contrib/pre-commit.py index f3ad6f803b0..66b8667a2f2 100755 --- a/gdb/contrib/pre-commit.py +++ b/gdb/contrib/pre-commit.py @@ -49,7 +49,11 @@ def config_check_repo(repo): # Check version number. Don't allow pre-releases like 9.0.0b1. # We currently only need to support x.y.z, but that could change. - if not re.fullmatch(r"\d+[.]\d+[.]\d+", rev): + re_rev = r"\d+[.]\d+[.]\d+" + if name == "https://github.com/scop/pre-commit-shfmt.git": + re_rev += r"-\d+" + + if not re.fullmatch(re_rev, rev): print("Revision %s for repo %s not allowed." % (rev, name)) return False diff --git a/gdb/contrib/shfmt.sh b/gdb/contrib/shfmt.sh new file mode 100755 index 00000000000..9cdf863b4d1 --- /dev/null +++ b/gdb/contrib/shfmt.sh @@ -0,0 +1,83 @@ +#!/bin/bash + +f2=() +f4=() + +for f in "$@"; do + # The gdb/config/djgpp/* pattern matches the explicitly mentioned + # djcheck.sh and djconfig.sh. Allow this. + # shellcheck disable=SC2221,SC2222 + case "$f" in + */configure) + # Generated. + continue + ;; + gdb/config/djgpp/*) + # For now, these scripts prefer `...` over $(...). See + # gdb/config/djgpp/.shellcheckrc. + # Shfmt automatically rewrites to $(...), so skip these. + continue + ;; + gdb/config/djgpp/djcheck.sh) + # Mixed 2/4 indentation. + continue + ;; + gdb/config/djgpp/djconfig.sh \ + | gdb/contrib/expect-read1.sh \ + | gdb/features/feature_to_c.sh \ + | gdb/gdb_buildall.sh ) + f2=("${f2[@]}" "$f") + ;; + *) + f4=("${f4[@]}" "$f") + ;; + esac +done + +with_indent() +{ + indent="$1" + shift + + if [ $# -eq 0 ]; then + return + fi + + shfmt \ + --language-dialect=auto \ + --indent="$indent" \ + --func-next-line \ + --space-redirects \ + --case-indent \ + --binary-next-line \ + --write \ + "$@" +} + +with_indent 2 "${f2[@]}" +with_indent 4 "${f4[@]}" + +tmp="" + +cleanup() +{ + if [ "$tmp" != "" ]; then + rm -f "$tmp" + fi +} + +# Schedule cleanup. +trap cleanup EXIT + +tmp=$(mktemp) + +for f in "${f2[@]}" "${f4[@]}"; do + unexpand \ + --first-only \ + --tabs=8 \ + "$f" \ + > "$tmp" + + # Use cat to preserve permissions on $f. + cat "$tmp" > "$f" +done -- 2.51.0