To: git@vger.kernel.org
-Subject: What's cooking in git.git (Jul 2026, #08)
-X-master-at: 41365c2a9ba347870b80881c0d67454edd22fd49
-X-next-at: 94291ce1a99ad9495cc721f5c36f1b96561b32c2
+Subject: What's cooking in git.git (Jul 2026, #09)
+X-master-at: 48bbf81c29ca9a4479ec7850fe206518682cdb2f
+X-next-at: 5475c9f935080e24d3ddd42c1c5f14bda3309bc5
Bcc: lwn@lwn.net, gitster@pobox.com
-What's cooking in git.git (Jul 2026, #08)
+What's cooking in git.git (Jul 2026, #09)
-----------------------------------------
Here are the topics that have been cooking in my tree. Commits
of no activity (of course, it can be resubmitted when new interest
arises).
-The fourth batch of topics have now graduated to the 'master'
-branch.
+The fifth batch of topics have now graduated to the 'master' branch.
Copies of the source code to Git live in many repositories, and the
following is a list of the ones I push into or their mirrors. Some
--------------------------------------------------
[New Topics]
-* tl/gitweb-shorten-hashes-with-modes (2026-07-17) 1 commit
- - gitweb: shorten index hashes with trailing file modes
+* bc/rust-hash-cleanups (2026-07-18) 2 commits
+ - rust: discard hash context when finished
+ - hash: initialize context before cloning
- The object ID shortening and linking in the 'commitdiff' view of
- 'gitweb' has been corrected to work even when the index line carries
- a trailing file mode.
+ A few memory problems in the Rust interface to C hash functions have
+ been corrected. The 'Clone' implementation of 'CryptoHasher' now
+ properly initializes the context before cloning, and its 'Drop'
+ implementation now discards the context to prevent leaks.
- Needs review.
- source: <SA1PR10MB9977150C823C0751E53B150D5AF1C62@SA1PR10MB997715.namprd10.prod.outlook.com>
+ Will merge to 'next'.
+ cf. <20260719080754.GA429688@coredump.intra.peff.net>
+ source: <20260719010842.17991-1-sandals@crustytoothpaste.net>
-* kj/repo-info-more-path-keys (2026-07-17) 7 commits
- - repo: add path.git-prefix path key
- - repo: add path.grafts with absolute and relative suffix formatting
- - repo: add path.index with absolute and relative suffix formatting
- - repo: add path.hooks with absolute and relative suffix formatting
- - repo: add path.objects with absolute and relative suffix formatting
- - repo: add path.superproject-working-tree with absolute and relative suffixes
- - repo: add path.toplevel with absolute and relative suffix formatting
+* ja/doc-synopsis-style-yet-more (2026-07-19) 4 commits
+ - doc: convert git-request-pull synopsis and options to new style
+ - doc: convert git-send-email synopsis and options to new style
+ - doc: convert git-format-patch synopsis and options to new style
+ - doc: convert git-imap-send synopsis and options to new style
- The 'git repo info' command has been taught more keys to output
- paths of various repository components (such as the working tree
- root, superproject working tree, object database, etc.), supporting
- both absolute and relative path formats.
+ Synopsis and options in the documentation for 'git format-patch',
+ 'git imap-send', 'git send-email', and 'git request-pull' have been
+ updated to the modern style.
- Needs review.
- source: <20260717133015.32040-1-jayatheerthkulkarni2005@gmail.com>
+ Expecting a reroll.
+ cf. <23179740.EfDdHjke4D@piment-oiseau>
+ cf. <2418232.ElGaqSPkdT@piment-oiseau>
+ source: <pull.2185.git.1784490878.gitgitgadget@gmail.com>
-* sk/userdiff-swift (2026-07-17) 1 commit
- - userdiff: add support for Swift
+* hn/url-push-tracking (2026-07-20) 2 commits
+ - remote: resolve URL-valued push tracking remotes
+ - remote: pass repository to push tracking helper
- Userdiff patterns for Swift have been added, with support for
- Swift-specific constructs such as attributes, modifiers, failable
- initializers, and generics.
+ When the push remote is specified as a URL, the fetch refspec of a
+ uniquely matching configured remote is now used to find and update
+ the remote-tracking branch (e.g., '@{push}').
Waiting for response.
- cf. <2a3a73c5-5e90-44a3-bf6a-6e98ce5e5a59@kdbg.org>
- source: <20260717140232.6722-1-diy2903@gmail.com>
+ cf. <xmqq4ihtcx8g.fsf@gitster.g>
+ cf. <xmqqfr1dcygh.fsf@gitster.g>
+ source: <pull.2358.git.git.1784538618.gitgitgadget@gmail.com>
+--------------------------------------------------
+[Graduated to 'master']
-* ps/odb-move-loose-object-writing (2026-07-17) 10 commits
- - object-file: move logic to write loose objects
- - object-file: move `force_object_loose()`
- - object-file: force objects loose via generic interface
- - object-file: fix memory leak in `force_object_loose()`
- - odb: support setting mtime when writing objects
- - odb: lift object existence check out of the "loose" backend
- - odb: compute object hash in `odb_write_object_ext()`
- - t/u-odb-inmemory: implement wrapper for writing objects
- - odb: compute compat object ID in `odb_write_object_ext()`
- - Merge branch 'jt/receive-pack-use-odb-transactions' into HEAD
- (this branch uses jt/receive-pack-use-odb-transactions.)
+* bc/parse-options-exit-0-on-help (2026-07-07) 4 commits
+ (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
- The logic to write loose objects has been refactored and moved from
- 'object-file.c' to the loose backend source file 'odb/source-loose.c',
- making the loose backend more self-contained. This is achieved by
- first refactoring 'force_object_loose()' to use generic ODB write
- interfaces instead of loose-backend internals.
+ 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.
- Needs review.
- source: <20260717-pks-odb-move-loose-object-writing-v1-0-46446a3cb5b7@pks.im>
+ Graduated to 'master'.
+ cf. <20260708035930.GB41684@coredump.intra.peff.net>
+ source: <20260708001557.3581080-1-sandals@crustytoothpaste.net>
-* pw/rebase-fixup-fixes (2026-07-17) 2 commits
- - rebase: remember fixup -c after skipping fixup/squash
- - rebase -i: fix counting of fixups after rebase --skip
+* gr/t1410-reflog-exit-code (2026-07-08) 1 commit
+ (merged to 'next' on 2026-07-10 at d0cf55ea54)
+ + t1410-reflog.sh: avoid suppressing git's exit code in pipelines
- Two bugs in how 'git rebase' handles skipped 'fixup' and 'squash'
- commands have been fixed. One bug caused an incorrect commit count
- to be shown in the template message when multiple commands were
- skipped, and another caused the editor not to be opened when the
- final command in a chain containing 'fixup -c' was skipped.
+ 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.
- Needs review.
- source: <cover.1784304378.git.phillip.wood@dunelm.org.uk>
+ Graduated to 'master'.
+ cf. <xmqqtsq8p18x.fsf@gitster.g>
+ source: <20260709051229.40363-1-gatlavishweshwarreddy26@gmail.com>
-* tc/last-modified-bloom (2026-07-17) 4 commits
- - last-modified: keep per-path Bloom filters for wildcard pathspecs
- - last-modified: check pathspec against Bloom filter first
- - revision: expose check for paths maybe changed in Bloom filter
- - revision: move bloom keyvec precondition into function
+* hf/unpack-trees-quadratic-scan (2026-07-08) 1 commit
+ (merged to 'next' on 2026-07-12 at 744f1aede4)
+ + unpack-trees: avoid quadratic index scan in next_cache_entry()
- The 'git last-modified' command has been optimized by using Bloom
- filters. It now reuses revision walk filtering logic from 'git log'
- to pre-filter commits, and maintains per-path Bloom filters even
- when wildcard pathspecs are used.
+ 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.
- Expecting a reroll.
- cf. <20260718083757.GD22588@coredump.intra.peff.net>
- cf. <20260718081407.GC22588@coredump.intra.peff.net>
- cf. <20260718075700.GB22588@coredump.intra.peff.net>
- cf. <87cxwl1lb4.fsf@emacs.iotcl.com>
- source: <20260717-toon-speed-up-last-modified-v1-0-410418f18614@iotcl.com>
+ Graduated to 'master'.
+ cf. <xmqqpl0xqh3n.fsf@gitster.g>
+ source: <pull.2353.v2.git.git.1783546933992.gitgitgadget@gmail.com>
-* hn/bisect-auto-reset (2026-07-17) 3 commits
- - bisect: add --auto-reset to leave when done
- - bisect: let bisect_reset() optionally check out quietly
- - bisect: read run output from the open descriptor
+* jc/relnotes-2.55-rust-fix (2026-07-07) 1 commit
+ (merged to 'next' on 2026-07-10 at 444d202a75)
+ + Rust: fix description in Release Notes to 2.55
- The 'git bisect' command has been taught a '--auto-reset[=<where>]'
- option that tells the command to automatically run 'git bisect reset'
- to jump back to the original state or to the found culprit.
+ 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.
- Waiting for response.
- cf. <1139ae20-f08b-4cf2-b779-42328831e13e@kdbg.org>
- cf. <b79a479b-d279-4ac9-a368-6eb8edfed937@kdbg.org>
- source: <pull.2335.v2.git.git.1784312854.gitgitgadget@gmail.com>
+ Graduated to 'master'.
+ source: <xmqqpl0y4rpg.fsf@gitster.g>
---------------------------------------------------
-[Graduated to 'master']
-* ih/precompose-flex-array (2026-07-04) 1 commit
- (merged to 'next' on 2026-07-09 at 737a87f65e)
- + precompose_utf8: use a flex array for d_name
+* jc/submitting-patches-abandoning (2026-07-08) 1 commit
+ (merged to 'next' on 2026-07-10 at 41b9b65b23)
+ + SubmittingPatches: document how to retract a topic
- The UTF-8 precomposition wrapper on macOS has been updated to use a
- flexible array member to represent the name of a directory entry,
- preventing fortified libc checks from failing when the name is
- reallocated to be larger than 'NAME_MAX' bytes.
+ 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.
Graduated to 'master'.
- cf. <20260703050800.GA29216@tb-raspi4>
- source: <20260704233724.16928-1-ihar.hrachyshka@gmail.com>
-
-
-* jk/git-hash-cleanups (2026-07-07) 8 commits
- (merged to 'next' on 2026-07-09 at 12a4856545)
- + hash: check ctx->active flag in all wrapper functions
- + http: use idempotent git_hash_discard()
- + csum-file: use idempotent git_hash_discard()
- + hash: make git_hash_discard() idempotent
- + hash: document function pointers and wrappers
- + hash: convert remaining direct function calls
- + hash: use git_hash_init() consistently
- + Merge branch 'jk/hash-algo-leak-fixes' into jk/git-hash-cleanups
- (this branch uses jk/hash-algo-leak-fixes.)
-
- The 'git_hash_*()' wrappers have been updated to be used consistently
- across the codebase instead of direct calls to members of 'struct
- git_hash_algo', and 'git_hash_discard()' has been made idempotent to
- simplify cleanups.
+ cf. <ak6U07K1dQPlXxIp@nixos>
+ source: <xmqqpl0xv25e.fsf@gitster.g>
+
+
+* 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.
+
+ Graduated to 'master'.
+ cf. <xmqqa4ryg84e.fsf@gitster.g>
+ source: <pull.2174.v2.git.1783683577.gitgitgadget@gmail.com>
+
+
+* kk/commit-graph-topo-levels-fix (2026-07-09) 2 commits
+ (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 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.
+
+ Graduated to 'master'.
+ cf. <alFu8gZURKhYr1VE@com-79390>
+ source: <pull.2170.v2.git.1783609382.gitgitgadget@gmail.com>
+
+
+* kk/commit-reach-find-all-fix (2026-06-29) 2 commits
+ (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, fixing a bug where
+ 'git merge-base' (without '--all') could return incorrect results
+ on repositories with v1 commit graphs and clock skew.
+
+ Graduated to 'master'.
+ cf. <xmqqjyr5v1gu.fsf@gitster.g>
+ source: <pull.2162.git.1782739162.gitgitgadget@gmail.com>
+
+
+* 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.
+
+ Graduated to 'master'.
+ cf. <alECc90WZ9RPqMaA@pks.im>
+ source: <pull.2166.v3.git.1783679767.gitgitgadget@gmail.com>
+
+
+* mm/test-grep-lint (2026-07-05) 6 commits
+ (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
+ printed on failure for easier debugging. A new 'greplint' linter has
+ been introduced to detect and prevent new bare 'grep' assertions from
+ being added to the test suite.
Graduated to 'master'.
- cf. <ak4E4-jmgYFSI75O@pks.im>
- source: <20260708035235.GA41491@coredump.intra.peff.net>
-
-
-* jk/hash-algo-leak-fixes (2026-07-02) 9 commits
- (merged to 'next' on 2026-07-09 at 7db7b74972)
- + hash: add platform-specific discard functions
- + hash: fix memory leak copying sha256 gcrypt handles
- + http: discard hash in dumb-http http_object_request
- + check_stream_oid(): discard hash on read error
- + patch-id: discard hash when done
- + csum-file: provide a function to release checkpoints
- + csum-file: always finalize or discard hash
- + hash: add discard primitive
- + csum-file: drop discard_hashfile()
- (this branch is used by jk/git-hash-cleanups.)
-
- Various code paths that initialize a cryptographic hash context but
- bail out or finish without calling 'git_hash_final()' have been taught
- to call 'git_hash_discard()' to release allocated resources, fixing
- memory leaks when Git is built with non-default backends like
- 'OpenSSL' or 'libgcrypt'.
+ cf. <xmqqtsqedxmt.fsf@gitster.g>
+ source: <pull.2135.v4.git.1783314119.gitgitgadget@gmail.com>
+
+
+* ps/reftable-hardening (2026-07-03) 12 commits
+ (merged to 'next' on 2026-07-10 at b8f4dd0ab9)
+ + reftable/table: fix OOB read on truncated table
+ + 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.
Graduated to 'master'.
- cf. <aktIIKuReMxJmDsi@pks.im>
- source: <20260702075234.GA1548258@coredump.intra.peff.net>
+ cf. <877bn5obz9.fsf@emacs.iotcl.com>
+ source: <20260703-pks-reftable-hardening-v3-0-b87c555b9920@pks.im>
-* js/ci-dockerized-pid-limit (2026-07-04) 1 commit
- (merged to 'next' on 2026-07-09 at cd80e673a5)
- + ci(dockerized): raise the PID limit for private repositories
+* ps/setup-split-discovery-and-setup (2026-07-07) 16 commits
+ (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
- Dockerized CI jobs running in private GitHub repositories have been
- adjusted to use explicit process and file limits, preventing resource
- exhaustion errors on private runners.
+ The repository discovery and repository configuration phases, which
+ were previously intertwined in 'setup.c', have been split. Repository
+ discovery has been updated to populate a 'struct repo_discovery'
+ without modifying the repository state, which is then taken by
+ repository configuration to initialize the repository, paving the way
+ for clean unification of repository configuration.
Graduated to 'master'.
- cf. <xmqqh5medmzh.fsf@gitster.g>
- source: <pull.2164.v2.git.1783155124926.gitgitgadget@gmail.com>
-
-
-* js/coverity-fixes (2026-07-05) 12 commits
- (merged to 'next' on 2026-07-09 at 1823fe297c)
- + mingw: make `exit_process()` own the process handle on all paths
- + fsmonitor: plug token-data leak on early daemon-startup failures
- + reftable/table: release filter on error path
- + imap-send: avoid leaking the IMAP upload buffer
- + worktree: fix resource leaks when branch creation fails
- + submodule: fix cwd leak in `get_superproject_working_tree()`
- + dir: free allocations on parse-error paths in `read_one_dir()`
- + line-log: avoid redundant copy that leaks in process_ranges
- + run-command: avoid `close(-1)` in `start_command()` error paths
- + download_https_uri_to_file(): do not leak fd upon failure
- + loose: avoid closing invalid fd on error path
- + load_one_loose_object_map(): fix resource leak
-
- Various resource leaks, invalid file descriptor closures, and process
- handle ownership issues flagged by Coverity have been fixed.
+ cf. <87h5m9om0j.fsf@emacs.iotcl.com>
+ source: <20260707-pks-setup-split-discovery-and-setup-v2-0-aab372cd227c@pks.im>
+
+
+* sn/osxkeychain-rust-universal (2026-07-07) 3 commits
+ (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
+ for each target triple listed in 'RUST_TARGETS' and combining them
+ using the macOS 'lipo' tool. The 'git-credential-osxkeychain' helper
+ has been updated to link against '$(RUST_LIB)' when 'Rust' is enabled.
Graduated to 'master'.
- cf. <xmqqa4s238lg.fsf@gitster.g>
- source: <pull.2163.v2.git.1783239870.gitgitgadget@gmail.com>
+ cf. <xmqq4ii9teym.fsf@gitster.g>
+ source: <pull.2288.v8.git.git.1783480879.gitgitgadget@gmail.com>
-* js/wincred-fixes (2026-07-16) 2 commits
- (merged to 'next' on 2026-07-16 at 8c5927f06f)
- + wincred: prevent silent credential loss when storing OAuth tokens
- + wincred: avoid memory corruption when erasing a credential
+* tc/bundle-uri-empty-fix (2026-07-08) 2 commits
+ (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 'wincred' credential helper has been updated to avoid memory
- corruption when erasing credentials and to prevent silent credential
- loss when storing OAuth tokens, by correcting buffer allocations and
- arguments passed to safe-CRT APIs.
+ The client-side parser of the server-advertised bundle-URI list has
+ been updated to drain the remaining response in order to avoid
+ protocol desynchronization when the server sends a misconfigured list.
+ Also, the server-side has been taught to omit empty configuration
+ values instead of sending invalid key-value lines.
Graduated to 'master'.
- source: <pull.2182.git.1784212072.gitgitgadget@gmail.com>
+ cf. <xmqqtsq9qj5k.fsf@gitster.g>
+ source: <20260708-toon-bundle-uri-no-uri-v2-0-09a03d8db556@iotcl.com>
-* mm/sideband-ansi-sgr-colon-fix (2026-05-13) 1 commit
- (merged to 'next' on 2026-07-09 at fd2b979b73)
- + sideband: allow ANSI SGR with colon-separated subfields
+* ty/migrate-ignorecase (2026-06-19) 2 commits
+ (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 sideband demultiplexer has been updated to recognize ANSI SGR
- escape sequences that use colon-separated subfields (e.g., for
- 256-color or true-color codes).
+ 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.
Graduated to 'master'.
- cf. <8addf7c0-ae39-f1c0-20ab-52114702aaf6@gmx.de>
- source: <20260513070803.163546-1-grawity@nullroute.lt>
-
-
-* ps/t-fixes-for-git-test-long (2026-07-05) 9 commits
- (merged to 'next' on 2026-07-09 at c5b13248c8)
- + gitlab-ci: enable "GIT_TEST_LONG"
- + gitlab-ci: disable RAM disk on macOS jobs
- + t: use `test_bool_env` to parse GIT_TEST_LONG
- + t7900: clean up large EXPENSIVE repository
- + t7508: skip EXPENSIVE test that is broken without SIZE_T_IS_64BIT
- + t5608: reduce maximum disk usage
- + t4141: fix inefficient use of dd(1)
- + t0021: skip EXPENSIVE test that is broken without SIZE_T_IS_64BIT
- + README: add GitLab CI badge to make it more discoverable
-
- Various test scripts have been updated to clean up large temporary
- files and repositories, reducing peak disk usage during testing.
- Also, expensive tests have been disabled on platforms that lack
- sufficient resources (like 32-bit platforms and Windows CI runners),
- and the long test suite has been enabled in GitLab CI.
+ cf. <xmqqechaga7p.fsf@gitster.g>
+ source: <20260619155152.642760-1-cat@malon.dev>
+
+
+* wy/doc-myfirstcontribution-trim-quotes (2026-06-11) 1 commit
+ (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.
Graduated to 'master'.
- cf. <20260707043026.GB677056@coredump.intra.peff.net>
- source: <20260706-b4-pks-t-fixes-for-GIT-TEST-LONG-v3-0-4f6c5a37fd1f@pks.im>
+ cf. <xmqqcxxwljue.fsf@gitster.g>
+ source: <080402ff0ac8127b654dccea59a1bf643df62a5c.1781186476.git.wy@wyuan.org>
--------------------------------------------------
[Stalled]
--------------------------------------------------
[Cooking]
+* tl/gitweb-shorten-hashes-with-modes (2026-07-17) 1 commit
+ - gitweb: shorten index hashes with trailing file modes
+
+ The object ID shortening and linking in the 'commitdiff' view of
+ 'gitweb' has been corrected to work even when the index line carries
+ a trailing file mode.
+
+ Needs review.
+ source: <SA1PR10MB9977150C823C0751E53B150D5AF1C62@SA1PR10MB997715.namprd10.prod.outlook.com>
+
+
+* kj/repo-info-more-path-keys (2026-07-17) 7 commits
+ - repo: add path.git-prefix path key
+ - repo: add path.grafts with absolute and relative suffix formatting
+ - repo: add path.index with absolute and relative suffix formatting
+ - repo: add path.hooks with absolute and relative suffix formatting
+ - repo: add path.objects with absolute and relative suffix formatting
+ - repo: add path.superproject-working-tree with absolute and relative suffixes
+ - repo: add path.toplevel with absolute and relative suffix formatting
+
+ The 'git repo info' command has been taught more keys to output
+ paths of various repository components (such as the working tree
+ root, superproject working tree, object database, etc.), supporting
+ both absolute and relative path formats.
+
+ Waiting for response.
+ cf. <845D6852-98F5-4168-82CD-90B3B476BCF5@gmail.com>
+ cf. <DB49CF15-4980-4213-8463-4C0FE2EC8438@gmail.com>
+ source: <20260717133015.32040-1-jayatheerthkulkarni2005@gmail.com>
+
+
+* sk/userdiff-swift (2026-07-17) 1 commit
+ - userdiff: add support for Swift
+
+ Userdiff patterns for Swift have been added, with support for
+ Swift-specific constructs such as attributes, modifiers, failable
+ initializers, and generics.
+
+ Expecting a reroll.
+ cf. <20260720095335.66241-1-diy2903@gmail.com>
+ source: <20260717140232.6722-1-diy2903@gmail.com>
+
+
+* ps/odb-move-loose-object-writing (2026-07-17) 10 commits
+ - object-file: move logic to write loose objects
+ - object-file: move `force_object_loose()`
+ - object-file: force objects loose via generic interface
+ - object-file: fix memory leak in `force_object_loose()`
+ - odb: support setting mtime when writing objects
+ - odb: lift object existence check out of the "loose" backend
+ - odb: compute object hash in `odb_write_object_ext()`
+ - t/u-odb-inmemory: implement wrapper for writing objects
+ - odb: compute compat object ID in `odb_write_object_ext()`
+ - Merge branch 'jt/receive-pack-use-odb-transactions' into HEAD
+ (this branch uses jt/receive-pack-use-odb-transactions.)
+
+ The logic to write loose objects has been refactored and moved from
+ 'object-file.c' to the loose backend source file 'odb/source-loose.c',
+ making the loose backend more self-contained. This is achieved by
+ first refactoring 'force_object_loose()' to use generic ODB write
+ interfaces instead of loose-backend internals.
+
+ Needs review.
+ source: <20260717-pks-odb-move-loose-object-writing-v1-0-46446a3cb5b7@pks.im>
+
+
+* pw/rebase-fixup-fixes (2026-07-17) 2 commits
+ - rebase: remember fixup -c after skipping fixup/squash
+ - rebase -i: fix counting of fixups after rebase --skip
+
+ Two bugs in how 'git rebase' handles skipped 'fixup' and 'squash'
+ commands have been fixed. One bug caused an incorrect commit count to
+ be shown in the template message when multiple commands were skipped,
+ and another caused the editor not to be opened when the final command
+ in a chain containing 'fixup -c' was skipped.
+
+ Needs review.
+ source: <cover.1784304378.git.phillip.wood@dunelm.org.uk>
+
+
+* tc/last-modified-bloom (2026-07-17) 4 commits
+ - last-modified: keep per-path Bloom filters for wildcard pathspecs
+ - last-modified: check pathspec against Bloom filter first
+ - revision: expose check for paths maybe changed in Bloom filter
+ - revision: move bloom keyvec precondition into function
+
+ The 'git last-modified' command has been optimized by using Bloom
+ filters. It now reuses revision walk filtering logic from 'git log'
+ to pre-filter commits, and maintains per-path Bloom filters even when
+ wildcard pathspecs are used.
+
+ Expecting a reroll.
+ cf. <87cxwl1lb4.fsf@emacs.iotcl.com>
+ source: <20260717-toon-speed-up-last-modified-v1-0-410418f18614@iotcl.com>
+
+
+* hn/bisect-reset-when-found (2026-07-20) 2 commits
+ - bisect: add --reset-when-found to leave when done
+ - bisect: let bisect_reset() optionally check out quietly
+
+ The 'git bisect' command has been taught a
+ '--reset-when-found[=<where>]' option that tells the command to
+ automatically run 'git bisect reset' to jump back to the original
+ state or to the found culprit.
+
+ Will merge to 'next'?
+ cf. <xmqqldb5d1d9.fsf@gitster.g>
+ source: <pull.2335.v3.git.git.1784538619.gitgitgadget@gmail.com>
+
+
* js/coverity-unchecked-returns-fix (2026-07-14) 11 commits
- bisect: handle dup() failure when redirecting stdout
- bisect: check get_terms return at all call sites
* jc/submodule-helper-avoid-zu (2026-07-15) 1 commit
- - submodule--helper: avoid use of %zu for now
+ (merged to 'next' on 2026-07-19 at b12d5d76f5)
+ + submodule--helper: avoid use of %zu for now
- An accidental use of '%zu' format flag in 'git submodule--helper'
- has been corrected to use 'PRIuMAX' and cast the value to
- 'uintmax_t', to avoid portability issues.
+ An accidental use of the '%zu' format specifier in 'git
+ submodule--helper' has been corrected to use 'PRIuMAX' and cast the
+ value to 'uintmax_t' to avoid portability issues.
- Will merge to 'next'.
+ Will merge to 'master'.
source: <xmqq4ii0ko9t.fsf@gitster.g>
timestamps in the traces.
Waiting for response.
- cf. <alpXW5U6sndZtgqV@com-79390>
+ cf. <xmqqzezlhgyo.fsf@gitster.g>
+ cf. <al4yrXXoZiHLwSvE@com-79390>
source: <pull.2178.git.1784131932489.gitgitgadget@gmail.com>
* rs/remote-curl-simplify-push-specs (2026-07-14) 1 commit
- - remote-curl: simplify passing of push specs
+ (merged to 'next' on 2026-07-19 at ff1b5528ba)
+ + remote-curl: simplify passing of push specs
The passing of push destination specifications in the 'remote-curl'
helper has been simplified by removing the explicit 'count' parameter
and relying on the NULL-termination of the array.
- Will merge to 'next'.
+ Will merge to 'master'.
source: <935883f3-3be4-4c51-9711-5208b9ef9ca1@web.de>
+ revision: fix --no-walk path filtering regression
+ Merge branch 'kk/streaming-walk-pqueue' into kk/no-walk-pathspec-fix
- The 'git rev-list --no-walk' command lost pathspec filtering when the
- streaming walk was refactored, which has been corrected.
+ The 'git rev-list --no-walk' command has been corrected to restore
+ pathspec filtering, which was lost when the streaming walk was
+ refactored.
Will merge to 'master'.
source: <pull.2181.git.1784198879711.gitgitgadget@gmail.com>
Waiting for response.
cf. <xmqq4ihyehyb.fsf@gitster.g>
- cf. <xmqqcxwmeiwq.fsf@gitster.g>
source: <20260716165517.433849-1-christian.couder@gmail.com>
* ps/copy-wo-the-repository (2026-07-16) 1 commit
- - copy: drop dependency on `the_repository`
+ (merged to 'next' on 2026-07-20 at 9e38da0efc)
+ + copy: drop dependency on `the_repository`
The 'copy_file()' and 'copy_file_with_time()' functions have been
refactored to take a repository parameter, allowing the removal of the
implicit dependency on the global 'the_repository' variable in
'copy.c'.
- Will merge to 'next'?
+ Will merge to 'master'.
cf. <b0df688a-3b26-48f6-8b1c-98530483885e@gmail.com>
cf. <xmqqo6g54k7m.fsf@gitster.g>
source: <20260716-pks-copy-wo-the-repository-v2-1-8f5e32942929@pks.im>
* ps/refspec-wo-the-repository (2026-07-16) 3 commits
- - refspec: stop depending on `the_repository`
- - refspec: let callers pass in hash algorithm when parsing items
- - refspec: group related structures and functions
+ (merged to 'next' on 2026-07-20 at 31044c3fc9)
+ + refspec: stop depending on `the_repository`
+ + refspec: let callers pass in hash algorithm when parsing items
+ + refspec: group related structures and functions
The dependency on the global 'the_repository' variable in the
'refspec.c' API has been removed by passing the hash algorithm
explicitly to refspec-parsing functions and storing it in 'struct
refspec'.
- Will merge to 'next'.
+ Will merge to 'master'.
source: <20260716-pks-refspec-wo-the-repository-v1-0-aa40844d067f@pks.im>
source: <20260716-pks-reintroduce-writev-v1-0-ea9038c884bc@pks.im>
-* sc/wt-status-avoid-quadratic-insertion (2026-07-17) 1 commit
- - wt-status: avoid repeated insertion for untracked paths
+* sc/wt-status-avoid-quadratic-insertion (2026-07-18) 1 commit
+ (merged to 'next' on 2026-07-20 at 9330d42a4a)
+ + wt-status: avoid repeated insertion for untracked paths
The enumeration of untracked and ignored files in 'git status' has
been optimized by avoiding quadratic complexity insertion into string
lists, reducing the construction cost from O(n^2) to O(n log n).
- Will merge to 'next'.
- (a newer iteration v3 exists as <20260718081449.26747-1-sahityajb@gmail.com>)
+ Will merge to 'master'.
cf. <20260718083828.GE22588@coredump.intra.peff.net>
- source: <20260717144620.259031-1-sahityajb@gmail.com>
+ source: <20260718081449.26747-1-sahityajb@gmail.com>
* tb/send-pack-no-ref-delta (2026-07-12) 4 commits
on the 'the_repository' global variable, and their callers have been
updated to use the repository-aware variants.
- Waiting for response.
- cf. <aldYVPyMl40-Myp0@pks.im>
- cf. <aldYTuMvN-8EMvYK@pks.im>
+ Will merge to 'next'?
+ cf. <aldYW4TPUqgDMRcf@pks.im>
cf. <3c0a8031-7082-422a-b474-938418682b60@web.de>
+ cf. <xmqqmrvmn6a5.fsf@gitster.g>
source: <20260714175956.54601-1-l.s.r@web.de>
'--empty' option, allowing it to be dropped, kept, or to halt the
rebase.
+ Ejected due to conflicts with 'pw/rebase-drop-notes-with-commit'.
+
Waiting for response.
cf. <690b965e-5f07-4aa4-a64c-96e60a86d73b@gmail.com>
source: <20260711-fz-autosquash-empty-v3-1-d227b63eb511@gmail.com>
source: <20260708-submodule-init-v1-1-719456077262@atmark-techno.com>
-* hf/unpack-trees-quadratic-scan (2026-07-08) 1 commit
- (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 'master'.
- cf. <xmqqpl0xqh3n.fsf@gitster.g>
- source: <pull.2353.v2.git.git.1783546933992.gitgitgadget@gmail.com>
-
-
-* jc/relnotes-2.55-rust-fix (2026-07-07) 1 commit
- (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 'master'.
- source: <xmqqpl0y4rpg.fsf@gitster.g>
-
-
-* jc/submitting-patches-abandoning (2026-07-08) 1 commit
- (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 'master'.
- cf. <ak6U07K1dQPlXxIp@nixos>
- source: <xmqqpl0xv25e.fsf@gitster.g>
-
-
* 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
Apache handles concurrent requests.
Needs review.
- source: <pull.2171.v2.git.1783704657.gitgitgadget@gmail.com>
-
-
-* ps/odb-pluggable-housekeeping (2026-07-12) 12 commits
- - odb: make optimizations pluggable
- - builtin/gc: fix signedness issues in ODB-related functionality
- - builtin/gc: refactor ODB optimizations to operate on "files" source
- - builtin/gc: introduce `odb_optimize_required()`
- - builtin/gc: move geometric repacking into `odb_optimize()`
- - builtin/gc: introduce object database optimization options
- - builtin/gc: inline config values specific to the "files" backend
- - builtin/gc: make repack arguments self-contained
- - builtin/gc: extract object database optimizations into separate function
- - builtin/gc: move worktree and rerere tasks before object optimizations
- - odb: run "pre-auto-gc" hook for all maintenance tasks
- - t7900: simplify how we check for maintenance tasks
-
- Object database housekeeping in 'git gc' and 'git maintenance' has
- been refactored to be pluggable. The files-backend specific logic,
- including incremental and geometric repacking as well as object
- pruning, has been moved out of the command implementation and into the
- files object database source, enabling future alternative object
- database backends to implement their own housekeeping services.
-
- Waiting for response.
- cf. <xmqqwluyyhv1.fsf@gitster.g>
- source: <20260713-b4-pks-odb-optimize-v2-0-9c2c3ee94b38@pks.im>
-
-
-* tc/bundle-uri-empty-fix (2026-07-08) 2 commits
- (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 the server-advertised bundle-URI list has
- been updated to drain the remaining response in order to avoid
- protocol desynchronization when the server sends a misconfigured list.
- Also, the server-side has been taught to omit empty configuration
- values instead of sending invalid key-value lines.
-
- Will merge to 'master'.
- cf. <xmqqtsq9qj5k.fsf@gitster.g>
- source: <20260708-toon-bundle-uri-no-uri-v2-0-09a03d8db556@iotcl.com>
-
-
-* gr/t1410-reflog-exit-code (2026-07-08) 1 commit
- (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 'master'.
- cf. <xmqqtsq8p18x.fsf@gitster.g>
- source: <20260709051229.40363-1-gatlavishweshwarreddy26@gmail.com>
+ source: <pull.2171.v2.git.1783704657.gitgitgadget@gmail.com>
-* 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
+* ps/odb-pluggable-housekeeping (2026-07-12) 12 commits
+ - odb: make optimizations pluggable
+ - builtin/gc: fix signedness issues in ODB-related functionality
+ - builtin/gc: refactor ODB optimizations to operate on "files" source
+ - builtin/gc: introduce `odb_optimize_required()`
+ - builtin/gc: move geometric repacking into `odb_optimize()`
+ - builtin/gc: introduce object database optimization options
+ - builtin/gc: inline config values specific to the "files" backend
+ - builtin/gc: make repack arguments self-contained
+ - builtin/gc: extract object database optimizations into separate function
+ - builtin/gc: move worktree and rerere tasks before object optimizations
+ - odb: run "pre-auto-gc" hook for all maintenance tasks
+ - t7900: simplify how we check for maintenance tasks
- Various code paths have been hardened against potential NULL-pointer
- dereferences and invalid file descriptor accesses flagged by
- Coverity.
+ Object database housekeeping in 'git gc' and 'git maintenance' has
+ been refactored to be pluggable. The files-backend specific logic,
+ including incremental and geometric repacking as well as object
+ pruning, has been moved out of the command implementation and into the
+ files object database source, enabling future alternative object
+ database backends to implement their own housekeeping services.
- Will merge to 'master'.
- cf. <xmqqa4ryg84e.fsf@gitster.g>
- source: <pull.2174.v2.git.1783683577.gitgitgadget@gmail.com>
+ Waiting for response.
+ cf. <xmqqwluyyhv1.fsf@gitster.g>
+ source: <20260713-b4-pks-odb-optimize-v2-0-9c2c3ee94b38@pks.im>
* ps/odb-for-each-object-filter (2026-07-14) 10 commits
* ps/refs-wo-the-repository (2026-07-15) 7 commits
- - refs: remove remaining uses of `the_repository`
- - worktree: pass repository to public functions
- - worktree: pass repository to file-local functions
- - worktree: refactor code to use available repositories
- - refs/files: drop `USE_THE_REPOSITORY_VARIABLE`
- - refs/packed: de-globalize handling of "core.packedRefsTimeout"
- - Merge branch 'ps/refs-writing-subcommands' into ps/refs-wo-the-repository
+ (merged to 'next' on 2026-07-19 at 12685f410c)
+ + 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: de-globalize handling of "core.packedRefsTimeout"
+ + Merge branch 'ps/refs-writing-subcommands' into ps/refs-wo-the-repository
The ref subsystem and the worktree API have been refactored to pass a
repository pointer down the call chain, allowing them to drop
the handling of the 'core.packedRefsTimeout' configuration has been
moved into the per-repository ref store structure.
- Will merge to 'next'.
- source: <20260716-pks-refs-wo-the-repository-v3-0-db0a804e0224@pks.im>
-
-
-* kk/commit-graph-topo-levels-fix (2026-07-09) 2 commits
- (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 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 'master'.
- cf. <alFu8gZURKhYr1VE@com-79390>
- source: <pull.2170.v2.git.1783609382.gitgitgadget@gmail.com>
+ source: <20260716-pks-refs-wo-the-repository-v3-0-db0a804e0224@pks.im>
* ds/sparse-index-ita-crash (2026-07-06) 1 commit
source: <20260706115816.20267-1-ijackson@chiark.greenend.org.uk>
-* 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.
-
- Will merge to 'master'.
- cf. <alECc90WZ9RPqMaA@pks.im>
- source: <pull.2166.v3.git.1783679767.gitgitgadget@gmail.com>
-
-
* jm/t0213-skip-emulated-ancestry-tests (2026-07-06) 1 commit
- t0213: skip ancestry tests under user-mode emulation
the ancestry collector reports the expected process names rather than
the emulator binary name.
- Needs review.
+ Will merge to 'next'.
+ cf. <xmqqa4s38rbe.fsf@gitster.g>
source: <pull.2168.git.1783359242130.gitgitgadget@gmail.com>
-* bc/parse-options-exit-0-on-help (2026-07-07) 4 commits
- (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 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 'master'.
- cf. <20260708035930.GB41684@coredump.intra.peff.net>
- source: <20260708001557.3581080-1-sandals@crustytoothpaste.net>
-
-
* zy/apply-abandoned-header-fix (2026-07-01) 1 commit
- apply: avoid leaking abandoned git-header state
source: <20260711160447.99708-1-marcelomlage@usp.br>
-* sn/osxkeychain-rust-universal (2026-07-07) 3 commits
- (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
- for each target triple listed in 'RUST_TARGETS' and combining them
- 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 'master'.
- cf. <xmqq4ii9teym.fsf@gitster.g>
- source: <pull.2288.v8.git.git.1783480879.gitgitgadget@gmail.com>
-
-
* cl/conditional-config-on-worktree-path (2026-07-09) 2 commits
(merged to 'next' on 2026-07-15 at 86ca33c437)
+ config: add "worktree" and "worktree/i" includeIf conditions
source: <20260710-includeif-worktree-v8-0-04686d8a616c@black-desk.cn>
-* kk/commit-reach-find-all-fix (2026-06-29) 2 commits
- (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, 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 'master'.
- cf. <xmqqjyr5v1gu.fsf@gitster.g>
- source: <pull.2162.git.1782739162.gitgitgadget@gmail.com>
-
-
* bl/t7412-use-test-path-helpers (2026-06-29) 1 commit
- submodule absorbgitdirs tests: use test_* helper functions
source: <20260630020220.1559190-1-bblima@usp.br>
-* ps/setup-split-discovery-and-setup (2026-07-07) 16 commits
- (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
- discovery has been updated to populate a 'struct repo_discovery'
- without modifying the repository state, which is then taken by
- repository configuration to initialize the repository, paving the way
- for clean unification of repository configuration.
-
- Will merge to 'master'.
- cf. <87h5m9om0j.fsf@emacs.iotcl.com>
- source: <20260707-pks-setup-split-discovery-and-setup-v2-0-aab372cd227c@pks.im>
-
-
* pw/rebase-drop-notes-with-commit (2026-07-15) 9 commits
- - sequencer: do not record dropped commits as rewritten
- - sequencer: use an enum to represent result of picking a commit
- - sequencer: simplify pick_one_commit()
- - sequencer: remove unnecessary condition in pick_one_commit()
- - sequencer: simplify handling of fixup with conflicts
- - sequencer: remove unnecessary "or" in pick_one_commit()
- - sequencer: never reschedule on failed commit
- - sequencer: be more careful with external merge
- - t3400: restore coverage for note copying with apply backend
+ (merged to 'next' on 2026-07-20 at 5475c9f935)
+ + sequencer: do not record dropped commits as rewritten
+ + sequencer: use an enum to represent result of picking a commit
+ + sequencer: simplify pick_one_commit()
+ + sequencer: remove unnecessary condition in pick_one_commit()
+ + sequencer: simplify handling of fixup with conflicts
+ + sequencer: remove unnecessary "or" in pick_one_commit()
+ + sequencer: never reschedule on failed commit
+ + sequencer: be more careful with external merge
+ + t3400: restore coverage for note copying with apply backend
The rebase post-rewrite notes-copying logic has been corrected. When
a commit is dropped during rebase (e.g., because its changes are
already upstream), it is no longer recorded as rewritten, preventing
its notes from being copied to an unrelated commit.
- Needs review.
+ Will merge to 'master'.
+ cf. <xmqqy0f5d25g.fsf@gitster.g>
source: <cover.1784128921.git.phillip.wood@dunelm.org.uk>
source: <20260710163722.2962278-1-jltobler@gmail.com>
-* ps/reftable-hardening (2026-07-03) 12 commits
- (merged to 'next' on 2026-07-10 at b8f4dd0ab9)
- + reftable/table: fix OOB read on truncated table
- + 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 'master'.
- cf. <877bn5obz9.fsf@emacs.iotcl.com>
- source: <20260703-pks-reftable-hardening-v3-0-b87c555b9920@pks.im>
-
-
* ty/migrate-excludes-file (2026-07-13) 10 commits
- repository: adjust the comment of config_values_private_
- environment: move object_creation_mode into repo_config_values
Ejected for now, as it causes too many evil merges with other topics.
- Waiting for response.
+ Needs review.
cf. <alR9GDNTbdjWB4dq@szeder.dev>
+ cf. <2d455ecf-972e-e3ce-54bc-683050c04282@gmx.de>
source: <20260713-pks-libgit-in-subdir-v4-0-696240876eb1@pks.im>
-* ty/migrate-ignorecase (2026-06-19) 2 commits
- (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.
-
- Will merge to 'master'.
- cf. <xmqqechaga7p.fsf@gitster.g>
- source: <20260619155152.642760-1-cat@malon.dev>
-
-
* mm/line-log-limited-ops (2026-06-27) 7 commits
- diffcore-pickaxe: scope -G to the -L tracked range
- diff: support --check with -L line ranges
source: <pull.2152.v2.git.1782581342.gitgitgadget@gmail.com>
-* hn/history-squash (2026-07-15) 5 commits
+* hn/history-squash (2026-07-20) 5 commits
- history: re-edit a squash with every message
- sequencer: share the squash message marker helpers and flags
- history: add squash subcommand to fold a range
descendants replayed on top.
Needs review.
- source: <pull.2337.v9.git.git.1784128573.gitgitgadget@gmail.com>
-
-
-* wy/doc-myfirstcontribution-trim-quotes (2026-06-11) 1 commit
- (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 'master'.
- cf. <xmqqcxxwljue.fsf@gitster.g>
- source: <080402ff0ac8127b654dccea59a1bf643df62a5c.1781186476.git.wy@wyuan.org>
+ source: <pull.2337.v10.git.git.1784536024.gitgitgadget@gmail.com>
* tb/midx-incremental-custom-base (2026-06-12) 3 commits
source: <cover.1781294771.git.me@ttaylorr.com>
-* mm/test-grep-lint (2026-07-05) 6 commits
- (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
- printed on failure for easier debugging. A new 'greplint' linter has
- been introduced to detect and prevent new bare 'grep' assertions from
- being added to the test suite.
-
- Will merge to 'master'.
- cf. <xmqqtsqedxmt.fsf@gitster.g>
- source: <pull.2135.v4.git.1783314119.gitgitgadget@gmail.com>
-
-
* td/ref-filter-memoize-contains (2026-06-12) 3 commits
- - commit-reach: die on contains walk errors
- - ref-filter: memoize --contains with generations
- - commit-reach: reject cycles in contains walk
+ (merged to 'next' on 2026-07-19 at 5b640e33a1)
+ + commit-reach: die on contains walk errors
+ + 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.
- Will merge to 'next'.
+ Will merge to 'master'.
cf. <20260716091924.GB1212956@coredump.intra.peff.net>
source: <20260612-ref-filter-memoized-contains-v4-0-5ed39fd001dd@gmail.com>
source: <pull.2120.v5.git.1784149323.gitgitgadget@gmail.com>
-* ty/migrate-trust-executable-bit (2026-07-16) 4 commits
+* ty/migrate-trust-executable-bit (2026-07-20) 4 commits
- environment: move has_symlinks into repo_config_values
- environment: move trust_executable_bit into repo_config_values
- read-cache: pass 'repo' to 'ce_mode_from_stat()'
configuration) has been migrated into 'struct repo_config_values' to
tie it to a specific repository instance.
- Waiting for response.
- cf. <xmqq8q7961xe.fsf@gitster.g>
- source: <20260717063559.1633567-1-cat@malon.dev>
+ Needs review.
+ source: <20260720105335.3202013-1-cat@malon.dev>
* za/completion-hide-dotfiles (2026-06-20) 2 commits
to remove local branches that are already merged into their tracked
remote-tracking branches.
- Needs review.
+ Expecting a reroll.
cf. <xmqqtspvptqc.fsf@gitster.g>
+ cf. <CAHwyqnXdaPeO12+p=_+_ttrknV0-VqTMnH-suS66yZ4stsBKnQ@mail.gmail.com>
source: <pull.2285.v19.git.git.1784053493.gitgitgadget@gmail.com>
* ps/shift-root-in-graph (2026-07-14) 7 commits
- - graph: add --[no-]graph-indent and log.graphIndent
- - graph: move config reading into graph_read_config()
- - graph: wrap cascading commits after 4 columns
- - 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
+ (merged to 'next' on 2026-07-19 at bebf13a239)
+ + graph: add --[no-]graph-indent and log.graphIndent
+ + graph: move config reading into graph_read_config()
+ + graph: wrap cascading commits after 4 columns
+ + 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
'root' commits (and commits that become roots due to history
simplification) by indenting them, preventing them from appearing
falsely related to unrelated commits rendered immediately above them.
- Will merge to 'next'.
+ Will merge to 'master'.
cf. <CA+J6zkQNzEAhhY74qDrOwfFVrshEF7YFxWRRkwE3ttJo15ZbAg@mail.gmail.com>
source: <20260714-ps-pre-commit-indent-v12-0-d50938e006df@gmail.com>
- 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.
Needs review.
+ cf. <xmqqse5en8wz.fsf@gitster.g>
source: <pull.2149.v6.git.1783776466.gitgitgadget@gmail.com>
-
---------------------------------------------------
-[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
-
- '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. <CAL71e4PRVYfUWc-c+6XHTwtADqrbub9ykbo+rPyramDhJw=Rfg@mail.gmail.com>
- source: <pull.2132.v3.git.1783532989.gitgitgadget@gmail.com>
-
-
-* 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.
-
- Discarded.
- cf. <xmqqmrw2zavx.fsf@gitster.g>
- source: <20260602161150.1527493-1-aplattner@nvidia.com>
-
-
-* dk/meson-enable-use-nsec-build (2026-06-20) 1 commit
- . meson: wire up USE_NSEC build knob
-
- The 'USE_NSEC' build knob, which enables support for sub-second file
- timestamp resolution, has been wired up to the Meson build system.
-
- Discarded.
- cf. <xmqqa4rx9mb5.fsf@gitster.g>
- cf. <45F2C180-1DE1-4371-869B-BF605B64E01A@gmail.com>
- source: <c4c5ade901ff95b0f95939ea818870e4f3d59da1.1781971201.git.ben.knoble+github@gmail.com>