What's cooking (2026/07 #09)

Junio C Hamano committed Jul 20, 2026 at 17:13 UTC 5759148277ab955ce4931be30288eb51d93d0cdf
1 file changed +481 -614
whats-cooking.txt
+481 -614
@@ -1,10 +1,10 @@
1 To: git@vger.kernel.org
2 -Subject: What's cooking in git.git (Jul 2026, #08)
3 -X-master-at: 41365c2a9ba347870b80881c0d67454edd22fd49
4 -X-next-at: 94291ce1a99ad9495cc721f5c36f1b96561b32c2
2 +Subject: What's cooking in git.git (Jul 2026, #09)
3 +X-master-at: 48bbf81c29ca9a4479ec7850fe206518682cdb2f
4 +X-next-at: 5475c9f935080e24d3ddd42c1c5f14bda3309bc5
5 Bcc: lwn@lwn.net, gitster@pobox.com
6
7 -What's cooking in git.git (Jul 2026, #08)
7 +What's cooking in git.git (Jul 2026, #09)
8 -----------------------------------------
9
10 Here are the topics that have been cooking in my tree. Commits
@@ -17,8 +17,7 @@ A topic without enough support may be discarded after a long period
17 of no activity (of course, it can be resubmitted when new interest
18 arises).
19
20 -The fourth batch of topics have now graduated to the 'master'
21 -branch.
20 +The fifth batch of topics have now graduated to the 'master' branch.
21
22 Copies of the source code to Git live in many repositories, and the
23 following is a list of the ones I push into or their mirrors. Some
@@ -51,264 +50,325 @@ Release tarballs are available at:
50 --------------------------------------------------
51 [New Topics]
52
54 -* tl/gitweb-shorten-hashes-with-modes (2026-07-17) 1 commit
55 - - gitweb: shorten index hashes with trailing file modes
53 +* bc/rust-hash-cleanups (2026-07-18) 2 commits
54 + - rust: discard hash context when finished
55 + - hash: initialize context before cloning
56
57 - The object ID shortening and linking in the 'commitdiff' view of
58 - 'gitweb' has been corrected to work even when the index line carries
59 - a trailing file mode.
57 + A few memory problems in the Rust interface to C hash functions have
58 + been corrected. The 'Clone' implementation of 'CryptoHasher' now
59 + properly initializes the context before cloning, and its 'Drop'
60 + implementation now discards the context to prevent leaks.
61
61 - Needs review.
62 - source: <SA1PR10MB9977150C823C0751E53B150D5AF1C62@SA1PR10MB997715.namprd10.prod.outlook.com>
62 + Will merge to 'next'.
63 + cf. <20260719080754.GA429688@coredump.intra.peff.net>
64 + source: <20260719010842.17991-1-sandals@crustytoothpaste.net>
65
66
65 -* kj/repo-info-more-path-keys (2026-07-17) 7 commits
66 - - repo: add path.git-prefix path key
67 - - repo: add path.grafts with absolute and relative suffix formatting
68 - - repo: add path.index with absolute and relative suffix formatting
69 - - repo: add path.hooks with absolute and relative suffix formatting
70 - - repo: add path.objects with absolute and relative suffix formatting
71 - - repo: add path.superproject-working-tree with absolute and relative suffixes
72 - - repo: add path.toplevel with absolute and relative suffix formatting
67 +* ja/doc-synopsis-style-yet-more (2026-07-19) 4 commits
68 + - doc: convert git-request-pull synopsis and options to new style
69 + - doc: convert git-send-email synopsis and options to new style
70 + - doc: convert git-format-patch synopsis and options to new style
71 + - doc: convert git-imap-send synopsis and options to new style
72
74 - The 'git repo info' command has been taught more keys to output
75 - paths of various repository components (such as the working tree
76 - root, superproject working tree, object database, etc.), supporting
77 - both absolute and relative path formats.
73 + Synopsis and options in the documentation for 'git format-patch',
74 + 'git imap-send', 'git send-email', and 'git request-pull' have been
75 + updated to the modern style.
76
79 - Needs review.
80 - source: <20260717133015.32040-1-jayatheerthkulkarni2005@gmail.com>
77 + Expecting a reroll.
78 + cf. <23179740.EfDdHjke4D@piment-oiseau>
79 + cf. <2418232.ElGaqSPkdT@piment-oiseau>
80 + source: <pull.2185.git.1784490878.gitgitgadget@gmail.com>
81
82
83 -* sk/userdiff-swift (2026-07-17) 1 commit
84 - - userdiff: add support for Swift
83 +* hn/url-push-tracking (2026-07-20) 2 commits
84 + - remote: resolve URL-valued push tracking remotes
85 + - remote: pass repository to push tracking helper
86
86 - Userdiff patterns for Swift have been added, with support for
87 - Swift-specific constructs such as attributes, modifiers, failable
88 - initializers, and generics.
87 + When the push remote is specified as a URL, the fetch refspec of a
88 + uniquely matching configured remote is now used to find and update
89 + the remote-tracking branch (e.g., '@{push}').
90
91 Waiting for response.
91 - cf. <2a3a73c5-5e90-44a3-bf6a-6e98ce5e5a59@kdbg.org>
92 - source: <20260717140232.6722-1-diy2903@gmail.com>
92 + cf. <xmqq4ihtcx8g.fsf@gitster.g>
93 + cf. <xmqqfr1dcygh.fsf@gitster.g>
94 + source: <pull.2358.git.git.1784538618.gitgitgadget@gmail.com>
95
96 +--------------------------------------------------
97 +[Graduated to 'master']
98
95 -* ps/odb-move-loose-object-writing (2026-07-17) 10 commits
96 - - object-file: move logic to write loose objects
97 - - object-file: move `force_object_loose()`
98 - - object-file: force objects loose via generic interface
99 - - object-file: fix memory leak in `force_object_loose()`
100 - - odb: support setting mtime when writing objects
101 - - odb: lift object existence check out of the "loose" backend
102 - - odb: compute object hash in `odb_write_object_ext()`
103 - - t/u-odb-inmemory: implement wrapper for writing objects
104 - - odb: compute compat object ID in `odb_write_object_ext()`
105 - - Merge branch 'jt/receive-pack-use-odb-transactions' into HEAD
106 - (this branch uses jt/receive-pack-use-odb-transactions.)
99 +* bc/parse-options-exit-0-on-help (2026-07-07) 4 commits
100 + (merged to 'next' on 2026-07-10 at 775654e447)
101 + + parse-options: exit 0 on -h
102 + + rev-parse: have --parseopt callers exit 0 on --help
103 + + parse-options: add a separate case for help output on error
104 + + t1517: skip svn tests if svn is not installed
105
108 - The logic to write loose objects has been refactored and moved from
109 - 'object-file.c' to the loose backend source file 'odb/source-loose.c',
110 - making the loose backend more self-contained. This is achieved by
111 - first refactoring 'force_object_loose()' to use generic ODB write
112 - interfaces instead of loose-backend internals.
106 + Option parsing with 'git rev-parse --parseopt' and in most 'git'
107 + subcommands has been updated to exit with 0 (instead of 129) when the
108 + help option ('-h' or '--help') is requested directly by the user,
109 + aligning with standard Unix convention.
110
114 - Needs review.
115 - source: <20260717-pks-odb-move-loose-object-writing-v1-0-46446a3cb5b7@pks.im>
111 + Graduated to 'master'.
112 + cf. <20260708035930.GB41684@coredump.intra.peff.net>
113 + source: <20260708001557.3581080-1-sandals@crustytoothpaste.net>
114
115
118 -* pw/rebase-fixup-fixes (2026-07-17) 2 commits
119 - - rebase: remember fixup -c after skipping fixup/squash
120 - - rebase -i: fix counting of fixups after rebase --skip
116 +* gr/t1410-reflog-exit-code (2026-07-08) 1 commit
117 + (merged to 'next' on 2026-07-10 at d0cf55ea54)
118 + + t1410-reflog.sh: avoid suppressing git's exit code in pipelines
119
122 - Two bugs in how 'git rebase' handles skipped 'fixup' and 'squash'
123 - commands have been fixed. One bug caused an incorrect commit count
124 - to be shown in the template message when multiple commands were
125 - skipped, and another caused the editor not to be opened when the
126 - final command in a chain containing 'fixup -c' was skipped.
120 + The pipelines in 't1410-reflog.sh' have been replaced with the
121 + 'test_stdout_line_count' helper to avoid suppressing the exit code of
122 + 'git' commands, ensuring failures are not hidden from the test suite.
123
128 - Needs review.
129 - source: <cover.1784304378.git.phillip.wood@dunelm.org.uk>
124 + Graduated to 'master'.
125 + cf. <xmqqtsq8p18x.fsf@gitster.g>
126 + source: <20260709051229.40363-1-gatlavishweshwarreddy26@gmail.com>
127
128
132 -* tc/last-modified-bloom (2026-07-17) 4 commits
133 - - last-modified: keep per-path Bloom filters for wildcard pathspecs
134 - - last-modified: check pathspec against Bloom filter first
135 - - revision: expose check for paths maybe changed in Bloom filter
136 - - revision: move bloom keyvec precondition into function
129 +* hf/unpack-trees-quadratic-scan (2026-07-08) 1 commit
130 + (merged to 'next' on 2026-07-12 at 744f1aede4)
131 + + unpack-trees: avoid quadratic index scan in next_cache_entry()
132
138 - The 'git last-modified' command has been optimized by using Bloom
139 - filters. It now reuses revision walk filtering logic from 'git log'
140 - to pre-filter commits, and maintains per-path Bloom filters even
141 - when wildcard pathspecs are used.
133 + The cache-scanning loop in 'next_cache_entry()' has been optimized
134 + to avoid rescanning already-unpacked index entries, preventing a
135 + quadratic performance slow-down when diffing the working tree
136 + against a commit with a pathspec matching early index entries.
137
143 - Expecting a reroll.
144 - cf. <20260718083757.GD22588@coredump.intra.peff.net>
145 - cf. <20260718081407.GC22588@coredump.intra.peff.net>
146 - cf. <20260718075700.GB22588@coredump.intra.peff.net>
147 - cf. <87cxwl1lb4.fsf@emacs.iotcl.com>
148 - source: <20260717-toon-speed-up-last-modified-v1-0-410418f18614@iotcl.com>
138 + Graduated to 'master'.
139 + cf. <xmqqpl0xqh3n.fsf@gitster.g>
140 + source: <pull.2353.v2.git.git.1783546933992.gitgitgadget@gmail.com>
141
142
151 -* hn/bisect-auto-reset (2026-07-17) 3 commits
152 - - bisect: add --auto-reset to leave when done
153 - - bisect: let bisect_reset() optionally check out quietly
154 - - bisect: read run output from the open descriptor
143 +* jc/relnotes-2.55-rust-fix (2026-07-07) 1 commit
144 + (merged to 'next' on 2026-07-10 at 444d202a75)
145 + + Rust: fix description in Release Notes to 2.55
146
156 - The 'git bisect' command has been taught a '--auto-reset[=<where>]'
157 - option that tells the command to automatically run 'git bisect reset'
158 - to jump back to the original state or to the found culprit.
147 + A description in the release notes for Git 2.55.0 has been
148 + retroactively updated to clarify that Rust support is enabled by
149 + default, but still optional, and will become mandatory in Git 3.0.
150
160 - Waiting for response.
161 - cf. <1139ae20-f08b-4cf2-b779-42328831e13e@kdbg.org>
162 - cf. <b79a479b-d279-4ac9-a368-6eb8edfed937@kdbg.org>
163 - source: <pull.2335.v2.git.git.1784312854.gitgitgadget@gmail.com>
151 + Graduated to 'master'.
152 + source: <xmqqpl0y4rpg.fsf@gitster.g>
153
165 ---------------------------------------------------
166 -[Graduated to 'master']
154
168 -* ih/precompose-flex-array (2026-07-04) 1 commit
169 - (merged to 'next' on 2026-07-09 at 737a87f65e)
170 - + precompose_utf8: use a flex array for d_name
155 +* jc/submitting-patches-abandoning (2026-07-08) 1 commit
156 + (merged to 'next' on 2026-07-10 at 41b9b65b23)
157 + + SubmittingPatches: document how to retract a topic
158
172 - The UTF-8 precomposition wrapper on macOS has been updated to use a
173 - flexible array member to represent the name of a directory entry,
174 - preventing fortified libc checks from failing when the name is
175 - reallocated to be larger than 'NAME_MAX' bytes.
159 + The 'SubmittingPatches' document has been updated to explicitly
160 + describe the expectation for contributors to retract or abandon their
161 + patch series when they are no longer pursuing it.
162
163 Graduated to 'master'.
178 - cf. <20260703050800.GA29216@tb-raspi4>
179 - source: <20260704233724.16928-1-ihar.hrachyshka@gmail.com>
180 -
181 -
182 -* jk/git-hash-cleanups (2026-07-07) 8 commits
183 - (merged to 'next' on 2026-07-09 at 12a4856545)
184 - + hash: check ctx->active flag in all wrapper functions
185 - + http: use idempotent git_hash_discard()
186 - + csum-file: use idempotent git_hash_discard()
187 - + hash: make git_hash_discard() idempotent
188 - + hash: document function pointers and wrappers
189 - + hash: convert remaining direct function calls
190 - + hash: use git_hash_init() consistently
191 - + Merge branch 'jk/hash-algo-leak-fixes' into jk/git-hash-cleanups
192 - (this branch uses jk/hash-algo-leak-fixes.)
193 -
194 - The 'git_hash_*()' wrappers have been updated to be used consistently
195 - across the codebase instead of direct calls to members of 'struct
196 - git_hash_algo', and 'git_hash_discard()' has been made idempotent to
197 - simplify cleanups.
164 + cf. <ak6U07K1dQPlXxIp@nixos>
165 + source: <xmqqpl0xv25e.fsf@gitster.g>
166 +
167 +
168 +* js/coverity-fixes-null-safety (2026-07-10) 12 commits
169 + (merged to 'next' on 2026-07-12 at 8d093f411d)
170 + + shallow: give write_one_shallow() its own hex buffer
171 + + shallow: fix NULL dereference
172 + + bisect: ensure non-NULL `head` before using it
173 + + pack-bitmap: handle missing bitmap for base MIDX
174 + + revision: avoid dereferencing NULL in `add_parents_only()`
175 + + replay: die when --onto does not peel to a commit
176 + + bisect: handle NULL commit in `bisect_successful()`
177 + + mailsplit: move NULL check before first use of file handle
178 + + reftable/stack: guard against NULL list_file in stack_destroy
179 + + remote: guard `remote_tracking()` against NULL remote
180 + + diff: handle NULL return from repo_get_commit_tree()
181 + + diffcore-break: guard against NULLed queue entries in merge loop
182 +
183 + Various code paths have been hardened against potential NULL-pointer
184 + dereferences and invalid file descriptor accesses flagged by
185 + Coverity.
186 +
187 + Graduated to 'master'.
188 + cf. <xmqqa4ryg84e.fsf@gitster.g>
189 + source: <pull.2174.v2.git.1783683577.gitgitgadget@gmail.com>
190 +
191 +
192 +* kk/commit-graph-topo-levels-fix (2026-07-09) 2 commits
193 + (merged to 'next' on 2026-07-12 at 295a5f9b34)
194 + + commit-graph: propagate topo_levels slab to all chain layers
195 + + commit-graph: add trace2 instrumentation for generation DFS
196 +
197 + The 'topo_levels' slab was propagated only to the topmost layer of a
198 + split commit-graph chain, causing topological levels for commits in
199 + base layers to be recomputed during incremental writes. This has been
200 + corrected.
201 +
202 + Graduated to 'master'.
203 + cf. <alFu8gZURKhYr1VE@com-79390>
204 + source: <pull.2170.v2.git.1783609382.gitgitgadget@gmail.com>
205 +
206 +
207 +* kk/commit-reach-find-all-fix (2026-06-29) 2 commits
208 + (merged to 'next' on 2026-07-10 at 0444c74d81)
209 + + commit-reach: guard !FIND_ALL early exit with generation ordering check
210 + + t6600: add test for merge-base early exit with clock skew
211 + (this branch is used by kk/merge-base-exhaustion.)
212 +
213 + The early-exit optimization in 'paint_down_to_common()' has been
214 + gated on the queue being generation-ordered, fixing a bug where
215 + 'git merge-base' (without '--all') could return incorrect results
216 + on repositories with v1 commit graphs and clock skew.
217 +
218 + Graduated to 'master'.
219 + cf. <xmqqjyr5v1gu.fsf@gitster.g>
220 + source: <pull.2162.git.1782739162.gitgitgadget@gmail.com>
221 +
222 +
223 +* kk/reftable-tombstone-quadratic-fix (2026-07-10) 2 commits
224 + (merged to 'next' on 2026-07-12 at 4e60bb0027)
225 + + reftable: fix quadratic behavior in the presence of tombstones
226 + + t/perf: add perf test for ref tombstone scenarios
227 +
228 + The performance of ref updates and reads using the 'reftable' backend
229 + in the presence of many deletion tombstone records has been optimized
230 + by removing the tombstone suppression flag from the merged iterator
231 + and instead skipping tombstones at higher-level call sites where
232 + iteration bounds are known.
233 +
234 + Graduated to 'master'.
235 + cf. <alECc90WZ9RPqMaA@pks.im>
236 + source: <pull.2166.v3.git.1783679767.gitgitgadget@gmail.com>
237 +
238 +
239 +* mm/test-grep-lint (2026-07-05) 6 commits
240 + (merged to 'next' on 2026-07-10 at 1916c07bf5)
241 + + t: add greplint to detect bare grep assertions
242 + + t: convert grep assertions to test_grep
243 + + t: fix Lexer line count for $() inside double-quoted strings
244 + + t: extract chainlint's parser into shared module
245 + + t: fix grep assertions missing file arguments
246 + + t/README: document test_grep helper
247 +
248 + The test suite has been updated to use the 'test_grep' helper instead
249 + of bare 'grep' for test assertions, allowing file contents to be
250 + printed on failure for easier debugging. A new 'greplint' linter has
251 + been introduced to detect and prevent new bare 'grep' assertions from
252 + being added to the test suite.
253
254 Graduated to 'master'.
200 - cf. <ak4E4-jmgYFSI75O@pks.im>
201 - source: <20260708035235.GA41491@coredump.intra.peff.net>
202 -
203 -
204 -* jk/hash-algo-leak-fixes (2026-07-02) 9 commits
205 - (merged to 'next' on 2026-07-09 at 7db7b74972)
206 - + hash: add platform-specific discard functions
207 - + hash: fix memory leak copying sha256 gcrypt handles
208 - + http: discard hash in dumb-http http_object_request
209 - + check_stream_oid(): discard hash on read error
210 - + patch-id: discard hash when done
211 - + csum-file: provide a function to release checkpoints
212 - + csum-file: always finalize or discard hash
213 - + hash: add discard primitive
214 - + csum-file: drop discard_hashfile()
215 - (this branch is used by jk/git-hash-cleanups.)
216 -
217 - Various code paths that initialize a cryptographic hash context but
218 - bail out or finish without calling 'git_hash_final()' have been taught
219 - to call 'git_hash_discard()' to release allocated resources, fixing
220 - memory leaks when Git is built with non-default backends like
221 - 'OpenSSL' or 'libgcrypt'.
255 + cf. <xmqqtsqedxmt.fsf@gitster.g>
256 + source: <pull.2135.v4.git.1783314119.gitgitgadget@gmail.com>
257 +
258 +
259 +* ps/reftable-hardening (2026-07-03) 12 commits
260 + (merged to 'next' on 2026-07-10 at b8f4dd0ab9)
261 + + reftable/table: fix OOB read on truncated table
262 + + reftable/table: fix NULL pointer access when seeking to bogus offsets
263 + + reftable/block: fix OOB read with bogus restart offset
264 + + reftable/block: fix use of uninitialized memory when binsearch fails
265 + + reftable/block: fix OOB read with bogus restart count
266 + + reftable/block: fix OOB read with bogus block size
267 + + reftable/block: fix OOB write with bogus inflated log size
268 + + t/unit-tests: introduce test helper to write reftable blocks
269 + + reftable/record: don't abort when decoding invalid ref value type
270 + + reftable/basics: fix OOB read on binary search of empty range
271 + + oss-fuzz: add fuzzer for parsing reftables
272 + + meson: support building fuzzers with libFuzzer
273 +
274 + The 'reftable' code has been hardened against corrupted tables by
275 + fixing out-of-bounds writes, out-of-bounds reads, and abort calls
276 + during parsing.
277
278 Graduated to 'master'.
224 - cf. <aktIIKuReMxJmDsi@pks.im>
225 - source: <20260702075234.GA1548258@coredump.intra.peff.net>
279 + cf. <877bn5obz9.fsf@emacs.iotcl.com>
280 + source: <20260703-pks-reftable-hardening-v3-0-b87c555b9920@pks.im>
281
282
228 -* js/ci-dockerized-pid-limit (2026-07-04) 1 commit
229 - (merged to 'next' on 2026-07-09 at cd80e673a5)
230 - + ci(dockerized): raise the PID limit for private repositories
283 +* ps/setup-split-discovery-and-setup (2026-07-07) 16 commits
284 + (merged to 'next' on 2026-07-10 at 1691a942ab)
285 + + setup: mark `set_git_work_tree()` as file-local
286 + + setup: pass worktree to `init_db()`
287 + + setup: drop redundant configuration of `startup_info->have_repository`
288 + + setup: make repository discovery self-contained
289 + + setup: propagate prefix via repository discovery
290 + + setup: drop static `cwd` variable
291 + + setup: move prefix into repository
292 + + setup: embed repository format in discovery
293 + + setup: introduce explicit repository discovery
294 + + setup: split up concerns of `setup_git_env_internal()`
295 + + setup: unify setup of shallow file
296 + + setup: mark bogus worktree in `apply_repository_format()`
297 + + setup: rename `check_repository_format_gently()`
298 + + Merge branch 'jk/repo-info-path-keys' into ps/setup-split-discovery-and-setup
299 + + Merge branch 'ps/setup-drop-global-state' into ps/setup-split-discovery-and-setup
300 + + Merge branch 'ps/refs-onbranch-fixes' into ps/setup-split-discovery-and-setup
301
232 - Dockerized CI jobs running in private GitHub repositories have been
233 - adjusted to use explicit process and file limits, preventing resource
234 - exhaustion errors on private runners.
302 + The repository discovery and repository configuration phases, which
303 + were previously intertwined in 'setup.c', have been split. Repository
304 + discovery has been updated to populate a 'struct repo_discovery'
305 + without modifying the repository state, which is then taken by
306 + repository configuration to initialize the repository, paving the way
307 + for clean unification of repository configuration.
308
309 Graduated to 'master'.
237 - cf. <xmqqh5medmzh.fsf@gitster.g>
238 - source: <pull.2164.v2.git.1783155124926.gitgitgadget@gmail.com>
239 -
240 -
241 -* js/coverity-fixes (2026-07-05) 12 commits
242 - (merged to 'next' on 2026-07-09 at 1823fe297c)
243 - + mingw: make `exit_process()` own the process handle on all paths
244 - + fsmonitor: plug token-data leak on early daemon-startup failures
245 - + reftable/table: release filter on error path
246 - + imap-send: avoid leaking the IMAP upload buffer
247 - + worktree: fix resource leaks when branch creation fails
248 - + submodule: fix cwd leak in `get_superproject_working_tree()`
249 - + dir: free allocations on parse-error paths in `read_one_dir()`
250 - + line-log: avoid redundant copy that leaks in process_ranges
251 - + run-command: avoid `close(-1)` in `start_command()` error paths
252 - + download_https_uri_to_file(): do not leak fd upon failure
253 - + loose: avoid closing invalid fd on error path
254 - + load_one_loose_object_map(): fix resource leak
255 -
256 - Various resource leaks, invalid file descriptor closures, and process
257 - handle ownership issues flagged by Coverity have been fixed.
310 + cf. <87h5m9om0j.fsf@emacs.iotcl.com>
311 + source: <20260707-pks-setup-split-discovery-and-setup-v2-0-aab372cd227c@pks.im>
312 +
313 +
314 +* sn/osxkeychain-rust-universal (2026-07-07) 3 commits
315 + (merged to 'next' on 2026-07-10 at fe82b5d188)
316 + + contrib: wire up osxkeychain in contrib/Makefile on macOS
317 + + Makefile: support universal macOS builds via RUST_TARGETS
318 + + Makefile: add $(RUST_LIB) prerequisite to osxkeychain
319 +
320 + The build system has been updated to support building universal macOS
321 + binaries when 'Rust' is enabled, by compiling separate static archives
322 + for each target triple listed in 'RUST_TARGETS' and combining them
323 + using the macOS 'lipo' tool. The 'git-credential-osxkeychain' helper
324 + has been updated to link against '$(RUST_LIB)' when 'Rust' is enabled.
325
326 Graduated to 'master'.
260 - cf. <xmqqa4s238lg.fsf@gitster.g>
261 - source: <pull.2163.v2.git.1783239870.gitgitgadget@gmail.com>
327 + cf. <xmqq4ii9teym.fsf@gitster.g>
328 + source: <pull.2288.v8.git.git.1783480879.gitgitgadget@gmail.com>
329
330
264 -* js/wincred-fixes (2026-07-16) 2 commits
265 - (merged to 'next' on 2026-07-16 at 8c5927f06f)
266 - + wincred: prevent silent credential loss when storing OAuth tokens
267 - + wincred: avoid memory corruption when erasing a credential
331 +* tc/bundle-uri-empty-fix (2026-07-08) 2 commits
332 + (merged to 'next' on 2026-07-12 at 9da32fdaf7)
333 + + bundle-uri: stop sending invalid bundle configuration
334 + + bundle-uri: drain remaining response on invalid bundle-uri lines
335
269 - The 'wincred' credential helper has been updated to avoid memory
270 - corruption when erasing credentials and to prevent silent credential
271 - loss when storing OAuth tokens, by correcting buffer allocations and
272 - arguments passed to safe-CRT APIs.
336 + The client-side parser of the server-advertised bundle-URI list has
337 + been updated to drain the remaining response in order to avoid
338 + protocol desynchronization when the server sends a misconfigured list.
339 + Also, the server-side has been taught to omit empty configuration
340 + values instead of sending invalid key-value lines.
341
342 Graduated to 'master'.
275 - source: <pull.2182.git.1784212072.gitgitgadget@gmail.com>
343 + cf. <xmqqtsq9qj5k.fsf@gitster.g>
344 + source: <20260708-toon-bundle-uri-no-uri-v2-0-09a03d8db556@iotcl.com>
345
346
278 -* mm/sideband-ansi-sgr-colon-fix (2026-05-13) 1 commit
279 - (merged to 'next' on 2026-07-09 at fd2b979b73)
280 - + sideband: allow ANSI SGR with colon-separated subfields
347 +* ty/migrate-ignorecase (2026-06-19) 2 commits
348 + (merged to 'next' on 2026-07-12 at 39e9fdb93f)
349 + + config: use repo_ignore_case() to access core.ignorecase
350 + + environment: move ignore_case into repo_config_values
351
282 - The sideband demultiplexer has been updated to recognize ANSI SGR
283 - escape sequences that use colon-separated subfields (e.g., for
284 - 256-color or true-color codes).
352 + The global configuration variable 'ignore_case' (representing the
353 + 'core.ignorecase' configuration) has been migrated into 'struct
354 + repo_config_values' to tie it to a specific repository instance.
355
356 Graduated to 'master'.
287 - cf. <8addf7c0-ae39-f1c0-20ab-52114702aaf6@gmx.de>
288 - source: <20260513070803.163546-1-grawity@nullroute.lt>
289 -
290 -
291 -* ps/t-fixes-for-git-test-long (2026-07-05) 9 commits
292 - (merged to 'next' on 2026-07-09 at c5b13248c8)
293 - + gitlab-ci: enable "GIT_TEST_LONG"
294 - + gitlab-ci: disable RAM disk on macOS jobs
295 - + t: use `test_bool_env` to parse GIT_TEST_LONG
296 - + t7900: clean up large EXPENSIVE repository
297 - + t7508: skip EXPENSIVE test that is broken without SIZE_T_IS_64BIT
298 - + t5608: reduce maximum disk usage
299 - + t4141: fix inefficient use of dd(1)
300 - + t0021: skip EXPENSIVE test that is broken without SIZE_T_IS_64BIT
301 - + README: add GitLab CI badge to make it more discoverable
302 -
303 - Various test scripts have been updated to clean up large temporary
304 - files and repositories, reducing peak disk usage during testing.
305 - Also, expensive tests have been disabled on platforms that lack
306 - sufficient resources (like 32-bit platforms and Windows CI runners),
307 - and the long test suite has been enabled in GitLab CI.
357 + cf. <xmqqechaga7p.fsf@gitster.g>
358 + source: <20260619155152.642760-1-cat@malon.dev>
359 +
360 +
361 +* wy/doc-myfirstcontribution-trim-quotes (2026-06-11) 1 commit
362 + (merged to 'next' on 2026-07-12 at adeaa999b6)
363 + + MyFirstContribution: mention trimming quoted text in replies
364 +
365 + The contributor guide has been updated to advise new contributors to
366 + trim irrelevant quoted text when replying to review comments, matching
367 + the existing advice given to reviewers.
368
369 Graduated to 'master'.
310 - cf. <20260707043026.GB677056@coredump.intra.peff.net>
311 - source: <20260706-b4-pks-t-fixes-for-GIT-TEST-LONG-v3-0-4f6c5a37fd1f@pks.im>
370 + cf. <xmqqcxxwljue.fsf@gitster.g>
371 + source: <080402ff0ac8127b654dccea59a1bf643df62a5c.1781186476.git.wy@wyuan.org>
372
373 --------------------------------------------------
374 [Stalled]
@@ -362,6 +422,116 @@ Release tarballs are available at:
422 --------------------------------------------------
423 [Cooking]
424
425 +* tl/gitweb-shorten-hashes-with-modes (2026-07-17) 1 commit
426 + - gitweb: shorten index hashes with trailing file modes
427 +
428 + The object ID shortening and linking in the 'commitdiff' view of
429 + 'gitweb' has been corrected to work even when the index line carries
430 + a trailing file mode.
431 +
432 + Needs review.
433 + source: <SA1PR10MB9977150C823C0751E53B150D5AF1C62@SA1PR10MB997715.namprd10.prod.outlook.com>
434 +
435 +
436 +* kj/repo-info-more-path-keys (2026-07-17) 7 commits
437 + - repo: add path.git-prefix path key
438 + - repo: add path.grafts with absolute and relative suffix formatting
439 + - repo: add path.index with absolute and relative suffix formatting
440 + - repo: add path.hooks with absolute and relative suffix formatting
441 + - repo: add path.objects with absolute and relative suffix formatting
442 + - repo: add path.superproject-working-tree with absolute and relative suffixes
443 + - repo: add path.toplevel with absolute and relative suffix formatting
444 +
445 + The 'git repo info' command has been taught more keys to output
446 + paths of various repository components (such as the working tree
447 + root, superproject working tree, object database, etc.), supporting
448 + both absolute and relative path formats.
449 +
450 + Waiting for response.
451 + cf. <845D6852-98F5-4168-82CD-90B3B476BCF5@gmail.com>
452 + cf. <DB49CF15-4980-4213-8463-4C0FE2EC8438@gmail.com>
453 + source: <20260717133015.32040-1-jayatheerthkulkarni2005@gmail.com>
454 +
455 +
456 +* sk/userdiff-swift (2026-07-17) 1 commit
457 + - userdiff: add support for Swift
458 +
459 + Userdiff patterns for Swift have been added, with support for
460 + Swift-specific constructs such as attributes, modifiers, failable
461 + initializers, and generics.
462 +
463 + Expecting a reroll.
464 + cf. <20260720095335.66241-1-diy2903@gmail.com>
465 + source: <20260717140232.6722-1-diy2903@gmail.com>
466 +
467 +
468 +* ps/odb-move-loose-object-writing (2026-07-17) 10 commits
469 + - object-file: move logic to write loose objects
470 + - object-file: move `force_object_loose()`
471 + - object-file: force objects loose via generic interface
472 + - object-file: fix memory leak in `force_object_loose()`
473 + - odb: support setting mtime when writing objects
474 + - odb: lift object existence check out of the "loose" backend
475 + - odb: compute object hash in `odb_write_object_ext()`
476 + - t/u-odb-inmemory: implement wrapper for writing objects
477 + - odb: compute compat object ID in `odb_write_object_ext()`
478 + - Merge branch 'jt/receive-pack-use-odb-transactions' into HEAD
479 + (this branch uses jt/receive-pack-use-odb-transactions.)
480 +
481 + The logic to write loose objects has been refactored and moved from
482 + 'object-file.c' to the loose backend source file 'odb/source-loose.c',
483 + making the loose backend more self-contained. This is achieved by
484 + first refactoring 'force_object_loose()' to use generic ODB write
485 + interfaces instead of loose-backend internals.
486 +
487 + Needs review.
488 + source: <20260717-pks-odb-move-loose-object-writing-v1-0-46446a3cb5b7@pks.im>
489 +
490 +
491 +* pw/rebase-fixup-fixes (2026-07-17) 2 commits
492 + - rebase: remember fixup -c after skipping fixup/squash
493 + - rebase -i: fix counting of fixups after rebase --skip
494 +
495 + Two bugs in how 'git rebase' handles skipped 'fixup' and 'squash'
496 + commands have been fixed. One bug caused an incorrect commit count to
497 + be shown in the template message when multiple commands were skipped,
498 + and another caused the editor not to be opened when the final command
499 + in a chain containing 'fixup -c' was skipped.
500 +
501 + Needs review.
502 + source: <cover.1784304378.git.phillip.wood@dunelm.org.uk>
503 +
504 +
505 +* tc/last-modified-bloom (2026-07-17) 4 commits
506 + - last-modified: keep per-path Bloom filters for wildcard pathspecs
507 + - last-modified: check pathspec against Bloom filter first
508 + - revision: expose check for paths maybe changed in Bloom filter
509 + - revision: move bloom keyvec precondition into function
510 +
511 + The 'git last-modified' command has been optimized by using Bloom
512 + filters. It now reuses revision walk filtering logic from 'git log'
513 + to pre-filter commits, and maintains per-path Bloom filters even when
514 + wildcard pathspecs are used.
515 +
516 + Expecting a reroll.
517 + cf. <87cxwl1lb4.fsf@emacs.iotcl.com>
518 + source: <20260717-toon-speed-up-last-modified-v1-0-410418f18614@iotcl.com>
519 +
520 +
521 +* hn/bisect-reset-when-found (2026-07-20) 2 commits
522 + - bisect: add --reset-when-found to leave when done
523 + - bisect: let bisect_reset() optionally check out quietly
524 +
525 + The 'git bisect' command has been taught a
526 + '--reset-when-found[=<where>]' option that tells the command to
527 + automatically run 'git bisect reset' to jump back to the original
528 + state or to the found culprit.
529 +
530 + Will merge to 'next'?
531 + cf. <xmqqldb5d1d9.fsf@gitster.g>
532 + source: <pull.2335.v3.git.git.1784538619.gitgitgadget@gmail.com>
533 +
534 +
535 * js/coverity-unchecked-returns-fix (2026-07-14) 11 commits
536 - bisect: handle dup() failure when redirecting stdout
537 - bisect: check get_terms return at all call sites
@@ -400,13 +570,14 @@ Release tarballs are available at:
570
571
572 * jc/submodule-helper-avoid-zu (2026-07-15) 1 commit
403 - - submodule--helper: avoid use of %zu for now
573 + (merged to 'next' on 2026-07-19 at b12d5d76f5)
574 + + submodule--helper: avoid use of %zu for now
575
405 - An accidental use of '%zu' format flag in 'git submodule--helper'
406 - has been corrected to use 'PRIuMAX' and cast the value to
407 - 'uintmax_t', to avoid portability issues.
576 + An accidental use of the '%zu' format specifier in 'git
577 + submodule--helper' has been corrected to use 'PRIuMAX' and cast the
578 + value to 'uintmax_t' to avoid portability issues.
579
409 - Will merge to 'next'.
580 + Will merge to 'master'.
581 source: <xmqq4ii0ko9t.fsf@gitster.g>
582
583
@@ -431,7 +602,8 @@ Release tarballs are available at:
602 timestamps in the traces.
603
604 Waiting for response.
434 - cf. <alpXW5U6sndZtgqV@com-79390>
605 + cf. <xmqqzezlhgyo.fsf@gitster.g>
606 + cf. <al4yrXXoZiHLwSvE@com-79390>
607 source: <pull.2178.git.1784131932489.gitgitgadget@gmail.com>
608
609
@@ -449,13 +621,14 @@ Release tarballs are available at:
621
622
623 * rs/remote-curl-simplify-push-specs (2026-07-14) 1 commit
452 - - remote-curl: simplify passing of push specs
624 + (merged to 'next' on 2026-07-19 at ff1b5528ba)
625 + + remote-curl: simplify passing of push specs
626
627 The passing of push destination specifications in the 'remote-curl'
628 helper has been simplified by removing the explicit 'count' parameter
629 and relying on the NULL-termination of the array.
630
458 - Will merge to 'next'.
631 + Will merge to 'master'.
632 source: <935883f3-3be4-4c51-9711-5208b9ef9ca1@web.de>
633
634
@@ -464,8 +637,9 @@ Release tarballs are available at:
637 + revision: fix --no-walk path filtering regression
638 + Merge branch 'kk/streaming-walk-pqueue' into kk/no-walk-pathspec-fix
639
467 - The 'git rev-list --no-walk' command lost pathspec filtering when the
468 - streaming walk was refactored, which has been corrected.
640 + The 'git rev-list --no-walk' command has been corrected to restore
641 + pathspec filtering, which was lost when the streaming walk was
642 + refactored.
643
644 Will merge to 'master'.
645 source: <pull.2181.git.1784198879711.gitgitgadget@gmail.com>
@@ -486,35 +660,36 @@ Release tarballs are available at:
660
661 Waiting for response.
662 cf. <xmqq4ihyehyb.fsf@gitster.g>
489 - cf. <xmqqcxwmeiwq.fsf@gitster.g>
663 source: <20260716165517.433849-1-christian.couder@gmail.com>
664
665
666 * ps/copy-wo-the-repository (2026-07-16) 1 commit
494 - - copy: drop dependency on `the_repository`
667 + (merged to 'next' on 2026-07-20 at 9e38da0efc)
668 + + copy: drop dependency on `the_repository`
669
670 The 'copy_file()' and 'copy_file_with_time()' functions have been
671 refactored to take a repository parameter, allowing the removal of the
672 implicit dependency on the global 'the_repository' variable in
673 'copy.c'.
674
501 - Will merge to 'next'?
675 + Will merge to 'master'.
676 cf. <b0df688a-3b26-48f6-8b1c-98530483885e@gmail.com>
677 cf. <xmqqo6g54k7m.fsf@gitster.g>
678 source: <20260716-pks-copy-wo-the-repository-v2-1-8f5e32942929@pks.im>
679
680
681 * ps/refspec-wo-the-repository (2026-07-16) 3 commits
508 - - refspec: stop depending on `the_repository`
509 - - refspec: let callers pass in hash algorithm when parsing items
510 - - refspec: group related structures and functions
682 + (merged to 'next' on 2026-07-20 at 31044c3fc9)
683 + + refspec: stop depending on `the_repository`
684 + + refspec: let callers pass in hash algorithm when parsing items
685 + + refspec: group related structures and functions
686
687 The dependency on the global 'the_repository' variable in the
688 'refspec.c' API has been removed by passing the hash algorithm
689 explicitly to refspec-parsing functions and storing it in 'struct
690 refspec'.
691
517 - Will merge to 'next'.
692 + Will merge to 'master'.
693 source: <20260716-pks-refspec-wo-the-repository-v1-0-aa40844d067f@pks.im>
694
695
@@ -537,17 +712,17 @@ Release tarballs are available at:
712 source: <20260716-pks-reintroduce-writev-v1-0-ea9038c884bc@pks.im>
713
714
540 -* sc/wt-status-avoid-quadratic-insertion (2026-07-17) 1 commit
541 - - wt-status: avoid repeated insertion for untracked paths
715 +* sc/wt-status-avoid-quadratic-insertion (2026-07-18) 1 commit
716 + (merged to 'next' on 2026-07-20 at 9330d42a4a)
717 + + wt-status: avoid repeated insertion for untracked paths
718
719 The enumeration of untracked and ignored files in 'git status' has
720 been optimized by avoiding quadratic complexity insertion into string
721 lists, reducing the construction cost from O(n^2) to O(n log n).
722
547 - Will merge to 'next'.
548 - (a newer iteration v3 exists as <20260718081449.26747-1-sahityajb@gmail.com>)
723 + Will merge to 'master'.
724 cf. <20260718083828.GE22588@coredump.intra.peff.net>
550 - source: <20260717144620.259031-1-sahityajb@gmail.com>
725 + source: <20260718081449.26747-1-sahityajb@gmail.com>
726
727
728 * tb/send-pack-no-ref-delta (2026-07-12) 4 commits
@@ -631,10 +806,10 @@ Release tarballs are available at:
806 on the 'the_repository' global variable, and their callers have been
807 updated to use the repository-aware variants.
808
634 - Waiting for response.
635 - cf. <aldYVPyMl40-Myp0@pks.im>
636 - cf. <aldYTuMvN-8EMvYK@pks.im>
809 + Will merge to 'next'?
810 + cf. <aldYW4TPUqgDMRcf@pks.im>
811 cf. <3c0a8031-7082-422a-b474-938418682b60@web.de>
812 + cf. <xmqqmrvmn6a5.fsf@gitster.g>
813 source: <20260714175956.54601-1-l.s.r@web.de>
814
815
@@ -719,6 +894,8 @@ Release tarballs are available at:
894 '--empty' option, allowing it to be dropped, kept, or to halt the
895 rebase.
896
897 + Ejected due to conflicts with 'pw/rebase-drop-notes-with-commit'.
898 +
899 Waiting for response.
900 cf. <690b965e-5f07-4aa4-a64c-96e60a86d73b@gmail.com>
901 source: <20260711-fz-autosquash-empty-v3-1-d227b63eb511@gmail.com>
@@ -737,45 +914,6 @@ Release tarballs are available at:
914 source: <20260708-submodule-init-v1-1-719456077262@atmark-techno.com>
915
916
740 -* hf/unpack-trees-quadratic-scan (2026-07-08) 1 commit
741 - (merged to 'next' on 2026-07-12 at 744f1aede4)
742 - + unpack-trees: avoid quadratic index scan in next_cache_entry()
743 -
744 - The cache-scanning loop in 'next_cache_entry()' has been optimized
745 - to avoid rescanning already-unpacked index entries, preventing a
746 - quadratic performance slow-down when diffing the working tree
747 - against a commit with a pathspec matching early index entries.
748 -
749 - Will merge to 'master'.
750 - cf. <xmqqpl0xqh3n.fsf@gitster.g>
751 - source: <pull.2353.v2.git.git.1783546933992.gitgitgadget@gmail.com>
752 -
753 -
754 -* jc/relnotes-2.55-rust-fix (2026-07-07) 1 commit
755 - (merged to 'next' on 2026-07-10 at 444d202a75)
756 - + Rust: fix description in Release Notes to 2.55
757 -
758 - A description in the release notes for Git 2.55.0 has been
759 - retroactively updated to clarify that Rust support is enabled by
760 - default, but still optional, and will become mandatory in Git 3.0.
761 -
762 - Will merge to 'master'.
763 - source: <xmqqpl0y4rpg.fsf@gitster.g>
764 -
765 -
766 -* jc/submitting-patches-abandoning (2026-07-08) 1 commit
767 - (merged to 'next' on 2026-07-10 at 41b9b65b23)
768 - + SubmittingPatches: document how to retract a topic
769 -
770 - The 'SubmittingPatches' document has been updated to explicitly
771 - describe the expectation for contributors to retract or abandon their
772 - patch series when they are no longer pursuing it.
773 -
774 - Will merge to 'master'.
775 - cf. <ak6U07K1dQPlXxIp@nixos>
776 - source: <xmqqpl0xv25e.fsf@gitster.g>
777 -
778 -
917 * mm/lib-httpd-cgi-safe (2026-07-10) 3 commits
918 - t/README: document writing concurrency-safe helpers
919 - t/lib-httpd: make http-429 first-request check atomic
@@ -786,86 +924,33 @@ Release tarballs are available at:
924 Apache handles concurrent requests.
925
926 Needs review.
789 - source: <pull.2171.v2.git.1783704657.gitgitgadget@gmail.com>
790 -
791 -
792 -* ps/odb-pluggable-housekeeping (2026-07-12) 12 commits
793 - - odb: make optimizations pluggable
794 - - builtin/gc: fix signedness issues in ODB-related functionality
795 - - builtin/gc: refactor ODB optimizations to operate on "files" source
796 - - builtin/gc: introduce `odb_optimize_required()`
797 - - builtin/gc: move geometric repacking into `odb_optimize()`
798 - - builtin/gc: introduce object database optimization options
799 - - builtin/gc: inline config values specific to the "files" backend
800 - - builtin/gc: make repack arguments self-contained
801 - - builtin/gc: extract object database optimizations into separate function
802 - - builtin/gc: move worktree and rerere tasks before object optimizations
803 - - odb: run "pre-auto-gc" hook for all maintenance tasks
804 - - t7900: simplify how we check for maintenance tasks
805 -
806 - Object database housekeeping in 'git gc' and 'git maintenance' has
807 - been refactored to be pluggable. The files-backend specific logic,
808 - including incremental and geometric repacking as well as object
809 - pruning, has been moved out of the command implementation and into the
810 - files object database source, enabling future alternative object
811 - database backends to implement their own housekeeping services.
812 -
813 - Waiting for response.
814 - cf. <xmqqwluyyhv1.fsf@gitster.g>
815 - source: <20260713-b4-pks-odb-optimize-v2-0-9c2c3ee94b38@pks.im>
816 -
817 -
818 -* tc/bundle-uri-empty-fix (2026-07-08) 2 commits
819 - (merged to 'next' on 2026-07-12 at 9da32fdaf7)
820 - + bundle-uri: stop sending invalid bundle configuration
821 - + bundle-uri: drain remaining response on invalid bundle-uri lines
822 -
823 - The client-side parser of the server-advertised bundle-URI list has
824 - been updated to drain the remaining response in order to avoid
825 - protocol desynchronization when the server sends a misconfigured list.
826 - Also, the server-side has been taught to omit empty configuration
827 - values instead of sending invalid key-value lines.
828 -
829 - Will merge to 'master'.
830 - cf. <xmqqtsq9qj5k.fsf@gitster.g>
831 - source: <20260708-toon-bundle-uri-no-uri-v2-0-09a03d8db556@iotcl.com>
832 -
833 -
834 -* gr/t1410-reflog-exit-code (2026-07-08) 1 commit
835 - (merged to 'next' on 2026-07-10 at d0cf55ea54)
836 - + t1410-reflog.sh: avoid suppressing git's exit code in pipelines
837 -
838 - The pipelines in 't1410-reflog.sh' have been replaced with the
839 - 'test_stdout_line_count' helper to avoid suppressing the exit code of
840 - 'git' commands, ensuring failures are not hidden from the test suite.
841 -
842 - Will merge to 'master'.
843 - cf. <xmqqtsq8p18x.fsf@gitster.g>
844 - source: <20260709051229.40363-1-gatlavishweshwarreddy26@gmail.com>
927 + source: <pull.2171.v2.git.1783704657.gitgitgadget@gmail.com>
928
929
847 -* js/coverity-fixes-null-safety (2026-07-10) 12 commits
848 - (merged to 'next' on 2026-07-12 at 8d093f411d)
849 - + shallow: give write_one_shallow() its own hex buffer
850 - + shallow: fix NULL dereference
851 - + bisect: ensure non-NULL `head` before using it
852 - + pack-bitmap: handle missing bitmap for base MIDX
853 - + revision: avoid dereferencing NULL in `add_parents_only()`
854 - + replay: die when --onto does not peel to a commit
855 - + bisect: handle NULL commit in `bisect_successful()`
856 - + mailsplit: move NULL check before first use of file handle
857 - + reftable/stack: guard against NULL list_file in stack_destroy
858 - + remote: guard `remote_tracking()` against NULL remote
859 - + diff: handle NULL return from repo_get_commit_tree()
860 - + diffcore-break: guard against NULLed queue entries in merge loop
930 +* ps/odb-pluggable-housekeeping (2026-07-12) 12 commits
931 + - odb: make optimizations pluggable
932 + - builtin/gc: fix signedness issues in ODB-related functionality
933 + - builtin/gc: refactor ODB optimizations to operate on "files" source
934 + - builtin/gc: introduce `odb_optimize_required()`
935 + - builtin/gc: move geometric repacking into `odb_optimize()`
936 + - builtin/gc: introduce object database optimization options
937 + - builtin/gc: inline config values specific to the "files" backend
938 + - builtin/gc: make repack arguments self-contained
939 + - builtin/gc: extract object database optimizations into separate function
940 + - builtin/gc: move worktree and rerere tasks before object optimizations
941 + - odb: run "pre-auto-gc" hook for all maintenance tasks
942 + - t7900: simplify how we check for maintenance tasks
943
862 - Various code paths have been hardened against potential NULL-pointer
863 - dereferences and invalid file descriptor accesses flagged by
864 - Coverity.
944 + Object database housekeeping in 'git gc' and 'git maintenance' has
945 + been refactored to be pluggable. The files-backend specific logic,
946 + including incremental and geometric repacking as well as object
947 + pruning, has been moved out of the command implementation and into the
948 + files object database source, enabling future alternative object
949 + database backends to implement their own housekeeping services.
950
866 - Will merge to 'master'.
867 - cf. <xmqqa4ryg84e.fsf@gitster.g>
868 - source: <pull.2174.v2.git.1783683577.gitgitgadget@gmail.com>
951 + Waiting for response.
952 + cf. <xmqqwluyyhv1.fsf@gitster.g>
953 + source: <20260713-b4-pks-odb-optimize-v2-0-9c2c3ee94b38@pks.im>
954
955
956 * ps/odb-for-each-object-filter (2026-07-14) 10 commits
@@ -894,13 +979,14 @@ Release tarballs are available at:
979
980
981 * ps/refs-wo-the-repository (2026-07-15) 7 commits
897 - - refs: remove remaining uses of `the_repository`
898 - - worktree: pass repository to public functions
899 - - worktree: pass repository to file-local functions
900 - - worktree: refactor code to use available repositories
901 - - refs/files: drop `USE_THE_REPOSITORY_VARIABLE`
902 - - refs/packed: de-globalize handling of "core.packedRefsTimeout"
903 - - Merge branch 'ps/refs-writing-subcommands' into ps/refs-wo-the-repository
982 + (merged to 'next' on 2026-07-19 at 12685f410c)
983 + + refs: remove remaining uses of `the_repository`
984 + + worktree: pass repository to public functions
985 + + worktree: pass repository to file-local functions
986 + + worktree: refactor code to use available repositories
987 + + refs/files: drop `USE_THE_REPOSITORY_VARIABLE`
988 + + refs/packed: de-globalize handling of "core.packedRefsTimeout"
989 + + Merge branch 'ps/refs-writing-subcommands' into ps/refs-wo-the-repository
990
991 The ref subsystem and the worktree API have been refactored to pass a
992 repository pointer down the call chain, allowing them to drop
@@ -908,23 +994,8 @@ Release tarballs are available at:
994 the handling of the 'core.packedRefsTimeout' configuration has been
995 moved into the per-repository ref store structure.
996
911 - Will merge to 'next'.
912 - source: <20260716-pks-refs-wo-the-repository-v3-0-db0a804e0224@pks.im>
913 -
914 -
915 -* kk/commit-graph-topo-levels-fix (2026-07-09) 2 commits
916 - (merged to 'next' on 2026-07-12 at 295a5f9b34)
917 - + commit-graph: propagate topo_levels slab to all chain layers
918 - + commit-graph: add trace2 instrumentation for generation DFS
919 -
920 - The 'topo_levels' slab was propagated only to the topmost layer of a
921 - split commit-graph chain, causing topological levels for commits in
922 - base layers to be recomputed during incremental writes. This has been
923 - corrected.
924 -
997 Will merge to 'master'.
926 - cf. <alFu8gZURKhYr1VE@com-79390>
927 - source: <pull.2170.v2.git.1783609382.gitgitgadget@gmail.com>
998 + source: <20260716-pks-refs-wo-the-repository-v3-0-db0a804e0224@pks.im>
999
1000
1001 * ds/sparse-index-ita-crash (2026-07-06) 1 commit
@@ -952,22 +1023,6 @@ Release tarballs are available at:
1023 source: <20260706115816.20267-1-ijackson@chiark.greenend.org.uk>
1024
1025
955 -* kk/reftable-tombstone-quadratic-fix (2026-07-10) 2 commits
956 - (merged to 'next' on 2026-07-12 at 4e60bb0027)
957 - + reftable: fix quadratic behavior in the presence of tombstones
958 - + t/perf: add perf test for ref tombstone scenarios
959 -
960 - The performance of ref updates and reads using the 'reftable' backend
961 - in the presence of many deletion tombstone records has been optimized
962 - by removing the tombstone suppression flag from the merged iterator
963 - and instead skipping tombstones at higher-level call sites where
964 - iteration bounds are known.
965 -
966 - Will merge to 'master'.
967 - cf. <alECc90WZ9RPqMaA@pks.im>
968 - source: <pull.2166.v3.git.1783679767.gitgitgadget@gmail.com>
969 -
970 -
1026 * jm/t0213-skip-emulated-ancestry-tests (2026-07-06) 1 commit
1027 - t0213: skip ancestry tests under user-mode emulation
1028
@@ -976,27 +1031,11 @@ Release tarballs are available at:
1031 the ancestry collector reports the expected process names rather than
1032 the emulator binary name.
1033
979 - Needs review.
1034 + Will merge to 'next'.
1035 + cf. <xmqqa4s38rbe.fsf@gitster.g>
1036 source: <pull.2168.git.1783359242130.gitgitgadget@gmail.com>
1037
1038
983 -* bc/parse-options-exit-0-on-help (2026-07-07) 4 commits
984 - (merged to 'next' on 2026-07-10 at 775654e447)
985 - + parse-options: exit 0 on -h
986 - + rev-parse: have --parseopt callers exit 0 on --help
987 - + parse-options: add a separate case for help output on error
988 - + t1517: skip svn tests if svn is not installed
989 -
990 - Option parsing with 'git rev-parse --parseopt' and in most 'git'
991 - subcommands has been updated to exit with 0 (instead of 129) when the
992 - help option ('-h' or '--help') is requested directly by the user,
993 - aligning with standard Unix convention.
994 -
995 - Will merge to 'master'.
996 - cf. <20260708035930.GB41684@coredump.intra.peff.net>
997 - source: <20260708001557.3581080-1-sandals@crustytoothpaste.net>
998 -
999 -
1039 * zy/apply-abandoned-header-fix (2026-07-01) 1 commit
1040 - apply: avoid leaking abandoned git-header state
1041
@@ -1023,23 +1062,6 @@ Release tarballs are available at:
1062 source: <20260711160447.99708-1-marcelomlage@usp.br>
1063
1064
1026 -* sn/osxkeychain-rust-universal (2026-07-07) 3 commits
1027 - (merged to 'next' on 2026-07-10 at fe82b5d188)
1028 - + contrib: wire up osxkeychain in contrib/Makefile on macOS
1029 - + Makefile: support universal macOS builds via RUST_TARGETS
1030 - + Makefile: add $(RUST_LIB) prerequisite to osxkeychain
1031 -
1032 - The build system has been updated to support building universal macOS
1033 - binaries when 'Rust' is enabled, by compiling separate static archives
1034 - for each target triple listed in 'RUST_TARGETS' and combining them
1035 - using the macOS 'lipo' tool. The 'git-credential-osxkeychain' helper
1036 - has been updated to link against '$(RUST_LIB)' when 'Rust' is enabled.
1037 -
1038 - Will merge to 'master'.
1039 - cf. <xmqq4ii9teym.fsf@gitster.g>
1040 - source: <pull.2288.v8.git.git.1783480879.gitgitgadget@gmail.com>
1041 -
1042 -
1065 * cl/conditional-config-on-worktree-path (2026-07-09) 2 commits
1066 (merged to 'next' on 2026-07-15 at 86ca33c437)
1067 + config: add "worktree" and "worktree/i" includeIf conditions
@@ -1054,22 +1076,6 @@ Release tarballs are available at:
1076 source: <20260710-includeif-worktree-v8-0-04686d8a616c@black-desk.cn>
1077
1078
1057 -* kk/commit-reach-find-all-fix (2026-06-29) 2 commits
1058 - (merged to 'next' on 2026-07-10 at 0444c74d81)
1059 - + commit-reach: guard !FIND_ALL early exit with generation ordering check
1060 - + t6600: add test for merge-base early exit with clock skew
1061 - (this branch is used by kk/merge-base-exhaustion.)
1062 -
1063 - The early-exit optimization in 'paint_down_to_common()' has been
1064 - gated on the queue being generation-ordered, fixing a bug where
1065 - 'git merge-base' (without '--all') could return incorrect results
1066 - on repositories with v1 commit graphs and clock skew.
1067 -
1068 - Will merge to 'master'.
1069 - cf. <xmqqjyr5v1gu.fsf@gitster.g>
1070 - source: <pull.2162.git.1782739162.gitgitgadget@gmail.com>
1071 -
1072 -
1079 * bl/t7412-use-test-path-helpers (2026-06-29) 1 commit
1080 - submodule absorbgitdirs tests: use test_* helper functions
1081
@@ -1083,54 +1089,25 @@ Release tarballs are available at:
1089 source: <20260630020220.1559190-1-bblima@usp.br>
1090
1091
1086 -* ps/setup-split-discovery-and-setup (2026-07-07) 16 commits
1087 - (merged to 'next' on 2026-07-10 at 1691a942ab)
1088 - + setup: mark `set_git_work_tree()` as file-local
1089 - + setup: pass worktree to `init_db()`
1090 - + setup: drop redundant configuration of `startup_info->have_repository`
1091 - + setup: make repository discovery self-contained
1092 - + setup: propagate prefix via repository discovery
1093 - + setup: drop static `cwd` variable
1094 - + setup: move prefix into repository
1095 - + setup: embed repository format in discovery
1096 - + setup: introduce explicit repository discovery
1097 - + setup: split up concerns of `setup_git_env_internal()`
1098 - + setup: unify setup of shallow file
1099 - + setup: mark bogus worktree in `apply_repository_format()`
1100 - + setup: rename `check_repository_format_gently()`
1101 - + Merge branch 'jk/repo-info-path-keys' into ps/setup-split-discovery-and-setup
1102 - + Merge branch 'ps/setup-drop-global-state' into ps/setup-split-discovery-and-setup
1103 - + Merge branch 'ps/refs-onbranch-fixes' into ps/setup-split-discovery-and-setup
1104 -
1105 - The repository discovery and repository configuration phases, which
1106 - were previously intertwined in 'setup.c', have been split. Repository
1107 - discovery has been updated to populate a 'struct repo_discovery'
1108 - without modifying the repository state, which is then taken by
1109 - repository configuration to initialize the repository, paving the way
1110 - for clean unification of repository configuration.
1111 -
1112 - Will merge to 'master'.
1113 - cf. <87h5m9om0j.fsf@emacs.iotcl.com>
1114 - source: <20260707-pks-setup-split-discovery-and-setup-v2-0-aab372cd227c@pks.im>
1115 -
1116 -
1092 * pw/rebase-drop-notes-with-commit (2026-07-15) 9 commits
1118 - - sequencer: do not record dropped commits as rewritten
1119 - - sequencer: use an enum to represent result of picking a commit
1120 - - sequencer: simplify pick_one_commit()
1121 - - sequencer: remove unnecessary condition in pick_one_commit()
1122 - - sequencer: simplify handling of fixup with conflicts
1123 - - sequencer: remove unnecessary "or" in pick_one_commit()
1124 - - sequencer: never reschedule on failed commit
1125 - - sequencer: be more careful with external merge
1126 - - t3400: restore coverage for note copying with apply backend
1093 + (merged to 'next' on 2026-07-20 at 5475c9f935)
1094 + + sequencer: do not record dropped commits as rewritten
1095 + + sequencer: use an enum to represent result of picking a commit
1096 + + sequencer: simplify pick_one_commit()
1097 + + sequencer: remove unnecessary condition in pick_one_commit()
1098 + + sequencer: simplify handling of fixup with conflicts
1099 + + sequencer: remove unnecessary "or" in pick_one_commit()
1100 + + sequencer: never reschedule on failed commit
1101 + + sequencer: be more careful with external merge
1102 + + t3400: restore coverage for note copying with apply backend
1103
1104 The rebase post-rewrite notes-copying logic has been corrected. When
1105 a commit is dropped during rebase (e.g., because its changes are
1106 already upstream), it is no longer recorded as rewritten, preventing
1107 its notes from being copied to an unrelated commit.
1108
1133 - Needs review.
1109 + Will merge to 'master'.
1110 + cf. <xmqqy0f5d25g.fsf@gitster.g>
1111 source: <cover.1784128921.git.phillip.wood@dunelm.org.uk>
1112
1113
@@ -1182,30 +1159,6 @@ Release tarballs are available at:
1159 source: <20260710163722.2962278-1-jltobler@gmail.com>
1160
1161
1185 -* ps/reftable-hardening (2026-07-03) 12 commits
1186 - (merged to 'next' on 2026-07-10 at b8f4dd0ab9)
1187 - + reftable/table: fix OOB read on truncated table
1188 - + reftable/table: fix NULL pointer access when seeking to bogus offsets
1189 - + reftable/block: fix OOB read with bogus restart offset
1190 - + reftable/block: fix use of uninitialized memory when binsearch fails
1191 - + reftable/block: fix OOB read with bogus restart count
1192 - + reftable/block: fix OOB read with bogus block size
1193 - + reftable/block: fix OOB write with bogus inflated log size
1194 - + t/unit-tests: introduce test helper to write reftable blocks
1195 - + reftable/record: don't abort when decoding invalid ref value type
1196 - + reftable/basics: fix OOB read on binary search of empty range
1197 - + oss-fuzz: add fuzzer for parsing reftables
1198 - + meson: support building fuzzers with libFuzzer
1199 -
1200 - The 'reftable' code has been hardened against corrupted tables by
1201 - fixing out-of-bounds writes, out-of-bounds reads, and abort calls
1202 - during parsing.
1203 -
1204 - Will merge to 'master'.
1205 - cf. <877bn5obz9.fsf@emacs.iotcl.com>
1206 - source: <20260703-pks-reftable-hardening-v3-0-b87c555b9920@pks.im>
1207 -
1208 -
1162 * ty/migrate-excludes-file (2026-07-13) 10 commits
1163 - repository: adjust the comment of config_values_private_
1164 - environment: move object_creation_mode into repo_config_values
@@ -1238,25 +1191,12 @@ Release tarballs are available at:
1191
1192 Ejected for now, as it causes too many evil merges with other topics.
1193
1241 - Waiting for response.
1194 + Needs review.
1195 cf. <alR9GDNTbdjWB4dq@szeder.dev>
1196 + cf. <2d455ecf-972e-e3ce-54bc-683050c04282@gmx.de>
1197 source: <20260713-pks-libgit-in-subdir-v4-0-696240876eb1@pks.im>
1198
1199
1246 -* ty/migrate-ignorecase (2026-06-19) 2 commits
1247 - (merged to 'next' on 2026-07-12 at 39e9fdb93f)
1248 - + config: use repo_ignore_case() to access core.ignorecase
1249 - + environment: move ignore_case into repo_config_values
1250 -
1251 - The global configuration variable 'ignore_case' (representing the
1252 - 'core.ignorecase' configuration) has been migrated into 'struct
1253 - repo_config_values' to tie it to a specific repository instance.
1254 -
1255 - Will merge to 'master'.
1256 - cf. <xmqqechaga7p.fsf@gitster.g>
1257 - source: <20260619155152.642760-1-cat@malon.dev>
1258 -
1259 -
1200 * mm/line-log-limited-ops (2026-06-27) 7 commits
1201 - diffcore-pickaxe: scope -G to the -L tracked range
1202 - diff: support --check with -L line ranges
@@ -1274,7 +1214,7 @@ Release tarballs are available at:
1214 source: <pull.2152.v2.git.1782581342.gitgitgadget@gmail.com>
1215
1216
1277 -* hn/history-squash (2026-07-15) 5 commits
1217 +* hn/history-squash (2026-07-20) 5 commits
1218 - history: re-edit a squash with every message
1219 - sequencer: share the squash message marker helpers and flags
1220 - history: add squash subcommand to fold a range
@@ -1286,20 +1226,7 @@ Release tarballs are available at:
1226 descendants replayed on top.
1227
1228 Needs review.
1289 - source: <pull.2337.v9.git.git.1784128573.gitgitgadget@gmail.com>
1290 -
1291 -
1292 -* wy/doc-myfirstcontribution-trim-quotes (2026-06-11) 1 commit
1293 - (merged to 'next' on 2026-07-12 at adeaa999b6)
1294 - + MyFirstContribution: mention trimming quoted text in replies
1295 -
1296 - The contributor guide has been updated to advise new contributors to
1297 - trim irrelevant quoted text when replying to review comments, matching
1298 - the existing advice given to reviewers.
1299 -
1300 - Will merge to 'master'.
1301 - cf. <xmqqcxxwljue.fsf@gitster.g>
1302 - source: <080402ff0ac8127b654dccea59a1bf643df62a5c.1781186476.git.wy@wyuan.org>
1229 + source: <pull.2337.v10.git.git.1784536024.gitgitgadget@gmail.com>
1230
1231
1232 * tb/midx-incremental-custom-base (2026-06-12) 3 commits
@@ -1317,37 +1244,18 @@ Release tarballs are available at:
1244 source: <cover.1781294771.git.me@ttaylorr.com>
1245
1246
1320 -* mm/test-grep-lint (2026-07-05) 6 commits
1321 - (merged to 'next' on 2026-07-10 at 1916c07bf5)
1322 - + t: add greplint to detect bare grep assertions
1323 - + t: convert grep assertions to test_grep
1324 - + t: fix Lexer line count for $() inside double-quoted strings
1325 - + t: extract chainlint's parser into shared module
1326 - + t: fix grep assertions missing file arguments
1327 - + t/README: document test_grep helper
1328 -
1329 - The test suite has been updated to use the 'test_grep' helper instead
1330 - of bare 'grep' for test assertions, allowing file contents to be
1331 - printed on failure for easier debugging. A new 'greplint' linter has
1332 - been introduced to detect and prevent new bare 'grep' assertions from
1333 - being added to the test suite.
1334 -
1335 - Will merge to 'master'.
1336 - cf. <xmqqtsqedxmt.fsf@gitster.g>
1337 - source: <pull.2135.v4.git.1783314119.gitgitgadget@gmail.com>
1338 -
1339 -
1247 * td/ref-filter-memoize-contains (2026-06-12) 3 commits
1341 - - commit-reach: die on contains walk errors
1342 - - ref-filter: memoize --contains with generations
1343 - - commit-reach: reject cycles in contains walk
1248 + (merged to 'next' on 2026-07-19 at 5b640e33a1)
1249 + + commit-reach: die on contains walk errors
1250 + + ref-filter: memoize --contains with generations
1251 + + commit-reach: reject cycles in contains walk
1252
1253 'git branch --contains' and 'git for-each-ref --contains' have been
1254 optimized to use the memoized commit traversal previously used only by
1255 'git tag --contains', significantly speeding up connectivity checks
1256 across many candidate refs with shared history.
1257
1350 - Will merge to 'next'.
1258 + Will merge to 'master'.
1259 cf. <20260716091924.GB1212956@coredump.intra.peff.net>
1260 source: <20260612-ref-filter-memoized-contains-v4-0-5ed39fd001dd@gmail.com>
1261
@@ -1419,7 +1327,7 @@ Release tarballs are available at:
1327 source: <pull.2120.v5.git.1784149323.gitgitgadget@gmail.com>
1328
1329
1422 -* ty/migrate-trust-executable-bit (2026-07-16) 4 commits
1330 +* ty/migrate-trust-executable-bit (2026-07-20) 4 commits
1331 - environment: move has_symlinks into repo_config_values
1332 - environment: move trust_executable_bit into repo_config_values
1333 - read-cache: pass 'repo' to 'ce_mode_from_stat()'
@@ -1429,9 +1337,8 @@ Release tarballs are available at:
1337 configuration) has been migrated into 'struct repo_config_values' to
1338 tie it to a specific repository instance.
1339
1432 - Waiting for response.
1433 - cf. <xmqq8q7961xe.fsf@gitster.g>
1434 - source: <20260717063559.1633567-1-cat@malon.dev>
1340 + Needs review.
1341 + source: <20260720105335.3202013-1-cat@malon.dev>
1342
1343
1344 * za/completion-hide-dotfiles (2026-06-20) 2 commits
@@ -1486,8 +1393,9 @@ Release tarballs are available at:
1393 to remove local branches that are already merged into their tracked
1394 remote-tracking branches.
1395
1489 - Needs review.
1396 + Expecting a reroll.
1397 cf. <xmqqtspvptqc.fsf@gitster.g>
1398 + cf. <CAHwyqnXdaPeO12+p=_+_ttrknV0-VqTMnH-suS66yZ4stsBKnQ@mail.gmail.com>
1399 source: <pull.2285.v19.git.git.1784053493.gitgitgadget@gmail.com>
1400
1401
@@ -1505,20 +1413,21 @@ Release tarballs are available at:
1413
1414
1415 * ps/shift-root-in-graph (2026-07-14) 7 commits
1508 - - graph: add --[no-]graph-indent and log.graphIndent
1509 - - graph: move config reading into graph_read_config()
1510 - - graph: wrap cascading commits after 4 columns
1511 - - graph: indent visual root in graph
1512 - - graph: add a 2 commit buffer for lookahead
1513 - - revision: add next_commit_to_show()
1514 - - lib-log-graph: move check_graph function
1416 + (merged to 'next' on 2026-07-19 at bebf13a239)
1417 + + graph: add --[no-]graph-indent and log.graphIndent
1418 + + graph: move config reading into graph_read_config()
1419 + + graph: wrap cascading commits after 4 columns
1420 + + graph: indent visual root in graph
1421 + + graph: add a 2 commit buffer for lookahead
1422 + + revision: add next_commit_to_show()
1423 + + lib-log-graph: move check_graph function
1424
1425 'git log --graph' has been modified to visually distinguish parentless
1426 'root' commits (and commits that become roots due to history
1427 simplification) by indenting them, preventing them from appearing
1428 falsely related to unrelated commits rendered immediately above them.
1429
1521 - Will merge to 'next'.
1430 + Will merge to 'master'.
1431 cf. <CA+J6zkQNzEAhhY74qDrOwfFVrshEF7YFxWRRkwE3ttJo15ZbAg@mail.gmail.com>
1432 source: <20260714-ps-pre-commit-indent-v12-0-d50938e006df@gmail.com>
1433
@@ -1535,53 +1444,11 @@ Release tarballs are available at:
1444 - test-lib-functions: improve diagnostic output for trace2 data assertions
1445 - Documentation/technical: add paint-down-to-common doc
1446 - Merge branch 'kk/commit-reach-find-all-fix' into kk/merge-base-exhaustion
1538 - (this branch uses kk/commit-reach-find-all-fix.)
1447
1448 The merge-base computation has been optimized by stopping the walk
1449 early when one side's exclusive commits in the queue are exhausted,
1450 yielding significant speedups for queries with one-sided histories.
1451
1452 Needs review.
1453 + cf. <xmqqse5en8wz.fsf@gitster.g>
1454 source: <pull.2149.v6.git.1783776466.gitgitgadget@gmail.com>
1546 -
1547 ---------------------------------------------------
1548 -[Discarded]
1549 -
1550 -* kk/prio-queue-cascade-sift (2026-07-08) 3 commits
1551 - . prio-queue: use cascade for unfused gets
1552 - . prio-queue: extract sift_up() from prio_queue_put()
1553 - . Merge branch 'kk/prio-queue-get-put-fusion' into kk/prio-queue-cascade-sift
1554 -
1555 - 'prio_queue_get()' has been optimized by using a cascade-down approach
1556 - (promoting the smaller child at each level and sifting up the last
1557 - element from the leaf vacancy), whereby the number of comparisons per
1558 - extract-min operation is halved in the common case.
1559 -
1560 - Retracted.
1561 - cf. <CAL71e4PRVYfUWc-c+6XHTwtADqrbub9ykbo+rPyramDhJw=Rfg@mail.gmail.com>
1562 - source: <pull.2132.v3.git.1783532989.gitgitgadget@gmail.com>
1563 -
1564 -
1565 -* ap/http-redirect-wwwauth-fix (2026-06-02) 1 commit
1566 - . http: preserve wwwauth_headers across redirects
1567 -
1568 - When 'cURL' follows a redirect, the 'WWW-Authenticate' headers from
1569 - the redirect target were lost because 'credential_from_url()' cleared
1570 - the credential state. This has been fixed by preserving the collected
1571 - headers across the redirect update.
1572 -
1573 - Discarded.
1574 - cf. <xmqqmrw2zavx.fsf@gitster.g>
1575 - source: <20260602161150.1527493-1-aplattner@nvidia.com>
1576 -
1577 -
1578 -* dk/meson-enable-use-nsec-build (2026-06-20) 1 commit
1579 - . meson: wire up USE_NSEC build knob
1580 -
1581 - The 'USE_NSEC' build knob, which enables support for sub-second file
1582 - timestamp resolution, has been wired up to the Meson build system.
1583 -
1584 - Discarded.
1585 - cf. <xmqqa4rx9mb5.fsf@gitster.g>
1586 - cf. <45F2C180-1DE1-4371-869B-BF605B64E01A@gmail.com>
1587 - source: <c4c5ade901ff95b0f95939ea818870e4f3d59da1.1781971201.git.ben.knoble+github@gmail.com>