From 8e01790140c3c13eefb25f66e6fbd6ddb187c54b Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Sun, 12 Jul 2026 18:35:25 -0700 Subject: [PATCH] What's cooking (2026/07 #05) --- whats-cooking.txt | 678 ++++++++++++++++++++++++++-------------------- 1 file changed, 390 insertions(+), 288 deletions(-) diff --git a/whats-cooking.txt b/whats-cooking.txt index dbfd9b9745..18c733698e 100644 --- a/whats-cooking.txt +++ b/whats-cooking.txt @@ -1,10 +1,10 @@ To: git@vger.kernel.org -Subject: What's cooking in git.git (Jul 2026, #04) +Subject: What's cooking in git.git (Jul 2026, #05) X-master-at: f60db8d575adb79761d363e026fb49bddf330c73 -X-next-at: 6434b31f5699143ab55cdfd0d7f1cdbbd37d82c1 +X-next-at: 8d093f411df65440e1ddb297f1180711f28b7488 Bcc: lwn@lwn.net, gitster@pobox.com -What's cooking in git.git (Jul 2026, #04) +What's cooking in git.git (Jul 2026, #05) ----------------------------------------- Here are the topics that have been cooking in my tree. Commits @@ -50,6 +50,154 @@ Release tarballs are available at: -------------------------------------------------- [New Topics] +* js/pack-objects-delta-size-t (2026-07-09) 12 commits + - git-zlib: widen `git_deflate_bound()` to `size_t` + - t/helper/test-pack-deltas: widen `do_compress()`'s maxsize local to `size_t` + - http-push: widen `start_put()`'s size local from `ssize_t` to `size_t` + - diff: widen `deflate_it()`'s bound local from int to `size_t` + - archive-zip: widen `zlib_deflate_raw()`'s maxsize local to `size_t` + - packfile, git-zlib: widen `use_pack()` and zstream avail fields to `size_t` + - delta: widen `create_delta()` and `diff_delta()` to `size_t` + - pack-objects: widen `mem_usage` and `try_delta()`'s out-param to `size_t` + - pack-objects: widen `free_unpacked()` return to `size_t` + - pack-objects: widen delta-cache accounting to `size_t` + - delta: widen `create_delta_index()` parameter to `size_t` + - diff-delta: widen `struct delta_index`' size fields to `size_t` + + The pack-objects and delta-encoding code paths have been updated to + use 'size_t' instead of 'unsigned long' for object sizes and offset + limits, avoiding potential truncation issues on 64-bit Windows. + + Needs review. + source: + + +* cl/b4-cover-change-id (2026-07-10) 1 commit + - b4: include change-id in cover template + + The in-tree 'b4' cover letter template has been updated to include the + 'change-id' trailer, ensuring that sent tags generated by 'b4' contain + the required tracking information for subsequent runs. + + Will merge to 'next'. + source: <20260710-add-change-id-to-b4-template-v1-1-1bd37a25064e@black-desk.cn> + + +* ps/odb-stream-double-close-fix (2026-07-10) 1 commit + - object-file: fix closing object stream twice + + The stream-based object signature verification path has been + corrected to avoid double-closing the stream on read errors. + + Will merge to 'next'. + source: <20260710-pks-odb-stream-double-close-v1-1-d5fa233a37c7@pks.im> + + +* pz/fetch-submodule-errors-config (2026-07-11) 3 commits + - fixup! fetch: add fetch.submoduleErrors to make submodule fetch errors non-fatal + - fetch: add fetch.submoduleErrors to make submodule fetch errors non-fatal + - submodule: fix premature failure in recursive submodule fetch + + The 'git fetch' command has been updated to allow configuring how + submodule fetch errors are handled. A new configuration variable + 'fetch.submoduleErrors' and a corresponding '--submodule-errors' + command-line option have been introduced, allowing users to make + submodule fetch errors non-fatal (warn instead of fail). Additionally, + a premature failure during recursive submodule fetches has been fixed + by deferring the error until the OID-based retry phase also fails. + + Needs review. + source: <20260710122655.3066377-1-paulius.zaleckas@gmail.com> + + +* gr/add-e-use-apply-api (2026-07-10) 1 commit + - builtin/add.c: replace run_command() with direct apply_all_patches() call + + The application of the edited patch in 'git add -e' has been + refactored to use the internal apply API directly, avoiding the need + to spawn a 'git apply' subprocess. + + Needs review. + source: <20260711061246.58079-1-gatlavishweshwarreddy26@gmail.com> + + +* fz/rebase-autosquash-empty (2026-07-11) 1 commit + . sequencer: honor --empty when a fixup!/squash! empties its target + + A commit that is emptied by melding a 'fixup!' or 'squash!' commit + during 'git rebase --autosquash' is now handled according to the + '--empty' option, allowing it to be dropped, kept, or to halt the + rebase. + + Waiting for response(s) to review comment(s). + cf. + source: <20260711-fz-autosquash-empty-v3-1-d227b63eb511@gmail.com> + +-------------------------------------------------- +[Stalled] + +* kh/doc-trailers (2026-06-10) 10 commits + - doc: interpret-trailers: document comment line treatment + - doc: interpret-trailers: commit to “trailer block” term + - doc: interpret-trailers: join new-trailers again + - doc: interpret-trailers: add key format example + - doc: interpret-trailers: explain key format + - doc: interpret-trailers: explain the format after the intro + - doc: interpret-trailers: not just for commit messages + - doc: interpret-trailers: use “metadata” in Name as well + - doc: interpret-trailers: replace “lines” with “metadata” + - doc: interpret-trailers: stop fixating on RFC 822 + + Documentation for 'git interpret-trailers' has been updated to explain + the format of trailer keys (alphanumeric characters and hyphens), + replace outdated terminology, define key terms upfront, and document + how comment lines in the input are treated. + + Expecting a reroll for too long, stalled. + cf. <729baf6b-53ea-4e8d-95ab-5935667e66c2@app.fastmail.com> + source: + + +* sn/rebase-update-refs-symrefs (2026-06-03) 1 commit + - rebase: skip branch symref aliases + + 'git rebase --update-refs' has been taught to resolve local branch + symrefs to their referents before queuing updates, ensuring aliases of + the current branch are skipped and duplicate updates are avoided to + prevent failures when branch aliases are present. + + Waiting for response(s) to review comment(s) for too long, stalled. + cf. + source: + + +* ap/http-redirect-wwwauth-fix (2026-06-02) 1 commit + - http: preserve wwwauth_headers across redirects + + When 'cURL' follows a redirect, the 'WWW-Authenticate' headers from + the redirect target were lost because 'credential_from_url()' cleared + the credential state. This has been fixed by preserving the collected + headers across the redirect update. + + Will discard. + cf. + source: <20260602161150.1527493-1-aplattner@nvidia.com> + + +* jt/config-lock-timeout (2026-05-17) 1 commit + - config: retry acquiring config.lock, configurable via core.configLockTimeout + + Configuration file locking has been updated to retry for a short + period, avoiding failures when multiple processes attempt to update + the configuration simultaneously. + + Waiting for response(s) to review comment(s) for too long, stalled. + cf. + source: <20260517132111.1014901-1-joerg@thalheim.io> + +-------------------------------------------------- +[Cooking] + * dm/submodule-update-i-shorthand (2026-07-07) 1 commit - submodule--helper: accept '-i' shorthand for update --init @@ -57,42 +205,45 @@ Release tarballs are available at: 'git submodule update' command until it was broken in a modernization of the option-parsing code, has been restored. - Will merge to 'next'? + Needs review. source: <20260708-submodule-init-v1-1-719456077262@atmark-techno.com> * hf/unpack-trees-quadratic-scan (2026-07-08) 1 commit - - unpack-trees: avoid quadratic index scan in next_cache_entry() + (merged to 'next' on 2026-07-12 at 744f1aede4) + + unpack-trees: avoid quadratic index scan in next_cache_entry() The cache-scanning loop in 'next_cache_entry()' has been optimized to avoid rescanning already-unpacked index entries, preventing a quadratic performance slow-down when diffing the working tree against a commit with a pathspec matching early index entries. - Will merge to 'next'? + Will merge to 'master'. cf. source: * jc/relnotes-2.55-rust-fix (2026-07-07) 1 commit - - Rust: fix description in Release Notes to 2.55 + (merged to 'next' on 2026-07-10 at 444d202a75) + + Rust: fix description in Release Notes to 2.55 A description in the release notes for Git 2.55.0 has been retroactively updated to clarify that Rust support is enabled by default, but still optional, and will become mandatory in Git 3.0. - Will merge to 'next'? + Will merge to 'master'. source: * jc/submitting-patches-abandoning (2026-07-08) 1 commit - - SubmittingPatches: document how to retract a topic + (merged to 'next' on 2026-07-10 at 41b9b65b23) + + SubmittingPatches: document how to retract a topic The 'SubmittingPatches' document has been updated to explicitly describe the expectation for contributors to retract or abandon their patch series when they are no longer pursuing it. - Will merge to 'next'? + Will merge to 'master'. cf. source: @@ -119,7 +270,7 @@ Release tarballs are available at: source: <20260708035235.GA41491@coredump.intra.peff.net> -* mm/lib-httpd-cgi-safe (2026-07-07) 3 commits +* mm/lib-httpd-cgi-safe (2026-07-10) 3 commits - t/README: document writing concurrency-safe helpers - t/lib-httpd: make http-429 first-request check atomic - t/lib-httpd: fix apply-one-time-script race under concurrent requests @@ -128,9 +279,8 @@ Release tarballs are available at: to use atomic filesystem operations, preventing race conditions when Apache handles concurrent requests. - Expecting a reroll. - cf. - source: + Needs review. + source: * mm/sideband-ansi-sgr-colon-fix (2026-05-13) 1 commit @@ -172,8 +322,9 @@ Release tarballs are available at: * tc/bundle-uri-empty-fix (2026-07-08) 2 commits - - bundle-uri: stop sending invalid bundle configuration - - bundle-uri: drain remaining response on invalid bundle-uri lines + (merged to 'next' on 2026-07-12 at 9da32fdaf7) + + bundle-uri: stop sending invalid bundle configuration + + bundle-uri: drain remaining response on invalid bundle-uri lines The client-side parser of server-advertised bundle-URI list has been updated to drain the remaining response in order to avoid protocol @@ -181,48 +332,53 @@ Release tarballs are available at: the server-side has been taught to omit empty configuration values instead of sending invalid key-value lines. - Will merge to 'next'? + Will merge to 'master'. cf. source: <20260708-toon-bundle-uri-no-uri-v2-0-09a03d8db556@iotcl.com> * gr/t1410-reflog-exit-code (2026-07-08) 1 commit - - t1410-reflog.sh: avoid suppressing git's exit code in pipelines + (merged to 'next' on 2026-07-10 at d0cf55ea54) + + t1410-reflog.sh: avoid suppressing git's exit code in pipelines The pipelines in 't1410-reflog.sh' have been replaced with the 'test_stdout_line_count' helper to avoid suppressing the exit code of 'git' commands, ensuring failures are not hidden from the test suite. - Will merge to 'next'? + Will merge to 'master'. cf. source: <20260709051229.40363-1-gatlavishweshwarreddy26@gmail.com> -* js/coverity-fixes-null-safety (2026-07-09) 11 commits - - shallow: fix NULL dereference - - bisect: ensure non-NULL `head` before using it - - pack-bitmap: handle missing bitmap for base MIDX - - revision: avoid dereferencing NULL in `add_parents_only()` - - replay: die when --onto does not peel to a commit - - bisect: handle NULL commit in `bisect_successful()` - - mailsplit: move NULL check before first use of file handle - - reftable/stack: guard against NULL list_file in stack_destroy - - remote: guard `remote_tracking()` against NULL remote - - diff: handle NULL return from repo_get_commit_tree() - - diffcore-break: guard against NULLed queue entries in merge loop +* js/coverity-fixes-null-safety (2026-07-10) 12 commits + (merged to 'next' on 2026-07-12 at 8d093f411d) + + shallow: give write_one_shallow() its own hex buffer + + shallow: fix NULL dereference + + bisect: ensure non-NULL `head` before using it + + pack-bitmap: handle missing bitmap for base MIDX + + revision: avoid dereferencing NULL in `add_parents_only()` + + replay: die when --onto does not peel to a commit + + bisect: handle NULL commit in `bisect_successful()` + + mailsplit: move NULL check before first use of file handle + + reftable/stack: guard against NULL list_file in stack_destroy + + remote: guard `remote_tracking()` against NULL remote + + diff: handle NULL return from repo_get_commit_tree() + + diffcore-break: guard against NULLed queue entries in merge loop Various code paths have been hardened against potential NULL-pointer dereferences and invalid file descriptor accesses flagged by Coverity. - Needs review. - source: + Will merge to 'master'. + cf. + source: -* ps/odb-for-each-object-filter (2026-07-09) 8 commits +* ps/odb-for-each-object-filter (2026-07-10) 9 commits - builtin/cat-file: filter objects via object database - odb: introduce object filters to `odb_for_each_object()` - pack-bitmap: introduce function to open bitmap for a single source + - pack-bitmap: drop `_1` suffix from functions that open bitmaps - pack-bitmap: iterate object sources when opening bitmaps - pack-bitmap: allow aborting iteration of bitmapped objects - pack-bitmap: mark object filter as `const` @@ -230,115 +386,53 @@ Release tarballs are available at: - Merge branch 'ps/odb-drop-whence' into ps/odb-for-each-object-filter (this branch uses ps/odb-drop-whence.) - The object database enumeration interface 'odb_for_each_object()' - has learned to accept object filters, allowing the underlying - backends to optimize the traversal by using reachability bitmaps - when available. 'git cat-file --batch-all-objects' has been updated - to use this generic interface, simplifying its code and avoiding - direct access to ODB backend internals. + The object database enumeration interface 'odb_for_each_object()' has + been taught to accept object filters, allowing the underlying backends + to optimize the traversal by using reachability bitmaps when + available. 'git cat-file --batch-all-objects' has been updated to + use this generic interface, simplifying its code and avoiding direct + access to ODB backend internals. Needs review. - source: <20260709-pks-odb-for-each-object-filter-v1-0-82fe014b12b3@pks.im> + source: <20260710-pks-odb-for-each-object-filter-v2-0-3710a9cc165a@pks.im> * ps/refs-wo-the-repository (2026-07-09) 8 commits - . refs: remove remaining uses of `the_repository` - . worktree: pass repository to public functions - . worktree: pass repository to file-local functions - . worktree: refactor code to use available repositories - . refs/files: drop `USE_THE_REPOSITORY_VARIABLE` - . refs/packed: drop `USE_THE_REPOSITORY_VARIABLE` - . refs/packed: de-globalize handling of "core.packedRefsTimeout" - . Merge branch 'ps/refs-writing-subcommands' into ps/refs-wo-the-repository + - refs: remove remaining uses of `the_repository` + - worktree: pass repository to public functions + - worktree: pass repository to file-local functions + - worktree: refactor code to use available repositories + - refs/files: drop `USE_THE_REPOSITORY_VARIABLE` + - refs/packed: drop `USE_THE_REPOSITORY_VARIABLE` + - refs/packed: de-globalize handling of "core.packedRefsTimeout" + - Merge branch 'ps/refs-writing-subcommands' into ps/refs-wo-the-repository (this branch uses ps/refs-writing-subcommands.) - The ref subsystem and the worktree API have been refactored to pass - a repository pointer down the call chain, allowing them to drop + The ref subsystem and the worktree API have been refactored to pass a + repository pointer down the call chain, allowing them to drop references to the global 'the_repository' variable. As part of this, the handling of the 'core.packedRefsTimeout' configuration has been moved into the per-repository ref store structure. - Needs review. + Expecting a reroll. + cf. source: <20260709-pks-refs-wo-the-repository-v1-0-1ad6f27529c9@pks.im> * kk/commit-graph-topo-levels-fix (2026-07-09) 2 commits - - commit-graph: propagate topo_levels slab to all chain layers - - commit-graph: add trace2 instrumentation for generation DFS + (merged to 'next' on 2026-07-12 at 295a5f9b34) + + commit-graph: propagate topo_levels slab to all chain layers + + commit-graph: add trace2 instrumentation for generation DFS - The 'topo_levels' slab was only propagated to the topmost layer of a - split commit-graph chain, causing incremental writes to recompute - topological levels for commits in base layers. This has been + The 'topo_levels' slab was propagated only to the topmost layer of a + split commit-graph chain, causing topological levels for commits in + base layers to be recomputed during incremental writes. This has been corrected. - Will merge to 'next'? - cf. + Will merge to 'master'. + cf. source: --------------------------------------------------- -[Stalled] - -* kh/doc-trailers (2026-06-10) 10 commits - - doc: interpret-trailers: document comment line treatment - - doc: interpret-trailers: commit to “trailer block” term - - doc: interpret-trailers: join new-trailers again - - doc: interpret-trailers: add key format example - - doc: interpret-trailers: explain key format - - doc: interpret-trailers: explain the format after the intro - - doc: interpret-trailers: not just for commit messages - - doc: interpret-trailers: use “metadata” in Name as well - - doc: interpret-trailers: replace “lines” with “metadata” - - doc: interpret-trailers: stop fixating on RFC 822 - - Documentation for 'git interpret-trailers' has been updated to explain - the format of trailer keys (alphanumeric characters and hyphens), - replace outdated terminology, define key terms upfront, and document - how comment lines in the input are treated. - - Expecting a reroll for too long. stalled. - cf. <729baf6b-53ea-4e8d-95ab-5935667e66c2@app.fastmail.com> - source: - - -* sn/rebase-update-refs-symrefs (2026-06-03) 1 commit - - rebase: skip branch symref aliases - - 'git rebase --update-refs' has been taught to resolve local branch - symrefs to their referents before queuing updates, ensuring aliases of - the current branch are skipped and duplicate updates are avoided to - prevent failures when branch aliases are present. - - Waiting for response(s) to review comment(s) for too long, stalled. - cf. - source: - - -* ap/http-redirect-wwwauth-fix (2026-06-02) 1 commit - - http: preserve wwwauth_headers across redirects - - When 'cURL' follows a redirect, the 'WWW-Authenticate' headers from - the redirect target were lost because 'credential_from_url()' cleared - the credential state. This has been fixed by preserving the collected - headers across the redirect update. - - Will discard. - cf. - source: <20260602161150.1527493-1-aplattner@nvidia.com> - - -* jt/config-lock-timeout (2026-05-17) 1 commit - - config: retry acquiring config.lock, configurable via core.configLockTimeout - - Configuration file locking has been updated to retry for a short - period, avoiding failures when multiple processes attempt to update - the configuration simultaneously. - - Waiting for response(s) to review comment(s) for too long, stalled. - cf. - source: <20260517132111.1014901-1-joerg@thalheim.io> - --------------------------------------------------- -[Cooking] * ds/sparse-index-ita-crash (2026-07-06) 1 commit - sparse-index: avoid crash on intent-to-add entry outside the cone @@ -361,23 +455,24 @@ Release tarballs are available at: script on repositories already managed by the new tool. Expecting a reroll. - cf. <27215.27575.968985.583226@chiark.greenend.org.uk> + cf. <27219.20156.438730.881821@chiark.greenend.org.uk> source: <20260706115816.20267-1-ijackson@chiark.greenend.org.uk> -* kk/reftable-tombstone-quadratic-fix (2026-07-09) 2 commits - - reftable: fix quadratic behavior in the presence of tombstones - - t/perf: add perf test for ref tombstone scenarios +* kk/reftable-tombstone-quadratic-fix (2026-07-10) 2 commits + (merged to 'next' on 2026-07-12 at 4e60bb0027) + + reftable: fix quadratic behavior in the presence of tombstones + + t/perf: add perf test for ref tombstone scenarios - The performance of ref updates and reads using the reftable backend in - the presence of many deletion tombstone records has been optimized by - removing the tombstone suppression flag from the merged iterator and - instead skipping tombstones at higher-level call sites where iteration - bounds are known. + The performance of ref updates and reads using the 'reftable' backend + in the presence of many deletion tombstone records has been optimized + by removing the tombstone suppression flag from the merged iterator + and instead skipping tombstones at higher-level call sites where + iteration bounds are known. - Expecting a reroll. - cf. - source: + Will merge to 'master'. + cf. + source: * rs/blame-abbrev-marks (2026-07-06) 1 commit @@ -406,17 +501,18 @@ Release tarballs are available at: * bc/parse-options-exit-0-on-help (2026-07-07) 4 commits - - parse-options: exit 0 on -h - - rev-parse: have --parseopt callers exit 0 on --help - - parse-options: add a separate case for help output on error - - t1517: skip svn tests if svn is not installed + (merged to 'next' on 2026-07-10 at 775654e447) + + parse-options: exit 0 on -h + + rev-parse: have --parseopt callers exit 0 on --help + + parse-options: add a separate case for help output on error + + t1517: skip svn tests if svn is not installed - Option parsing with 'git rev-parse --parseopt' and most 'git' + Option parsing with 'git rev-parse --parseopt' and in most 'git' subcommands has been updated to exit with 0 (instead of 129) when the help option ('-h' or '--help') is requested directly by the user, aligning with standard Unix convention. - Will merge to 'next'. + Will merge to 'master'. cf. <20260708035930.GB41684@coredump.intra.peff.net> source: <20260708001557.3581080-1-sandals@crustytoothpaste.net> @@ -470,17 +566,16 @@ Release tarballs are available at: source: <20260702075234.GA1548258@coredump.intra.peff.net> -* ml/t9811-replace-test-f (2026-07-02) 1 commit +* ml/t9811-replace-test-f (2026-07-11) 2 commits - t9811: replace 'test -f' and '! test -f' with 'test_path_*' + - t9811: break long && chains into multiple lines The test script 't/t9811-git-p4-label-import.sh' has been modernized to use 'test_path_is_file' and 'test_path_is_missing' instead of raw 'test -f' and '! test -f' calls. - Expecting a reroll. - cf. - cf. - source: <20260702140704.65805-1-marcelomlage@usp.br> + Needs review. + source: <20260711160447.99708-1-marcelomlage@usp.br> * ps/t-fixes-for-git-test-long (2026-07-05) 9 commits @@ -521,9 +616,10 @@ Release tarballs are available at: * sn/osxkeychain-rust-universal (2026-07-07) 3 commits - - contrib: wire up osxkeychain in contrib/Makefile on macOS - - Makefile: support universal macOS builds via RUST_TARGETS - - Makefile: add $(RUST_LIB) prerequisite to osxkeychain + (merged to 'next' on 2026-07-10 at fe82b5d188) + + contrib: wire up osxkeychain in contrib/Makefile on macOS + + Makefile: support universal macOS builds via RUST_TARGETS + + Makefile: add $(RUST_LIB) prerequisite to osxkeychain The build system has been updated to support building universal macOS binaries when 'Rust' is enabled, by compiling separate static archives @@ -531,36 +627,35 @@ Release tarballs are available at: using the macOS 'lipo' tool. The 'git-credential-osxkeychain' helper has been updated to link against '$(RUST_LIB)' when 'Rust' is enabled. - Will merge to 'next'? + Will merge to 'master'. cf. source: -* cl/conditional-config-on-worktree-path (2026-07-08) 3 commits - . config: add "worktree" and "worktree/i" includeIf conditions - . repository: keep a symlink-preserving copy of the worktree path - . config: refactor include_by_gitdir() into include_by_path() +* cl/conditional-config-on-worktree-path (2026-07-09) 2 commits + - config: add "worktree" and "worktree/i" includeIf conditions + - config: refactor include_by_gitdir() into include_by_path() The '[includeIf "condition"]' conditional inclusion facility for configuration files has been taught to use the location of the worktree in its condition. Needs review. - cf. - cf. - source: <20260709-includeif-worktree-v7-0-e87e705e8df6@black-desk.cn> + source: <20260710-includeif-worktree-v8-0-04686d8a616c@black-desk.cn> * kk/commit-reach-find-all-fix (2026-06-29) 2 commits - - commit-reach: guard !FIND_ALL early exit with generation ordering check - - t6600: add test for merge-base early exit with clock skew + (merged to 'next' on 2026-07-10 at 0444c74d81) + + commit-reach: guard !FIND_ALL early exit with generation ordering check + + t6600: add test for merge-base early exit with clock skew + (this branch is used by kk/merge-base-exhaustion.) - The early-exit optimization in 'paint_down_to_common()' has been gated - on the queue being generation-ordered. This fixes a bug where 'git - merge-base' (without '--all') could return incorrect results on - repositories with v1 commit graphs and clock skew. + The early-exit optimization in 'paint_down_to_common()' has been + gated on the queue being generation-ordered, fixing a bug where + 'git merge-base' (without '--all') could return incorrect results + on repositories with v1 commit graphs and clock skew. - Will merge to 'next'. + Will merge to 'master'. cf. source: @@ -568,8 +663,8 @@ Release tarballs are available at: * bl/t7412-use-test-path-helpers (2026-06-29) 1 commit - submodule absorbgitdirs tests: use test_* helper functions - 't7412' that tests 'git submodule absorbgitdirs' has been modernized - to use 'test_path_is_file', 'test_path_is_dir', and + The test script 't7412' that tests 'git submodule absorbgitdirs' has + been modernized to use 'test_path_is_file', 'test_path_is_dir', and 'test_path_is_missing' helper functions instead of raw 'test -[fde]' commands. @@ -593,22 +688,23 @@ Release tarballs are available at: * ps/setup-split-discovery-and-setup (2026-07-07) 16 commits - - setup: mark `set_git_work_tree()` as file-local - - setup: pass worktree to `init_db()` - - setup: drop redundant configuration of `startup_info->have_repository` - - setup: make repository discovery self-contained - - setup: propagate prefix via repository discovery - - setup: drop static `cwd` variable - - setup: move prefix into repository - - setup: embed repository format in discovery - - setup: introduce explicit repository discovery - - setup: split up concerns of `setup_git_env_internal()` - - setup: unify setup of shallow file - - setup: mark bogus worktree in `apply_repository_format()` - - setup: rename `check_repository_format_gently()` - - Merge branch 'jk/repo-info-path-keys' into ps/setup-split-discovery-and-setup - - Merge branch 'ps/setup-drop-global-state' into ps/setup-split-discovery-and-setup - - Merge branch 'ps/refs-onbranch-fixes' into ps/setup-split-discovery-and-setup + (merged to 'next' on 2026-07-10 at 1691a942ab) + + setup: mark `set_git_work_tree()` as file-local + + setup: pass worktree to `init_db()` + + setup: drop redundant configuration of `startup_info->have_repository` + + setup: make repository discovery self-contained + + setup: propagate prefix via repository discovery + + setup: drop static `cwd` variable + + setup: move prefix into repository + + setup: embed repository format in discovery + + setup: introduce explicit repository discovery + + setup: split up concerns of `setup_git_env_internal()` + + setup: unify setup of shallow file + + setup: mark bogus worktree in `apply_repository_format()` + + setup: rename `check_repository_format_gently()` + + Merge branch 'jk/repo-info-path-keys' into ps/setup-split-discovery-and-setup + + Merge branch 'ps/setup-drop-global-state' into ps/setup-split-discovery-and-setup + + Merge branch 'ps/refs-onbranch-fixes' into ps/setup-split-discovery-and-setup The repository discovery and repository configuration phases, which were previously intertwined in 'setup.c', have been split. Repository @@ -617,7 +713,7 @@ Release tarballs are available at: repository configuration to initialize the repository, paving the way for clean unification of repository configuration. - Will merge to 'next'. + Will merge to 'master'. cf. <87h5m9om0j.fsf@emacs.iotcl.com> source: <20260707-pks-setup-split-discovery-and-setup-v2-0-aab372cd227c@pks.im> @@ -715,9 +811,9 @@ Release tarballs are available at: - repack: unconditionally exclude non-kept packs 'git repack' has been taught to accept '--geometric' and '--cruft' - together. When both are given, the geometric repack rolls up non-cruft - packs as usual, while a separate cruft pack is written to collect - unreachable objects. + together. When both are given, non-cruft packs are rolled up by the + geometric repack as usual, while a separate cruft pack is written to + collect unreachable objects. Waiting for response(s) to review comment(s). cf. @@ -749,7 +845,7 @@ Release tarballs are available at: source: <20260624093618.17456-1-antonio.destefani08@gmail.com> -* jt/receive-pack-use-odb-transactions (2026-07-08) 11 commits +* jt/receive-pack-use-odb-transactions (2026-07-10) 11 commits - builtin/receive-pack: stage incoming objects via ODB transactions - builtin/receive-pack: drop redundant tmpdir env - odb/transaction: introduce ODB transaction flags @@ -766,9 +862,8 @@ Release tarballs are available at: interfaces instead of directly managing 'tmp_objdir' for staging incoming objects, bringing it closer to being ODB backend agnostic. - Expecting a reroll. - cf. - source: <20260708235925.3992097-1-jltobler@gmail.com> + Needs review. + source: <20260710163722.2962278-1-jltobler@gmail.com> * ps/odb-drop-whence (2026-07-02) 7 commits @@ -792,24 +887,25 @@ Release tarballs are available at: * ps/reftable-hardening (2026-07-03) 12 commits - - reftable/table: fix OOB read on truncated table - - reftable/table: fix NULL pointer access when seeking to bogus offsets - - reftable/block: fix OOB read with bogus restart offset - - reftable/block: fix use of uninitialized memory when binsearch fails - - reftable/block: fix OOB read with bogus restart count - - reftable/block: fix OOB read with bogus block size - - reftable/block: fix OOB write with bogus inflated log size - - t/unit-tests: introduce test helper to write reftable blocks - - reftable/record: don't abort when decoding invalid ref value type - - reftable/basics: fix OOB read on binary search of empty range - - oss-fuzz: add fuzzer for parsing reftables - - meson: support building fuzzers with libFuzzer + (merged to 'next' on 2026-07-10 at b8f4dd0ab9) + + reftable/table: fix OOB read on truncated table + + reftable/table: fix NULL pointer access when seeking to bogus offsets + + reftable/block: fix OOB read with bogus restart offset + + reftable/block: fix use of uninitialized memory when binsearch fails + + reftable/block: fix OOB read with bogus restart count + + reftable/block: fix OOB read with bogus block size + + reftable/block: fix OOB write with bogus inflated log size + + t/unit-tests: introduce test helper to write reftable blocks + + reftable/record: don't abort when decoding invalid ref value type + + reftable/basics: fix OOB read on binary search of empty range + + oss-fuzz: add fuzzer for parsing reftables + + meson: support building fuzzers with libFuzzer The reftable code has been hardened against corrupted tables by fixing out-of-bounds writes, out-of-bounds reads, and abort calls during parsing. - Will merge to 'next'? + Will merge to 'master'. cf. <877bn5obz9.fsf@emacs.iotcl.com> source: <20260703-pks-reftable-hardening-v3-0-b87c555b9920@pks.im> @@ -821,7 +917,7 @@ Release tarballs are available at: When 'git push origin/main' or 'git branch origin main' is run, the command is now recognized as a potential typo, and advice has been - added to offer a typofix. + added to offer a typo fix. Will merge to 'master'. cf. @@ -840,7 +936,7 @@ Release tarballs are available at: source: -* ty/migrate-excludes-file (2026-07-09) 9 commits +* ty/migrate-excludes-file (2026-07-12) 9 commits - environment: move object_creation_mode into repo_config_values - environment: move autorebase into repo_config_values - environment: move push_default into repo_config_values @@ -855,8 +951,9 @@ Release tarballs are available at: (including 'editor_program', 'pager_program', 'askpass_program', and 'push_default') have been migrated into the per-repository structure. - Needs review. - source: <20260709161145.13349-1-cat@malon.dev> + Expecting a reroll. + cf. <2a39cee9-1082-48aa-b42e-e12c34fa0e29@malon.dev> + source: <20260712111734.1073514-1-cat@malon.dev> * dk/meson-enable-use-nsec-build (2026-06-20) 1 commit @@ -865,14 +962,13 @@ Release tarballs are available at: The 'USE_NSEC' build knob, which enables support for sub-second file timestamp resolution, has been wired up to the Meson build system. - Expecting a reroll. - cf. - cf. - cf. + Will discard. + cf. source: -* ps/libgit-in-subdir (2026-06-30) 3 commits +* ps/libgit-in-subdir (2026-07-10) 4 commits + - fixup! Move libgit.a sources into separate "lib/" directory - Move libgit.a sources into separate "lib/" directory - t/helper: prepare "test-example-tap.c" for introduction of "lib/" - Merge branch 'ps/odb-source-packed' into ps/libgit-in-subdir @@ -881,8 +977,8 @@ Release tarballs are available at: directory to clean up the top-level directory and clearly separate library code. - Needs review. - cf. + Waiting for response(s) to review comment(s). + cf. <0c94331b-7eb1-4116-afa5-811082ad5854@ramsayjones.plus.com> source: <20260701-pks-libgit-in-subdir-v3-0-5e4860056094@pks.im> @@ -903,15 +999,16 @@ Release tarballs are available at: * ty/migrate-ignorecase (2026-06-19) 2 commits - - config: use repo_ignore_case() to access core.ignorecase - - environment: move ignore_case into repo_config_values + (merged to 'next' on 2026-07-12 at 39e9fdb93f) + + config: use repo_ignore_case() to access core.ignorecase + + environment: move ignore_case into repo_config_values The global configuration variable 'ignore_case' (representing the 'core.ignorecase' configuration) has been migrated into 'struct repo_config_values' to tie it to a specific repository instance. - Waiting for comments from Johannes. - cf. + Will merge to 'master'. + cf. source: <20260619155152.642760-1-cat@malon.dev> @@ -926,26 +1023,25 @@ Release tarballs are available at: The 'git log -L:' command has been taught to limit various 'diff' operations, such as '--stat', '--check', and '-G', to - the specified range:path. + the specified range and path. Needs review. source: -* hn/history-squash (2026-07-06) 5 commits +* hn/history-squash (2026-07-10) 5 commits - history: re-edit a squash with every message - - sequencer: extract helpers for the squash message markers + - sequencer: share the squash message marker helpers and flags - history: add squash subcommand to fold a range - history: give commit_tree_ext a message template - history: extract helper for a commit's parent tree The experimental 'git history' command has been taught a new 'squash' - subcommand to fold a range of commits into a single commit, replaying - any descendants on top. + subcommand to fold a range of commits into a single commit, with any + descendants replayed on top. - Waiting for response(s) to review comment(s). - cf. <38493ca6-8fdd-4b6c-9972-5145f3bf0aa4@gmail.com> - source: + Needs review. + source: * ps/refs-writing-subcommands (2026-07-06) 5 commits @@ -966,13 +1062,14 @@ Release tarballs are available at: * wy/doc-myfirstcontribution-trim-quotes (2026-06-11) 1 commit - - MyFirstContribution: mention trimming quoted text in replies + (merged to 'next' on 2026-07-12 at adeaa999b6) + + MyFirstContribution: mention trimming quoted text in replies The contributor guide has been updated to advise new contributors to trim irrelevant quoted text when replying to review comments, matching the existing advice given to reviewers. - Will merge to 'next'? + Will merge to 'master'. cf. source: <080402ff0ac8127b654dccea59a1bf643df62a5c.1781186476.git.wy@wyuan.org> @@ -984,21 +1081,22 @@ Release tarballs are available at: The 'git multi-pack-index write --incremental' command has been corrected to properly honor the '--base' option. Previously, the - custom base was ignored by the normal write path, and the pack - exclusion logic incorrectly skipped packs from layers above the - selected base, breaking reachability closure for bitmaps. + custom base was ignored by the normal write path; packs from layers + above the selected base were incorrectly skipped by the pack exclusion + logic, and reachability closure for bitmaps was broken. Needs review. source: * mm/test-grep-lint (2026-07-05) 6 commits - - t: add greplint to detect bare grep assertions - - t: convert grep assertions to test_grep - - t: fix Lexer line count for $() inside double-quoted strings - - t: extract chainlint's parser into shared module - - t: fix grep assertions missing file arguments - - t/README: document test_grep helper + (merged to 'next' on 2026-07-10 at 1916c07bf5) + + t: add greplint to detect bare grep assertions + + t: convert grep assertions to test_grep + + t: fix Lexer line count for $() inside double-quoted strings + + t: extract chainlint's parser into shared module + + t: fix grep assertions missing file arguments + + t/README: document test_grep helper The test suite has been updated to use the 'test_grep' helper instead of bare 'grep' for test assertions, allowing file contents to be @@ -1006,7 +1104,7 @@ Release tarballs are available at: been introduced to detect and prevent new bare 'grep' assertions from being added to the test suite. - Will merge to 'next'. + Will merge to 'master'. cf. source: @@ -1032,11 +1130,10 @@ Release tarballs are available at: - ref-filter: memoize --contains with generations - commit-reach: reject cycles in contains walk - 'git branch --contains' and 'git for-each-ref --contains' have - been optimized to use the memoized commit traversal previously - used only by 'git tag --contains', significantly speeding up - connectivity checks across many candidate refs with shared - history. + 'git branch --contains' and 'git for-each-ref --contains' have been + optimized to use the memoized commit traversal previously used only by + 'git tag --contains', significantly speeding up connectivity checks + across many candidate refs with shared history. Needs review. cf. @@ -1058,19 +1155,19 @@ Release tarballs are available at: source: <20260707-toon-git-replay-drop-merges-v7-0-808ab9b4afa6@iotcl.com> -* ps/cat-file-remote-object-info (2026-07-01) 13 commits +* ps/cat-file-remote-object-info (2026-07-10) 13 commits - cat-file: make remote-object-info allow-list dynamic - cat-file: validate remote atoms with an allow-list - cat-file: add remote-object-info to batch-command - transport: add client support for object-info - serve: advertise object-info feature - fetch-pack: move fetch initialization - - connect: make `write_fetch_command_and_capabilities()` more generic - - fetch-pack: move `write_fetch_command_and_capabilities()` to connect.c - - fetch-pack: drop static `advertise_sid` variable + - connect: make write_fetch_command_and_capabilities() more generic + - fetch-pack: move write_fetch_command_and_capabilities() to connect.c + - fetch-pack: drop static advertise_sid variable + - fetch-pack: fix hash_algo variable type - t1006: split test utility functions into new 'lib-cat-file.sh' - cat-file: declare loop counter inside for() - - git-compat-util: add `strtoumax_szt()` with error handling - transport-helper: fix memory leak of helper on disconnect The 'remote-object-info' command has been added to 'git cat-file @@ -1080,9 +1177,9 @@ Release tarballs are available at: filtered on the client based on server-advertised capabilities, returning empty strings for inapplicable or unsupported fields. - Expecting a reroll. - cf. - source: <20260701-ps-eric-work-rebase-v15-0-c88a43b63917@gmail.com> + Will merge to 'next'? + cf. + source: <20260710-ps-eric-work-rebase-v16-0-66e07b58a8fe@gmail.com> * mm/diff-process-hunks (2026-06-14) 6 commits @@ -1099,7 +1196,7 @@ Release tarballs are available at: while leaving all output formatting (word diff, color, blame, etc.) to Git's standard pipeline. - Expecting a reroll. + Expecting a reroll for too long, stalled. cf. source: @@ -1118,21 +1215,6 @@ Release tarballs are available at: source: <20260619162105.648495-1-cat@malon.dev> -* kk/prio-queue-cascade-sift (2026-07-08) 3 commits - - prio-queue: use cascade for unfused gets - - prio-queue: extract sift_up() from prio_queue_put() - - Merge branch 'kk/prio-queue-get-put-fusion' into kk/prio-queue-cascade-sift - (this branch uses kk/prio-queue-get-put-fusion.) - - 'prio_queue_get()' has been optimized by using a cascade-down approach - (promoting the smaller child at each level and sifting up the last - element from the leaf vacancy), which halves the number of comparisons - per extract-min operation in the common case. - - Needs review. - source: - - * ps/history-drop (2026-07-01) 11 commits (merged to 'next' on 2026-07-08 at 6fb84708a4) + builtin/history: implement "drop" subcommand @@ -1148,7 +1230,7 @@ Release tarballs are available at: + read-cache: split out function to drop unmerged entries to stage 0 The experimental 'git history' command has been taught a new 'drop' - subcommand to remove a commit and replay its descendants onto its + subcommand to remove a commit, with its descendants replayed onto its parent. Will merge to 'master'. @@ -1165,7 +1247,7 @@ Release tarballs are available at: updated to hide dotfiles by default unless the user explicitly starts the path with a dot, matching standard shell-completion behavior. - Waiting for response(s) to review comment(s). + Waiting for response(s) to review comment(s), stalled. cf. source: @@ -1209,7 +1291,8 @@ Release tarballs are available at: to remove local branches that are already merged to their tracked remote-tracking branches. - Needs review. + Expecting a reroll. + cf. source: @@ -1225,9 +1308,10 @@ Release tarballs are available at: source: -* ps/shift-root-in-graph (2026-07-04) 3 commits +* ps/shift-root-in-graph (2026-07-11) 4 commits - graph: indent visual root in graph - graph: add a 2 commit buffer for lookahead + - revision: add next_commit_to_show() - lib-log-graph: move check_graph function 'git log --graph' has been modified to visually distinguish parentless @@ -1235,27 +1319,45 @@ Release tarballs are available at: simplification) by indenting them, preventing them from appearing falsely related to unrelated commits rendered immediately above them. - Expecting a reroll. - cf. - source: <20260704-ps-pre-commit-indent-v7-0-a94706cc8376@gmail.com> + Needs review. + source: <20260711-ps-pre-commit-indent-v9-0-eab6676e82f7@gmail.com> -* kk/merge-base-exhaustion (2026-07-01) 10 commits - . commit-reach: remove commit-date ordering fallback - . commit-reach: move min_generation check into paint_queue_get() - . commit-reach: terminate merge-base walk when one paint side is exhausted - . commit-reach: introduce struct paint_state with per-side counters - . t6600: add clock-skew topologies and step counts for edge cases - . commit-reach: add trace2 instrumentation to paint_down_to_common() - . t6099, t6600: add side-exhaustion regression tests - . t6600: add test cases for side-exhaustion edge cases - . test-lib-functions: improve diagnostic output for trace2 data assertions - . Documentation/technical: add paint-down-to-common doc +* kk/merge-base-exhaustion (2026-07-11) 11 commits + - commit-reach: remove commit-date ordering fallback + - commit-reach: move min_generation check into paint_queue_get() + - commit-reach: terminate merge-base walk when one paint side is exhausted + - commit-reach: introduce struct paint_state with per-side counters + - t6600: add clock-skew topologies and step counts for edge cases + - commit-reach: add trace2 instrumentation to paint_down_to_common() + - t6099, t6600: add side-exhaustion regression tests + - t6600: add test cases for side-exhaustion edge cases + - test-lib-functions: improve diagnostic output for trace2 data assertions + - Documentation/technical: add paint-down-to-common doc + - Merge branch 'kk/commit-reach-find-all-fix' into kk/merge-base-exhaustion + (this branch uses kk/commit-reach-find-all-fix.) The merge-base computation has been optimized by stopping the walk early when one side's exclusive commits in the queue are exhausted, yielding significant speedups for queries with one-sided histories. - Expecting a reroll. - cf. - source: + Needs review. + source: + +-------------------------------------------------- +[Discarded] + +* kk/prio-queue-cascade-sift (2026-07-08) 3 commits + . prio-queue: use cascade for unfused gets + . prio-queue: extract sift_up() from prio_queue_put() + . Merge branch 'kk/prio-queue-get-put-fusion' into kk/prio-queue-cascade-sift + (this branch uses kk/prio-queue-get-put-fusion.) + + 'prio_queue_get()' has been optimized by using a cascade-down approach + (promoting the smaller child at each level and sifting up the last + element from the leaf vacancy), whereby the number of comparisons per + extract-min operation is halved in the common case. + + Retracted. + cf. + source: