From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id sauyKAqSmmr7/ScAWB0awg (envelope-from ) for ; Fri, 04 Sep 2026 05:40:26 -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=MH+mrQTx; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=NegSc47s; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=h7vHOcWW; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=3styztCN; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 9CB441E166; Fri, 04 Sep 2026 05:40:26 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-2.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,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED autolearn=ham autolearn_force=no version=4.0.1 Received: from vm01.sourceware.org (vm01.sourceware.org [38.145.34.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 8D8B11E09B for ; Fri, 04 Sep 2026 05:40:25 -0400 (EDT) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 26986490140C for ; Fri, 4 Sep 2026 09:40:25 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 26986490140C 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=MH+mrQTx; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=NegSc47s; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=h7vHOcWW; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=3styztCN Received: from smtp-out1.suse.de (smtp-out1.suse.de [IPv6:2a07:de40:b251:101:10:150:64:1]) by sourceware.org (Postfix) with ESMTPS id E49684C900DD for ; Fri, 4 Sep 2026 09:39:08 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E49684C900DD 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 E49684C900DD Authentication-Results: sourceware.org; arc=none smtp.remote-ip=2a07:de40:b251:101:10:150:64:1 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1788514749; cv=none; b=QOzT9fY1OcRb7MCB5UGX4g0yIb/nHTavA8bohWoM28+ZQw4t4Mh0ObPwHpz7/ANv0htYx3PVgRkBBbZlSXZhey8iJZPzld4AWcR1B+iANhLpCYXXEIjYTHhI7y1Hno0hbwr2cFbxFW96FKbm35Y2pLCPsWiu66hevP5EkNggxU4= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1788514749; c=relaxed/simple; bh=VX0UNdb46syfjp8q6zaL/8+aJCU+YHQ2Q0tE+ltCYKw=; h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature:From: To:Subject:Date:Message-ID:MIME-Version; b=wFoHTWkBTF9Udq4jsyRmnsIBQQ747YrtbWrHAAYm2QsYBxxPWI5buNDbcKIOZMzGN+BLxrkstOzRxTHbUQc0ljfzw98p3XYWLCCya8uVg8ZuhDIO4KsAdTawJCsQ2G/ViswuKQEeI/crFR6HZI0T7k2IS/Q8PWYI5FPV4vRbonQ= 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=MH+mrQTx; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=NegSc47s; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=h7vHOcWW; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=3styztCN DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E49684C900DD Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104: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-out1.suse.de (Postfix) with ESMTPS id 8EB4422C8D for ; Fri, 4 Sep 2026 09:38:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1788514743; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=1vWHQyZJYhkPZnYtdnz0yXCo1oCrt24OUSrrEjXausw=; b=MH+mrQTxVqCM0vU9EbqcwcNzFg4LTjXURqsFZhUJuNr0WVd+nQ2XENgr22jiLmxo/nCypf jvaXHd5A3ob5NRlMctlYNUEATTOcuUPoMX/ZyvAm+9zo7yl+brI6kwoohTHwROIiTUR/Jh z4Pu9Vq+vJNr3nj7IV3MnRV3udZ6ihw= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1788514743; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=1vWHQyZJYhkPZnYtdnz0yXCo1oCrt24OUSrrEjXausw=; b=NegSc47sRI2+BVUwHBvWBEtRU74Gu7th0QGrprxZ96QoSxFcQGqotnA1CbuNdrRPfLkv6+ xYG9lDJ5pESX40BA== Authentication-Results: smtp-out1.suse.de; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=h7vHOcWW; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=3styztCN DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1788514739; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=1vWHQyZJYhkPZnYtdnz0yXCo1oCrt24OUSrrEjXausw=; b=h7vHOcWWgQk2DB4JVBvMNK1Yid1S3JYgwhH7nvyg75MLQNHJeTBxNrjgqK7Ppp4sihTcKO GBxB7STjT1UDPzdE0Ndrg+qJ4VvxQvn9BDBClm+m3Ha9rSPAZJqWszlCeoAJFfr+JD6AmR MXa2VuVplougEZeeLM3mwAf3engN24s= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1788514739; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=1vWHQyZJYhkPZnYtdnz0yXCo1oCrt24OUSrrEjXausw=; b=3styztCNTh9yLKybSpVWfOX5/HZN9Pf5YJh2zD6nzTY7WGtPpbUEHUJBDnIh1O7FDzYfxo wOuHH7W7V7Fg2tAw== 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 3991013678 for ; Fri, 4 Sep 2026 09:38:59 +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 zZyoC7ORmmqyFQAAD6G6ig (envelope-from ) for ; Fri, 04 Sep 2026 09:38:59 +0000 From: Tom de Vries To: gdb-patches@sourceware.org Subject: [RFC 1/5] [pre-commit] Add indent-exp Date: Fri, 4 Sep 2026 11:38:51 +0200 Message-ID: <20260904093858.359604-1-tdevries@suse.de> X-Mailer: git-send-email 2.51.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Action: no action X-Rspamd-Server: rspamd2.dmz-prg2.suse.org X-Rspamd-Queue-Id: 8EB4422C8D X-Spamd-Result: default: False [-3.01 / 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)[]; R_DKIM_ALLOW(-0.20)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; MX_GOOD(-0.01)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; ARC_NA(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; RCPT_COUNT_ONE(0.00)[1]; MIME_TRACE(0.00)[0:+]; FROM_HAS_DN(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[gdb-patches@sourceware.org]; RCVD_TLS_ALL(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:dkim,suse.de:mid]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; RCVD_COUNT_TWO(0.00)[2]; TO_DN_NONE(0.00)[]; DWL_DNSWL_BLOCKED(0.00)[suse.de:dkim]; DNSWL_BLOCKED(0.00)[2a07:de40:b281:104:10:150:64:97:from]; DKIM_TRACE(0.00)[suse.de:+] 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 There's a long-term goal to start using tclfmt [1] to format .exp and .tcl files. A less impactful approach is to have consistent indentation. Add a hook indent-exp that uses emacs indent-region. It uses a new script ./gdb/contrib/emacs-indent.sh which we demonstrate here using the largest .exp file (12433 lines): ... $ time ./gdb/contrib/emacs-indent.sh tcl-mode gdb/testsuite/lib/gdb.exp real 0m1.041s user 0m0.998s sys 0m0.045s ... The first change is here where we replace 7 spaces with a tab: ... proc load_lib { file } { array set known_global {} foreach varname [info globals] { - set known_globals($varname) 1 + set known_globals($varname) 1 } ... Less desirable changes are when emacs messes with indentation inside strings: ... for (dyn = _DYNAMIC; dyn->d_tag != DT_NULL; ++dyn) - if (dyn->d_tag == DT_DEBUG) - r_debug = (struct r_debug *) dyn->d_un.d_ptr; + if (dyn->d_tag == DT_DEBUG) + r_debug = (struct r_debug *) dyn->d_un.d_ptr; ... The script is fast enough when checking a few files in a new commit, but very slow when checking all files: ... $ pre-commit run indent-exp --hook-stage manual --all-files -v indent-exp..............................................................Failed - hook id: indent-exp - duration: 89.18s - files were modified by this hook ... It's using the manual stage, both because it's slow and because users need to provide the emacs dependency. I tried to make ./gdb/contrib/emacs-indent.sh generic enough to be also usable for other modes, for instance sh-mode for shell scripts. The script has a kludge to stop emacs from changing this: ... # Try this command: # foo \ # arg1 \ # arg2 ... into: ... # Try this command: # foo \ # arg1 \ # arg2 ... by adding a '#' after the trailing backslash: ... # Try this command: # foo \# # arg1 \# # arg2 ... There might be a way to address this using some emacs customization instead. [1] https://sourceware.org/bugzilla/show_bug.cgi?id=33724 --- .pre-commit-config.yaml | 9 +++- gdb/contrib/emacs-indent.sh | 85 +++++++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+), 1 deletion(-) create mode 100755 gdb/contrib/emacs-indent.sh diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 0b4285e6c82..096887ef86f 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -100,7 +100,7 @@ repos: hooks: - id: tclint args: [--trust-plugins] - files: '^gdb/testsuite/.*\.(exp|tcl)$' + files: &gdb_exp_tcl_files '^gdb/testsuite/.*\.(exp|tcl)$' # Yaml hooks. - repo: https://github.com/adrienverge/yamllint.git @@ -169,6 +169,13 @@ repos: args: [--config-check] additional_dependencies: ["pyyaml"] files: *pre_commit_config_file + - id: &id7 indent-exp + name: *id7 + language: unsupported_script + entry: gdb/contrib/emacs-indent.sh + args: [tcl-mode] + files: *gdb_exp_tcl_files + stages: [manual] # Local Variables: # indent-tabs-mode: nil diff --git a/gdb/contrib/emacs-indent.sh b/gdb/contrib/emacs-indent.sh new file mode 100755 index 00000000000..71411103aed --- /dev/null +++ b/gdb/contrib/emacs-indent.sh @@ -0,0 +1,85 @@ +#!/bin/bash + +mode="$1" +shift + +if [ "$mode" = "" ]; then + echo "Missing mode argument" + exit 1 +fi + +if [ $# -eq 0 ]; then + echo "No files" + exit 1 +fi + +if ! emacs --version > /dev/null; then + echo "Please install emacs" + exit 1 +fi + +files=() +for f in "$@"; do + case "$mode" in + tcl-mode) + case "$f" in + # Imported. + gdb/testsuite/lib/ton.tcl) + continue + ;; + esac + ;; + esac + + files=("${files[@]}" "$f") +done + +if [ ${#files[@]} -eq 0 ]; then + exit +fi + +tmp="" + +cleanup() +{ + if [ "$tmp" != "" ]; then + rm -f "$tmp" + fi +} + +# Schedule cleanup. +trap cleanup EXIT + +# Get temporary file. +tmp=$(mktemp) || exit 1 + +if [ "$mode" = "tcl-mode" ]; then + # Kludge: Hide backslashes at end of comment from emacs tcl-mode, by + # appending '#'. + sed \ + -i \ + 's%^\([ \t]*#.*\)\\$%\1\\#%' \ + "${files[@]}" \ + || exit 1 +fi + +script=" +(dolist + (f command-line-args-left) + (with-current-buffer + (find-file-noselect f) + ($mode) + (indent-region (point-min) (point-max)) + (save-buffer) + (kill-buffer)))" + +if ! emacs \ + -batch \ + --eval="$script" \ + "${files[@]}" \ + > "$tmp" \ + 2>&1; then + # Output is verbose, only show on error. + cat "$tmp" + exit 1 +fi base-commit: 5f20ce97686ac7ee28cba3f0af0a237a1e878148 -- 2.51.0