Subject: What's cooking in git.git (Nov 2025, #01; Mon, 3)

From: Junio C Hamano <[email-masked]>
Date: Mon, 03 Nov 2025 09:24:00 -0800

Here are the topics that have been cooking in my tree.  Commits
prefixed with '+' are in 'next' (being in 'next' is a sign that a
topic is stable enough to be used and are candidate to be in a
future release).  Commits prefixed with '-' are only in 'seen', and
aren't considered "accepted" at all and may be annotated with an URL
to a message that raises issues but they are no means exhaustive.  A
topic without enough support may be discarded after a long period of
no activity (of course they can be resubmit when new interests
arise).

Git 2.52-rc0 has been tagged.  Later this week we'd go into
pre-release freeze after tagging 2.52-rc1 and hopefully we can have
a reasonably solid Git 2.52 in the middle of this month.  Until then
let's concentrate on finding and fixing regressions introduced
during this cycle, if any.

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
repositories have only a subset of branches.

With maint, master, next, seen, todo:

	git://git.kernel.org/pub/scm/git/git.git/
	git://repo.or.cz/alt-git.git/
	https://kernel.googlesource.com/pub/scm/git/git/
	https://github.com/git/git/
	https://gitlab.com/git-scm/git/

With all the integration branches and topics broken out:

	https://github.com/gitster/git/

Even though the preformatted documentation in HTML and man format
are not sources, they are published in these repositories for
convenience (replace "htmldocs" with "manpages" for the manual
pages):

	git://git.kernel.org/pub/scm/git/git-htmldocs.git/
	https://github.com/gitster/git-htmldocs.git/

Release tarballs are available at:

	https://www.kernel.org/pub/software/scm/git/

--------------------------------------------------
[Graduated to 'master']

* jk/diff-patch-dry-run-cleanup (2025-10-24) 6 commits
  (merged to 'next' on 2025-10-26 at 28426e9102)
 + diff: simplify run_external_diff() quiet logic
 + diff: drop dry-run redirection to /dev/null
 + diff: replace diff_options.dry_run flag with NULL file
 + diff: drop save/restore of color_moved in dry-run mode
 + diff: send external diff output to diff_options.file
 + Merge branch 'ly/diff-name-only-with-diff-from-content' into jk/diff-patch-dry-run-cleanup

 Finishing touches to fixes to the recent regression in "git diff -w
 --quiet" and anything that needs to internally generate patch to
 see if it turns empty.
 source: <[email-masked]>

* jk/match-pathname-fix (2025-10-26) 2 commits
  (merged to 'next' on 2025-10-26 at f18b45f0df)
 + match_pathname(): give fnmatch one char of prefix context
 + match_pathname(): reorder prefix-match check

 The wildmatch code had a corner case bug that mistakenly makes
 "foo**/bar" match with "foobar", which has been corrected.
 source: <[email-masked]>

* kh/doc-patch-id-1 (2025-10-13) 2 commits
  (merged to 'next' on 2025-10-26 at e284077116)
 + doc: patch-id: convert to the modern synopsis style
 + Merge branch 'kh/doc-patch-id-markup-fix' into kh/doc-patch-id-1

 Will merge to 'master'.
 source: <[email-masked]>

* ps/maintenance-geometric (2025-10-27) 12 commits
  (merged to 'next' on 2025-10-27 at 839fc31de9)
 + t7900: fix a flaky test due to git-repack always regenerating MIDX
  (merged to 'next' on 2025-10-26 at 505f26dcf7)
 + builtin/maintenance: introduce "geometric" strategy
 + builtin/maintenance: make "gc" strategy accessible
 + builtin/maintenance: extend "maintenance.strategy" to manual maintenance
 + builtin/maintenance: run maintenance tasks depending on type
 + builtin/maintenance: improve readability of strategies
 + builtin/maintenance: don't silently ignore invalid strategy
 + builtin/maintenance: make the geometric factor configurable
 + builtin/maintenance: introduce "geometric-repack" task
 + builtin/gc: make `too_many_loose_objects()` reusable without GC config
 + builtin/gc: remove global `repack` variable
 + Merge branch 'tb/incremental-midx-part-3.1' into ps/maintenance-geometric

 "git maintenance" command learns the "geometric" strategy where it
 avoids doing maintenance tasks that rebuilds everything from
 scratch.
 source: <[email-masked]>
 source: <[email-masked]>

* rs/add-patch-quit (2025-10-24) 2 commits
  (merged to 'next' on 2025-10-26 at 859e2555b2)
 + add-patch: quit on EOF
 + add-patch: quit without skipping undecided hunks

 The 'q'(uit) command in "git add -p" has been improved to quit
 without doing any meaningless work before leaving, and giving EOF
 (typically control-D) to the prompt is made to behave the same way.
 source: <[email-masked]>

* rs/merge-base-optim (2025-10-24) 1 commit
  (merged to 'next' on 2025-10-26 at 45f9bd4b81)
 + commit-reach: avoid commit_list_insert_by_date()

 The code to walk revision graph to compute merge base has been
 optimized.
 source: <[email-masked]>

--------------------------------------------------
[New Topics]

* tc/last-modified-active-paths-optimization (2025-10-23) 1 commit
  (merged to 'next' on 2025-11-03 at 9ab444edfb)
 + last-modified: implement faster algorithm

 "git last-modified" was optimized by narrowing the set of paths to
 follow as it dug deeper in the history.

 Will merge to 'master'.
 source: <[email-masked]>

* ps/object-source-loose (2025-10-30) 13 commits
 - object-file: refactor writing objects via a stream
 - object-file: rename `write_object_file()`
 - object-file: refactor freshening of objects
 - object-file: rename `has_loose_object()`
 - object-file: read objects via the loose object source
 - object-file: move loose object map into loose source
 - object-file: hide internals when we need to reprepare loose sources
 - object-file: move loose object cache into loose source
 - object-file: introduce `struct odb_loose_source`
 - object-file: move `fetch_if_missing`
 - odb: adjust naming to free object sources
 - odb: introduce `odb_source_new()`
 - odb: fix subtle logic to check whether an alternate is usable

 A part of code paths that deals with loose objects has been cleaned
 up.

 Will merge to 'next'?
 source: <[email-masked]>

--------------------------------------------------
[Cooking]

* kh/doc-checkout-markup-fix (2025-10-28) 1 commit
  (merged to 'next' on 2025-10-29 at f106c77f74)
 + doc: git-checkout: fix placeholder markup

 Doc mark-up fix.

 Will merge to 'master'.
 source: <[email-masked]>

* rz/t0450-bisect-doc-update (2025-10-28) 1 commit
  (merged to 'next' on 2025-10-31 at f563b543eb)
 + bisect: update usage and docs to match each other

 The help text and manual page of "git bisect" command have been
 made consistent with each other.

 Will merge to 'master'.
 source: <[email-masked]>

* bc/sha1-256-interop-02 (2025-10-29) 15 commits
 - SQUASH??? downgrade build.rs syntax
 - object-file-convert: always make sure object ID algo is valid
 - rust: add a small wrapper around the hashfile code
 - rust: add a new binary loose object map format
 - rust: add functionality to hash an object
 - rust: add a build.rs script for tests
 - hash: expose hash context functions to Rust
 - write-or-die: add an fsync component for the loose object map
 - csum-file: define hashwrite's count as a uint32_t
 - hash: add a function to look up hash algo structs
 - rust: add a hash algorithm abstraction
 - rust: add a ObjectID struct
 - hash: use uint32_t for object_id algorithm
 - conversion: don't crash when no destination algo
 - repository: require Rust support for interoperability

 The code to maintain mapping between object names in multiple hash
 functions is being added, written in Rust.

 Expecting a reroll.
 source: <[email-masked]>

* jk/doc-backslash-in-exclude (2025-10-29) 1 commit
  (merged to 'next' on 2025-10-30 at 29790121d5)
 + doc: document backslash in gitignore patterns

 The patterns used in the .gitignore files use backslash in the way
 documented for fnmatch(3); document as such to reduce confusion.

 Will merge to 'master'.
 source: <[email-masked]>

* jk/test-delete-gpgsig-leakfix (2025-10-29) 1 commit
  (merged to 'next' on 2025-10-30 at 097810cb65)
 + test-tool: fix leak in delete-gpgsig command

 Leakfix.

 Will merge to 'master'.
 source: <[email-masked]>

* qj/doc-my1stcontrib-email-verify (2025-10-27) 1 commit
  (merged to 'next' on 2025-10-29 at 33f961f37a)
 + MyFirstContribution: add note on confirming patches

 The "MyFirstContribution" tutorial tells the reader how to send out
 their patches; the section gained a hint to verify the message
 reached the mailing list.

 Will merge to 'master'.
 source: <[email-masked]>

* xr/ref-debug-remove-on-disk (2025-10-24) 1 commit
  (merged to 'next' on 2025-10-29 at 316e4afdbf)
 + refs: add missing remove_on_disk implementation for debug backend

 The "debug" ref-backend was missing a method implementation, which
 has been corrected.

 Will merge to 'master'.
 source: <[email-masked]>

* ad/blame-diff-algorithm (2025-10-28) 1 commit
 - blame: make diff algorithm configurable

 "git blame" learns "--diff-algorithm=<algo>" option.

 Expecting a reroll.
 cf. <[email-masked]>
 source: <[email-masked]>

* cc/fast-import-export-i18n-cleanup (2025-10-30) 5 commits
  (merged to 'next' on 2025-11-03 at 41a35c3e52)
 + gpg-interface: mark a string for translation
 + fast-import: mark strings for translation
 + fast-export: mark strings for translation
 + gpg-interface: use left shift to define GPG_VERIFY_*
 + gpg-interface: simplify ssh fingerprint parsing

 Messages from fast-import/export are now marked for i18n.

 Will merge to 'master'.
 source: <[email-masked]>

* eb/t1016-hash-transition-fix (2025-10-28) 1 commit
  (merged to 'next' on 2025-10-30 at b743410ab6)
 + t1016-compatObjectFormat: really freeze time for reproduciblity

 Test fix.

 Will merge to 'master'.
 source: <[email-masked]>

* ps/packed-git-in-object-store (2025-10-30) 9 commits
  (merged to 'next' on 2025-11-03 at 1eb3440abd)
 + packfile: track packs via the MRU list exclusively
 + packfile: always add packfiles to MRU when adding a pack
 + packfile: move list of packs into the packfile store
 + builtin/pack-objects: simplify logic to find kept or nonlocal objects
 + packfile: fix approximation of object counts
 + http: refactor subsystem to use `packfile_list`s
 + packfile: move the MRU list into the packfile store
 + packfile: use a `strmap` to store packs by name
 + Merge branch 'ps/remove-packfile-store-get-packs' into ps/packed-git-in-object-store

 The list of packfiles used in a running Git process is moved from
 the packed_git structure into the packfile store.

 Will merge to 'master'.
 source: <[email-masked]>

* tu/credential-install (2025-10-25) 1 commit
  (merged to 'next' on 2025-10-28 at 43589c4832)
 + contrib/credential: add install target

 Contributed credential helpers (obviously in contrib/) now have "cd
 $there && make install" target.

 Will merge to 'master'.
 source: <[email-masked]>

* qj/doc-first-contrib-check-lore (2025-10-24) 1 commit
 - MyFirstContribution: add tip to confirm patches reached the mailing list
 (this branch uses ps/rust-cbindgen.)

 Doc update.

 Will merge to 'next'?
 source: <[email-masked]>

* ps/rust-cbindgen (2025-10-24) 6 commits
 - rust: generate bindings via cbindgen
 - meson: rename Rust library target
 - ci: use Debian instead of deprecated i386/ubuntu
 - gitlab-ci: backfill missing Linux jobs
 - gitlab-ci: reorder Linux job matrix to match GitHub's order
 - Merge branch 'ps/ci-rust' into ps/rust-cbindgen
 (this branch is used by qj/doc-first-contrib-check-lore.)

 Introduce cbindgen in the build framework to help interfacing with
 Rust.

 More discussion?
 cf. <[email-masked]>
 source: <[email-masked]>

* kn/refs-optim-cleanup (2025-10-20) 4 commits
  (merged to 'next' on 2025-11-03 at 8c2d7a4413)
 + t/pack-refs-tests: move the 'test_done' to callees
 + refs: rename 'pack_refs_opts' to 'refs_optimize_opts'
 + refs: move to using the '.optimize' functions
 + Merge branch 'ps/ref-peeled-tags' into kn/refs-optim-cleanup
 (this branch uses jt/repo-structure and ps/ref-peeled-tags.)

 Code clean-up.

 Will merge to 'master'.
 source: <[email-masked]>

* lo/repo-info-all (2025-10-26) 2 commits
 - repo: add --all to git-repo-info
 - repo: factor out field printing to dedicated function

 "git repo info" learned "--all" option.

 Expecting a (hopefully small and final) reroll.
 cf. <[email-masked]> <[email-masked]>
 source: <[email-masked]>

* jt/repo-structure (2025-10-21) 7 commits
  (merged to 'next' on 2025-10-28 at c4d81a2da9)
 + builtin/repo: add progress meter for structure stats
 + builtin/repo: add keyvalue and nul format for structure stats
 + builtin/repo: add object counts in structure output
 + builtin/repo: introduce structure subcommand
 + ref-filter: export ref_kind_from_refname()
 + ref-filter: allow NULL filter pattern
 + builtin/repo: rename repo_info() to cmd_repo_info()
 (this branch is used by kn/refs-optim-cleanup and ps/ref-peeled-tags.)

 "git repo structure", a new command.

 Will merge to 'master'.
 cf. <eesy5qhqzi56qrzv7wlpenxag23l2zykakvpmr6p5rnak6cril@ap3rugp44bcz>
 cf. <[email-masked]>
 source: <[email-masked]>

* en/xdiff-cleanup-2 (2025-10-29) 10 commits
 - xdiff: rename rindex -> reference_index
 - xdiff: change rindex from long to size_t in xdfile_t
 - xdiff: make xdfile_t.nreff a size_t instead of long
 - xdiff: make xdfile_t.nrec a size_t instead of long
 - xdiff: split xrecord_t.ha into line_hash and minimal_perfect_hash
 - xdiff: use unambiguous types in xdl_hash_record()
 - xdiff: use size_t for xrecord_t.size
 - xdiff: make xrecord_t.ptr a uint8_t instead of char
 - xdiff: use ssize_t for dstart/dend, make them last in xdfile_t
 - doc: define unambiguous type mappings across C and Rust

 Code clean-up.

 Comments?
 source: <[email-masked]>

* ar/run-command-hook (2025-10-17) 10 commits
 - receive-pack: convert receive hooks to hook API
 - receive-pack: convert update hooks to new API
 - hooks: allow callers to capture output
 - run-command: allow capturing of collated output
 - reference-transaction: use hook API instead of run-command
 - hook: allow overriding the ungroup option
 - transport: convert pre-push to hook API
 - hook: convert 'post-rewrite' hook in sequencer.c to hook API
 - hook: provide stdin via callback
 - run-command: add stdin callback for parallelization

 Use hook API to replace ad-hoc invocation of hook scripts with the
 run_command() API.

 Comments?
 source: <[email-masked]>

* je/doc-reset (2025-10-17) 4 commits
 - doc: git-reset: clarify `git reset <pathspec>`
 - doc: git-reset: clarify `git reset [mode]`
 - doc: git-reset: clarify intro
 - doc: git-reset: reorder the forms

 Documentation updates.

 Expecting a reroll.
 cf. <[email-masked]>
 source: <[email-masked]>

* tz/test-prepare-gnupghome (2024-07-03) 2 commits
  (merged to 'next' on 2025-10-28 at f612107bf9)
 + t/lib-gpg: call prepare_gnupghome() in GPG2 prereq
 + t/lib-gpg: add prepare_gnupghome() to create GNUPGHOME dir

 Tests did not set up GNUPGHOME correctly, which is fixed but some
 flaky tests are exposed in t1016, which needs to be addressed
 before this topic can move forward.

 Will merge to 'master'.
 cf. <[email-masked]>
 cf. <[email-masked]>
 cf. <[email-masked]>
 source: <[email-masked]>

* ps/ref-peeled-tags (2025-10-23) 16 commits
  (merged to 'next' on 2025-11-03 at 8ac48a10de)
 + ref-filter: parse objects on demand
 + ref-filter: detect broken tags when dereferencing them
 + refs: don't store peeled object IDs for invalid tags
 + object: add flag to `peel_object()` to verify object type
 + refs: drop infrastructure to peel via iterators
 + refs: drop `current_ref_iter` hack
 + builtin/show-ref: convert to use `reference_get_peeled_oid()`
 + ref-filter: propagate peeled object ID
 + upload-pack: convert to use `reference_get_peeled_oid()`
 + refs: expose peeled object ID via the iterator
 + refs: refactor reference status flags
 + refs: fully reset `struct ref_iterator::ref` on iteration
 + refs: introduce `.ref` field for the base iterator
 + refs: introduce wrapper struct for `each_ref_fn`
 + Merge branch 'jt/repo-structure' into ps/ref-peeled-tags
 + Merge branch 'tb/incremental-midx-part-3.1' into ps/ref-peeled-tags
 (this branch is used by kn/refs-optim-cleanup; uses jt/repo-structure.)

 Some ref backend storage can hold not just the object name of an
 annotated tag, but the object name of the object the tag points at.
 The code to handle this information has been streamlined.

 Will merge to 'master'.
 source: <2[email-masked]>

* je/doc-data-model (2025-10-31) 2 commits
 - SQUASH??? fix xml that does not validate
 - doc: add an explanation of Git's data model

 Add a new manual that describes the data model.

 Expecting a (hopefully small and final) reroll?
 cf. <[email-masked]>
 source: <[email-masked]>

* cc/doc-submitting-patches-with-ai (2025-10-01) 1 commit
  (merged to 'next' on 2025-10-28 at 9b5e0701fa)
 + SubmittingPatches: add section about AI

 AI guidelines.

 Will merge to 'master'.
 cf. <[email-masked]>
 source: <[email-masked]>

* ps/history (2025-10-27) 12 commits
 - builtin/history: implement "split" subcommand
 - cache-tree: allow writing in-memory index as tree
 - add-patch: add support for in-memory index patching
 - add-patch: remove dependency on "add-interactive" subsystem
 - add-patch: split out `struct interactive_options`
 - add-patch: split out header from "add-interactive.h"
 - builtin/history: implement "reword" subcommand
 - builtin: add new "history" command
 - replay: stop using `the_repository`
 - replay: extract logic to pick commits
 - wt-status: provide function to expose status for trees
 - Merge branch 'sa/replay-atomic-ref-updates' into ps/history
 (this branch uses sa/replay-atomic-ref-updates.)

 "git history" history rewriting UI.

 Comments?
 source: <[email-masked]>

* ms/doc-worktree-side-by-side (2025-10-10) 2 commits
 - doc: git-worktree: Add side by side branch checkout example
 - doc: git-worktree: Link to examples

 Document "git worktree add" and use of out-of-tree worktrees with
 examples.

 Expecting a reroll.
 cf. <CAPig+cSNesf0UwS4=[email-masked]>
 source: <a[email-masked]>

* sa/replay-atomic-ref-updates (2025-10-30) 3 commits
 - replay: add replay.refAction config option
 - replay: make atomic ref updates the default behavior
 - replay: use die_for_incompatible_opt2() for option validation
 (this branch is used by ps/history.)

 "git replay" (experimental) learned to perform ref updates itself
 in a transaction by default, instead of emitting where each refs
 should point at and leaving the actual update to another command.

 Will merge to 'next'?
 source: <[email-masked]>

* ar/submodule-gitdir-tweak (2025-10-06) 5 commits
 - submodule: error out if gitdir name is too long
 - submodule: encode gitdir paths to avoid conflicts
 - strbuf: bring back is_rfc3986_unreserved
 - submodule: add gitdir path config override
 - submodule--helper: use submodule_name_to_gitdir in add_submodule

 Avoid local submodule repository directory paths overlapping with
 each other by encoding submodule names before using them as path
 components.

 Expecting v4.
 cf. <[email-masked]>
 source: <[email-masked]>