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

From: Junio C Hamano <[email-masked]>
Date: Thu, 06 Mar 2025 16:55:31 -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).

Since we are already past -rc1, I expect that nothing that is not
yet in 'next' would come out of the pipeline until Git 2.49 final is
tagged at the end of next week.  A few non-urgent fixes that target
breakages shared with older releases like Git 2.48 or before will
also stay in 'next' cooking during that time.

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

* cc/lop-remote (2025-03-03) 3 commits
  (merged to 'next' on 2025-03-03 at 663485ae52)
 + doc: add technical design doc for large object promisors
 + promisor-remote: check advertised name or URL
 + Add 'promisor-remote' capability to protocol v2

 Large-object promisor protocol extension.
 source: <[email-masked]>

* dm/editorconfig-bash-is-like-sh (2025-03-03) 1 commit
  (merged to 'next' on 2025-03-04 at fa247cfd4e)
 + editorconfig: add .bash extension

 The editorconfig file is updated to tell us that bash scripts are
 similar to general Bourne shell scripts.
 source: <[email-masked]>

* jc/breaking-changes-early-adopter-option (2025-03-03) 1 commit
  (merged to 'next' on 2025-03-04 at b0c5685768)
 + BreakingChanges: clarify the procedure

 Doc update.
 source: <[email-masked]>

* js/win-2.49-build-fixes (2025-03-06) 3 commits
  (merged to 'next' on 2025-03-06 at 7583a8b724)
 + cmake: generalize the handling of the `CLAR_TEST_OBJS` list
 + meson: fix sorting
 + ident: stop assuming that `gw_gecos` is writable

 Hotfix to help building Git-for-Windows.
 source: <[email-masked]>

* kn/ref-migrate-skip-reflog (2025-03-03) 1 commit
  (merged to 'next' on 2025-03-04 at 3444b4bf36)
 + refs: show --no-reflog in the help text

 Usage string of "git refs" has been corrected.
 source: <[email-masked]>

* ps/path-sans-the-repository (2025-02-28) 16 commits
  (merged to 'next' on 2025-02-28 at 41875498b7)
 + path: adjust last remaining users of `the_repository`
 + environment: move access to "core.sharedRepository" into repo settings
 + environment: move access to "core.hooksPath" into repo settings
 + repo-settings: introduce function to clear struct
 + path: drop `git_path()` in favor of `repo_git_path()`
 + rerere: let `rerere_path()` write paths into a caller-provided buffer
 + path: drop `git_common_path()` in favor of `repo_common_path()`
 + worktree: return allocated string from `get_worktree_git_dir()`
 + path: drop `git_path_buf()` in favor of `repo_git_path_replace()`
 + path: drop `git_pathdup()` in favor of `repo_git_path()`
 + path: drop unused `strbuf_git_path()` function
 + path: refactor `repo_submodule_path()` family of functions
 + submodule: refactor `submodule_to_gitdir()` to accept a repo
 + path: refactor `repo_worktree_path()` family of functions
 + path: refactor `repo_git_path()` family of functions
 + path: refactor `repo_common_path()` family of functions

 The path.[ch] API takes an explicit repository parameter passed
 throughout the callchain, instead of relying on the_repository
 singleton instance.
 source: <[email-masked]>

* pw/build-meson-technical-and-howto-docs (2025-03-03) 1 commit
  (merged to 'next' on 2025-03-04 at fd3038fefd)
 + meson: fix building technical and howto docs

 Meson-based build procedure forgot to build some docs, which has
 been corrected.
 source: <[email-masked]>

* pw/repo-layout-doc-update (2025-03-05) 1 commit
  (merged to 'next' on 2025-03-06 at 2de1596002)
 + docs: fix repository-layout when building with breaking changes

 Some future breaking changes would remove certain parts of the
 default repository, which were still described even when the
 documents were built for the future with WITH_BREAKING_CHANGES.
 source: <[email-masked]>

* rs/reftable-reader-new-leakfix (2025-03-04) 1 commit
  (merged to 'next' on 2025-03-04 at 72b47a15e9)
 + reftable: release name on reftable_reader_new() error

 Leakfix.
 source: <[email-masked]>

* sk/unit-test-oid (2025-02-25) 4 commits
  (merged to 'next' on 2025-03-03 at b7a42309b2)
 + t/unit-tests: convert oidtree test to use clar test framework
 + t/unit-tests: convert oidmap test to use clar test framework
 + t/unit-tests: convert oid-array test to use clar test framework
 + t/unit-tests: implement clar specific oid helper functions

 Convert a few unit tests to the clar framework.
 source: <[email-masked]>

* tz/doc-txt-to-adoc-fixes (2025-03-03) 39 commits
  (merged to 'next' on 2025-03-04 at 831296c557)
 + xdiff: *.txt -> *.adoc fixes
 + unpack-trees.c: *.txt -> *.adoc fixes
 + transport.h: *.txt -> *.adoc fixes
 + trace2/tr2_sysenv.c: *.txt -> *.adoc fixes
 + trace2.h: *.txt -> *.adoc fixes
 + t6434: *.txt -> *.adoc fixes
 + t6012: *.txt -> *.adoc fixes
 + t/helper/test-rot13-filter.c: *.txt -> *.adoc fixes
 + simple-ipc.h: *.txt -> *.adoc fixes
 + setup.c: *.txt -> *.adoc fixes
 + refs.h: *.txt -> *.adoc fixes
 + pseudo-merge.h: *.txt -> *.adoc fixes
 + parse-options.h: *.txt -> *.adoc fixes
 + object-name.c: *.txt -> *.adoc fixes
 + list-objects-filter-options.h: *.txt -> *.adoc fixes
 + fsck.h: *.txt -> *.adoc fixes
 + diffcore.h: *.txt -> *.adoc fixes
 + diff.h: *.txt -> *.adoc fixes
 + contrib/long-running-filter: *.txt -> *.adoc fixes
 + config.c: *.txt -> *.adoc fixes
 + builtin.h: *.txt -> *.adoc fixes
 + apply.c: *.txt -> *.adoc fixes
 + advice.h: *.txt -> *.adoc fixes
 + doc: *.txt -> *.adoc fixes
 + technical/partial-clone: update reference to rev-list-options.adoc
 + howto/new-command: update reference to builtin docs
 + MyFirstObjectWalk: *.txt -> *.adoc fixes
 + MyFirstContribution: *.txt -> *.adoc fixes
 + CodingGuidelines: *.txt -> *.adoc fixes
 + README: *.txt -> *.adoc fixes
 + Makefile: update reference to technical/racy-git.adoc
 + doc: remove unneeded .gitattributes
 + .gitattributes: more *.txt -> *.adoc updates
 + t0450: *.txt -> *.adoc fixes
 + doc: fix build-docdep.perl
 + contrib/subtree: rename .txt to .adoc
 + contrib/contacts: rename .txt to .adoc
 + doc: update howto-index.sh for .adoc extensions
 + Merge branch 'ps/meson-contrib-bits' into tz/doc-txt-to-adoc-fixes

 Fallouts from recent renaming of documentation files from .txt
 suffix to the new .adoc suffix have been corrected.
 source: <[email-masked]>
 source: <[email-masked]>

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

* md/t1403-path-is-file (2025-03-04) 1 commit
 - t1403: verify that path exists and is a file

 Test tweak.
 source: <[email-masked]>

* sk/clar-trailer-urlmatch-norm-test (2025-03-04) 2 commits
 - t/unit-tests: convert urlmatch-normalization test to clar
 - t/unit-tests: convert trailer test to use clar

 A few traditional unit tests have been rewritten to use the clar
 framework.

 Comments?
 source: <[email-masked]>

* dm/completion-remote-names-fix (2025-03-05) 2 commits
 - completion: fix bugs with slashes in remote names
 - completion: add helper to count path components

 The bash command line completion script (in contrib/) has been
 updated to cope with remote repository nicknames with slashes in
 them.

 Comments?
 source: <[email-masked]>

* tb/refs-exclude-fixes (2025-03-06) 2 commits
  (merged to 'next' on 2025-03-06 at 50707f29db)
 + refs.c: stop matching non-directory prefixes in exclude patterns
 + refs.c: remove empty '--exclude' patterns

 The refname exclusion logic in the packed-ref backend has been
 broken for some time, which confused upload-pack to advertise
 different set of refs.  This has been corrected.

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

* en/merge-process-renames-crash-fix (2025-03-06) 2 commits
  (merged to 'next' on 2025-03-06 at 8f38331e32)
 + merge-ort: fix slightly overzealous assertion for rename-to-self
 + t6423: add a testcase causing a failed assertion in process_renames

 The merge-recursive and merge-ort machinery crashed in corner cases
 when certain renames are involved.

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

* kn/non-transactional-batch-updates (2025-03-06) 9 commits
 - update-ref: add --allow-partial flag for stdin mode
 - refs: support partial update rejections during F/D checks
 - refs: implement partial reference transaction support
 - refs: introduce enum-based transaction error types
 - refs/reftable: extract code from the transaction preparation
 - refs/files: remove duplicate duplicates check
 - refs: move duplicate refname update check to generic layer
 - refs/files: remove redundant check in split_symref_update()
 - Merge branch 'ps/refname-avail-check-optim' into kn/non-transactional-batch-updates
 (this branch uses ps/refname-avail-check-optim.)

 Updating multiple references have only been possible in all-or-none
 fashion with transactions, but it can be more efficient to batch
 multiple updates even when some of them are allowed to fail in a
 best-effort manner.  A new "best effort batches of updates" mode
 has been introduced.

 Comments?
 source: <[email-masked]>

* ps/object-wo-the-repository (2025-03-06) 12 commits
 - hash: stop depending on `the_repository` in `null_oid()`
 - hash: fix "-Wsign-compare" warnings
 - object-file: split out logic regarding hash algorithms
 - delta-islands: stop depending on `the_repository`
 - object-file-convert: stop depending on `the_repository`
 - pack-bitmap-write: stop depending on `the_repository`
 - pack-revindex: stop depending on `the_repository`
 - pack-check: stop depending on `the_repository`
 - environment: move access to "core.bigFileThreshold" into repo settings
 - pack-write: stop depending on `the_repository` and `the_hash_algo`
 - object: stop depending on `the_repository`
 - csum-file: stop depending on `the_repository`

 The object layer has been updated to take an explicit repository
 instance as a parameter in more code paths.

 Comments?
 source: <[email-masked]>

* ua/some-builtins-wo-the-repository (2025-03-06) 8 commits
  (merged to 'next' on 2025-03-06 at b0520af504)
 + builtin/checkout-index: stop using `the_repository`
 + builtin/for-each-ref: stop using `the_repository`
 + builtin/ls-files: stop using `the_repository`
 + builtin/pack-refs: stop using `the_repository`
 + builtin/send-pack: stop using `the_repository`
 + builtin/verify-commit: stop using `the_repository`
 + builtin/verify-tag: stop using `the_repository`
 + config: teach repo_config to allow `repo` to be NULL

 A handful of built-in command implementations have been rewritten
 to use the repository instance supplied by git.c:run_builtin(), its
 caller.

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

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

* ps/maintenance-reflog-expire (2025-02-26) 6 commits
 - builtin/maintenance: introduce "reflog-expire" task
 - builtin/gc: split out function to expire reflog entries
 - builtin/reflog: make functions regarding `reflog_expire_options` public
 - builtin/reflog: stop storing per-reflog expiry dates globally
 - builtin/reflog: stop storing default reflog expiry dates globally
 - reflog: rename `cmd_reflog_expire_cb` to `reflog_expire_options`

 "git maintenance" learns a new task to expire reflog entries.

 Needs (real) review.
 source: <[email-masked]>

* ps/refname-avail-check-optim (2025-03-06) 16 commits
 - refs: reuse iterators when determining refname availability
 - refs/iterator: implement seeking for files iterators
 - refs/iterator: implement seeking for packed-ref iterators
 - refs/iterator: implement seeking for ref-cache iterators
 - refs/iterator: implement seeking for reftable iterators
 - refs/iterator: implement seeking for merged iterators
 - refs/iterator: provide infrastructure to re-seek iterators
 - refs/iterator: separate lifecycle from iteration
 - refs: stop re-verifying common prefixes for availability
 - refs/files: batch refname availability checks for initial transactions
 - refs/files: batch refname availability checks for normal transactions
 - refs/reftable: batch refname availability checks
 - refs: introduce function to batch refname availability checks
 - builtin/update-ref: skip ambiguity checks when parsing object IDs
 - object-name: allow skipping ambiguity checks in `get_oid()` family
 - object-name: introduce `repo_get_oid_with_flags()`
 (this branch is used by kn/non-transactional-batch-updates.)

 The code paths to check whether a refname X is available (by seeing
 if another ref X/Y exists, etc.) have been optimized.

 Needs review.
 source: <[email-masked]>

* tb/multi-cruft-pack-refresh-fix (2025-03-04) 1 commit
 - builtin/pack-objects.c: freshen objects from existing cruft packs

 Certain "cruft" objects would have never been refreshed when there
 are multiple cruft packs in the repository, which has been
 corrected.

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

* jk/zlib-inflate-fixes (2025-02-25) 10 commits
 - unpack_loose_rest(): rewrite return handling for clarity
 - unpack_loose_rest(): simplify error handling
 - unpack_loose_rest(): never clean up zstream
 - unpack_loose_rest(): avoid numeric comparison of zlib status
 - unpack_loose_header(): avoid numeric comparison of zlib status
 - git_inflate(): skip zlib_post_call() sanity check on Z_NEED_DICT
 - unpack_loose_header(): fix infinite loop on broken zlib input
 - unpack_loose_header(): report headers without NUL as "bad"
 - unpack_loose_header(): simplify next_out assignment
 - loose_object_info(): BUG() on inflating content with unknown type

 Fix our use of zlib corner cases.

 Still being discussed.
 cf. <[email-masked]>
 source: <[email-masked]>

* cc/signed-fast-export-import (2025-02-24) 6 commits
 - fast-export, fast-import: add support for signed-commits
 - fast-export: do not modify memory from get_commit_buffer
 - git-fast-export.txt: clarify why 'verbatim' may not be a good idea
 - fast-export: rename --signed-tags='warn' to 'warn-verbatim'
 - fast-export: fix missing whitespace after switch
 - git-fast-import.adoc: add missing LF in the BNF

 "git fast-export | git fast-import" learns to deal with commit and
 tag objects with embedded signatures a bit better.

 Needs review.
 source: <[email-masked]>

* pb/doc-follow-remote-head (2025-02-14) 2 commits
 - config/remote.txt: improve wording for 'remote.<name>.followRemoteHEAD'
 - config/remote.txt: reunite 'severOption' description paragraphs

 source: <[email-masked]>

* jt/diff-pairs (2025-03-03) 4 commits
  (merged to 'next' on 2025-03-03 at 32346e0c3b)
 + builtin/diff-pairs: allow explicit diff queue flush
 + builtin: introduce diff-pairs command
 + diff: add option to skip resolving diff statuses
 + diff: return diff_filepair from diff queue helpers

 A post-processing filter for "diff --raw" output has been
 introduced.

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

* ib/diff-S-G-with-longhand (2025-02-12) 10 commits
 - diff: docs: Use --patch-{grep,modifies} over -G/-S
 - diff: --pickaxe-{all,regex} help: Add --patch-{grep,modifies}
 - diff: test: Use --patch-{grep,modifies} over -G/-S
 - completion: Support --patch-{grep,modifies}
 - diff: --patch-{grep,modifies} arg names for -G and -S
 - docs: gitdiffcore: -G and -S: Use regex/string placeholders
 - diff: short help: Add -G and --pickaxe-grep
 - diff: short help: Correct -S description
 - diff: -G description: Correct copy/paste error
 - t/t4209-log-pickaxe: Naming typo: -G takes a regex

 The commands in the "diff" family learned longhands for "-S" and
 "-G" options.

 The core part looked mostly good.
 source: <[email-masked]>

* ps/reftable-windows-unlink-fix (2025-02-18) 2 commits
 - reftable: ignore file-in-use errors when unlink(3p) fails on Windows
 - Merge branch 'ps/reftable-sans-compat-util' into ps/reftable-windows-unlink-fix
 (this branch uses ps/reftable-sans-compat-util.)

 Portability fix.

 Waiting for the base topic to settle.
 source: <[email-masked]>

* ps/reftable-sans-compat-util (2025-02-18) 18 commits
 - Makefile: skip reftable library for Coccinelle
 - reftable: decouple from Git codebase by pulling in "compat/posix.h"
 - git-compat-util.h: split out POSIX-emulating bits
 - compat/mingw: split out POSIX-related bits
 - reftable/basics: introduce `REFTABLE_UNUSED` annotation
 - reftable/basics: stop using `SWAP()` macro
 - reftable/stack: stop using `sleep_millisec()`
 - reftable/system: introduce `reftable_rand()`
 - reftable/reader: stop using `ARRAY_SIZE()` macro
 - reftable/basics: provide wrappers for big endian conversion
 - reftable/basics: stop using `st_mult()` in array allocators
 - reftable: stop using `BUG()` in trivial cases
 - reftable/record: don't `BUG()` in `reftable_record_cmp()`
 - reftable/record: stop using `BUG()` in `reftable_record_init()`
 - reftable/record: stop using `COPY_ARRAY()`
 - reftable/blocksource: stop using `xmmap()`
 - reftable/stack: stop using `write_in_full()`
 - reftable/stack: stop using `read_in_full()`
 (this branch is used by ps/reftable-windows-unlink-fix.)

 Make the code in reftable library less reliant on the service
 routines it used to borrow from Git proper, to make it easier to
 use by external users of the library.

 Waiting for Acks, especially for Windows bits?
 source: <[email-masked]>

* sj/ref-consistency-checks-more (2025-02-27) 9 commits
  (merged to 'next' on 2025-03-05 at 6bea9376c4)
 + builtin/fsck: add `git refs verify` child process
 + packed-backend: check whether the "packed-refs" is sorted
 + packed-backend: add "packed-refs" entry consistency check
 + packed-backend: check whether the refname contains NUL characters
 + packed-backend: add "packed-refs" header consistency check
 + packed-backend: check if header starts with "# pack-refs with: "
 + packed-backend: check whether the "packed-refs" is regular file
 + builtin/refs: get worktrees without reading head information
 + t0602: use subshell to ensure working directory unchanged

 "git fsck" becomes more careful when checking the refs.

 Will cook in 'next'.
 source: <Z8CMx7O19PMs9sVY@ArchLinux>

* jc/doc-attr-tree (2024-12-14) 1 commit
 - doc: give attr.tree a bit more visibility

 Make sure that "git --attr-source=X", GIT_ATTR_SOURCE, and
 attr.tree configuration variables appear at the same places in the
 documentation.

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

* tb/incremental-midx-part-2 (2024-11-20) 15 commits
 - midx: implement writing incremental MIDX bitmaps
 - pack-bitmap.c: use `ewah_or_iterator` for type bitmap iterators
 - pack-bitmap.c: keep track of each layer's type bitmaps
 - ewah: implement `struct ewah_or_iterator`
 - pack-bitmap.c: apply pseudo-merge commits with incremental MIDXs
 - pack-bitmap.c: compute disk-usage with incremental MIDXs
 - pack-bitmap.c: teach `rev-list --test-bitmap` about incremental MIDXs
 - pack-bitmap.c: support bitmap pack-reuse with incremental MIDXs
 - pack-bitmap.c: teach `show_objects_for_type()` about incremental MIDXs
 - pack-bitmap.c: teach `bitmap_for_commit()` about incremental MIDXs
 - pack-bitmap.c: open and store incremental bitmap layers
 - pack-revindex: prepare for incremental MIDX bitmaps
 - Documentation: describe incremental MIDX bitmaps
 - Merge branch 'tb/pseudo-merge-bitmap-fixes' into tb/incremental-midx-part-2
 - Merge branch 'tb/incremental-midx-part-1' into tb/incremental-midx-part-2

 Incrementally updating multi-pack index files.

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

* ej/cat-file-remote-object-info (2025-02-24) 8 commits
 - cat-file: add remote-object-info to batch-command
 - transport: add client support for object-info
 - serve: advertise object-info feature
 - fetch-pack: move fetch initialization
 - fetch-pack: refactor packet writing
 - t1006: split test utility functions into new "lib-cat-file.sh"
 - cat-file: add declaration of variable i inside its for loop
 - git-compat-util: add strtoul_ul() with error handling

 "git cat-file --batch" and friends can optionally ask a remote
 server about objects it does not have.
 source: <[email-masked]>