To: git@vger.kernel.org
-Subject: What's cooking in git.git (Jul 2026, #06)
-X-master-at: 55526a18268bbc1ddaf8a6b7850c33d984eac9e9
-X-next-at: 8e2bf96aa5bacd9f277397638fd9823d0be25e88
+Subject: What's cooking in git.git (Jul 2026, #07)
+X-master-at: 44de1520f08d1dfebc3ab2d9f644208eaa5ac925
+X-next-at: 700c83d4f35453396241ab93a8de5d321fb3fa83
Bcc: lwn@lwn.net, gitster@pobox.com
-What's cooking in git.git (Jul 2026, #06)
+What's cooking in git.git (Jul 2026, #07)
-----------------------------------------
Here are the topics that have been cooking in my tree. Commits
--------------------------------------------------
[Graduated to 'master']
-* ad/gpg-strip-cr-before-lf (2026-06-24) 1 commit
- (merged to 'next' on 2026-07-06 at b099249efd)
- + gpg-interface: fix strip_cr_before_lf to only remove CR before LF
+* jc/history-message-prep-fix (2026-06-29) 1 commit
+ (merged to 'next' on 2026-07-06 at 00534a21ce)
+ + history: streamline message preparation and plug file stream leak
- The GPG and SSH signature parsing code has been corrected to strip
- carriage return characters only when they immediately precede line
- feeds, instead of unconditionally stripping all carriage returns.
+ A write file stream resource leak has been fixed as part of a code
+ cleanup.
Graduated to 'master'.
- source: <20260624093618.17456-1-antonio.destefani08@gmail.com>
+ cf. <akO1mhi2u2PntLbt@pks.im>
+ source: <xmqqmrwdxrat.fsf@gitster.g>
-* hn/branch-push-slip-advice (2026-06-27) 2 commits
- (merged to 'next' on 2026-07-06 at acdff65ac5)
- + push: suggest <remote> <branch> for a slash slip
- + branch: suggest <remote>/<branch> on upstream slip
+* jk/bloom-leak-fixes (2026-06-30) 3 commits
+ (merged to 'next' on 2026-07-08 at 3b9a1cda3f)
+ + line-log: drop extra copy of range with bloom filters
+ + revision: avoid leaking bloom keyvecs with multiple traversals
+ + bloom: make bloom-filter slab initialization idempotent
- When 'git push origin/main' or 'git branch origin main' is run, the
- command is now recognized as a potential typo, and advice has been
- added to offer a typo fix.
+ Various memory leaks in the Bloom-filter code paths that are exposed
+ when running tests with the 'GIT_TEST_COMMIT_GRAPH_CHANGED_PATHS=1'
+ environment variable have been plugged.
Graduated to 'master'.
- cf. <xmqqfr272lq7.fsf@gitster.g>
- source: <pull.2331.v3.git.git.1782583345.gitgitgadget@gmail.com>
+ cf. <b641aed4-ad52-477b-b1d8-9d8e470be46f@gmail.com>
+ cf. <xmqqo6gqobrt.fsf@gitster.g>
+ source: <20260701063538.GA2579765@coredump.intra.peff.net>
-* jk/format-patch-leakfix (2026-06-29) 2 commits
- (merged to 'next' on 2026-07-06 at 35aff0d609)
- + format-patch: fix leak of rev_info in prepare_bases()
- + t: move LSan errors from stdout to stderr
+* mg/meson-hook-list-buildfix (2026-07-01) 1 commit
+ (merged to 'next' on 2026-07-08 at 10763a0ebc)
+ + meson: restore hook-list.h to builtin_sources
- A memory leak in the '--base' handling of 'git format-patch' has been
- plugged, and the leak reporting of the test suite when running under a
- TAP harness has been improved.
+ A racy build failure under Meson has been corrected by ensuring that
+ the generated header file 'hook-list.h' is built before compiling
+ files in 'builtin_sources' that depend on it.
Graduated to 'master'.
- cf. <akOZy-BygZS8fqPM@pks.im>
- source: <20260630063944.GA3733670@coredump.intra.peff.net>
+ cf. <akZGJP1kVtjBFN_e@pks.im>
+ source: <20260701193928.358825-1-floppym@gentoo.org>
-* jk/reftable-leakfix (2026-06-28) 1 commit
- (merged to 'next' on 2026-07-06 at 55ce81f2d5)
- + reftable: fix unlikely leak on API error
+* ps/history-drop (2026-07-01) 11 commits
+ (merged to 'next' on 2026-07-08 at 6fb84708a4)
+ + builtin/history: implement "drop" subcommand
+ + builtin/history: split handling of ref updates into two phases
+ + replay: expose `replay_result_queue_update()`
+ + reset: stop assuming that the caller passes in a clean index
+ + reset: allow the caller to specify the current HEAD object
+ + reset: introduce ability to skip updating HEAD
+ + reset: introduce dry-run mode
+ + reset: modernize flags passed to `reset_working_tree()`
+ + reset: rename `reset_head()`
+ + reset: drop `USE_THE_REPOSITORY_VARIABLE`
+ + read-cache: split out function to drop unmerged entries to stage 0
- A memory leak in the 'reftable_writer_new()' initialization function
- has been fixed by delaying the allocation of 'struct reftable_writer'
- until after input options are validated.
+ The experimental 'git history' command has been taught a new 'drop'
+ subcommand to remove a commit, with its descendants replayed onto its
+ parent.
Graduated to 'master'.
- cf. <akIPBJLtPqDjQt-A@pks.im>
- source: <20260628090314.GA661068@coredump.intra.peff.net>
+ cf. <xmqq1pdmprbk.fsf@gitster.g>
+ cf. <CAP8UFD3OAktVQsLuqBNFH2uhEO31PH8ZF3ZT1ZW8k++XE8YLPw@mail.gmail.com>
+ source: <20260701-b4-pks-history-drop-v8-0-19b5cdf1facd@pks.im>
-* kk/prio-queue-get-put-fusion (2026-06-08) 2 commits
- (merged to 'next' on 2026-07-06 at aa748c4564)
- + prio-queue: fold lazy_queue into prio_queue for automatic get+put fusion
- + prio-queue: rename .nr to .nr_ and add accessor helpers
- (this branch is used by kk/prio-queue-cascade-sift.)
+* ps/odb-drop-whence (2026-07-02) 7 commits
+ (merged to 'next' on 2026-07-08 at f43ee51cc3)
+ + odb: document object info fields
+ + odb: drop `whence` field from object info
+ + treewide: convert users of `whence` to the new source field
+ + odb: add `source` field to struct object_info_source
+ + odb: make backend-specific fields optional
+ + packfile: thread odb_source_packed through packed_object_info()
+ + Merge branch 'ps/odb-source-packed' into ps/odb-drop-whence
+ (this branch is used by ps/odb-for-each-object-filter.)
+
+ The 'whence' field in 'struct object_info' has been removed. The
+ backend-specific object information retrieval has been refactored into
+ an opt-in 'struct object_info_source' structure.
+
+ Graduated to 'master'.
+ cf. <xmqqv7b0rmt6.fsf@gitster.g>
+ source: <20260702-b4-pks-odb-drop-whence-v2-0-b0af7468ad95@pks.im>
+
+
+* ps/refs-writing-subcommands (2026-07-06) 5 commits
+ (merged to 'next' on 2026-07-08 at f001147283)
+ + builtin/refs: add "rename" subcommand
+ + builtin/refs: add "create" subcommand
+ + builtin/refs: add "update" subcommand
+ + builtin/refs: add "delete" subcommand
+ + builtin/refs: drop `the_repository`
+ (this branch is used by ps/refs-wo-the-repository.)
- The lazy priority queue optimization pattern (deferring actual removal
- in 'prio_queue_get()' to allow get+put fusion) has been folded
- directly into 'prio_queue' itself, speeding up commit traversal
- workflows and simplifying callers.
+ The 'git refs' toolbox has been extended with new 'create', 'delete',
+ 'update', and 'rename' subcommands to create, delete, update, and
+ rename references, respectively.
Graduated to 'master'.
- cf. <xmqqh5mjrbgq.fsf@gitster.g>
- source: <pull.2140.v4.git.1780945851.gitgitgadget@gmail.com>
+ source: <20260706-pks-refs-writing-subcommands-v4-0-d51f6ce7f830@pks.im>
-* ps/odb-generalize-prepare (2026-06-22) 3 commits
- (merged to 'next' on 2026-07-06 at 6132517517)
- + odb: introduce `odb_prepare()`
- + odb/source: generalize `reprepare()` callback
- + Merge branch 'ps/odb-source-packed' into ps/odb-generalize-prepare
+* rs/blame-abbrev-marks (2026-07-06) 1 commit
+ (merged to 'next' on 2026-07-08 at e4962bd3d5)
+ + blame: reserve mark column only if necessary
- The 'reprepare()' callback for object database sources has been
- generalized into a 'prepare()' callback with an optional flush cache
- flag, and a new 'odb_prepare()' wrapper has been introduced to allow
- pre-opening object database sources.
+ The alignment of commit object name abbreviations in 'git blame'
+ output has been optimized to reserve a column for marks (caret,
+ question mark, or asterisk) only when such marks are actually shown.
Graduated to 'master'.
- cf. <87ik704f1j.fsf@emacs.iotcl.com>
- source: <20260622-b4-pks-odb-generalize-prepare-v1-0-d2a5c5d13144@pks.im>
+ cf. <xmqqzf0397u1.fsf@gitster.g>
+ source: <92991b5e-0667-4315-89d5-1514a5499297@web.de>
--------------------------------------------------
[New Topics]
-* tb/send-pack-no-ref-delta (2026-07-12) 4 commits
- - send-pack: honor `no-ref-delta` capability
- - pack-objects: support reuse with `--no-ref-delta`
- - pack-objects: introduce `--no-ref-delta`
- - t/helper: teach pack-deltas to list delta entries
-
- 'git send-pack' has been taught to refrain from sending 'REF_DELTA'
- encoded packfiles when the other side asks it to.
+* js/coverity-unchecked-returns-fix (2026-07-14) 11 commits
+ - bisect: handle dup() failure when redirecting stdout
+ - bisect: check get_terms return at all call sites
+ - bisect: check strbuf_getline_lf return when reading terms
+ - transport-helper: warn when export-marks file cannot be finalized
+ - transport-helper: check dup() return in get_exporter
+ - compat/pread: check initial lseek for errors
+ - last-modified: handle repo_parse_commit() failures
+ - reftable tests: check reftable_table_init_ref_iterator() return
+ - reftable/block: check deflateInit() return value
+ - config: propagate launch_editor() failure in show_editor()
+ - http: die on curl_easy_duphandle failure in get_active_slot
+
+ A handful of code paths have been corrected to check return values
+ from functions like 'curl_easy_duphandle()', 'deflateInit()',
+ 'lseek()', 'dup()', and 'strbuf_getline_lf()', resolving several
+ Coverity warnings about unchecked returns.
+
+ Waiting for response.
+ cf. <xmqqldbdqciy.fsf@gitster.g>
+ cf. <xmqqh5m1qcfh.fsf@gitster.g>
+ cf. <alcvmX3b6y92KE4y@pks.im>
+ cf. <alcvnm0xiOv5W0w_@pks.im>
+ source: <pull.2179.git.1784069325.gitgitgadget@gmail.com>
+
+
+* jk/diff-relative-cached-unmerged (2026-07-14) 1 commit
+ - diff: ignore unmerged paths outside prefix with --relative --cached
+
+ 'git diff --relative' running with '--cached' has been corrected to
+ avoid a segfault when encountering unmerged paths outside the
+ prefix.
Needs review.
- source: <alQ7WKITYDXfiVn9@com-79390>
+ source: <20260715060523.GA517940@coredump.intra.peff.net>
-* cc/doc-fast-export-synopsis-fix (2026-07-13) 1 commit
- - fast-export: standardize usage string and SYNOPSIS
+* jc/submodule-helper-avoid-zu (2026-07-15) 1 commit
+ - submodule--helper: avoid use of %zu for now
- The usage string and SYNOPSIS for 'git fast-export' have been
- standardized to make them consistent with each other and with other
- commands.
+ An accidental use of '%zu' format flag in 'git submodule--helper'
+ has been corrected to use 'PRIuMAX' and cast the value to
+ 'uintmax_t', to avoid portability issues.
Will merge to 'next'?
- cf. <alX5Nl8uX4ctVqo3@pks.im>
- source: <20260713124153.245268-1-christian.couder@gmail.com>
+ cf. <87a4rrxg3r.fsf@gentoo.mail-host-address-is-not-set>
+ source: <xmqq4ii0ko9t.fsf@gitster.g>
-* sk/t1100-modernize (2026-07-14) 2 commits
- - t1100: move creation of expected output into setup test
- - t1100: modernize test style
+* sk/t7614-do-not-hide-git-exit-status (2026-07-15) 1 commit
+ (merged to 'next' on 2026-07-16 at 0d143986e7)
+ + t7614: avoid hiding git's exit code in a pipe
- The test script 't/t1100-commit-tree-options.sh' has been modernized
- by converting test cases to the modern style (using single quotes and
- tab indentation) and moving the creation of the expected file inside
- the setup test so it runs under the protection of the test harness.
+ The test script 't/t7614-merge-signoff.sh' has been updated to avoid
+ suppressing the exit code of 'git' commands in a pipe.
- Will merge to 'next'?
- cf. <xmqq4ii1v7x0.fsf@gitster.g>
- source: <20260714122033.61947-1-diy2903@gmail.com>
+ Will merge to 'master'.
+ cf. <xmqq1pd4m4ea.fsf@gitster.g>
+ source: <20260715113344.3490-1-diy2903@gmail.com>
-* tn/packfile-uri-concurrency (2026-07-13) 2 commits
- - fetch-pack: accept "pack" output for packfile URIs
- - http: use unique tempfiles for packfile URI downloads
+* ds/trace2-tolerate-failed-timestamp (2026-07-15) 1 commit
+ - trace2: tolerate failed timestamp formatting
- Concurrent downloads of packfiles via packfile URIs have been
- supported by using unique temporary files, preventing corruption when
- multiple processes fetch the same pack. The 'fetch-pack' command has
- also been updated to tolerate pre-existing '.keep' files.
+ The trace2 telemetry library has been updated to tolerate failures
+ from system calls like 'gettimeofday()' and datetime formatting
+ functions, replacing potential program crashes with blank placeholder
+ timestamps in the traces.
- Expecting a reroll.
- cf. <alaAi4vNwi-KabYV@com-76773>
- source: <alVn-QmK3K91_tkH@com-76773>
+ Needs review.
+ source: <pull.2178.git.1784131932489.gitgitgadget@gmail.com>
-* rs/strbuf-avoid-redundant-reset (2026-07-14) 1 commit
- - strbuf: avoid redundant reset in strbuf_getwholeline()
+* mm/revision-pure-get-commit-action (2026-07-15) 1 commit
+ - revision: make get_commit_action() a pure predicate
- A redundant 'strbuf_reset()' call in the 'HAVE_GETDELIM' path of
- 'strbuf_getwholeline()' has been removed, as 'getdelim()' overwrites
- the buffer and the length is updated afterwards.
+ The 'get_commit_action()' function has been refactored to be a pure
+ predicate by moving the side-effecting line-level log range folding to
+ 'simplify_commit()'. This ensures that evaluating a commit's action
+ before the walk reaches it does not prematurely mutate its tracked
+ line ranges, making it safer for potential lookahead evaluations.
+
+ Needs review.
+ source: <pull.2169.git.1784143793613.gitgitgadget@gmail.com>
+
+
+* rs/remote-curl-simplify-push-specs (2026-07-14) 1 commit
+ - remote-curl: simplify passing of push specs
+
+ The passing of push destination specifications in the 'remote-curl'
+ helper has been simplified by removing the explicit 'count' parameter
+ and relying on the NULL-termination of the array.
Will merge to 'next'?
- cf. <xmqq8q7dv82b.fsf@gitster.g>
- source: <d4ffe7fb-f782-4f06-9e3b-f72729d1e225@web.de>
+ cf. <alhr2bb0lUTHtvjO@pks.im>
+ cf. <xmqqpl0nhutx.fsf@gitster.g>
+ source: <935883f3-3be4-4c51-9711-5208b9ef9ca1@web.de>
-* rs/tempfile-wo-the-repository (2026-07-14) 5 commits
- - use repo_hold_lock_file_for_update{,_mode,_timeout}() with custom repos
- - tempfile: stop using the_repository
- - lockfile: add repo_hold_lock_file_for_update{,_timeout}{,_mode}()
- - refs/packed: use repo_create_tempfile()
- - tempfile: add repo_create_tempfile{,_mode}()
+* js/wincred-fixes (2026-07-16) 2 commits
+ (merged to 'next' on 2026-07-16 at 8c5927f06f)
+ + wincred: prevent silent credential loss when storing OAuth tokens
+ + wincred: avoid memory corruption when erasing a credential
- The tempfile and lockfile APIs have been refactored to stop depending
- on the 'the_repository' global variable, and their callers have been
- updated to use the repository-aware variants.
+ The wincred credential helper has been updated to avoid memory
+ corruption when erasing credentials and to prevent silent
+ credential loss when storing OAuth tokens, by correcting buffer
+ allocations and arguments passed to safe-CRT APIs.
+
+ Will merge to 'master'.
+ source: <pull.2182.git.1784212072.gitgitgadget@gmail.com>
+
+
+* kk/no-walk-pathspec-fix (2026-07-16) 2 commits
+ - revision: fix --no-walk path filtering regression
+ - Merge branch 'kk/streaming-walk-pqueue' into kk/no-walk-pathspec-fix
+
+ The 'git rev-list --no-walk' command lost pathspec filtering when the
+ streaming walk was refactored, which has been corrected.
+
+ Will merge to 'next'.
+ source: <pull.2181.git.1784198879711.gitgitgadget@gmail.com>
+
+
+* cc/fast-import-usage (2026-07-16) 7 commits
+ - fast-import: use struct option for usage string
+ - fast-import: move command state globals into 'struct fast_import_state'
+ - fast-import: introduce 'struct fast_import_state'
+ - fast-import: localize 'i' into the 'for' loops using it
+ - api-parse-options.adoc: document hidden and OPT_*_F option macros
+ - api-parse-options.adoc: document per-option flags
+ - parse-options: introduce OPT_HIDDEN_GROUP
+
+ The usage string of 'git fast-import' has been updated to use the
+ 'parse_options' API for displaying help, and its SYNOPSIS in the
+ documentation has been standardized to match.
Needs review.
- source: <20260714175956.54601-1-l.s.r@web.de>
+ cf. <xmqq4ihyehyb.fsf@gitster.g>
+ cf. <xmqqcxwmeiwq.fsf@gitster.g>
+ source: <20260716165517.433849-1-christian.couder@gmail.com>
+
+
+* ps/copy-wo-the-repository (2026-07-16) 1 commit
+ - copy: drop dependency on `the_repository`
+
+ The 'copy_file()' and 'copy_file_with_time()' functions have been
+ refactored to take a repository parameter, allowing the removal of the
+ implicit dependency on the global 'the_repository' variable in
+ 'copy.c'.
+
+ Needs review.
+ source: <20260716-pks-copy-wo-the-repository-v2-1-8f5e32942929@pks.im>
+
+
+* ps/refspec-wo-the-repository (2026-07-16) 3 commits
+ - refspec: stop depending on `the_repository`
+ - refspec: let callers pass in hash algorithm when parsing items
+ - refspec: group related structures and functions
+
+ The dependency on the global 'the_repository' variable in the
+ 'refspec.c' API has been removed by passing the hash algorithm
+ explicitly to refspec-parsing functions and storing it in 'struct
+ refspec'.
+
+ Needs review.
+ source: <20260716-pks-refspec-wo-the-repository-v1-0-aa40844d067f@pks.im>
+
+
+* ps/writev (2026-07-16) 5 commits
+ - fast-import: use writev(3p) to send cat-blob responses
+ - sideband: use writev(3p) to send pktlines
+ - wrapper: properly handle MAX_IO_SIZE in writev(3p)
+ - wrapper: introduce writev(3p) wrappers
+ - compat/posix: introduce writev(3p) wrapper
+
+ A compatibility wrapper for 'writev(3p)' has been reintroduced,
+ including fixes for CMake build and 'MAX_IO_SIZE' limits on NonStop.
+ Calls to 'write(3p)' in 'send_sideband()' and 'cat_blob()' have been
+ refactored to use 'writev(3p)' wrappers to reduce syscall overhead.
+
+ Needs review.
+ cf. <f8050598-392f-44c9-8d66-0454740a7a12@kdbg.org>
+ cf. <a2676ec6-39d5-4220-8549-10a17daec668@hogyros.de>
+ source: <20260716-pks-reintroduce-writev-v1-0-ea9038c884bc@pks.im>
+
+
+* sc/wt-status-avoid-quadratic-insertion (2026-07-16) 1 commit
+ - wt-status: avoid quadratic insertion for untracked paths
+
+ The enumeration of untracked and ignored files in 'git status' has
+ been optimized by avoiding quadratic complexity insertion into string
+ lists, reducing the construction cost from O(n^2) to O(n log n).
+
+ Needs review.
+ source: <20260716185045.229320-1-sahityajb@gmail.com>
--------------------------------------------------
[Stalled]
the current branch are skipped and duplicate updates are avoided to
prevent failures when branch aliases are present.
- Waiting for response(s) to review comment(s) for too long, stalled.
+ Waiting for response for too long, stalled.
cf. <f982c386-e329-4ab0-b695-e540bcb9de3d@gmail.com>
source: <pull.2126.v2.git.1780482436865.gitgitgadget@gmail.com>
period, avoiding failures when multiple processes attempt to update
the configuration simultaneously.
- Waiting for response(s) to review comment(s) for too long, stalled.
+ Waiting for response for too long, stalled.
cf. <agrIrGwSMFlKTx9x@pks.im>
source: <20260517132111.1014901-1-joerg@thalheim.io>
--------------------------------------------------
[Cooking]
+* tb/send-pack-no-ref-delta (2026-07-12) 4 commits
+ - send-pack: honor `no-ref-delta` capability
+ - pack-objects: support reuse with `--no-ref-delta`
+ - pack-objects: introduce `--no-ref-delta`
+ - t/helper: teach pack-deltas to list delta entries
+
+ 'git send-pack' has been taught to refrain from sending 'REF_DELTA'
+ encoded packfiles when the other side asks it to.
+
+ Needs review.
+ source: <alQ7WKITYDXfiVn9@com-79390>
+
+
+* cc/doc-fast-export-synopsis-fix (2026-07-13) 1 commit
+ (merged to 'next' on 2026-07-16 at b1dbc0cb3f)
+ + fast-export: standardize usage string and SYNOPSIS
+
+ The usage string and SYNOPSIS for 'git fast-export' have been
+ standardized to make them consistent with each other and with other
+ commands.
+
+ Will merge to 'master'.
+ cf. <alX5Nl8uX4ctVqo3@pks.im>
+ cf. <xmqq4ii228dd.fsf@gitster.g>
+ source: <20260713124153.245268-1-christian.couder@gmail.com>
+
+
+* sk/t1100-modernize (2026-07-14) 2 commits
+ (merged to 'next' on 2026-07-16 at 621ca4ca5f)
+ + t1100: move creation of expected output into setup test
+ + t1100: modernize test style
+
+ The test script 't/t1100-commit-tree-options.sh' has been modernized
+ by converting test cases to the modern style (using single quotes and
+ tab indentation) and moving the creation of the expected file inside
+ the setup test so it runs under the protection of the test harness.
+
+ Will merge to 'master'.
+ cf. <xmqq4ii1v7x0.fsf@gitster.g>
+ source: <20260714122033.61947-1-diy2903@gmail.com>
+
+
+* tn/packfile-uri-concurrency (2026-07-13) 2 commits
+ - fetch-pack: accept "pack" output for packfile URIs
+ - http: use unique tempfiles for packfile URI downloads
+
+ Concurrent downloads of packfiles via packfile URIs have been
+ supported by using unique temporary files, preventing corruption when
+ multiple processes fetch the same pack. The 'fetch-pack' command has
+ also been updated to tolerate pre-existing '.keep' files.
+
+ Expecting a reroll.
+ cf. <alaAi4vNwi-KabYV@com-76773>
+ source: <alVn-QmK3K91_tkH@com-76773>
+
+
+* rs/strbuf-avoid-redundant-reset (2026-07-14) 1 commit
+ (merged to 'next' on 2026-07-16 at f258ce38ba)
+ + strbuf: avoid redundant reset in strbuf_getwholeline()
+
+ A redundant 'strbuf_reset()' call in the 'HAVE_GETDELIM' path of
+ 'strbuf_getwholeline()' has been removed, as 'getdelim()' overwrites
+ the buffer and the length is updated afterward.
+
+ Will merge to 'master'.
+ cf. <xmqq8q7dv82b.fsf@gitster.g>
+ cf. <20260714214941.GB4095533@coredump.intra.peff.net>
+ source: <d4ffe7fb-f782-4f06-9e3b-f72729d1e225@web.de>
+
+
+* rs/tempfile-wo-the-repository (2026-07-14) 5 commits
+ - use repo_hold_lock_file_for_update{,_mode,_timeout}() with custom repos
+ - tempfile: stop using the_repository
+ - lockfile: add repo_hold_lock_file_for_update{,_timeout}{,_mode}()
+ - refs/packed: use repo_create_tempfile()
+ - tempfile: add repo_create_tempfile{,_mode}()
+
+ The tempfile and lockfile APIs have been refactored to stop depending
+ on the 'the_repository' global variable, and their callers have been
+ updated to use the repository-aware variants.
+
+ Waiting for response.
+ cf. <aldYW4TPUqgDMRcf@pks.im>
+ source: <20260714175956.54601-1-l.s.r@web.de>
+
+
* js/pack-objects-delta-size-t (2026-07-09) 12 commits
- git-zlib: widen `git_deflate_bound()` to `size_t`
- t/helper/test-pack-deltas: widen `do_compress()`'s maxsize local to `size_t`
- delta: widen `create_delta_index()` parameter to `size_t`
- diff-delta: widen `struct delta_index`' size fields to `size_t`
- The pack-objects and delta-encoding code paths have been updated to
+ The 'pack-objects' and delta-encoding code paths have been updated to
use 'size_t' instead of 'unsigned long' for object sizes and offset
limits, avoiding potential truncation issues on 64-bit Windows.
source: <20260710-pks-odb-stream-double-close-v1-1-d5fa233a37c7@pks.im>
-* pz/fetch-submodule-errors-config (2026-07-14) 4 commits
- - fixup! fetch: add fetch.submoduleErrors to make submodule fetch errors non-fatal
- - fixup! fetch: add fetch.submoduleErrors to make submodule fetch errors non-fatal
+* pz/fetch-submodule-errors-config (2026-07-16) 2 commits
- fetch: add fetch.submoduleErrors to make submodule fetch errors non-fatal
- submodule: fix premature failure in recursive submodule fetch
also fails.
Needs review.
- cf. <xmqqldbdvb3x.fsf@gitster.g>
- source: <20260714132959.3368867-1-paulius.zaleckas@gmail.com>
+ source: <20260716140956.1023740-1-paulius.zaleckas@gmail.com>
* gr/add-e-use-apply-api (2026-07-10) 1 commit
'--empty' option, allowing it to be dropped, kept, or to halt the
rebase.
- Expecting a reroll.
- cf. <DJXL4KSUEAD4.1EE4ERHJZ00TR@gmail.com>
+ Waiting for response.
+ cf. <690b965e-5f07-4aa4-a64c-96e60a86d73b@gmail.com>
source: <20260711-fz-autosquash-empty-v3-1-d227b63eb511@gmail.com>
* dm/submodule-update-i-shorthand (2026-07-07) 1 commit
- - submodule--helper: accept '-i' shorthand for update --init
+ (merged to 'next' on 2026-07-15 at 55ef0fb748)
+ + submodule--helper: accept '-i' shorthand for update --init
The '-i' shorthand for the '--init' option, which was accepted by the
'git submodule update' command until it was broken in a modernization
of the option-parsing code, has been restored.
- Will merge to 'next'.
+ Will merge to 'master'.
cf. <xmqq8q7ltf51.fsf@gitster.g>
source: <20260708-submodule-init-v1-1-719456077262@atmark-techno.com>
files object database source, enabling future alternative object
database backends to implement their own housekeeping services.
- Needs review.
+ Waiting for response.
cf. <xmqqwluyyhv1.fsf@gitster.g>
source: <20260713-b4-pks-odb-optimize-v2-0-9c2c3ee94b38@pks.im>
source: <pull.2174.v2.git.1783683577.gitgitgadget@gmail.com>
-* ps/odb-for-each-object-filter (2026-07-13) 10 commits
- - builtin/cat-file: filter objects via object database
- - odb: introduce object filters to `odb_for_each_object()`
- - pack-bitmap: introduce function to open bitmap for a single source
- - pack-bitmap: drop `_1` suffix from functions that open bitmaps
- - pack-bitmap: iterate object sources when opening bitmaps
- - pack-bitmap: allow aborting iteration of bitmapped objects
- - pack-objects: drop unused return value from add_object_entry()
- - pack-bitmap: mark object filter as `const`
- - odb/source-packed: improve lookup when enumerating objects
- - Merge branch 'ps/odb-drop-whence' into ps/odb-for-each-object-filter
- (this branch uses ps/odb-drop-whence.)
+* ps/odb-for-each-object-filter (2026-07-14) 10 commits
+ (merged to 'next' on 2026-07-16 at 8f30e80d33)
+ + builtin/cat-file: filter objects via object database
+ + odb: introduce object filters to `odb_for_each_object()`
+ + pack-bitmap: introduce function to open bitmap for a single source
+ + pack-bitmap: drop `_1` suffix from functions that open bitmaps
+ + pack-bitmap: iterate object sources when opening bitmaps
+ + pack-bitmap: allow aborting iteration of bitmapped objects
+ + pack-objects: drop unused return value from add_object_entry()
+ + pack-bitmap: mark object filter as `const`
+ + odb/source-packed: improve lookup when enumerating objects
+ + Merge branch 'ps/odb-drop-whence' into ps/odb-for-each-object-filter
The object database enumeration interface 'odb_for_each_object()'
has been taught to accept object filters, allowing the underlying
to use this generic interface, simplifying its code and avoiding
direct access to ODB backend internals.
- Will merge to 'next'?
- cf. <alW0KzSZuZnHmOZD@com-79390>
- source: <20260713-pks-odb-for-each-object-filter-v3-0-b3c65c641073@pks.im>
+ Will merge to 'master'.
+ cf. <874ii0h2uf.fsf@emacs.iotcl.com>
+ source: <20260715-pks-odb-for-each-object-filter-v4-0-616d7adf7fb7@pks.im>
-* ps/refs-wo-the-repository (2026-07-09) 8 commits
+* ps/refs-wo-the-repository (2026-07-15) 7 commits
- refs: remove remaining uses of `the_repository`
- worktree: pass repository to public functions
- worktree: pass repository to file-local functions
- worktree: refactor code to use available repositories
- refs/files: drop `USE_THE_REPOSITORY_VARIABLE`
- - refs/packed: drop `USE_THE_REPOSITORY_VARIABLE`
- refs/packed: de-globalize handling of "core.packedRefsTimeout"
- Merge branch 'ps/refs-writing-subcommands' into ps/refs-wo-the-repository
- (this branch uses ps/refs-writing-subcommands.)
The ref subsystem and the worktree API have been refactored to pass a
repository pointer down the call chain, allowing them to drop
the handling of the 'core.packedRefsTimeout' configuration has been
moved into the per-repository ref store structure.
- Expecting a reroll.
- cf. <alCJpxAQwpTQ4g93@pks.im>
- source: <20260709-pks-refs-wo-the-repository-v1-0-1ad6f27529c9@pks.im>
+ Will merge to 'next'?
+ cf. <xmqqldbbhuh0.fsf@gitster.g>
+ source: <20260716-pks-refs-wo-the-repository-v3-0-db0a804e0224@pks.im>
* kk/commit-graph-topo-levels-fix (2026-07-09) 2 commits
source: <pull.2166.v3.git.1783679767.gitgitgadget@gmail.com>
-* rs/blame-abbrev-marks (2026-07-06) 1 commit
- (merged to 'next' on 2026-07-08 at e4962bd3d5)
- + blame: reserve mark column only if necessary
-
- The alignment of commit object name abbreviations in 'git blame'
- output has been optimized to reserve a column for marks (caret,
- question mark, or asterisk) only when such marks are actually shown.
-
- Will merge to 'master'.
- cf. <xmqqzf0397u1.fsf@gitster.g>
- source: <92991b5e-0667-4315-89d5-1514a5499297@web.de>
-
-
* jm/t0213-skip-emulated-ancestry-tests (2026-07-06) 1 commit
- t0213: skip ancestry tests under user-mode emulation
source: <20260708001557.3581080-1-sandals@crustytoothpaste.net>
-* mg/meson-hook-list-buildfix (2026-07-01) 1 commit
- (merged to 'next' on 2026-07-08 at 10763a0ebc)
- + meson: restore hook-list.h to builtin_sources
-
- A racy build failure under Meson has been corrected by ensuring that
- the generated header file 'hook-list.h' is built before compiling
- files in 'builtin_sources' that depend on it.
-
- Will merge to 'master'.
- cf. <akZGJP1kVtjBFN_e@pks.im>
- source: <20260701193928.358825-1-floppym@gentoo.org>
-
-
* zy/apply-abandoned-header-fix (2026-07-01) 1 commit
- apply: avoid leaking abandoned git-header state
* ml/t9811-replace-test-f (2026-07-11) 2 commits
- - t9811: replace 'test -f' and '! test -f' with 'test_path_*'
- - t9811: break long && chains into multiple lines
+ (merged to 'next' on 2026-07-15 at ffb7fcad15)
+ + t9811: replace 'test -f' and '! test -f' with 'test_path_*'
+ + t9811: break long && chains into multiple lines
The test script 't/t9811-git-p4-label-import.sh' has been
modernized to use 'test_path_is_file' and 'test_path_is_missing'
instead of raw 'test -f' and '! test -f' calls.
- Will merge to 'next'?
+ Will merge to 'master'.
cf. <alTHrUEh4_O5ROeu@pks.im>
source: <20260711160447.99708-1-marcelomlage@usp.br>
* cl/conditional-config-on-worktree-path (2026-07-09) 2 commits
- - config: add "worktree" and "worktree/i" includeIf conditions
- - config: refactor include_by_gitdir() into include_by_path()
+ (merged to 'next' on 2026-07-15 at 86ca33c437)
+ + config: add "worktree" and "worktree/i" includeIf conditions
+ + config: refactor include_by_gitdir() into include_by_path()
The '[includeIf "condition"]' conditional inclusion facility for
configuration files has been taught to use the location of the
worktree in its condition.
- Will merge to 'next'?
+ Will merge to 'master'.
cf. <alTJCTKR9jOWfgbk@pks.im>
source: <20260710-includeif-worktree-v8-0-04686d8a616c@black-desk.cn>
'test_path_is_missing' helper functions instead of raw 'test -[fde]'
commands.
- Waiting for response(s) to review comment(s).
+ Waiting for response.
cf. <akTKHfKPsP3-Rn31@pks.im>
source: <20260630020220.1559190-1-bblima@usp.br>
source: <20260707-pks-setup-split-discovery-and-setup-v2-0-aab372cd227c@pks.im>
-* pw/rebase-drop-notes-with-commit (2026-07-13) 10 commits
+* pw/rebase-drop-notes-with-commit (2026-07-15) 9 commits
- sequencer: do not record dropped commits as rewritten
- sequencer: use an enum to represent result of picking a commit
- sequencer: simplify pick_one_commit()
- sequencer: remove unnecessary condition in pick_one_commit()
- - sequencer: simplify handing of fixup with conflicts
+ - sequencer: simplify handling of fixup with conflicts
- sequencer: remove unnecessary "or" in pick_one_commit()
- sequencer: never reschedule on failed commit
- sequencer: be more careful with external merge
- - sequencer: move definition of is_final_fixup()
- t3400: restore coverage for note copying with apply backend
The rebase post-rewrite notes-copying logic has been corrected. When
its notes from being copied to an unrelated commit.
Needs review.
- cf. <alTxn7MmX3aH_7gp@ugly.lan>
- source: <cover.1783948637.git.phillip.wood@dunelm.org.uk>
-
-
-* jk/bloom-leak-fixes (2026-06-30) 3 commits
- (merged to 'next' on 2026-07-08 at 3b9a1cda3f)
- + line-log: drop extra copy of range with bloom filters
- + revision: avoid leaking bloom keyvecs with multiple traversals
- + bloom: make bloom-filter slab initialization idempotent
-
- Various memory leaks in the Bloom-filter code paths that are exposed
- when running tests with the 'GIT_TEST_COMMIT_GRAPH_CHANGED_PATHS=1'
- environment variable have been plugged.
-
- Will merge to 'master'.
- cf. <b641aed4-ad52-477b-b1d8-9d8e470be46f@gmail.com>
- cf. <xmqqo6gqobrt.fsf@gitster.g>
- source: <20260701063538.GA2579765@coredump.intra.peff.net>
+ source: <cover.1784128921.git.phillip.wood@dunelm.org.uk>
* js/ci-dockerized-pid-limit (2026-07-04) 1 commit
geometric repack as usual, while a separate cruft pack is written to
collect unreachable objects.
- Waiting for response(s) to review comment(s).
+ Waiting for response.
cf. <aj8cOhH6hGVZIFft@nand.local>
source: <cover.1782500507.git.me@ttaylorr.com>
* jt/receive-pack-use-odb-transactions (2026-07-10) 11 commits
- - builtin/receive-pack: stage incoming objects via ODB transactions
- - builtin/receive-pack: drop redundant tmpdir env
- - odb/transaction: introduce ODB transaction flags
- - odb/transaction: add transaction env interface
- - odb/transaction: propagate commit errors
- - odb/transaction: propagate begin errors
- - object-file: propagate files transaction errors
- - object-file: drop check for inflight transactions
- - object-file: embed transaction flush logic in commit function
- - object-file: rename files transaction fsync function
- - object-file: rename files transaction prepare function
+ (merged to 'next' on 2026-07-15 at aba57e3365)
+ + builtin/receive-pack: stage incoming objects via ODB transactions
+ + builtin/receive-pack: drop redundant tmpdir env
+ + odb/transaction: introduce ODB transaction flags
+ + odb/transaction: add transaction env interface
+ + odb/transaction: propagate commit errors
+ + odb/transaction: propagate begin errors
+ + object-file: propagate files transaction errors
+ + object-file: drop check for inflight transactions
+ + object-file: embed transaction flush logic in commit function
+ + object-file: rename files transaction fsync function
+ + object-file: rename files transaction prepare function
'git receive-pack' has been refactored to use ODB transaction
interfaces instead of directly managing 'tmp_objdir' for staging
incoming objects, bringing it closer to being ODB backend agnostic.
- Will merge to 'next'.
+ Will merge to 'master'.
cf. <alR1P-RGZNmjyiUE@pks.im>
source: <20260710163722.2962278-1-jltobler@gmail.com>
-* ps/odb-drop-whence (2026-07-02) 7 commits
- (merged to 'next' on 2026-07-08 at f43ee51cc3)
- + odb: document object info fields
- + odb: drop `whence` field from object info
- + treewide: convert users of `whence` to the new source field
- + odb: add `source` field to struct object_info_source
- + odb: make backend-specific fields optional
- + packfile: thread odb_source_packed through packed_object_info()
- + Merge branch 'ps/odb-source-packed' into ps/odb-drop-whence
- (this branch is used by ps/odb-for-each-object-filter.)
-
- The 'whence' field in 'struct object_info' has been removed. The
- backend-specific object information retrieval has been refactored into
- an opt-in 'struct object_info_source' structure.
-
- Will merge to 'master'.
- cf. <xmqqv7b0rmt6.fsf@gitster.g>
- source: <20260702-b4-pks-odb-drop-whence-v2-0-b0af7468ad95@pks.im>
-
-
* ps/reftable-hardening (2026-07-03) 12 commits
(merged to 'next' on 2026-07-10 at b8f4dd0ab9)
+ reftable/table: fix OOB read on truncated table
source: <20260703-pks-reftable-hardening-v3-0-b87c555b9920@pks.im>
-* jc/history-message-prep-fix (2026-06-29) 1 commit
- (merged to 'next' on 2026-07-06 at 00534a21ce)
- + history: streamline message preparation and plug file stream leak
-
- A write file stream resource leak has been fixed as part of a code
- cleanup.
-
- Will merge to 'master'.
- cf. <akO1mhi2u2PntLbt@pks.im>
- source: <xmqqmrwdxrat.fsf@gitster.g>
-
-
* ty/migrate-excludes-file (2026-07-13) 10 commits
- repository: adjust the comment of config_values_private_
- environment: move object_creation_mode into repo_config_values
* ps/libgit-in-subdir (2026-07-12) 3 commits
- - Move libgit.a sources into separate "lib/" directory
- - t/helper: prepare "test-example-tap.c" for introduction of "lib/"
- - Merge branch 'ps/odb-source-packed' into ps/libgit-in-subdir
+ . Move libgit.a sources into separate "lib/" directory
+ . t/helper: prepare "test-example-tap.c" for introduction of "lib/"
+ . Merge branch 'ps/odb-source-packed' into ps/libgit-in-subdir
The source files for 'libgit.a' have been moved into a new 'lib/'
directory to clean up the top-level directory and clearly separate
library code.
- Needs review.
+ Ejected for now, as it causes too many evil merges with other topics.
+
+ Waiting for response.
cf. <alR9GDNTbdjWB4dq@szeder.dev>
source: <20260713-pks-libgit-in-subdir-v4-0-696240876eb1@pks.im>
source: <pull.2152.v2.git.1782581342.gitgitgadget@gmail.com>
-* hn/history-squash (2026-07-10) 5 commits
+* hn/history-squash (2026-07-15) 5 commits
- history: re-edit a squash with every message
- sequencer: share the squash message marker helpers and flags
- history: add squash subcommand to fold a range
subcommand to fold a range of commits into a single commit, with any
descendants replayed on top.
- Expecting a reroll.
- cf. <CAHwyqnVYQ6Sk=4ot6=5AbUdqxCrwS15xt_+wX3DB1h369CSqsA@mail.gmail.com>
- source: <pull.2337.v8.git.git.1783674396.gitgitgadget@gmail.com>
-
-
-* ps/refs-writing-subcommands (2026-07-06) 5 commits
- (merged to 'next' on 2026-07-08 at f001147283)
- + builtin/refs: add "rename" subcommand
- + builtin/refs: add "create" subcommand
- + builtin/refs: add "update" subcommand
- + builtin/refs: add "delete" subcommand
- + builtin/refs: drop `the_repository`
- (this branch is used by ps/refs-wo-the-repository.)
-
- The 'git refs' toolbox has been extended with new 'create', 'delete',
- 'update', and 'rename' subcommands to create, delete, update, and
- rename references, respectively.
-
- Will merge to 'master'.
- source: <20260706-pks-refs-writing-subcommands-v4-0-d51f6ce7f830@pks.im>
+ Needs review.
+ source: <pull.2337.v9.git.git.1784128573.gitgitgadget@gmail.com>
* wy/doc-myfirstcontribution-trim-quotes (2026-06-11) 1 commit
'git tag --contains', significantly speeding up connectivity checks
across many candidate refs with shared history.
- Needs review.
- cf. <xmqqqzlpulkp.fsf@gitster.g>
+ Will merge to 'next'?
+ cf. <20260716091924.GB1212956@coredump.intra.peff.net>
source: <20260612-ref-filter-memoized-contains-v4-0-5ed39fd001dd@gmail.com>
source: <20260707-toon-git-replay-drop-merges-v7-0-808ab9b4afa6@iotcl.com>
-* ps/cat-file-remote-object-info (2026-07-14) 13 commits
+* ps/cat-file-remote-object-info (2026-07-15) 13 commits
- cat-file: make remote-object-info allow-list dynamic
- cat-file: validate remote atoms with an allow-list
- cat-file: add remote-object-info to batch-command
filtered on the client based on server-advertised capabilities,
returning empty strings for inapplicable or unsupported fields.
- Needs review.
- cf. <xmqq8q7dto8d.fsf@gitster.g>
- source: <20260714-ps-eric-work-rebase-v17-0-afabfc83260e@gmail.com>
+ Expecting a reroll.
+ cf. <DJZM80YDCMQG.SXP22P43W1J3@gmail.com>
+ source: <20260715-ps-eric-work-rebase-v18-0-34d7adb051bb@gmail.com>
-* mm/diff-process-hunks (2026-06-14) 6 commits
- - blame: consult diff process for no-hunk detection
- - diff: bypass diff process with --no-ext-diff and in format-patch
- - diff: add long-running diff process via diff.<driver>.process
- - sub-process: separate process lifecycle from hashmap management
- - userdiff: add diff.<driver>.process config
- - xdiff: support external hunks via xpparam_t
+* mm/diff-process-hunks (2026-07-15) 9 commits
+ . line-log: consult diff process for range tracking
+ . diff: consult diff process for --stat counts
+ . blame: consult diff process for no-hunk detection
+ . diff: bypass diff process with --no-ext-diff and in format-patch
+ . diff: add long-running diff process via diff.<driver>.process
+ . sub-process: separate process lifecycle from hashmap management
+ . userdiff: add diff.<driver>.process config
+ . xdiff: support external hunks via xpparam_t
+ . gitattributes: document how external diff drivers relate to diff features
A new 'diff.<driver>.process' configuration has been introduced to
allow a long-running external process to act as a hunk provider,
while leaving all output formatting (word diff, color, blame, etc.) to
Git's standard pipeline.
- Expecting a reroll for too long, stalled.
- cf. <CAC2Qwm+P=fZOtpfMPeMiSXf3Afk6OLYpTP8Br78_PRA8WNL1Wg@mail.gmail.com>
- source: <pull.2120.v4.git.1781463564.gitgitgadget@gmail.com>
+ Ejected for now, as conflicts badly with mm/line-log-limited-ops.
+
+ Expecting a reroll.
+ cf. <xmqq8q7aj3b0.fsf@gitster.g>
+ cf. <CAC2QwmKRp90hmBAckug9PPvvD53Pi53q5csZhi15LRhzdQasQg@mail.gmail.com>
+ source: <pull.2120.v5.git.1784149323.gitgitgadget@gmail.com>
-* ty/migrate-trust-executable-bit (2026-06-19) 3 commits
+* ty/migrate-trust-executable-bit (2026-07-16) 4 commits
+ - environment: move has_symlinks into repo_config_values
- environment: move trust_executable_bit into repo_config_values
- read-cache: move 'ce_mode_from_stat()' to 'read-cache.c'
- read-cache: remove redundant extern declarations
to a specific repository instance.
Needs review.
- cf. <xmqqcxx9ukvw.fsf@gitster.g>
- source: <20260619162105.648495-1-cat@malon.dev>
-
-
-* ps/history-drop (2026-07-01) 11 commits
- (merged to 'next' on 2026-07-08 at 6fb84708a4)
- + builtin/history: implement "drop" subcommand
- + builtin/history: split handling of ref updates into two phases
- + replay: expose `replay_result_queue_update()`
- + reset: stop assuming that the caller passes in a clean index
- + reset: allow the caller to specify the current HEAD object
- + reset: introduce ability to skip updating HEAD
- + reset: introduce dry-run mode
- + reset: modernize flags passed to `reset_working_tree()`
- + reset: rename `reset_head()`
- + reset: drop `USE_THE_REPOSITORY_VARIABLE`
- + read-cache: split out function to drop unmerged entries to stage 0
-
- The experimental 'git history' command has been taught a new 'drop'
- subcommand to remove a commit, with its descendants replayed onto its
- parent.
-
- Will merge to 'master'.
- cf. <xmqq1pdmprbk.fsf@gitster.g>
- cf. <CAP8UFD3OAktVQsLuqBNFH2uhEO31PH8ZF3ZT1ZW8k++XE8YLPw@mail.gmail.com>
- source: <20260701-b4-pks-history-drop-v8-0-19b5cdf1facd@pks.im>
+ cf. <xmqqa4rqfzys.fsf@gitster.g>
+ source: <20260716084941.1101918-1-cat@malon.dev>
* za/completion-hide-dotfiles (2026-06-20) 2 commits
updated to hide dotfiles by default unless the user explicitly starts
the path with a dot, matching standard shell-completion behavior.
- Waiting for response(s) to review comment(s), stalled.
+ Waiting for response, stalled.
cf. <xmqqik71t3nr.fsf@gitster.g>
source: <pull.2311.v3.git.git.1781978156.gitgitgadget@gmail.com>
Documentation for 'git replay' has been updated to refer to its
configuration variables.
- Waiting for response(s) to review comment(s).
+ Waiting for response for too long, stalled.
cf. <87cxwxofgv.fsf@emacs.iotcl.com>
source: <V3_CV_doc_replay_config.780@msgid.xyz>
The 'git checkout --track=...' command has been taught to optionally
fetch the branch from the remote the new branch will work with.
- Waiting for response(s) to review comment(s).
- cf. <CAL71e4MiijEiM26TKJcOYT7L4pfQeMM_F2oT3U3igP-wOZm2Ag@mail.gmail.com>
+ Needs review.
source: <pull.2281.v15.git.git.1782338098.gitgitgadget@gmail.com>
simplification) by indenting them, preventing them from appearing
falsely related to unrelated commits rendered immediately above them.
- Needs review.
+ Will merge to 'next'?
+ cf. <CA+J6zkQNzEAhhY74qDrOwfFVrshEF7YFxWRRkwE3ttJo15ZbAg@mail.gmail.com>
source: <20260714-ps-pre-commit-indent-v12-0-d50938e006df@gmail.com>