Subject: What's cooking in git.git (Oct 2025, #02; Mon, 6)

From: Junio C Hamano <[email-masked]>
Date: Mon, 06 Oct 2025 16:41:34 -0700

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).

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/

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

* en/doc-merge-tree-describe-merge-base (2025-10-02) 1 commit
  (merged to 'next' on 2025-10-06 at 787ff6f08a)
 + Documentation/git-merge-tree.adoc: clarify the --merge-base option

 Clarify the "--merge-base" command line option in "git merge-tree".

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

* je/doc-data-model (2025-10-03) 1 commit
 - doc: add a explanation of Git's data model

 Add a new manual that describes the data model.

 Comments?
 source: <[email-masked]>

* rs/add-patch-options-fix (2025-10-06) 6 commits
 - add-patch: reset "permitted" at loop start
 - add-patch: let options a and d roll over like y and n
 - add-patch: let options k and K roll over like j and J
 - add-patch: let options y, n, j, and e roll over to next undecided
 - add-patch: document that option J rolls over
 - add-patch: improve help for options j, J, k, and K

 The code in "git add -p" and friends to iterate over hunks was
 riddled with bugs, which has been corrected.

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

* jn/doc-help-translaing-pretty-options (2025-10-05) 1 commit
 - doc: do not break sentences into "lego" pieces

 Documentation for "git log --pretty" options has been updated
 to make it easier to translate.

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

* jn/doc-synopsis (2025-10-05) 3 commits
 - doc: convert git worktree to synopsis style
 - doc: convert git tag to synopsis style
 - doc: convert git-stash.adoc to synopis style

 Doc-mark-up modernization continues.

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

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

* tb/incremental-midx-part-3.1 (2025-09-29) 51 commits
 - SQUASH??? play well with other topics by preemptively including "repository.h"
 - builtin/repack.c: clean up unused `#include`s
 - repack: move `write_cruft_pack()` out of the builtin
 - repack: move `write_filtered_pack()` out of the builtin
 - repack: move `pack_kept_objects` to `struct pack_objects_args`
 - repack: move `finish_pack_objects_cmd()` out of the builtin
 - builtin/repack.c: pass `write_pack_opts` to `finish_pack_objects_cmd()`
 - repack: extract `write_pack_opts_is_local()`
 - repack: move `find_pack_prefix()` out of the builtin
 - builtin/repack.c: use `write_pack_opts` within `write_cruft_pack()`
 - builtin/repack.c: introduce `struct write_pack_opts`
 - repack: 'write_midx_included_packs' API from the builtin
 - builtin/repack.c: inline packs within `write_midx_included_packs()`
 - builtin/repack.c: pass `repack_write_midx_opts` to `midx_included_packs`
 - builtin/repack.c: inline `remove_redundant_bitmaps()`
 - builtin/repack.c: reorder `remove_redundant_bitmaps()`
 - repack: keep track of MIDX pack names using existing_packs
 - builtin/repack.c: use a string_list for 'midx_pack_names'
 - builtin/repack.c: extract opts struct for 'write_midx_included_packs()'
 - builtin/repack.c: remove ref snapshotting from builtin
 - repack: remove pack_geometry API from the builtin
 - builtin/repack.c: pass 'packdir' to `pack_geometry_remove_redundant()`
 - builtin/repack.c: pass 'pack_kept_objects' to `pack_geometry_init()`
 - builtin/repack.c: rename various pack_geometry functions
 - builtin/repack.c: remove "repack_promisor_objects()" from the builtin
 - builtin/repack.c: pass "packtmp" to `repack_promisor_objects()`
 - repack: remove 'generated_pack' API from the builtin
 - builtin/repack.c: provide pack locations to `generated_pack_install()`
 - builtin/repack.c: pass "packtmp" to `generated_pack_populate()`
 - builtin/repack.c: factor our "generated_pack_install"
 - builtin/repack.c: rename "struct generated_pack_data"
 - repack: remove 'existing_packs' API from the builtin
 - builtin/repack.c: avoid unnecessary numeric casts in existing_packs
 - builtin/repack.c: pass "packdir" when removing packs
 - repack: remove 'remove_redundant_pack' from the builtin
 - builtin/repack.c: rename many 'struct existing_packs' functions
 - repack: remove 'prepare_pack_objects' from the builtin
 - repack: move 'delta_base_offset' to 'struct pack_objects_args'
 - builtin/repack.c: pass both pack_objects args to repack_config
 - repack: introduce new compilation unit
 - builtin/repack.c: avoid using `hash_to_hex()` in pack geometry
 - builtin/repack.c: avoid "the_hash_algo" in `finish_pack_objects_cmd()`
 - builtin/repack: avoid "the_hash_algo" in `repack_promisor_objects()`
 - builtin/repack.c: avoid "the_hash_algo" in `write_oid()`
 - builtin/repack.c: avoid "the_hash_algo" when deleting packs
 - builtin/repack.c: avoid "the_repository" when repacking promisor objects
 - builtin/repack.c: avoid "the_repository" when removing packs
 - builtin/repack.c: avoid "the_repository" when taking a ref snapshot
 - builtin/repack.c: avoid "the_repository" in existing packs API
 - builtin/repack.c: avoid "the_repository" in `cmd_repack()`
 - Merge branch 'ps/packfile-store' into tb/incremental-midx-part-3.1
 (this branch uses ps/packfile-store.)

 Comments?
 source: <[email-masked]>

* cc/doc-submitting-patches-with-ai (2025-10-01) 1 commit
 - SubmittingPatches: add section about AI

 AI guidelines.

 Perhaps we should adopt what QEMU uses for simplicity?
 cf. <[email-masked]>
 source: <[email-masked]>

* kn/ref-cache-seek-fix (2025-10-01) 1 commit
  (merged to 'next' on 2025-10-02 at 5896b8c896)
 + refs/ref-cache: fix SEGFAULT when seeking in empty directories

 Fix handling of an empty subdirectory of .git/refs/ in the
 ref-files backend.

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

* mh/doc-credential-url-prefix (2025-10-01) 1 commit
  (merged to 'next' on 2025-10-02 at dd0d9a1c59)
 + docs/gitcredentials: describe URL prefix matching

 Doc update to describe a feature that has already been implemented.

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

* ml/reflog-write-committer-info-fix (2025-09-30) 1 commit
  (merged to 'next' on 2025-10-02 at 9a61d07bac)
 + builtin/reflog: respect user config in "write" subcommand

 "git reflog write" did not honor the configured user.name/email
 which has been corrected.

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

* ps/history (2025-10-01) 13 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: parse commits before dereferencing them
 - 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.
 source: <[email-masked]>

* en/make-libgit-a (2025-10-02) 2 commits
 - make: delete REFTABLE_LIB, add reftable to LIB_OBJS
 - make: delete XDIFF_LIB, add xdiff to LIB_OBJS

 Instead of three library archives (one for git, one for reftable,
 and one for xdiff), roll everything into a single libgit.a archive.
 This would help later effort to FFI into Rust.

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

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

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

 Comments?
 source: <[email-masked]>

* ps/gitlab-ci-windows-improvements (2025-10-02) 5 commits
  (merged to 'next' on 2025-10-03 at 6adb054d12)
 + t8020: fix test failure due to indeterministic tag sorting
 + gitlab-ci: upload Meson test logs as JUnit reports
 + gitlab-ci: drop workaround for Python certificate store on Windows
 + gitlab-ci: ignore failures to disable realtime monitoring
 + gitlab-ci: dedup instructions to disable realtime monitoring

 GitLab CI improvements.

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

* rj/doc-missing-technical-docs (2025-10-02) 1 commit
  (merged to 'next' on 2025-10-06 at f639955fdc)
 + doc: add some missing technical documents
 (this branch is used by rj/doc-technical-fixes.)

 Doc updates.

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

* rj/doc-technical-fixes (2025-10-02) 3 commits
 - doc: commit-graph.adoc: fix up some formatting
 - doc: sparse-checkout.adoc: fix asciidoc warnings
 - doc: remembering-renames.adoc: fix asciidoc warnings
 (this branch uses rj/doc-missing-technical-docs.)

 Documenation mark-up fixes.

 Comments?
 source: <[email-masked]>

* ja/doc-markup-attached-paragraph-fix (2025-09-27) 1 commit
  (merged to 'next' on 2025-09-30 at a91ca5db03)
 + doc: change the markup of paragraphs following a nested list item

 Documentation mark-up fix.

 Expecting an incremental follow-up to avoid regerssion.
 cf. <2239952.irdbgypaU6@cayenne>
 source: <[email-masked]>

* jc/optional-path (2025-09-28) 4 commits
 - parseopt: values of pathname type can be prefixed with :(optional)
 - config: values of pathname type can be prefixed with :(optional)
 - t7500: fix GIT_EDITOR shell snippet
 - t7500: make each piece more independent

 Configuration variables that take a pathname as a value
 (e.g. blame.ignorerevsfile) can be marked as optional by prefixing
 ":(optoinal)" before its value.

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

* jt/clang-format-foreach-wo-space-before-parenthesis (2025-09-27) 1 commit
  (merged to 'next' on 2025-09-30 at c32668ab36)
 + clang-format: exclude control macros from SpaceBeforeParens

 Clang-format update to let our control macros formatted the way we
 had them traditionally, e.g., "for_each_string_list_item()" without
 space before the parentheses.

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

* kh/doc-patch-id-markup-fix (2025-09-29) 1 commit
 - doc: patch-id: fix accidental literal blocks

 Documenaotin mark-up fix.

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

* sa/replay-atomic-ref-updates (2025-09-26) 1 commit
 - replay: make atomic ref updates the default behavior
 (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.

 Comments?
 source: <[email-masked]>

* kh/format-patch-range-diff-notes (2025-09-25) 3 commits
 - format-patch: handle range-diff on notes correctly for single patches
 - revision: add rdiff_log_arg to rev_info
 - range-diff: rename other_arg to log_arg

 "git format-patch --range-diff=... --notes=..." did not drive the
 underlying range-diff with correct --notes parameter, ending up
 comparing with different set of notes from its main patch output
 you would get from "git format-patch --notes=..." for a singleton
 patch.

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

* je/doc-pull (2025-09-23) 4 commits
 - doc: git-pull: clarify how to exit a conflicted merge
 - doc: git-pull: delete the example
 - doc: git-pull: clarify options for integrating remote branch
 - doc: git-pull: move <repository> and <refspec> params

 Documentation updates.
 source: <[email-masked]>

* je/doc-push-upstream (2025-10-06) 5 commits
 - doc: git-push: add explanation of `git push origin main`
 - doc: git-push: clarify "what to push"
 - doc: git-push: clarify "where to push"
 - doc: add an UPSTREAM BRANCHES section to pull/push/fetch
 - doc: git-push: clarify intro

 Documentation updates.

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

* jk/diff-no-index-with-pathspec-fix (2025-09-24) 1 commit
 - diff --no-index: fix logic for paths ending in '/'

 An earlier addition to "git diff --no-index A B" to limit the
 output with pathspec after the two directories misbehaved when
 these directories were given with a trailing slash, which has been
 corrected.
 source: <[email-masked]>

* jt/repo-stats (2025-09-27) 6 commits
 - builtin/repo: add progress meter for stats
 - builtin/repo: add keyvalue and nul format for stats
 - builtin/repo: add object counts in stats output
 - builtin/repo: introduce stats subcommand
 - ref-filter: allow NULL filter pattern
 - builtin/repo: rename repo_info() to cmd_repo_info()

 "git repo stats", a new command.

 Comments?
 source: <[email-masked]>

* js/curl-off-t-fixes (2025-09-26) 3 commits
  (merged to 'next' on 2025-09-30 at 6d1e5fd288)
 + http-push: avoid new compile error
 + imap-send: be more careful when casting to `curl_off_t`
 + http: offer to cast `size_t` to `curl_off_t` safely

 A few places where an size_t value was cast to curl_off_t without
 checking has been updated to use the existing helper function.

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

* kn/reftable-consistency-checks (2025-10-06) 7 commits
 - refs/reftable: add fsck check for checking the table name
 - reftable: add code to facilitate consistency checks
 - fsck: order 'fsck_msg_type' alphabetically
 - Documentation/fsck-msgids: remove duplicate msg id
 - reftable: check for trailing newline in 'tables.list'
 - refs: move consistency check msg to generic layer
 - refs: remove unused headers

 The reftable backend learned to sanity check its on-disk data more
 carefully.

 Comments?
 source: <2025[email-masked]>

* bc/sha1-256-interop-01 (2025-10-02) 9 commits
 - t1010: use BROKEN_OBJECTS prerequisite
 - t: allow specifying compatibility hash
 - fsck: consider gpgsig headers expected in tags
 - rev-parse: allow printing compatibility hash
 - docs: add documentation for loose objects
 - docs: improve ambiguous areas of pack format documentation
 - docs: reflect actual double signature for tags
 - docs: update offset order for pack index v3
 - docs: update pack index v3 format

 The beginning of SHA1-SHA256 interoperability work.

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

* pw/add-p-hunk-splitting-fix (2025-09-25) 2 commits
 - add-patch: update hunk splitability after editing
 - add -p: mark split hunks as undecided

 Marking a hunk 'selected' in "git add -p" and then splitting made
 all the split pieces 'selected'; this has been changed to make them
 all 'undecided', which gives better end-user experience.

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

* en/xdiff-cleanup (2025-09-26) 12 commits
 - xdiff: change type of xdfile_t.changed from char to bool
 - xdiff: add macros DISCARD(0), KEEP(1), INVESTIGATE(2) in xprepare.c
 - xdiff: rename rchg -> changed in xdfile_t
 - xdiff: delete chastore from xdfile_t
 - xdiff: delete fields ha, line, size in xdlclass_t in favor of an xrecord_t
 - xdiff: delete redundant array xdfile_t.ha
 - xdiff: delete struct diffdata_t
 - xdiff: delete local variables that alias fields in xrecord_t
 - xdiff: delete superfluous function xdl_get_rec() in xemit
 - xdiff: delete unnecessary fields from xrecord_t and xdfile_t
 - xdiff: delete local variables and initialize/free xdfile_t directly
 - xdiff: delete static forward declarations in xprepare

 A lot of code clean-up of xdiff.
 Split out of a larger topic.

 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.

 Comments?
 source: <[email-masked]>

* je/doc-push (2025-09-23) 2 commits
  (merged to 'next' on 2025-09-29 at 4ff1b675ed)
 + doc: git-push: rewrite refspec specification
 + doc: git-push: create PUSH RULES section

 Doc updates.

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

* ps/odb-clean-stale-wrappers (2025-09-10) 1 commit
  (merged to 'next' on 2025-09-30 at 90f1033b8c)
 + odb: drop deprecated wrapper functions

 Code clean-up.

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

* ps/commit-graph-per-object-source (2025-09-04) 5 commits
 - commit-graph: pass graphs that are to be merged as parameter
 - commit-graph: return commit graph from `repo_find_commit_pos_in_graph()`
 - commit-graph: return the prepared commit graph from `prepare_commit_graph()`
 - revision: drop explicit check for commit graph
 - blame: drop explicit check for commit graph

 Declare commit-graph is per object_source, which may not be a good idea.

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

* ps/rust-balloon (2025-10-02) 9 commits
  (merged to 'next' on 2025-10-02 at fe4cdc2dfa)
 + ci: enable Rust for breaking-changes jobs
 + ci: convert "pedantic" job into full build with breaking changes
 + BreakingChanges: announce Rust becoming mandatory
 + varint: reimplement as test balloon for Rust
 + varint: use explicit width for integers
 + help: report on whether or not Rust is enabled
 + Makefile: introduce infrastructure to build internal Rust library
 + Makefile: reorder sources after includes
 + meson: add infrastructure to build internal Rust library

 Dip our toes a bit to (optionally) use Rust implemented helper
 called from our C code.

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

* sj/string-list (2025-10-05) 4 commits
 - refs: enable sign compare warnings check
 - string-list: change "string_list_find_insert_index" return type to "size_t"
 - string-list: replace negative index encoding with "exact_match" parameter
 - string-list: use bool instead of int for "exact_match"

 The "string-list" API function to find where a given string would
 be inserted got updated so that it can use unrealistically huge
 array index that would only fit in size_t but not int or ssize_t
 to achieve unstated goal.

 Will merge to 'next'?
 source: <aONhmrE0otiyZ16f@ArchLinux>

* ps/packfile-store (2025-09-23) 16 commits
  (merged to 'next' on 2025-09-29 at 342bb57fc2)
 + packfile: refactor `get_packed_git_mru()` to work on packfile store
 + packfile: refactor `get_all_packs()` to work on packfile store
 + packfile: refactor `get_packed_git()` to work on packfile store
 + packfile: move `get_multi_pack_index()` into "midx.c"
 + packfile: introduce function to load and add packfiles
 + packfile: refactor `install_packed_git()` to work on packfile store
 + packfile: split up responsibilities of `reprepare_packed_git()`
 + packfile: refactor `prepare_packed_git()` to work on packfile store
 + packfile: reorder functions to avoid function declaration
 + odb: move kept cache into `struct packfile_store`
 + odb: move MRU list of packfiles into `struct packfile_store`
 + odb: move packfile map into `struct packfile_store`
 + odb: move initialization bit into `struct packfile_store`
 + odb: move list of packfiles into `struct packfile_store`
 + packfile: introduce a new `struct packfile_store`
 + Merge branch 'ps/object-store-midx-dedup-info' into ps/packfile-store
 (this branch is used by tb/incremental-midx-part-3.1.)

 Code clean-up around the in-core list of all the pack files and
 object database(s).

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

* ds/sparse-checkout-clean (2025-09-12) 7 commits
  (merged to 'next' on 2025-09-25 at 00b296f153)
 + t: expand tests around sparse merges and clean
 + sparse-index: point users to new 'clean' action
 + sparse-checkout: add --verbose option to 'clean'
 + dir: add generic "walk all files" helper
 + sparse-checkout: match some 'clean' behavior
 + sparse-checkout: add basics of 'clean' command
 + sparse-checkout: remove use of the_repository

 "git sparse-checkout" subcommand learned a new "clean" action to
 prune otherwise unused working-tree files that are outside the
 areas of interest.

 On hold.
 cf. <[email-masked]>
 source: <[email-masked]>

--------------------------------------------------
[Discarded]

These have been kept outside 'seen' for some time, and were removed
for now, until they get resubmit in a shape that plays well with
other topics in 'seen'.

* lc/rebase-trailer (2025-08-03) 2 commits
 . rebase: support --trailer
 . trailer: append trailers in-process and drop the fork to `interpret-trailers`

 Has been expecting a reroll for way too long.
 cf. <[email-masked]>
 cf. <[email-masked]>
 cf. <[email-masked]>
 source: <[email-masked]>

* ac/deglobal-sparse-variables (2025-07-18) 3 commits
 . environment: remove the global variable 'sparse_expect_files_outside_of_patterns'
 . environment: move access to "core.sparsecheckoutcone" into repo_settings
 . environment: move access to "core.sparsecheckout" into repo_settings

 Two global variables related to sparse checkout have been moved to
 the repository settings structure.

 Has been expecting a reroll for way too long.
 cf. <[email-masked]>
 Ejected out of 'seen' for now.
 source: <[email-masked]>