| 1 | To: git@vger.kernel.org |
| 2 | Subject: What's cooking in git.git (Aug 2026, #01) |
| 3 | X-master-at: 5b2471720c93ee30e5764a19f3d3b3ae9ec9712a |
| 4 | X-next-at: 6767b8d81c83adffcd5ce7f852af5e071b7b07f7 |
| 5 | Bcc: lwn@lwn.net, gitster@pobox.com |
| 6 | |
| 7 | What's cooking in git.git (Aug 2026, #01) |
| 8 | ----------------------------------------- |
| 9 | |
| 10 | Here are the topics that have been cooking in my tree. Commits |
| 11 | prefixed with '+' are in 'next' (being in 'next' is a sign that a |
| 12 | topic is stable enough to be used and is a candidate to be in a |
| 13 | future release). Commits prefixed with '-' are only in 'seen', and |
| 14 | aren't considered "accepted" at all. They may be annotated with a URL |
| 15 | to a message that raises issues but they are by no means exhaustive. |
| 16 | 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 10th 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 |
| 24 | repositories have only a subset of branches. |
| 25 | |
| 26 | With maint, master, next, seen, todo: |
| 27 | |
| 28 | git://git.kernel.org/pub/scm/git/git.git/ |
| 29 | git://repo.or.cz/alt-git.git/ |
| 30 | https://kernel.googlesource.com/pub/scm/git/git/ |
| 31 | https://github.com/git/git/ |
| 32 | https://gitlab.com/git-scm/git/ |
| 33 | |
| 34 | With all the integration branches and topics broken out: |
| 35 | |
| 36 | https://github.com/gitster/git/ |
| 37 | |
| 38 | Even though the preformatted documentation in HTML and man format |
| 39 | are not sources, they are published in these repositories for |
| 40 | convenience (replace "htmldocs" with "manpages" for the manual |
| 41 | pages): |
| 42 | |
| 43 | git://git.kernel.org/pub/scm/git/git-htmldocs.git/ |
| 44 | https://github.com/gitster/git-htmldocs.git/ |
| 45 | |
| 46 | Release tarballs are available at: |
| 47 | |
| 48 | https://www.kernel.org/pub/software/scm/git/ |
| 49 | |
| 50 | -------------------------------------------------- |
| 51 | [New Topics] |
| 52 | |
| 53 | * hn/ci-cancel-stale-pr-runs (2026-07-31) 1 commit |
| 54 | - ci: cancel stale pull request workflow runs |
| 55 | |
| 56 | GitHub Actions CI workflow runs triggered by pull requests have |
| 57 | been configured to cancel older runs when a new push is made to the |
| 58 | same pull request. |
| 59 | |
| 60 | Needs review. |
| 61 | source: <pull.2369.git.git.1785492641983.gitgitgadget@gmail.com> |
| 62 | |
| 63 | |
| 64 | * kh/doc-refs-migrate-limitations (2026-07-31) 2 commits |
| 65 | - doc: refs: linkgit to git-maintenance(1) |
| 66 | - doc: refs: put ref migration warning under the command |
| 67 | |
| 68 | The known limitations of the ref format migration in 'git refs' have |
| 69 | been moved to be displayed as a caution admonition directly under the |
| 70 | description of the 'migrate' subcommand, improving visibility. A |
| 71 | reference to 'git-maintenance' has also been corrected to use the |
| 72 | 'linkgit' macro. |
| 73 | |
| 74 | Will merge to 'next'? |
| 75 | cf. <xmqqbjbncdv5.fsf@gitster.g> |
| 76 | source: <CV_git_ref_migration_warning.b09@msgid.xyz> |
| 77 | |
| 78 | |
| 79 | * jc/complete-diff-tracked-paths (2026-08-02) 1 commit |
| 80 | - completion: complete tracked paths for git diff |
| 81 | |
| 82 | "git -C <dir> diff fi<TAB>" did not complete dir/file, which has |
| 83 | been corrected. |
| 84 | |
| 85 | Will merge to 'next'? |
| 86 | cf. <anAqfqcEueSKmAH+@szeder.dev> |
| 87 | cf. <xmqqpkzzyzq4.fsf@gitster.g> |
| 88 | source: <xmqqcxw010me.fsf@gitster.g> |
| 89 | |
| 90 | |
| 91 | * kh/trailers-no-urls (2026-08-02) 2 commits |
| 92 | - trailers: stop recognizing URLs as trailers |
| 93 | - Merge branch 'kh/doc-trailers' into kh/trailers-no-urls |
| 94 | (this branch uses kh/doc-trailers.) |
| 95 | |
| 96 | The trailers code has been taught to avoid mistaking a line that has |
| 97 | <token>:// at the beginning as a trailer line. |
| 98 | |
| 99 | Will merge to 'next'? |
| 100 | cf. <20260803152025.GA189075@coredump.intra.peff.net> |
| 101 | cf. <xmqqmrv42lrg.fsf@gitster.g> |
| 102 | cf. <xmqqtspbz00x.fsf@gitster.g> |
| 103 | source: <URLs_not_trailers.b13@msgid.xyz> |
| 104 | |
| 105 | |
| 106 | * kl/t7528-ssh-agent-for-csh-users (2026-08-02) 1 commit |
| 107 | - t7528: fix failure under csh |
| 108 | |
| 109 | The 'ssh-agent' tests in 't7528' have been fixed to work when the |
| 110 | user's login shell is csh-like, by explicitly passing '-s' to |
| 111 | 'ssh-agent' to force Bourne shell syntax. |
| 112 | |
| 113 | Will merge to 'next'? |
| 114 | cf. <am_5YymI-UnCT_s1@fruit.crustytoothpaste.net> |
| 115 | cf. <xmqqy0enz2o4.fsf@gitster.g> |
| 116 | source: <20260803004105.36913-2-keni@his.com> |
| 117 | |
| 118 | -------------------------------------------------- |
| 119 | [Graduated to 'master'] |
| 120 | |
| 121 | * af/clone-revision-v0-segfault-fix (2026-07-24) 1 commit |
| 122 | (merged to 'next' on 2026-07-27 at 57c0e98bfb) |
| 123 | + builtin/clone: fix segfault when using --revision with protocol v0 |
| 124 | |
| 125 | A segfault when 'git clone --revision' talks to a server that does not |
| 126 | support protocol v2 (falling back to protocol v0) has been corrected. |
| 127 | |
| 128 | Graduated to 'master'. |
| 129 | cf. <xmqqldb08jcd.fsf@gitster.g> |
| 130 | source: <20260724124138.666877-1-adrian.friedli@mt.com> |
| 131 | |
| 132 | |
| 133 | * en/submodule-insteadof-remote-match (2026-07-22) 1 commit |
| 134 | (merged to 'next' on 2026-07-27 at a1cbd7aa11) |
| 135 | + submodule: resolve insteadOf aliases when matching remote |
| 136 | |
| 137 | The remote-matching logic for submodules has been corrected to resolve |
| 138 | 'url.*.insteadOf' aliases before comparing the inventoried URL from |
| 139 | '.gitmodules' with the URLs of configured remotes. |
| 140 | |
| 141 | Graduated to 'master'. |
| 142 | cf. <xmqqldb05dlo.fsf@gitster.g> |
| 143 | source: <20260723002132.3989727-1-ccjmne@gmail.com> |
| 144 | |
| 145 | |
| 146 | * hn/url-push-tracking (2026-07-22) 2 commits |
| 147 | (merged to 'next' on 2026-07-25 at 9b776656fc) |
| 148 | + remote: find tracking branches for URL push destinations |
| 149 | + remote: pass repository to push tracking helper |
| 150 | |
| 151 | When the push remote is specified as a URL, the fetch refspec of a |
| 152 | uniquely matching configured remote is now used to find and update |
| 153 | the remote-tracking branch (e.g., '@{push}'). |
| 154 | |
| 155 | Graduated to 'master'. |
| 156 | cf. <xmqqpl0eoniz.fsf@gitster.g> |
| 157 | source: <pull.2358.v4.git.git.1784743738.gitgitgadget@gmail.com> |
| 158 | |
| 159 | |
| 160 | * jc/exclude-first-parent-seen (2026-07-22) 1 commit |
| 161 | (merged to 'next' on 2026-07-25 at 85755d1d45) |
| 162 | + revision: honor --exclude-first-parent-only with SEEN first parent |
| 163 | |
| 164 | Traversals with '--exclude-first-parent-only' have been corrected |
| 165 | to properly stop after the first parent even when it has already |
| 166 | been marked as 'SEEN'. |
| 167 | |
| 168 | Graduated to 'master'. |
| 169 | source: <xmqqbjbzq7n2.fsf@gitster.g> |
| 170 | |
| 171 | |
| 172 | * jc/remote-insteadof-leakfix (2026-07-25) 1 commit |
| 173 | (merged to 'next' on 2026-07-27 at 8cf88af88b) |
| 174 | + remote: plug memory leaks |
| 175 | |
| 176 | rewrites_release() in 'remote.c' has been updated to free 'struct |
| 177 | rewrite' instances, their '.instead_of' arrays, and their contents. |
| 178 | |
| 179 | Graduated to 'master'. |
| 180 | cf. <20260725161819.GA2343104@coredump.intra.peff.net> |
| 181 | source: <xmqqpl0b12gj.fsf@gitster.g> |
| 182 | |
| 183 | |
| 184 | * jt/config-lock-timeout (2026-05-17) 1 commit |
| 185 | (merged to 'next' on 2026-07-24 at 3cb8da6b6a) |
| 186 | + config: retry acquiring config.lock, configurable via core.configLockTimeout |
| 187 | |
| 188 | Configuration file locking has been updated to retry for a short |
| 189 | period, avoiding failures when multiple processes attempt to update |
| 190 | the configuration simultaneously. |
| 191 | |
| 192 | Graduated to 'master'. |
| 193 | cf. <agrIrGwSMFlKTx9x@pks.im> |
| 194 | cf. <xmqqzf1xbl4i.fsf@gitster.g> |
| 195 | source: <20260517132111.1014901-1-joerg@thalheim.io> |
| 196 | |
| 197 | |
| 198 | * ps/cat-file-remote-object-info (2026-07-24) 13 commits |
| 199 | (merged to 'next' on 2026-07-24 at e436a42272) |
| 200 | + cat-file: make remote-object-info allow-list adapt to the server |
| 201 | + cat-file: add remote-object-info to batch-command |
| 202 | + transport: add client support for object-info |
| 203 | + serve: advertise object-info feature |
| 204 | + protocol-caps: check object existence regardless of the attributes requested |
| 205 | + fetch-pack: move fetch initialization |
| 206 | + connect: make write_fetch_command_and_capabilities() more generic |
| 207 | + fetch-pack: move write_fetch_command_and_capabilities() to connect.c |
| 208 | + fetch-pack: use unsigned int for hash_algo variable |
| 209 | + fetch-pack: drop the static advertise_sid variable |
| 210 | + t1006: extract helper functions into new 'lib-cat-file.sh' |
| 211 | + cat-file: declare loop counter inside for() |
| 212 | + transport-helper: fix memory leak of helper on disconnect |
| 213 | (this branch is used by ps/cat-file-remote-object-info-type.) |
| 214 | |
| 215 | The 'remote-object-info' command has been added to 'git cat-file |
| 216 | --batch-command', allowing clients to request object metadata |
| 217 | (currently size) from a remote server via protocol v2 without |
| 218 | downloading the entire object. Format placeholders are dynamically |
| 219 | filtered on the client based on server-advertised capabilities, |
| 220 | returning empty strings for inapplicable or unsupported fields. |
| 221 | |
| 222 | Graduated to 'master'. |
| 223 | source: <20260724-ps-eric-work-rebase-v21-0-ba67f024fdff@gmail.com> |
| 224 | |
| 225 | |
| 226 | * ps/odb-move-loose-object-writing (2026-07-17) 10 commits |
| 227 | (merged to 'next' on 2026-07-25 at 244d577d93) |
| 228 | + object-file: move logic to write loose objects |
| 229 | + object-file: move `force_object_loose()` |
| 230 | + object-file: force objects loose via generic interface |
| 231 | + object-file: fix memory leak in `force_object_loose()` |
| 232 | + odb: support setting mtime when writing objects |
| 233 | + odb: lift object existence check out of the "loose" backend |
| 234 | + odb: compute object hash in `odb_write_object_ext()` |
| 235 | + t/u-odb-inmemory: implement wrapper for writing objects |
| 236 | + odb: compute compat object ID in `odb_write_object_ext()` |
| 237 | + Merge branch 'jt/receive-pack-use-odb-transactions' into HEAD |
| 238 | |
| 239 | The logic to write loose objects has been refactored and moved from |
| 240 | 'object-file.c' to the loose backend source file 'odb/source-loose.c', |
| 241 | making the loose backend more self-contained. This is achieved by |
| 242 | first refactoring force_object_loose() to use generic ODB write |
| 243 | interfaces instead of loose-backend internals. |
| 244 | |
| 245 | Graduated to 'master'. |
| 246 | cf. <xmqqecgzpm0y.fsf@gitster.g> |
| 247 | source: <20260717-pks-odb-move-loose-object-writing-v1-0-46446a3cb5b7@pks.im> |
| 248 | |
| 249 | |
| 250 | * rs/tempfile-wo-the-repository (2026-07-14) 5 commits |
| 251 | (merged to 'next' on 2026-07-22 at 968a116891) |
| 252 | + use repo_hold_lock_file_for_update{,_mode,_timeout}() with custom repos |
| 253 | + tempfile: stop using the_repository |
| 254 | + lockfile: add repo_hold_lock_file_for_update{,_timeout}{,_mode}() |
| 255 | + refs/packed: use repo_create_tempfile() |
| 256 | + tempfile: add repo_create_tempfile{,_mode}() |
| 257 | |
| 258 | The tempfile and lockfile APIs have been refactored to stop depending |
| 259 | on the 'the_repository' global variable, and their callers have been |
| 260 | updated to use the repository-aware variants. |
| 261 | |
| 262 | Graduated to 'master'. |
| 263 | cf. <xmqq8q7ds3ld.fsf@gitster.g> |
| 264 | cf. <xmqqmrvmn6a5.fsf@gitster.g> |
| 265 | source: <20260714175956.54601-1-l.s.r@web.de> |
| 266 | |
| 267 | |
| 268 | * sk/userdiff-swift (2026-07-20) 1 commit |
| 269 | (merged to 'next' on 2026-07-23 at 45dbcc6307) |
| 270 | + userdiff: add support for Swift |
| 271 | |
| 272 | Userdiff patterns for Swift have been added, with support for |
| 273 | Swift-specific constructs such as attributes, modifiers, failable |
| 274 | initializers, and generics. |
| 275 | |
| 276 | Graduated to 'master'. |
| 277 | cf. <2a3a73c5-5e90-44a3-bf6a-6e98ce5e5a59@kdbg.org> |
| 278 | cf. <7b541cd5-bd66-4675-818d-8e23eb1c9530@kdbg.org> |
| 279 | source: <20260721065736.8747-1-diy2903@gmail.com> |
| 280 | |
| 281 | |
| 282 | * tl/gitweb-shorten-hashes-with-modes (2026-07-17) 1 commit |
| 283 | (merged to 'next' on 2026-07-25 at 5b92e8a325) |
| 284 | + gitweb: shorten index hashes with trailing file modes |
| 285 | |
| 286 | The object ID shortening and linking in the 'commitdiff' view of |
| 287 | 'gitweb' has been corrected to work even when the index line carries |
| 288 | a trailing file mode. |
| 289 | |
| 290 | Graduated to 'master'. |
| 291 | cf. <xmqqjyqu6u7i.fsf@gitster.g> |
| 292 | source: <SA1PR10MB9977150C823C0751E53B150D5AF1C62@SA1PR10MB997715.namprd10.prod.outlook.com> |
| 293 | |
| 294 | |
| 295 | * tn/stash-avoid-sparse-index-expansion (2026-07-20) 2 commits |
| 296 | (merged to 'next' on 2026-07-23 at 8ccf28493e) |
| 297 | + stash: avoid sparse-index expansion for in-cone paths |
| 298 | + pathspec: use match for sparse-index expansion checks |
| 299 | |
| 300 | The 'git stash push' command has been optimized to avoid |
| 301 | unnecessary sparse index expansion when pathspecs are wholly inside |
| 302 | the sparse-checkout cone. Also, a potential out-of-bounds read in |
| 303 | the sparse-index expansion check helper |
| 304 | pathspec_needs_expanded_index() has been fixed by consistently |
| 305 | using the parsed, prefixed path. |
| 306 | |
| 307 | Graduated to 'master'. |
| 308 | cf. <al61UTM0aK9j9eiP@com-79390> |
| 309 | cf. <al61ERa3fS2MerHp@com-79390> |
| 310 | source: <20260720223118.62821-4-tnyman@openai.com> |
| 311 | |
| 312 | |
| 313 | * ty/migrate-excludes-file (2026-07-13) 10 commits |
| 314 | (merged to 'next' on 2026-07-23 at 749560a29c) |
| 315 | + repository: adjust the comment of config_values_private_ |
| 316 | + environment: move object_creation_mode into repo_config_values |
| 317 | + environment: move autorebase into repo_config_values |
| 318 | + environment: move push_default into repo_config_values |
| 319 | + environment: migrate apply_default_whitespace and apply_default_ignorewhitespace |
| 320 | + environment: move askpass_program into repo_config_values |
| 321 | + environment: move pager_program into repo_config_values |
| 322 | + environment: move editor_program into repo_config_values |
| 323 | + environment: move excludes_file into repo_config_values |
| 324 | + repository: introduce repo_config_values_clear() |
| 325 | |
| 326 | The 'excludes_file' and various other global configuration variables |
| 327 | (including 'editor_program', 'pager_program', 'askpass_program', and |
| 328 | 'push_default') have been migrated into the per-repository structure. |
| 329 | |
| 330 | Graduated to 'master'. |
| 331 | cf. <xmqqa4ruyhbh.fsf@gitster.g> |
| 332 | source: <20260714032525.1611141-1-cat@malon.dev> |
| 333 | |
| 334 | |
| 335 | * ty/migrate-trust-executable-bit (2026-07-20) 4 commits |
| 336 | (merged to 'next' on 2026-07-23 at 4873f289dd) |
| 337 | + environment: move has_symlinks into repo_config_values |
| 338 | + environment: move trust_executable_bit into repo_config_values |
| 339 | + read-cache: pass 'repo' to 'ce_mode_from_stat()' |
| 340 | + read-cache: remove redundant extern declarations |
| 341 | |
| 342 | The 'trust_executable_bit' (coming from the 'core.filemode' |
| 343 | configuration) has been migrated into 'struct repo_config_values' to |
| 344 | tie it to a specific repository instance. |
| 345 | |
| 346 | Graduated to 'master'. |
| 347 | cf. <alvNq8rXF/jofqUc@szeder.dev> |
| 348 | cf. <xmqq8q7961xe.fsf@gitster.g> |
| 349 | source: <20260720105335.3202013-1-cat@malon.dev> |
| 350 | |
| 351 | -------------------------------------------------- |
| 352 | [Stalled] |
| 353 | |
| 354 | * bl/t7412-use-test-path-helpers (2026-06-29) 1 commit |
| 355 | - submodule absorbgitdirs tests: use test_* helper functions |
| 356 | |
| 357 | The test script 't7412' that tests 'git submodule absorbgitdirs' has |
| 358 | been modernized to use test_path_is_file(), test_path_is_dir(), and |
| 359 | test_path_is_missing() helper functions instead of raw 'test -[fde]' |
| 360 | commands. |
| 361 | |
| 362 | Waiting for response for too long, stalled. |
| 363 | cf. <akTKHfKPsP3-Rn31@pks.im> |
| 364 | cf. <xmqqik60o22y.fsf@gitster.g> |
| 365 | source: <20260630020220.1559190-1-bblima@usp.br> |
| 366 | |
| 367 | |
| 368 | * tb/repack-geometric-cruft (2026-06-28) 11 commits |
| 369 | - SQUASH??? bare grep !??? |
| 370 | - repack: support combining '--geometric' with '--cruft' |
| 371 | - pack-objects: support '--refs-snapshot' with 'follow-reachable' |
| 372 | - pack-objects: introduce '--stdin-packs=follow-reachable' |
| 373 | - pack-objects: extract `stdin_packs_add_all_pack_entries()` |
| 374 | - repack-geometry: drop unused redundant-pack removal |
| 375 | - repack: delete geometric packs via existing_packs |
| 376 | - repack: teach MIDX retention about geometric rollups |
| 377 | - repack: mark geometric progression of packs as retained |
| 378 | - repack: extract `locate_existing_pack()` helper |
| 379 | - repack: unconditionally exclude non-kept packs |
| 380 | |
| 381 | 'git repack' has been taught to accept '--geometric' and '--cruft' |
| 382 | together. When both are given, non-cruft packs are rolled up by the |
| 383 | geometric repack as usual, while a separate cruft pack is written to |
| 384 | collect unreachable objects. |
| 385 | |
| 386 | Waiting for response for too long, stalled. |
| 387 | cf. <xmqqwlugo4nk.fsf@gitster.g> |
| 388 | source: <cover.1782500507.git.me@ttaylorr.com> |
| 389 | |
| 390 | |
| 391 | * hn/checkout-track-fetch (2026-06-24) 2 commits |
| 392 | - checkout: extend --track with a "fetch" mode to refresh start-point |
| 393 | - branch: expose helpers for finding the remote owning a tracking ref |
| 394 | |
| 395 | The 'git checkout --track=...' command has been taught to optionally |
| 396 | fetch the branch from the remote that the new branch will work with. |
| 397 | |
| 398 | Will discard. |
| 399 | cf. <xmqq8q71clob.fsf@gitster.g> |
| 400 | source: <pull.2281.v15.git.git.1782338098.gitgitgadget@gmail.com> |
| 401 | |
| 402 | |
| 403 | * za/completion-hide-dotfiles (2026-06-20) 2 commits |
| 404 | - completion: hide dotfiles by default for path completion |
| 405 | - completion: hide dotfiles for selected path completion |
| 406 | |
| 407 | Path completion for commands like 'git rm' and 'git mv' has been |
| 408 | updated to hide dotfiles by default unless the user explicitly starts |
| 409 | the path with a dot, matching standard shell-completion behavior. |
| 410 | |
| 411 | Waiting for response for too long, stalled. |
| 412 | cf. <xmqq1pe0g08t.fsf@gitster.g> |
| 413 | cf. <xmqq4ihpclo8.fsf@gitster.g> |
| 414 | source: <pull.2311.v3.git.git.1781978156.gitgitgadget@gmail.com> |
| 415 | |
| 416 | -------------------------------------------------- |
| 417 | [Cooking] |
| 418 | |
| 419 | * kh/doc-trailers (2026-07-30) 11 commits |
| 420 | - doc: interpret-trailers: document comment line treatment |
| 421 | - doc: interpret-trailers: rewrite new-trailers paragraphs |
| 422 | - doc: interpret-trailers: commit to “trailer block” term |
| 423 | - doc: interpret-trailers: join new-trailers again |
| 424 | - doc: interpret-trailers: add key format example |
| 425 | - doc: interpret-trailers: explain key format |
| 426 | - doc: interpret-trailers: explain the format after the intro |
| 427 | - doc: interpret-trailers: not just for commit messages |
| 428 | - doc: interpret-trailers: use “metadata” in Name as well |
| 429 | - doc: interpret-trailers: replace “lines” with “metadata” |
| 430 | - doc: interpret-trailers: stop fixating on RFC 822 |
| 431 | (this branch is used by kh/trailers-no-urls.) |
| 432 | |
| 433 | Documentation for 'git interpret-trailers' has been updated to explain |
| 434 | the format of trailer keys (alphanumeric characters and hyphens), |
| 435 | replace outdated terminology, define key terms upfront, and document |
| 436 | how comment lines in the input are treated. |
| 437 | |
| 438 | Needs review. |
| 439 | source: <V4_CV_doc_int-tr_key_format.ae2@msgid.xyz> |
| 440 | |
| 441 | |
| 442 | * kh/doc-replay-config (2026-07-30) 4 commits |
| 443 | (merged to 'next' on 2026-08-03 at 5450adb2e1) |
| 444 | + doc: replay: move “default” to the right-hand side |
| 445 | + doc: replay: use a nested description list |
| 446 | + doc: replay: improve config description |
| 447 | + doc: link to config for git-replay(1) |
| 448 | |
| 449 | Documentation for 'git replay' has been updated to refer to its |
| 450 | configuration variables. |
| 451 | |
| 452 | Will merge to 'master'. |
| 453 | cf. <xmqq4ihfduxi.fsf@gitster.g> |
| 454 | source: <V4_CV_doc_replay_config.af3@msgid.xyz> |
| 455 | |
| 456 | |
| 457 | * sk/test-commit-body-helper (2026-07-27) 2 commits |
| 458 | (merged to 'next' on 2026-08-03 at ce42e63135) |
| 459 | + t: use commit_body to extract commit message bodies |
| 460 | + test-lib-functions: add commit_body helper |
| 461 | |
| 462 | A new test helper commit_body() has been introduced to print the |
| 463 | message body of a commit, and various tests have been updated to use |
| 464 | it instead of spelling out the command pipeline manually and losing |
| 465 | the exit status of the 'git cat-file' command on the upstream of the |
| 466 | pipe. |
| 467 | |
| 468 | Will merge to 'master'. |
| 469 | cf. <xmqqpl05o5n7.fsf@gitster.g> |
| 470 | source: <20260727095656.75496-1-diy2903@gmail.com> |
| 471 | |
| 472 | |
| 473 | * jk/cat-file-batch-wo-type-fix (2026-07-28) 1 commit |
| 474 | (merged to 'next' on 2026-07-31 at 2d67bd3ccf) |
| 475 | + cat-file: handle content request for --batch-command without type |
| 476 | |
| 477 | 'git cat-file --batch-command' that asked for 'contents' without |
| 478 | 'type' segfaults, which has been corrected. |
| 479 | |
| 480 | Will merge to 'master'. |
| 481 | cf. <xmqqjyqfdnie.fsf@gitster.g> |
| 482 | source: <20260728150031.GA41931@coredump.intra.peff.net> |
| 483 | |
| 484 | |
| 485 | * tc/merge-default-to-upstream-leakfix (2026-07-28) 1 commit |
| 486 | (merged to 'next' on 2026-07-31 at b10497d8a4) |
| 487 | + merge: fix leak with merge.defaultToUpstream |
| 488 | |
| 489 | A memory leak in 'git merge' when run without arguments (which |
| 490 | triggers the default-to-upstream path) has been fixed. A test has |
| 491 | been added to cover this case. |
| 492 | |
| 493 | Will merge to 'master'. |
| 494 | cf. <20260728151959.GC41931@coredump.intra.peff.net> |
| 495 | cf. <xmqqfr13dlv8.fsf@gitster.g> |
| 496 | source: <20260728-toon-fix-merge-leak-v1-1-d6bd161a3acf@iotcl.com> |
| 497 | |
| 498 | |
| 499 | * cl/regexec-macos-leak (2026-07-28) 2 commits |
| 500 | - SQUASH??? |
| 501 | - regexec: work around macOS TRE leak on invalid UTF-8 |
| 502 | |
| 503 | A compatibility workaround has been introduced for macOS to address |
| 504 | a memory leak in the system regex engine when it encounters invalid |
| 505 | multibyte sequences. The workaround segments the input buffer at |
| 506 | invalid byte boundaries and searches each valid segment separately |
| 507 | using regexec(), avoiding the leaking path. |
| 508 | |
| 509 | Waiting for response. |
| 510 | cf. <xmqqse52bpa9.fsf@gitster.g> |
| 511 | source: <20260728052538.12429-1-chungmin@chungminlee.com> |
| 512 | |
| 513 | |
| 514 | * dl/pack-bitmap-position-zero (2026-07-28) 1 commit |
| 515 | (merged to 'next' on 2026-07-31 at b200bed995) |
| 516 | + pack-bitmap: handle objects at bitmap position zero |
| 517 | |
| 518 | A boundary case check in reachability bitmap traversal has been |
| 519 | corrected to properly handle the object at position zero, which was |
| 520 | previously skipped, leading to redundant bitmap loading. |
| 521 | |
| 522 | Will merge to 'master'. |
| 523 | cf. <amk75SuhyHBbx-E8@com-79390> |
| 524 | cf. <xmqq5x1yd968.fsf@gitster.g> |
| 525 | source: <20260728135248.61304-1-davidlin@stripe.com> |
| 526 | |
| 527 | |
| 528 | * hn/checkout-m-autostash-refine (2026-07-25) 2 commits |
| 529 | - checkout -m: refine autostash fallback |
| 530 | - sequencer: teach autostash apply to report conflicts |
| 531 | |
| 532 | The autostash fallback in 'git checkout -m' has been refined to only |
| 533 | retry when there are local changes. Additionally, a blank line now |
| 534 | visually separates autostash conflict advice from the subsequent |
| 535 | branch-switch message. |
| 536 | |
| 537 | Needs review. |
| 538 | cf. <xmqqwluebuhb.fsf@gitster.g> |
| 539 | source: <pull.2364.git.git.1784993669.gitgitgadget@gmail.com> |
| 540 | |
| 541 | |
| 542 | * jk/t0014-dynamic-deprecated-cmds (2026-07-28) 2 commits |
| 543 | (merged to 'next' on 2026-07-29 at 39a86632e6) |
| 544 | + t0014: generate deprecated command names dynamically |
| 545 | + t0014: factor out choice of deprecated commands |
| 546 | |
| 547 | The alias tests in 't/t0014-alias.sh' have been updated to dynamically |
| 548 | query the list of deprecated commands using 'git |
| 549 | --list-cmds=deprecated' to avoid test failures when running with |
| 550 | 'WITH_BREAKING_CHANGES' in a build directory that contains stale |
| 551 | executables of formerly deprecated commands. |
| 552 | |
| 553 | Will merge to 'master'. |
| 554 | source: <20260728143653.GB11894@coredump.intra.peff.net> |
| 555 | |
| 556 | |
| 557 | * js/mingw-symlink-net-share-leak (2026-07-28) 1 commit |
| 558 | (merged to 'next' on 2026-07-29 at 250fe7f194) |
| 559 | + mingw: skip symlink type auto-detection for network share targets |
| 560 | |
| 561 | Git for Windows has been updated to avoid auto-detecting the symlink |
| 562 | type if the target path starts with a slash, preventing NTLM |
| 563 | credential leaks when checking out repositories with crafted |
| 564 | symbolic links pointing to network shares. |
| 565 | |
| 566 | Will merge to 'master'. |
| 567 | source: <pull.2189.git.1785239196007.gitgitgadget@gmail.com> |
| 568 | |
| 569 | |
| 570 | * ns/merge-base-is-ancestor-tests (2026-07-29) 1 commit |
| 571 | (merged to 'next' on 2026-08-03 at cf2c4e00eb) |
| 572 | + merge-base: add tests for --is-ancestor |
| 573 | |
| 574 | Tests for 'git merge-base --is-ancestor' have been added to cover |
| 575 | exit codes (0 for success, 1 for non-ancestor, 128 for errors) and |
| 576 | to ensure it cannot be combined with '--all'. |
| 577 | |
| 578 | Will merge to 'master'. |
| 579 | cf. <xmqq8q6slb2t.fsf@gitster.g> |
| 580 | source: <pull.2186.v2.git.1785392350660.gitgitgadget@gmail.com> |
| 581 | |
| 582 | |
| 583 | * jc/add-resolved (2026-07-31) 4 commits |
| 584 | - add: introduce '--resolved' option |
| 585 | - read-cache: add remove_file_from_index_with_flags() |
| 586 | - merge-ll: consolidate conflict marker scanning logic |
| 587 | - read-cache: reindent |
| 588 | |
| 589 | 'git add' has been taught a new '--resolved' option to stage |
| 590 | conflict-resolved paths, while leaving unrelated local changes |
| 591 | unstaged. It scans the unmerged paths for leftover conflict |
| 592 | markers and aborts if any are found. |
| 593 | |
| 594 | Will merge to 'next'? |
| 595 | cf. <20260801141414.GD2041176@coredump.intra.peff.net> |
| 596 | source: <20260731125605.3638938-1-gitster@pobox.com> |
| 597 | |
| 598 | |
| 599 | * tb/pack-with-duplicates (2026-07-24) 5 commits |
| 600 | - pack-bitmap: handle duplicate pack entries during MIDX reuse |
| 601 | - test-tool bitmap: reject packs with duplicate objects |
| 602 | - midx: verify duplicate pack entries by OID and offset |
| 603 | - packfile: recover delta cycles through duplicate entries |
| 604 | - t5308: test reverse indexes with duplicate objects |
| 605 | |
| 606 | The handling of packfiles with duplicate object entries has been |
| 607 | hardened. Specifically, reverse index lookup, delta cycle |
| 608 | recovery, multi-pack-index verification, and pack reuse paths have |
| 609 | been updated to correctly handle or gracefully reject duplicate |
| 610 | entries. |
| 611 | |
| 612 | Needs review. |
| 613 | cf. <xmqqecgs3vg6.fsf@gitster.g> |
| 614 | source: <cover.1784927134.git.ttaylorr@openai.com> |
| 615 | |
| 616 | |
| 617 | * ps/cat-file-remote-object-info-type (2026-08-03) 9 commits |
| 618 | - cat-file: unify default format |
| 619 | - serve: advertise type capability |
| 620 | - fetch-object-info: parse type from server response |
| 621 | - protocol-caps: add type support to object-info |
| 622 | - fetch-object-info: use dedicated struct for the results |
| 623 | - fetch-object-info: pass arguments directly instead of a struct |
| 624 | - fetch-object-info: detect truncated server responses |
| 625 | - t5701: use test_file_size() to get the size of a file |
| 626 | - Merge branch 'ps/cat-file-remote-object-info' into ps/cat-file-remote-object-info-type |
| 627 | |
| 628 | The 'remote-object-info' command for 'git cat-file --batch-command' |
| 629 | has been extended to support the '%(objecttype)' placeholder. |
| 630 | |
| 631 | Needs review. |
| 632 | source: <20260803-objecttype-support-v3-0-7176fecf7950@gmail.com> |
| 633 | |
| 634 | |
| 635 | * rs/branch-delete-bisect-warning (2026-07-25) 1 commit |
| 636 | (merged to 'next' on 2026-07-28 at c0e15e73b6) |
| 637 | + branch: report active bisect run when rejecting delete |
| 638 | |
| 639 | 'git branch -d' has been taught to report when a branch cannot be |
| 640 | deleted because it is being used in an active bisect run. |
| 641 | |
| 642 | Will merge to 'master'. |
| 643 | cf. <xmqqbjbtyd80.fsf@gitster.g> |
| 644 | cf. <871pcndynd.fsf@emacs.iotcl.com> |
| 645 | source: <590382fb-731b-4e14-911e-ff68356d1082@web.de> |
| 646 | |
| 647 | |
| 648 | * jk/ci-static-analysis-image-bump (2026-07-26) 2 commits |
| 649 | (merged to 'next' on 2026-07-29 at 457a175861) |
| 650 | + ci: bump ubuntu image version for static-analysis job |
| 651 | + bloom: silence CHECK_ASSERTION_SIDE_EFFECTS false positive |
| 652 | |
| 653 | The image version used by the static-analysis CI job has been bumped |
| 654 | to ubuntu-latest (Ubuntu 24.04), which brings in a newer Coccinelle |
| 655 | version that resolves a severe performance regression. A false |
| 656 | positive warning from the 'CHECK_ASSERTION_SIDE_EFFECTS' build with |
| 657 | GCC 15 in the Bloom filter code has also been silenced to facilitate |
| 658 | the image upgrade. |
| 659 | |
| 660 | Will merge to 'master'. |
| 661 | cf. <xmqqo6ftvhed.fsf@gitster.g> |
| 662 | source: <20260726083254.GA3528497@coredump.intra.peff.net> |
| 663 | |
| 664 | |
| 665 | * jk/diff-relative-cached-unmerged-more (2026-07-26) 3 commits |
| 666 | (merged to 'next' on 2026-07-30 at d8636bd744) |
| 667 | + diff-lib: skip paths outside prefix in oneway_diff() |
| 668 | + diff-lib: drop stale comment about advancing o->pos |
| 669 | + Merge branch 'jk/diff-relative-cached-unmerged' into jk/diff-relative-cached-unmerged-more |
| 670 | (this branch uses jk/diff-relative-cached-unmerged.) |
| 671 | |
| 672 | The code path that deals with relative paths in the diff-lib has |
| 673 | been cleaned up. |
| 674 | |
| 675 | Will merge to 'master'. |
| 676 | cf. <xmqqo6frdqy5.fsf@gitster.g> |
| 677 | cf. <20260728171249.GA643101@coredump.intra.peff.net> |
| 678 | source: <20260726084550.GC2366012@coredump.intra.peff.net> |
| 679 | |
| 680 | |
| 681 | * lo/mv-missing-dest-dir-check (2026-07-30) 2 commits |
| 682 | (merged to 'next' on 2026-08-03 at 7643cf1c2a) |
| 683 | + mv: reject a destination whose leading path is missing or a symlink |
| 684 | + mv: name both source and destination when rename fails |
| 685 | |
| 686 | 'git mv' has been updated to check for a missing destination |
| 687 | leading directory during the checking phase, allowing 'git mv -n' |
| 688 | to report the failure. The error message when the rename(2) |
| 689 | syscall fails has also been improved to name both the source and |
| 690 | the destination. |
| 691 | |
| 692 | Will merge to 'master'. |
| 693 | cf. <xmqqtspgjkwb.fsf@gitster.g> |
| 694 | source: <pull.2356.v5.git.git.1785410884.gitgitgadget@gmail.com> |
| 695 | |
| 696 | |
| 697 | * ps/odb-make-creation-pluggable (2026-07-23) 5 commits |
| 698 | - odb: make creation of on-disk structures pluggable |
| 699 | - odb/source: introduce function to map source type to name |
| 700 | - setup: defer object database creation |
| 701 | - setup: detangle loading of loose object maps |
| 702 | - loose: load loose object map for the correct source |
| 703 | |
| 704 | The creation of the on-disk data structures for the object database |
| 705 | has been made pluggable, allowing future backends to customize their |
| 706 | setup. As part of this, the initialization of the object database |
| 707 | has been deferred, and the loading of the loose-object map has been |
| 708 | detangled from repository initialization. |
| 709 | |
| 710 | Waiting for response. |
| 711 | cf. <87pl04d03q.fsf@emacs.iotcl.com> |
| 712 | source: <20260724-pks-odb-create-on-disk-v1-0-3b3d265d979b@pks.im> |
| 713 | |
| 714 | |
| 715 | * hs/rebase-continue-edit (2026-07-21) 1 commit |
| 716 | - rebase: add --[no-]edit to --continue |
| 717 | |
| 718 | Support for skipping the editor when continuing a rebase after |
| 719 | conflict resolution has been added with the '--no-edit' option, and |
| 720 | forcing it with '--edit'. A new configuration variable |
| 721 | 'rebase.noEdit' can be used to set the default behavior. |
| 722 | |
| 723 | Waiting for a response. |
| 724 | cf. <xmqqldb4xlqa.fsf@gitster.g> |
| 725 | cf. <db7edc66-9b2a-47bc-98db-87d01885cef0@gmail.com> |
| 726 | source: <20260721140443.1809379-2-hugo@hsal.es> |
| 727 | |
| 728 | |
| 729 | * td/fsmonitor-darwin-cookie-flush (2026-07-21) 1 commit |
| 730 | - fsmonitor: flush pending FSEvents before cookie wait |
| 731 | |
| 732 | The 'fsmonitor' daemon on macOS has been updated to flush pending |
| 733 | FSEvents before waiting for the cookie file, to avoid premature |
| 734 | timeouts on busy systems. |
| 735 | |
| 736 | Waiting for response. |
| 737 | cf. <CAOTNsDy4pKbPHdK1T688Ax6Mgz15K-qfZR-8fAvTk48z3E43Rg@mail.gmail.com> |
| 738 | source: <20260721-fsmonitor-darwin-cookie-flush-v1-1-357dc5e32040@gmail.com> |
| 739 | |
| 740 | |
| 741 | * sn/rebase-update-refs-symrefs (2026-07-22) 2 commits |
| 742 | - rebase: guard non-branch symref targets |
| 743 | - rebase: skip branch symref aliases |
| 744 | |
| 745 | 'git rebase --update-refs' has been taught to resolve local branch |
| 746 | symrefs to their referents before queuing updates, ensuring aliases of |
| 747 | the current branch are skipped and duplicate updates are avoided to |
| 748 | prevent failures when branch aliases are present. |
| 749 | |
| 750 | Waiting for response. |
| 751 | cf. <0844b4e0-679b-4c0a-bea1-5779b4d0489d@gmail.com> |
| 752 | source: <pull.2126.v3.git.1784708107.gitgitgadget@gmail.com> |
| 753 | |
| 754 | |
| 755 | * ja/doc-synopsis-style-yet-more (2026-07-23) 4 commits |
| 756 | (merged to 'next' on 2026-08-03 at c744bba04e) |
| 757 | + doc: convert git-request-pull synopsis and options to new style |
| 758 | + doc: convert git-send-email synopsis and options to new style |
| 759 | + doc: convert git-format-patch synopsis and options to new style |
| 760 | + doc: convert git-imap-send synopsis and options to new style |
| 761 | |
| 762 | Synopsis and options in the documentation for 'git format-patch', |
| 763 | 'git imap-send', 'git send-email', and 'git request-pull' have been |
| 764 | updated to the modern style. |
| 765 | |
| 766 | Will merge to 'master'. |
| 767 | cf. <xmqqldato56l.fsf@gitster.g> |
| 768 | source: <pull.2185.v2.git.1784841567.gitgitgadget@gmail.com> |
| 769 | |
| 770 | |
| 771 | * kj/repo-info-more-path-keys (2026-07-26) 7 commits |
| 772 | - repo: add path.git-prefix path key |
| 773 | - repo: add path.grafts with absolute and relative suffix formatting |
| 774 | - repo: add path.index with absolute and relative suffix formatting |
| 775 | - repo: add path.hooks with absolute and relative suffix formatting |
| 776 | - repo: add path.objects with absolute and relative suffix formatting |
| 777 | - repo: add path.superproject-working-tree with absolute and relative suffixes |
| 778 | - repo: add path.toplevel with absolute and relative suffix formatting |
| 779 | |
| 780 | The 'git repo info' command has been taught more keys to output |
| 781 | paths of various repository components (such as the working tree |
| 782 | root, superproject working tree, object database, etc.), supporting |
| 783 | both absolute and relative path formats. |
| 784 | |
| 785 | Expecting a reroll. |
| 786 | cf. <CA+rGoLfJ5Kc_HV7YfJ-y5SpMjb7t7f5ifUKcd=39eTjqzzQF5w@mail.gmail.com> |
| 787 | source: <20260726104343.16933-1-jayatheerthkulkarni2005@gmail.com> |
| 788 | |
| 789 | |
| 790 | * pw/rebase-fixup-fixes (2026-07-26) 2 commits |
| 791 | (merged to 'next' on 2026-07-28 at 736307fae5) |
| 792 | + rebase: remember fixup -c after skipping fixup/squash |
| 793 | + rebase -i: fix counting of fixups after rebase --skip |
| 794 | |
| 795 | Two bugs in how 'git rebase' handles skipped 'fixup' and 'squash' |
| 796 | commands have been fixed. One bug caused an incorrect commit count to |
| 797 | be shown in the template message when multiple commands were skipped, |
| 798 | and another prevented the editor from opening when the final command |
| 799 | in a chain containing 'fixup -c' was skipped. |
| 800 | |
| 801 | Will merge to 'master'. |
| 802 | cf. <xmqqtspo3x31.fsf@gitster.g> |
| 803 | cf. <xmqqse55tp1k.fsf@gitster.g> |
| 804 | source: <cover.1785080337.git.phillip.wood@dunelm.org.uk> |
| 805 | |
| 806 | |
| 807 | * tc/last-modified-bloom (2026-07-17) 4 commits |
| 808 | - last-modified: keep per-path Bloom filters for wildcard pathspecs |
| 809 | - last-modified: check pathspec against Bloom filter first |
| 810 | - revision: expose check for paths maybe changed in Bloom filter |
| 811 | - revision: move bloom keyvec precondition into function |
| 812 | |
| 813 | The 'git last-modified' command has been optimized by using Bloom |
| 814 | filters. It now reuses revision walk filtering logic from 'git log' |
| 815 | to pre-filter commits, and maintains per-path Bloom filters even when |
| 816 | wildcard pathspecs are used. |
| 817 | |
| 818 | Expecting a reroll. |
| 819 | cf. <87cxwl1lb4.fsf@emacs.iotcl.com> |
| 820 | source: <20260717-toon-speed-up-last-modified-v1-0-410418f18614@iotcl.com> |
| 821 | |
| 822 | |
| 823 | * hn/bisect-reset-when-found (2026-08-02) 2 commits |
| 824 | - bisect: add --reset-when-found to leave when done |
| 825 | - bisect: let bisect_reset() optionally check out quietly |
| 826 | |
| 827 | The 'git bisect' command has been taught a |
| 828 | '--reset-when-found[=<where>]' option that tells the command to |
| 829 | automatically run 'git bisect reset' to jump back to the original |
| 830 | state or to the found culprit. |
| 831 | |
| 832 | Waiting for a response. |
| 833 | cf. <xmqqjyq812wr.fsf@gitster.g> |
| 834 | source: <pull.2335.v6.git.git.1785705860.gitgitgadget@gmail.com> |
| 835 | |
| 836 | |
| 837 | * js/coverity-unchecked-returns-fix (2026-07-14) 11 commits |
| 838 | - bisect: handle dup() failure when redirecting stdout |
| 839 | - bisect: check get_terms return at all call sites |
| 840 | - bisect: check strbuf_getline_lf return when reading terms |
| 841 | - transport-helper: warn when export-marks file cannot be finalized |
| 842 | - transport-helper: check dup() return in get_exporter |
| 843 | - compat/pread: check initial lseek for errors |
| 844 | - last-modified: handle repo_parse_commit() failures |
| 845 | - reftable tests: check reftable_table_init_ref_iterator() return |
| 846 | - reftable/block: check deflateInit() return value |
| 847 | - config: propagate launch_editor() failure in show_editor() |
| 848 | - http: die on curl_easy_duphandle failure in get_active_slot |
| 849 | |
| 850 | A handful of code paths have been corrected to check return values |
| 851 | from functions like curl_easy_duphandle(), deflateInit(), lseek(), |
| 852 | dup(), and strbuf_getline_lf(), resolving several Coverity warnings |
| 853 | about unchecked returns. |
| 854 | |
| 855 | Waiting for response. |
| 856 | cf. <xmqqh5lui6wg.fsf@gitster.g> |
| 857 | cf. <xmqqcxwii6wd.fsf@gitster.g> |
| 858 | cf. <alcvnm0xiOv5W0w_@pks.im> |
| 859 | source: <pull.2179.git.1784069325.gitgitgadget@gmail.com> |
| 860 | |
| 861 | |
| 862 | * jk/diff-relative-cached-unmerged (2026-07-28) 2 commits |
| 863 | (merged to 'next' on 2026-07-28 at 1ac873b5f9) |
| 864 | + diff-lib: add idx/tree sanity check to oneway_diff |
| 865 | (merged to 'next' on 2026-07-25 at 8829f9b348) |
| 866 | + diff: ignore unmerged paths outside prefix with --relative --cached |
| 867 | (this branch is used by jk/diff-relative-cached-unmerged-more.) |
| 868 | |
| 869 | 'git diff --relative' running with '--cached' has been corrected to |
| 870 | avoid a segfault when encountering unmerged paths outside the |
| 871 | prefix. |
| 872 | |
| 873 | Will merge to 'master'. |
| 874 | source: <20260728151458.GB41931@coredump.intra.peff.net> |
| 875 | |
| 876 | |
| 877 | * ds/trace2-tolerate-failed-timestamp (2026-07-15) 1 commit |
| 878 | - trace2: tolerate failed timestamp formatting |
| 879 | |
| 880 | The 'trace2' telemetry library has been updated to tolerate failures |
| 881 | from system calls like gettimeofday() and datetime formatting |
| 882 | functions, replacing potential program crashes with blank placeholder |
| 883 | timestamps in the traces. |
| 884 | |
| 885 | Expecting a reroll. |
| 886 | cf. <alpXW5U6sndZtgqV@com-79390> |
| 887 | cf. <fbb118df-7c82-49a5-90bb-4458b7e9a850@gmail.com> |
| 888 | cf. <xmqqpl03cfua.fsf@gitster.g> |
| 889 | source: <pull.2178.git.1784131932489.gitgitgadget@gmail.com> |
| 890 | |
| 891 | |
| 892 | * mm/revision-pure-get-commit-action (2026-07-15) 1 commit |
| 893 | (merged to 'next' on 2026-07-31 at ae6730749f) |
| 894 | + revision: make get_commit_action() a pure predicate |
| 895 | |
| 896 | The get_commit_action() function has been refactored to be a pure |
| 897 | predicate by moving the side-effecting line-level log range folding to |
| 898 | simplify_commit(). This ensures that evaluating a commit's action |
| 899 | before the walk reaches it does not prematurely mutate its tracked |
| 900 | line ranges, making it safer for potential lookahead evaluations. |
| 901 | |
| 902 | Will merge to 'master'. |
| 903 | cf. <xmqq8q6wpmuy.fsf@gitster.g> |
| 904 | source: <pull.2169.git.1784143793613.gitgitgadget@gmail.com> |
| 905 | |
| 906 | |
| 907 | * cc/fast-import-usage (2026-07-16) 7 commits |
| 908 | - fast-import: use struct option for usage string |
| 909 | - fast-import: move command state globals into 'struct fast_import_state' |
| 910 | - fast-import: introduce 'struct fast_import_state' |
| 911 | - fast-import: localize 'i' into the 'for' loops using it |
| 912 | - api-parse-options.adoc: document hidden and OPT_*_F option macros |
| 913 | - api-parse-options.adoc: document per-option flags |
| 914 | - parse-options: introduce OPT_HIDDEN_GROUP |
| 915 | |
| 916 | The usage string of 'git fast-import' has been updated to use the |
| 917 | parse_options() API for displaying help, and its SYNOPSIS in the |
| 918 | documentation has been standardized to match. |
| 919 | |
| 920 | Waiting for response. |
| 921 | cf. <xmqq4ihyehyb.fsf@gitster.g> |
| 922 | source: <20260716165517.433849-1-christian.couder@gmail.com> |
| 923 | |
| 924 | |
| 925 | * ps/writev (2026-07-16) 5 commits |
| 926 | - fast-import: use writev(3p) to send cat-blob responses |
| 927 | - sideband: use writev(3p) to send pktlines |
| 928 | - wrapper: properly handle MAX_IO_SIZE in writev(3p) |
| 929 | - wrapper: introduce writev(3p) wrappers |
| 930 | - compat/posix: introduce writev(3p) wrapper |
| 931 | |
| 932 | A compatibility wrapper for writev(3p) has been reintroduced, |
| 933 | including fixes for CMake build and 'MAX_IO_SIZE' limits on NonStop. |
| 934 | Calls to write(3p) in send_sideband() and cat_blob() have been |
| 935 | refactored to use writev(3p) wrappers to reduce syscall overhead. |
| 936 | |
| 937 | Waiting for response. |
| 938 | cf. <f8050598-392f-44c9-8d66-0454740a7a12@kdbg.org> |
| 939 | cf. <xmqqo6fso2s8.fsf@gitster.g> |
| 940 | source: <20260716-pks-reintroduce-writev-v1-0-ea9038c884bc@pks.im> |
| 941 | |
| 942 | |
| 943 | * tb/send-pack-no-ref-delta (2026-07-12) 4 commits |
| 944 | - send-pack: honor `no-ref-delta` capability |
| 945 | - pack-objects: support reuse with `--no-ref-delta` |
| 946 | - pack-objects: introduce `--no-ref-delta` |
| 947 | - t/helper: teach pack-deltas to list delta entries |
| 948 | |
| 949 | 'git send-pack' has been taught to refrain from sending 'REF_DELTA' |
| 950 | encoded packfiles when the other side asks it to. |
| 951 | |
| 952 | Needs review. |
| 953 | source: <alQ7WKITYDXfiVn9@com-79390> |
| 954 | |
| 955 | |
| 956 | * tn/packfile-uri-concurrency (2026-07-26) 6 commits |
| 957 | - fetch-pack: accept "pack" output for packfile URIs |
| 958 | - http: permit unlinking partial packs on Windows |
| 959 | - http: avoid concurrent appends to partial packs |
| 960 | - http: accept HTTP 416 for complete partial packs |
| 961 | - http: avoid closing index-pack input twice |
| 962 | - http-fetch: correct --index-pack-arg documentation |
| 963 | |
| 964 | Concurrent downloads of packfiles via packfile URIs and dumb HTTP have |
| 965 | been made safer by avoiding concurrent appends to the staging file. |
| 966 | Opening the file in read-write mode and maintaining separate file |
| 967 | offsets prevents corruption while preserving resumability. The |
| 968 | 'fetch-pack' command has also been updated to tolerate pre-existing |
| 969 | '.keep' files. |
| 970 | |
| 971 | Will merge to 'next'? |
| 972 | cf. <20260801135313.GA2041176@coredump.intra.peff.net> |
| 973 | source: <cover.1785111375.git.tnyman@openai.com> |
| 974 | |
| 975 | |
| 976 | * js/pack-objects-delta-size-t (2026-07-09) 12 commits |
| 977 | - git-zlib: widen `git_deflate_bound()` to `size_t` |
| 978 | - t/helper/test-pack-deltas: widen `do_compress()`'s maxsize local to `size_t` |
| 979 | - http-push: widen `start_put()`'s size local from `ssize_t` to `size_t` |
| 980 | - diff: widen `deflate_it()`'s bound local from int to `size_t` |
| 981 | - archive-zip: widen `zlib_deflate_raw()`'s maxsize local to `size_t` |
| 982 | - packfile, git-zlib: widen `use_pack()` and zstream avail fields to `size_t` |
| 983 | - delta: widen `create_delta()` and `diff_delta()` to `size_t` |
| 984 | - pack-objects: widen `mem_usage` and `try_delta()`'s out-param to `size_t` |
| 985 | - pack-objects: widen `free_unpacked()` return to `size_t` |
| 986 | - pack-objects: widen delta-cache accounting to `size_t` |
| 987 | - delta: widen `create_delta_index()` parameter to `size_t` |
| 988 | - diff-delta: widen `struct delta_index`' size fields to `size_t` |
| 989 | |
| 990 | The 'pack-objects' and delta-encoding code paths have been updated to |
| 991 | use 'size_t' instead of 'unsigned long' for object sizes and offset |
| 992 | limits, avoiding potential truncation issues on 64-bit Windows. |
| 993 | |
| 994 | Needs review. |
| 995 | source: <pull.2175.git.1783615780.gitgitgadget@gmail.com> |
| 996 | |
| 997 | |
| 998 | * pz/fetch-submodule-errors-config (2026-07-16) 2 commits |
| 999 | - fetch: add fetch.submoduleErrors to make submodule fetch errors non-fatal |
| 1000 | - submodule: fix premature failure in recursive submodule fetch |
| 1001 | |
| 1002 | The 'git fetch' command has been updated to allow configuring how |
| 1003 | submodule fetch errors are handled. A new configuration variable |
| 1004 | 'fetch.submoduleErrors' and a corresponding '--submodule-errors' |
| 1005 | command-line option have been introduced, allowing users to make |
| 1006 | submodule fetch errors non-fatal (warn instead of fail). |
| 1007 | Additionally, a premature failure during recursive submodule fetches |
| 1008 | has been fixed by deferring the error until the OID-based retry phase |
| 1009 | also fails. |
| 1010 | |
| 1011 | Needs review. |
| 1012 | cf. <xmqq7bmwm5g6.fsf@gitster.g> |
| 1013 | source: <20260716140956.1023740-1-paulius.zaleckas@gmail.com> |
| 1014 | |
| 1015 | |
| 1016 | * gr/add-e-use-apply-api (2026-07-10) 1 commit |
| 1017 | - builtin/add.c: replace run_command() with direct apply_all_patches() call |
| 1018 | |
| 1019 | The application of the edited patch in 'git add -e' has been |
| 1020 | refactored to use the internal apply API directly, avoiding the need |
| 1021 | to spawn a 'git apply' subprocess. |
| 1022 | |
| 1023 | Needs review. |
| 1024 | cf. <xmqq8q6to4em.fsf@gitster.g> |
| 1025 | source: <20260711061246.58079-1-gatlavishweshwarreddy26@gmail.com> |
| 1026 | |
| 1027 | |
| 1028 | * fz/rebase-autosquash-empty (2026-07-11) 1 commit |
| 1029 | . sequencer: honor --empty when a fixup!/squash! empties its target |
| 1030 | |
| 1031 | A commit that is emptied by melding a 'fixup!' or 'squash!' commit |
| 1032 | during 'git rebase --autosquash' is now handled according to the |
| 1033 | '--empty' option, allowing it to be dropped, kept, or to halt the |
| 1034 | rebase. |
| 1035 | |
| 1036 | Ejected due to conflicts with 'pw/rebase-drop-notes-with-commit'. |
| 1037 | |
| 1038 | Waiting for response. |
| 1039 | cf. <690b965e-5f07-4aa4-a64c-96e60a86d73b@gmail.com> |
| 1040 | cf. <xmqqh5m494yh.fsf@gitster.g> |
| 1041 | source: <20260711-fz-autosquash-empty-v3-1-d227b63eb511@gmail.com> |
| 1042 | |
| 1043 | |
| 1044 | * mm/lib-httpd-cgi-safe (2026-07-10) 3 commits |
| 1045 | - t/README: document writing concurrency-safe helpers |
| 1046 | - t/lib-httpd: make http-429 first-request check atomic |
| 1047 | - t/lib-httpd: fix apply-one-time-script race under concurrent requests |
| 1048 | |
| 1049 | CGI helper scripts used by HTTP-related test scripts have been updated |
| 1050 | to use atomic filesystem operations, preventing race conditions when |
| 1051 | Apache handles concurrent requests. |
| 1052 | |
| 1053 | Needs review. |
| 1054 | cf. <CAC2QwmLWkk4JS2XKLdj4i4CAtr7zZo=9tV_=pPQ77zR+R=pGUw@mail.gmail.com> |
| 1055 | source: <pull.2171.v2.git.1783704657.gitgitgadget@gmail.com> |
| 1056 | |
| 1057 | |
| 1058 | * ps/odb-pluggable-housekeeping (2026-07-12) 12 commits |
| 1059 | (merged to 'next' on 2026-07-28 at 1e622f0e29) |
| 1060 | + odb: make optimizations pluggable |
| 1061 | + builtin/gc: fix signedness issues in ODB-related functionality |
| 1062 | + builtin/gc: refactor ODB optimizations to operate on "files" source |
| 1063 | + builtin/gc: introduce `odb_optimize_required()` |
| 1064 | + builtin/gc: move geometric repacking into `odb_optimize()` |
| 1065 | + builtin/gc: introduce object database optimization options |
| 1066 | + builtin/gc: inline config values specific to the "files" backend |
| 1067 | + builtin/gc: make repack arguments self-contained |
| 1068 | + builtin/gc: extract object database optimizations into separate function |
| 1069 | + builtin/gc: move worktree and rerere tasks before object optimizations |
| 1070 | + odb: run "pre-auto-gc" hook for all maintenance tasks |
| 1071 | + t7900: simplify how we check for maintenance tasks |
| 1072 | |
| 1073 | Object database housekeeping in 'git gc' and 'git maintenance' has |
| 1074 | been refactored to be pluggable. The files-backend-specific logic, |
| 1075 | including incremental and geometric repacking as well as object |
| 1076 | pruning, has been moved out of the command implementation and into the |
| 1077 | files object database source, enabling future alternative object |
| 1078 | database backends to implement their own housekeeping services. |
| 1079 | |
| 1080 | Will merge to 'master'. |
| 1081 | cf. <xmqqh5m2yhkm.fsf@gitster.g> |
| 1082 | source: <20260713-b4-pks-odb-optimize-v2-0-9c2c3ee94b38@pks.im> |
| 1083 | |
| 1084 | |
| 1085 | * ds/sparse-index-ita-crash (2026-07-06) 1 commit |
| 1086 | (merged to 'next' on 2026-07-31 at 21b8a5bc05) |
| 1087 | + sparse-index: avoid crash on intent-to-add entry outside the cone |
| 1088 | |
| 1089 | A crash in the 'sparse-index' collapse code when encountering an |
| 1090 | invalidated cache-tree node (due to an intent-to-add path) has been |
| 1091 | fixed by avoiding collapsing such subtrees. |
| 1092 | |
| 1093 | Will merge to 'master'. |
| 1094 | cf. <xmqq33x1o465.fsf@gitster.g> |
| 1095 | source: <pull.2167.git.1783345853272.gitgitgadget@gmail.com> |
| 1096 | |
| 1097 | |
| 1098 | * ij/subtree-reject-v2-config (2026-07-06) 2 commits |
| 1099 | - git-subtree: Bail out if we find output from Rust rewrite (test) |
| 1100 | - git-subtree: Bail out if we find output from Rust rewrite |
| 1101 | |
| 1102 | The shell script implementation of 'git subtree' has been updated to |
| 1103 | check for the presence of the configuration file of the new Rust |
| 1104 | implementation, preventing users from accidentally running the old |
| 1105 | script on repositories already managed by the new tool. |
| 1106 | |
| 1107 | Expecting a reroll. |
| 1108 | cf. <27219.20156.438730.881821@chiark.greenend.org.uk> |
| 1109 | source: <20260706115816.20267-1-ijackson@chiark.greenend.org.uk> |
| 1110 | |
| 1111 | |
| 1112 | * jm/t0213-skip-emulated-ancestry-tests (2026-07-06) 1 commit |
| 1113 | - t0213: skip ancestry tests under user-mode emulation |
| 1114 | |
| 1115 | The 'TRACE2_ANCESTRY' prerequisite in the 't0213' test script has been |
| 1116 | refined to avoid failures under user-mode emulation by verifying that |
| 1117 | the ancestry collector reports the expected process names rather than |
| 1118 | the emulator binary name. |
| 1119 | |
| 1120 | Needs review. |
| 1121 | cf. <xmqq33xcz2i7.fsf@gitster.g> |
| 1122 | source: <pull.2168.git.1783359242130.gitgitgadget@gmail.com> |
| 1123 | |
| 1124 | |
| 1125 | * zy/apply-abandoned-header-fix (2026-07-01) 1 commit |
| 1126 | - apply: avoid leaking abandoned git-header state |
| 1127 | |
| 1128 | A candidate 'git diff' header parsed by 'git apply' has been isolated |
| 1129 | in a temporary structure, preventing any partially parsed state from |
| 1130 | polluting the main patch structure and causing assertions to trip if |
| 1131 | the header is ultimately rejected. |
| 1132 | |
| 1133 | Needs review. |
| 1134 | source: <20260702041759.51572-1-zhihao.yao@njit.edu> |
| 1135 | |
| 1136 | |
| 1137 | * ps/libgit-in-subdir (2026-07-12) 3 commits |
| 1138 | . Move libgit.a sources into separate "lib/" directory |
| 1139 | . t/helper: prepare "test-example-tap.c" for introduction of "lib/" |
| 1140 | . Merge branch 'ps/odb-source-packed' into ps/libgit-in-subdir |
| 1141 | |
| 1142 | The source files for 'libgit.a' have been moved into a new 'lib/' |
| 1143 | directory to clean up the top-level directory and clearly separate |
| 1144 | library code. |
| 1145 | |
| 1146 | Ejected for now, as it causes too many evil merges with other topics. |
| 1147 | |
| 1148 | Waiting for response, stalled. |
| 1149 | cf. <xmqqqzkx9t95.fsf@gitster.g> |
| 1150 | cf. <al6yCTDjBRn2HGq0@com-79390> |
| 1151 | source: <20260713-pks-libgit-in-subdir-v4-0-696240876eb1@pks.im> |
| 1152 | |
| 1153 | |
| 1154 | * mm/line-log-limited-ops (2026-06-27) 7 commits |
| 1155 | - diffcore-pickaxe: scope -G to the -L tracked range |
| 1156 | - diff: support --check with -L line ranges |
| 1157 | - line-log: support diff stat formats with -L |
| 1158 | - diff: extract a line-range diff helper for reuse |
| 1159 | - diff: emit -L hunk headers via xdiff's formatter |
| 1160 | - diff: simplify the line-range filter by classifying removals immediately |
| 1161 | - diff: rename and group the line-range filter for clarity |
| 1162 | (this branch is used by mm/diff-process-hunks.) |
| 1163 | |
| 1164 | The 'git log -L<range>:<path>' command has been taught to limit |
| 1165 | various 'diff' operations, such as '--stat', '--check', and '-G', to |
| 1166 | the specified range and path. |
| 1167 | |
| 1168 | Needs review. |
| 1169 | source: <pull.2152.v2.git.1782581342.gitgitgadget@gmail.com> |
| 1170 | |
| 1171 | |
| 1172 | * hn/history-squash (2026-07-31) 4 commits |
| 1173 | - history: add squash subcommand to fold a range |
| 1174 | - sequencer: share the squash message marker helpers and flags |
| 1175 | - history: give commit_tree_ext a message template |
| 1176 | - history: extract helper for a commit's parent tree |
| 1177 | |
| 1178 | The experimental 'git history' command has been taught a new 'squash' |
| 1179 | subcommand to fold a range of commits into a single commit, with any |
| 1180 | descendants replayed on top. |
| 1181 | |
| 1182 | Needs review. |
| 1183 | source: <pull.2337.v11.git.git.1785567209.gitgitgadget@gmail.com> |
| 1184 | |
| 1185 | |
| 1186 | * tb/midx-incremental-custom-base (2026-06-12) 3 commits |
| 1187 | - midx-write: include packs above custom incremental base |
| 1188 | - midx: pass custom '--base' through incremental writes |
| 1189 | - t5334: expose shared `nth_line()` helper |
| 1190 | |
| 1191 | The 'git multi-pack-index write --incremental' command has been |
| 1192 | corrected to properly honor the '--base' option. Previously, the |
| 1193 | custom base was ignored by the normal write path; packs from layers |
| 1194 | above the selected base were incorrectly skipped by the pack exclusion |
| 1195 | logic, and reachability closure for bitmaps was broken. |
| 1196 | |
| 1197 | Needs review. |
| 1198 | source: <cover.1781294771.git.me@ttaylorr.com> |
| 1199 | |
| 1200 | |
| 1201 | * tc/replay-linearize (2026-07-28) 3 commits |
| 1202 | - replay: offer an option to linearize the commit topology |
| 1203 | - replay: resolve the replay base outside pick_regular_commit() |
| 1204 | - replay: add helper to put entry into replayed_commits |
| 1205 | |
| 1206 | The 'git replay' command has been taught the '--linearize' option to |
| 1207 | drop merge commits and linearize the replayed history, mimicking 'git |
| 1208 | rebase --no-rebase-merges'. |
| 1209 | |
| 1210 | Needs review. |
| 1211 | cf. <xmqqy0evc6n9.fsf@gitster.g> |
| 1212 | source: <20260728-toon-git-replay-drop-merges-v8-0-ced11dffe749@iotcl.com> |
| 1213 | |
| 1214 | |
| 1215 | * mm/diff-process-hunks (2026-08-01) 11 commits |
| 1216 | - diff: consult oid-only hunk providers via diff.<driver>.process |
| 1217 | - userdiff: add diff.<driver>.process config |
| 1218 | - sub-process: add a gentle status read |
| 1219 | - sub-process: separate process lifecycle from hashmap management |
| 1220 | - blame: read precomputed hunks |
| 1221 | - diff: read precomputed hunks for stat output |
| 1222 | - diff: record precomputed hunks during stat output |
| 1223 | - diff-hunks: add the store format, library, and command |
| 1224 | - diff: introduce a hunk provider interface |
| 1225 | - gitattributes: document how external diff drivers relate to diff features |
| 1226 | - Merge branch 'mm/line-log-limited-ops' into mm/diff-process-hunks |
| 1227 | (this branch uses mm/line-log-limited-ops.) |
| 1228 | |
| 1229 | A new 'diff.<driver>.process' configuration has been introduced to |
| 1230 | allow a long-running external process to act as a hunk provider, |
| 1231 | enabling external tools to control which lines Git considers changed |
| 1232 | while leaving all output formatting (word diff, color, blame, etc.) to |
| 1233 | Git's standard pipeline. |
| 1234 | |
| 1235 | Needs review. |
| 1236 | source: <20260801174156.2998808-1-mmontalbo@gmail.com> |
| 1237 | |
| 1238 | |
| 1239 | * ec/commit-fixup-options (2026-05-26) 2 commits |
| 1240 | - commit: allow -c/-C for all kinds of --fixup |
| 1241 | - commit: allow -m/-F for all kinds of --fixup |
| 1242 | |
| 1243 | Support for '-m', '-F', '-c', or '-C' options to supply a commit log |
| 1244 | message from outside the editor has been added for all 'git commit |
| 1245 | --fixup' variations. |
| 1246 | |
| 1247 | Needs review. |
| 1248 | source: <cover.1779792311.git.erik@cervined.in> |
| 1249 | |
| 1250 | |
| 1251 | * hn/branch-delete-merged (2026-07-30) 7 commits |
| 1252 | - branch: add --dry-run for --delete-merged |
| 1253 | - branch: add branch.<name>.deleteMerged opt-out |
| 1254 | - branch: add --delete-merged <pattern> |
| 1255 | - branch: prepare delete_branches for a bulk caller |
| 1256 | - branch: let delete_branches skip unmerged branches on bulk refusal |
| 1257 | - branch: convert delete_branches() to a flags argument |
| 1258 | - branch: add --forked filter for --list mode |
| 1259 | |
| 1260 | The 'git branch' command has been taught the '--delete-merged' option |
| 1261 | to remove local branches that are already merged into their tracked |
| 1262 | remote-tracking branches. |
| 1263 | |
| 1264 | Needs review. |
| 1265 | cf. <2574f79a-f04e-449f-aeb4-10d68cdc9437@gmail.com> |
| 1266 | source: <pull.2285.v24.git.git.1785419916.gitgitgadget@gmail.com> |
| 1267 | |
| 1268 | |
| 1269 | * kk/merge-base-exhaustion (2026-07-11) 11 commits |
| 1270 | - commit-reach: remove commit-date ordering fallback |
| 1271 | - commit-reach: move min_generation check into paint_queue_get() |
| 1272 | - commit-reach: terminate merge-base walk when one paint side is exhausted |
| 1273 | - commit-reach: introduce struct paint_state with per-side counters |
| 1274 | - t6600: add clock-skew topologies and step counts for edge cases |
| 1275 | - commit-reach: add trace2 instrumentation to paint_down_to_common() |
| 1276 | - t6099, t6600: add side-exhaustion regression tests |
| 1277 | - t6600: add test cases for side-exhaustion edge cases |
| 1278 | - test-lib-functions: improve diagnostic output for trace2 data assertions |
| 1279 | - Documentation/technical: add paint-down-to-common doc |
| 1280 | - Merge branch 'kk/commit-reach-find-all-fix' into kk/merge-base-exhaustion |
| 1281 | |
| 1282 | The merge-base computation has been optimized by stopping the walk |
| 1283 | early when one side's exclusive commits in the queue are exhausted, |
| 1284 | yielding significant speedups for queries with one-sided histories. |
| 1285 | |
| 1286 | Waiting for review. |
| 1287 | cf. <CAL71e4PwoJ4fxKBNuf3HB3Po92WRaV4yDBUDcuEYiggiDD=+Ew@mail.gmail.com> |
| 1288 | cf. <CABPp-BGATrNJyT7trzUzAMB_v-1ssVe_SRqp+281X5GzU=2eow@mail.gmail.com> |
| 1289 | source: <pull.2149.v6.git.1783776466.gitgitgadget@gmail.com> |