Subject: What's cooking in git.git (Jun 2025, #03; Mon, 9)

From: Junio C Hamano <[email-masked]>
Date: Mon, 09 Jun 2025 13:50: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).

Git 2.50-rc2 has been tagged.  Hopefully we have found and fixed all
the regressions during this cycle?  Knock, knock...

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']

* mm/test-in-absolute-home (2025-05-28) 1 commit
  (merged to 'next' on 2025-06-05 at ae6cc48f8d)
 + t: run tests from a normalized working directory

 Tests that compare $HOME and $(pwd), which should be the same
 directory unless the tests chdir's around, would fail when the user
 enters the test directory via symbolic links, which has been
 corrected.
 source: <[email-masked]>

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

* ja/doc-git-log-markup (2025-06-08) 9 commits
 - doc: git-log: convert log config to new doc format
 - doc: git-log: convert diff options to new doc format
 - doc: git-log: convert pretty formats to new doc format
 - doc: git-log: convert pretty options to new doc format
 - doc: git-log: convert rev list options to new doc format
 - doc: git-log: convert line range format to new doc format
 - doc: git-log: convert line range options to new doc format
 - doc: git-log convert rev-list-description to new doc format
 - doc: convert git-log to new documentation format

 Doc mark-up updates.
 source: <[email-masked]>

* kj/stash-onbranch-submodule-fix (2025-06-08) 1 commit
  (merged to 'next' on 2025-06-09 at a5dae097d7)
 + stash: fix incorrect branch name in stash message

 "git stash" recorded a wrong branch name when submodules are
 present in the current checkout, which has been corrected.

 Will cook in 'next'.
 source: <[email-masked]>

* ly/submodule-update-failure-leakfix (2025-06-07) 1 commit
  (merged to 'next' on 2025-06-09 at b28794c576)
 + builtin/submodule--helper: fix leak when remote_submodule_branch() failed

 A memory leak on an error code path has been plugged.

 Will cook in 'next'.
 source: <[email-masked]>

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

* kn/fetch-push-bulk-ref-update-fixup (2025-06-06) 3 commits
 - receive-pack: handle reference deletions separately
 - refs/files: skip updates with errors in batched updates
 - Merge branch 'kn/fetch-push-bulk-ref-update' into kn/fetch-push-bulk-ref-update-fixup
 (this branch uses kn/fetch-push-bulk-ref-update.)

 Additional fixes to the base topic.

 Comments?
 source: <20250606-6769-address-test-failures-in-the-n[email-masked]>

* ma/doc-diff-cc-headers (2025-06-06) 1 commit
  (merged to 'next' on 2025-06-08 at e2072501f7)
 + diff-generate-patch.adoc: drop spurious backticks

 Doc mark-up update.

 Will cook in 'next'.
 source: <[email-masked]>

* ss/bswap-ntohll-fix (2025-06-06) 1 commit
 . bswap.h: Move the overwriting of the ntohl*/ htonl* macros.

 Seems to break Windows rather badly.
 cf. https://github.com/git/git/actions/runs/15511228119/job/43672455770#step:4:92
 source: <[email-masked]>

* bs/solaris-10-and-11 (2025-06-07) 1 commit
  (merged to 'next' on 2025-06-09 at a6d20b3666)
 + config.mak.uname: update settings for Solaris 10 and 11

 Add settings for Solaris 10 & 11.

 Will cook in 'next'.
 source: <[email-masked]>

* ag/imap-send-resurrection (2025-06-09) 10 commits
 - imap-send: fix minor mistakes in the logs
 - imap-send: display the destination mailbox when sending a message
 - imap-send: display port alongwith host when git credential is invoked
 - imap-send: add ability to list the available folders
 - imap-send: enable specifying the folder using the command line
 - imap-send: add PLAIN authentication method to OpenSSL
 - imap-send: add support for OAuth2.0 authentication
 - imap-send: gracefully fail if CRAM-MD5 authentication is requested without OpenSSL
 - imap-send: fix memory leak in case auth_cram_md5 fails
 - imap-send: fix bug causing cfg->folder being set to NULL

 "git imap-send" has been broken for a long time, which has been
 resurrected and then taught to talk OAuth2.0 etc.

 Ready?
 source: <[email-masked]>

* ag/send-email-docs (2025-05-30) 4 commits
  (merged to 'next' on 2025-06-05 at d6b5e97d89)
 + docs: make the purpose of using app password for Gmail more clear in send-email
 + docs: remove credential helper links for emails from gitcredentials
 + docs: improve formatting in git-send-email documentation
 + docs: add credential helper for yahoo and link Google's sendgmail tool

 Documentation for "git send-email" has been updated with a bit more
 credential helper and OAuth information.

 Will cook in 'next'.
 source: <[email-masked]>

* ly/pack-bitmap-root-leakfix (2025-06-09) 1 commit
  (merged to 'next' on 2025-06-09 at 15ff3f5f36)
 + pack-bitmap: remove checks before bitmap_free

 Memleak fix on an error code path.

 Will cook in 'next'.
 source: <[email-masked]>

* pw/subtree-gpg-sign (2025-06-04) 2 commits
  (merged to 'next' on 2025-06-05 at 5366ac646f)
 + contrib/subtree: add -S/--gpg-sign
 + contrib/subtree: parse using --stuck-long

 "git subtree" (in contrib/) learns to grok GPG signing its commits.

 Will cook in 'next'.
 source: <[email-masked]>

* sk/reftable-clarify-tests (2025-06-05) 10 commits
 - t/unit-tests: finalize migration of reftable-related tests
 - t/unit-tests: convert reftable stack test to use clar
 - t/unit-tests: convert reftable record test to use clar
 - t/unit-tests: convert reftable readwrite test to use clar
 - t/unit-tests: convert reftable table test to use clar
 - t/unit-tests: convert reftable pq test to use clar
 - t/unit-tests: convert reftable merged test to use clar
 - t/unit-tests: convert reftable block test to use clar
 - t/unit-tests: convert reftable basics test to use clar test framework
 - t/unit-tests: implement clar specific reftable test helper functions

 The reftable unit tests are now ported to the "clar" unit testing
 framework.

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

* lo/my-first-ow-doc-update (2025-06-02) 2 commits
  (merged to 'next' on 2025-06-05 at 576594dbf9)
 + MyFirstContribution: add walken.c to meson.build
 + MyFirstContribution: use struct repository in examples

 Doc update to the more recent world order.

 Will cook in 'next'.
 source: <[email-masked]>

* vd/cat-file-objectmode-update (2025-06-02) 3 commits
  (merged to 'next' on 2025-06-05 at fb997e495f)
 + cat-file.c: add batch handling for submodules
 + cat-file: add %(objectmode) atom
 + t1006: update 'run_tests' to test generic object specifiers

 "git cat-file --batch" learns to understand %(objectmode) atom to
 allow the caller to tell missing objects (due to repository
 corruption) and submodules (whose commit objects are OK to be
 missing) apart.

 Will cook in 'next'.
 source: <[email-masked]>

* ly/do-not-localize-bug-messages (2025-06-02) 1 commit
  (merged to 'next' on 2025-06-05 at 8fb8d5c0bb)
 + BUG(): remove leading underscore of the format string

 Code clean-up.

 Will cook in 'next'.
 source: <9d69[email-masked]>

* ly/sequencer-update-squash-is-fixup-only (2025-06-02) 1 commit
  (merged to 'next' on 2025-06-05 at 0ac9201fee)
 + sequencer: replace error() with BUG() in update_squash_messages ()

 Code clean-up.

 Will cook in 'next'.
 source: <f2d2[email-masked]>

* cf/guideline-documenting-config-vars (2025-06-03) 1 commit
  (merged to 'next' on 2025-06-06 at 72457f666b)
 + CodingGuidelines: document formatting of similar config variables.

 CodingGuidelines update.

 Will cook in 'next'.
 source: <8024[email-masked]>

* jm/bundle-uri-debug-output-to-fp (2025-06-04) 1 commit
  (merged to 'next' on 2025-06-09 at c58618e2dd)
 + bundle-uri: send debug output to given FILE * stream

 Code clean-up.

 Will cook in 'next'.
 source: <[email-masked]>

* ly/commit-graph-graph-write-leakfix (2025-06-03) 1 commit
  (merged to 'next' on 2025-06-05 at ae03e27cc8)
 + commit-graph: fix start_delayed_progress() leak

 A memory-leak in an error code path has been plugged.

 Will cook in 'next'.
 source: <[email-masked]>

* ly/fetch-pack-leakfix (2025-06-03) 1 commit
  (merged to 'next' on 2025-06-05 at 560cfcbe51)
 + builtin/fetch-pack: cleanup before return error

 A memory-leak in an error code path has been plugged.

 Will cook in 'next'.
 source: <[email-masked]>

* ly/commit-buffer-reencode-leakfix (2025-06-04) 1 commit
  (merged to 'next' on 2025-06-06 at 47b4fdbbf8)
 + repo_logmsg_reencode: fix memory leak when use repo_logmsg_reencode ()

 Leakfix.

 Will cook in 'next'.
 source: <[email-masked]>

* ag/send-email-edit-threading-fix (2025-06-04) 2 commits
  (merged to 'next' on 2025-06-09 at e53466b5aa)
 + send-email: show the new message id assigned by outlook in the logs
 + send-email: fix bug resulting in broken threads if a message is edited

 "git send-email" incremented its internal message counter when a
 message was edited, which made logic that treats the first message
 specially misbehave, which has been corrected.

 Will cook in 'next'.
 source: <[email-masked]>

* ly/load-bitmap-leakfix (2025-06-02) 3 commits
 - pack-bitmap: add load corrupt bitmap test
 - pack-bitmap: reword comments in test_bitmap_commits()
 - pack-bitmap: fix memory leak if load_bitmap() failed

 Leakfix with a new and a bit invasive test.

 Comments?
 source: <[email-masked]>

* rc/userdiff-r (2025-05-29) 1 commit
  (merged to 'next' on 2025-06-05 at 28e008821c)
 + userdiff: add support for R programming language

 Userdiff patterns for the R language.

 Will cook in 'next'.
 source: <[email-masked]>

* ps/maintenance-ref-lock (2025-06-03) 12 commits
  (merged to 'next' on 2025-06-05 at 9790bf814f)
 + builtin/maintenance: fix locking race when handling "gc" task
 + builtin/gc: avoid global state in `gc_before_repack()`
 + usage: allow dying without writing an error message
 + builtin/maintenance: fix locking race with refs and reflogs tasks
 + builtin/maintenance: split into foreground and background tasks
 + builtin/maintenance: fix typedef for function pointers
 + builtin/maintenance: extract function to run tasks
 + builtin/maintenance: stop modifying global array of tasks
 + builtin/maintenance: mark "--task=" and "--schedule=" as incompatible
 + builtin/maintenance: centralize configuration of explicit tasks
 + builtin/gc: drop redundant local variable
 + builtin/gc: use designated field initializers for maintenance tasks

 "git maintenance" lacked the care "git gc" had to avoid holding
 onto the repository lock for too long during packing refs, which
 has been remedied.

 Will cook in 'next'.
 source: <[email-masked]>

* tb/prepare-midx-pack-cleanup (2025-05-28) 5 commits
 - midx: return a `packed_git` pointer from `prepare_midx_pack()`
 - midx-write.c: extract inner loop from fill_packs_from_midx()
 - midx-write.c: guard against incremental MIDXs in want_included_pack()
 - midx: access pack names through `nth_midxed_pack_name()`
 - Merge branch 'ps/midx-negative-packfile-cache' into tb/prepare-midx-pack-cleanup

 Improvement on Multi-pack-index API.

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

* ps/meson-tap-parse (2025-06-01) 10 commits
  (merged to 'next' on 2025-06-03 at 579d19e8ae)
 + meson: parse TAP output generated by our tests
 + meson: introduce kwargs variable for tests
 + test-lib: fail on unexpectedly passing tests
 + t7815: fix unexpectedly passing test on macOS
 + t/test-lib: fix TAP format for BASH_XTRACEFD warning
 + t/test-lib: don't print shell traces to stdout
 + t983*: use prereq to check for Python-specific git-p4(1) support
 + t9822: use prereq to check for ISO-8859-1 support
 + t: silence output from `test_create_repo()`
 + t: stop announcing prereqs

 Meson-based build/test framework now understands TAP output
 generated by our tests.

 Will cook in 'next'.
 source: <[email-masked]>

* jw/doc-txt-to-adoc-refs (2025-05-21) 1 commit
  (merged to 'next' on 2025-06-08 at 041162a215)
 + doc: update references to renamed AsciiDoc files

 Some leftover references to documentation source files that no
 longer exist, due to recent ".txt" -> ".adoc" renaming, have been
 corrected.

 Will cook in 'next'.
 source: <[email-masked]>

* jk/diff-no-index-with-pathspec (2025-05-21) 3 commits
  (merged to 'next' on 2025-06-05 at b0dee92a43)
 + diff --no-index: support limiting by pathspec
 + pathspec: add flag to indicate operation without repository
 + pathspec: add match_leading_pathspec variant

 "git diff --no-index dirA dirB" can limit the comparison with
 pathspec at the end of the command line, just like normal "git
 diff".

 Will cook in 'next'.
 source: <[email-masked]>

* pw/stash-p-pathspec-fixes (2025-06-07) 2 commits
  (merged to 'next' on 2025-06-08 at 5932e4b43a)
 + stash: allow "git stash [<options>] --patch <pathspec>" to assume push
 + stash: allow "git stash -p <pathspec>" to assume push again

 "git stash -p <pathspec>" improvements.

 Will cook in 'next'.
 source: <[email-masked]>

* kn/fetch-push-bulk-ref-update (2025-05-19) 4 commits
  (merged to 'next' on 2025-05-22 at 7ab014070f)
 + receive-pack: use batched reference updates
 + send-pack: fix memory leak around duplicate refs
 + fetch: use batched reference updates
 + refs: add function to translate errors to strings
 (this branch is used by kn/fetch-push-bulk-ref-update-fixup.)

 "git push" and "git fetch" are taught to update refs in batches to
 gain performance.

 Will cook in 'next'.
 source: <20250519-501-[email-masked]>

* kj/renamed-submodule (2025-06-07) 2 commits
 - submodule: skip redundant active entries when pattern covers path
 - submodule: prevent overwriting .gitmodules entry on path reuse

 The case where a new submodule takes a path where used to be a
 completely different subproject is now dealt a bit better than
 before.

 Comments?
 source: <[email-masked]>

* bc/stash-export-import (2025-06-01) 4 commits
 - builtin/stash: provide a way to import stashes from a ref
 - builtin/stash: provide a way to export stashes to a ref
 - builtin/stash: factor out revision parsing into a function
 - object-name: make get_oid quietly return an error

 An interchange format for stash entries is defined, and subcommand
 of "git stash" to import/export has been added.

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

* lm/add-p-context (2025-05-10) 4 commits
 - add-patch: add diff.context command line overrides
 - add-patch: respect diff.context configuration
 - test: refactor to use "test_config"
 - test: refactor to use "test_grep"

 "git add/etc -p" now honors diff.context configuration variable,
 and learns to honor -U<n> option.

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

* ps/contrib-sweep (2025-05-16) 12 commits
 - Revert "contrib: remove "thunderbird-patch-inline""
 - contrib: remove some scripts in "stats" directory
 - contrib: remove "git-new-workdir"
 - contrib: remove "emacs" directory
 - contrib: remove "git-resurrect.sh"
 - contrib: remove "persistent-https" remote helper
 - contrib: remove "mw-to-git"
 - contrib: remove "hooks" directory
 - contrib: remove "thunderbird-patch-inline"
 - contrib: remove remote-helper stubs
 - contrib: remove "examples" directory
 - contrib: remove "remotes2config.sh"

 Remove bunch of stuff from contrib/ hierarchy.

 I've reverted the thunderbird thing for now.
 source: <[email-masked]>

* ps/object-store (2025-06-04) 17 commits
 - odb: rename `read_object_with_reference()`
 - odb: rename `pretend_object_file()`
 - odb: rename `has_object()`
 - odb: rename `repo_read_object_file()`
 - odb: rename `oid_object_info()`
 - odb: trivial refactorings to get rid of `the_repository`
 - odb: get rid of `the_repository` when handling submodule sources
 - odb: get rid of `the_repository` when handling the primary source
 - odb: get rid of `the_repository` in `for_each()` functions
 - odb: get rid of `the_repository` when handling alternates
 - odb: get rid of `the_repository` in `odb_mkstemp()`
 - odb: get rid of `the_repository` in `assert_oid_type()`
 - odb: get rid of `the_repository` in `find_odb()`
 - odb: introduce parent pointers
 - object-store: rename files to "odb.{c,h}"
 - object-store: rename `object_directory` to `odb_source`
 - object-store: rename `raw_object_store` to `object_database`

 Code clean-up around object access API.

 Comments?
 source: <[email-masked]>

* cc/promisor-remote-capability (2025-05-19) 5 commits
 - promisor-remote: use string constants for 'name' and 'url' too
 - promisor-remote: allow a client to check fields
 - promisor-remote: refactor how we parse advertised fields
 - promisor-remote: allow a server to advertise more fields
 - promisor-remote: refactor to get rid of 'struct strvec'

 The "promisor-remote" capability mechanism has been updated to
 allow the "partialCloneFilter" settings and the "token" value to be
 communicated from the server side.

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

* jc/you-still-use-whatchanged (2025-05-12) 6 commits
  (merged to 'next' on 2025-05-22 at e79dc9090e)
 + whatschanged: list it in BreakingChanges document
 + whatchanged: remove when built with WITH_BREAKING_CHANGES
 + whatchanged: require --i-still-use-this
 + tests: prepare for a world without whatchanged
 + doc: prepare for a world without whatchanged
 + you-still-use-that??: help deprecating commands for removal

 "git whatchanged" that is longer to type than "git log --raw"
 which is its modern rough equivalent has outlived its usefulness
 more than 10 years ago.  Plan to deprecate and remove it.

 Will cook in 'next'.
 source: <[email-masked]>

* cc/fast-import-export-signature-names (2025-04-24) 1 commit
 . fast-(import|export): improve on the signature algorithm name

 Clean up the way how signature on commit objects are exported to
 and imported from fast-import stream.

 Expecting a reroll.
 cf. <[email-masked]>
 cf. https://github.com/git/git/actions/runs/14671270673/job/41178138711
 source: <[email-masked]>

* sj/string-list-typefix (2025-05-18) 8 commits
 - u-string-list: move "remove duplicates" test to "u-string-list.c"
 - u-string-list: move "filter string" test to "u-string-list.c"
 - u-string-list: move "test_split_in_place" to "u-string-list.c"
 - u-string-list: move "test_split" into "u-string-list.c"
 - string-list: enable sign compare warnings check
 - string-list: return index directly when inserting an existing element
 - string-list: remove unused "insert_at" parameter from add_entry
 - string-list: fix sign compare warnings for loop iterator

 Code and test clean-up around string-list API.

 Comments?
 source: <aCoDB9P5XV1lHMil@ArchLinux>

* tb/midx-avoid-cruft-packs (2025-05-28) 9 commits
 - repack: exclude cruft pack(s) from the MIDX where possible
 - pack-objects: introduce '--stdin-packs=follow'
 - pack-objects: swap 'show_{object,commit}_pack_hint'
 - pack-objects: fix typo in 'show_object_pack_hint()'
 - pack-objects: perform name-hash traversal for unpacked objects
 - pack-objects: declare 'rev_info' for '--stdin-packs' earlier
 - pack-objects: factor out handling '--stdin-packs'
 - pack-objects: limit scope in 'add_object_entry_from_pack()'
 - pack-objects: use standard option incompatibility functions

 "pack-objects" has been taught to avoid pointing into objects in
 cruft packs from midx.

 Ready?
 source: <[email-masked]>

* ds/path-walk-2 (2025-05-16) 13 commits
  (merged to 'next' on 2025-06-05 at e59d4b1701)
 + pack-objects: allow --shallow and --path-walk
 + path-walk: add new 'edge_aggressive' option
 + pack-objects: thread the path-based compression
 + pack-objects: refactor path-walk delta phase
 + scalar: enable path-walk during push via config
 + pack-objects: enable --path-walk via config
 + repack: add --path-walk option
 + t5538: add tests to confirm deltas in shallow pushes
 + pack-objects: introduce GIT_TEST_PACK_PATH_WALK
 + p5313: add performance tests for --path-walk
 + pack-objects: update usage to match docs
 + pack-objects: add --path-walk option
 + pack-objects: extract should_attempt_deltas()

 "git pack-objects" learns to find delta bases from blobs at the
 same path, using the --path-walk API.

 Will cook in 'next'.
 source: <[email-masked]>

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

* pw/update-thunderbird-patch-inline (2025-05-16) 1 commit
 . contrib: update thunderbird-patch-inline

 Update bitrotten instruction for sending patches via Thunderbird
 (in contrib/).

 Will discard, as it was let be bitrotten without bothering any users.
 source: <[email-masked]>

* js/misc-defensive (2025-05-15) 14 commits
 . shallow: handle missing shallow commits gracefully
 . test-tool repository: check return value of `lookup_commit()`
 . submodule: check return value of `submodule_from_path()`
 . inherit_tracking(): defensive programming
 . describe: defensive programming
 . fetch: defensive programming
 . push: defensive programming
 . stash: defensive programming
 . stash: defensive programming
 . verify_commit_graph(): defensive programming
 . unparse_commit(): defensive programming
 . fetch-pack: defensive programming
 . get_parent(): defensive programming
 . revision: defensive programming

 Assorted changes that please CodeQL.

 Will discard, as no strong support seems to be there in the thread.
 source: <[email-masked]>

* pb/status-rebase-fixes (2025-03-28) 4 commits
 . wt-status: suggest 'git rebase --continue' to conclude 'merge' instruction
 . wt-status: also abbreviate 'merge' and 'fixup -C' lines during rebase
 . SQUASH??? - <[email-masked]>
 . rebase -r: do create merge commit after empty resolution

 A few fixes around "git status" while "git rebase" is running,
 plus a corner case bug fix for "git rebase -r".

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