Subject: What's cooking in git.git (Feb 2025, #05; Sat, 15)

From: Junio C Hamano <[email-masked]>
Date: Sat, 15 Feb 2025 10:48:03 -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).

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

* bc/doc-adoc-not-txt (2025-01-21) 5 commits
  (merged to 'next' on 2025-01-24 at 737049d332)
 + Remove obsolete ".txt" extensions for AsciiDoc files
 + doc: use .adoc extension for AsciiDoc files
 + gitattributes: mark AsciiDoc files as LF-only
 + editorconfig: add .adoc extension
 + doc: update gitignore for .adoc extension
 (this branch is used by jt/diff-pairs.)

 All the documentation .txt files have been renamed to .adoc to help
 content aware editors.
 cf. <[email-masked]>
 source: <[email-masked]>

* bf/fetch-set-head-fix (2025-01-27) 2 commits
  (merged to 'next' on 2025-02-06 at 9d20f0b55a)
 + fetch set_head: fix non-mirror remotes in bare repositories
 + fetch set_head: refactor to use remote directly

 Fetching into a bare repository incorrectly assumed it always used
 a mirror layout when deciding to update remote-tracking HEAD, which
 has been corrected.
 cf. <[email-masked]>
 source: <[email-masked]>

* kn/reflog-migration-fix-followup (2025-01-22) 4 commits
  (merged to 'next' on 2025-02-06 at 1b0fc3be42)
 + reftable: prevent 'update_index' changes after adding records
 + refs: use 'uint64_t' for 'ref_update.index'
 + refs: mark `ref_transaction_update_reflog()` as static
 + Merge branch 'kn/reflog-migration-fix' into kn/reflog-migration-fix-followup

 Code clean-up.
 cf. <[email-masked]>
 source: <[email-masked]>

* op/worktree-is-main-bare-fix (2025-02-05) 1 commit
  (merged to 'next' on 2025-02-06 at 25c618bf37)
 + worktree: detect from secondary worktree if main worktree is bare

 Going into a secondary worktree and asking "is the main worktree
 bare?" did not work correctly when per-worktree configuration
 option was in use, which has been corrected.
 source: <[email-masked]>

* ps/doc-http-upload-archive-service (2025-02-06) 1 commit
  (merged to 'next' on 2025-02-06 at dd19c245e9)
 + doc: documentation for http.uploadarchive config option

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

* tc/clone-single-revision (2025-02-06) 7 commits
  (merged to 'next' on 2025-02-06 at d67b50d35c)
 + builtin/clone: teach git-clone(1) the --revision= option
 + parse-options: introduce die_for_incompatible_opt2()
 + clone: introduce struct clone_opts in builtin/clone.c
 + clone: add tags refspec earlier to fetch refspec
 + clone: refactor wanted_peer_refs()
 + clone: make it possible to specify --tags
 + clone: cut down on global variables in clone.c

 "git clone" learned to make a shallow clone for a single commit
 that is not necessarily be at the tip of any branch.
 cf. <[email-masked]>
 source: <[email-masked]>

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

* mh/doc-commit-title-not-subject (2025-02-13) 1 commit
 - doc: use 'title' consistently

 Update "git commit" documentation to refer to commit titles as
 such, not "subject".

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

* mh/meson-credential-helpers (2025-02-13) 2 commits
 - meson: wire up credential-libsecret
 - meson: wire up credential-wincred

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

* tb/new-make-fix (2025-02-13) 1 commit
 - Makefile: remove accidental recipe prefix in conditional

 Workaround the overly picky HT/SP rule in newer GNU Make.

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

* ms/merge-recursive-string-list-micro-optimization (2025-02-13) 1 commit
 - merge-recursive: optimize time complexity for process_renames

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

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

* ua/update-server-info-sans-the-repository (2025-02-10) 1 commit
  (merged to 'next' on 2025-02-13 at d4e8288c9b)
 + builtin/update-server-info: remove the_repository global variable

 Code clean-up.

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

* en/doc-renormalize (2025-02-11) 1 commit
  (merged to 'next' on 2025-02-13 at 2069f4865c)
 + doc: clarify the intent of the renormalize option in the merge machinery

 Doc updates.

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

* jc/doc-boolean-synonyms (2025-02-11) 1 commit
  (merged to 'next' on 2025-02-13 at ab142d21e8)
 + doc: centrally document various ways tospell `true` and `false`

 Doc updates.

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

* da/xdiff-w-sign-compare-workaround (2025-02-12) 6 commits
 - xdiff: avoid signed vs. unsigned comparisons in xutils.c
 - xdiff: avoid signed vs. unsigned comparisons in xpatience.c
 - xdiff: avoid signed vs. unsigned comparisons in xhistogram.c
 - xdiff: avoid signed vs. unsigned comparisons in xemit.c
 - xdiff: avoid signed vs. unsigned comparisons in xdiffi.c
 - xdiff: move sign comparison warning guard into each file

 Noises from "-Wsign-compare" in the borrowed xdiff code has been
 squelched.

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

* jt/diff-pairs (2025-02-12) 4 commits
 - builtin/diff-pairs: allow explicit diff queue flush
 - builtin: introduce diff-pairs command
 - diff: return diff_filepair from diff queue helpers
 - Merge branch 'bc/doc-adoc-not-txt' into jt/diff-pairs

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

 Needs review (and most likely a bit more polish).
 source: <[email-masked]>

* kn/ref-migrate-skip-reflog (2025-02-12) 1 commit
 - builtin/refs: add '--skip-reflog' flag to bypass reflog migration

 "git refs migrate" can optionally be told not to migrate the reflog.

 Comments?
 cf. <[email-masked]>
 source: <20250212-477-refs-migrate[email-masked]>

* lo/t7603-path-is-file-update (2025-02-10) 1 commit
  (merged to 'next' on 2025-02-11 at c4ad516cd7)
 + t7603: replace test -f by test_path_is_file

 Test clean-up.

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

* ps/path-sans-the-repository (2025-02-07) 16 commits
 - 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]>

* jt/rev-list-missing-print-info (2025-02-05) 2 commits
  (merged to 'next' on 2025-02-10 at 88955fe5b4)
 + rev-list: extend print-info to print missing object type
 + rev-list: add print-info action to print missing object path

 "git rev-list --missing=" learned to accept "print-info" that gives
 known details expected of the missing objects, like path and type.

 Will merge to 'master'.
 cf. <CAP8UFD31kbtqXQDp9LyA+x+h+m592=[email-masked]>
 source: <[email-masked]>

* pw/rebase-i-ff-empty-commit (2025-02-11) 1 commit
 - rebase -i: reword empty commit after fast-forward

 "git rebase -i" failed to allow rewording an empty commit that has
 been fast-forwarded.
 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-07) 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.
 source: <[email-masked]>

* bc/contrib-thunderbird-patch-inline-fix (2025-02-10) 1 commit
  (merged to 'next' on 2025-02-11 at d13b5baf06)
 + thunderbird-patch-inline: avoid bashism

 A thunderbird helper script lost its bashism.

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

* da/difftool-sans-the-repository (2025-02-06) 3 commits
  (merged to 'next' on 2025-02-10 at e22cc108b6)
 + difftool: eliminate use of USE_THE_REPOSITORY_VARIABLE
 + difftool: eliminate use of the_repository
 + difftool: eliminate use of global variables

 "git difftool" code clean-up.

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

* ps/build-meson-fixes-0130 (2025-01-30) 14 commits
 - gitlab-ci: restrict maximum number of link jobs on Windows
 - meson: consistently use custom program paths to resolve programs
 - meson: fix overwritten `git` variable
 - meson: prevent finding sed(1) in a loop
 - meson: improve handling of `sane_tool_path` option
 - meson: improve PATH handling
 - meson: drop separate version library
 - meson: stop linking libcurl into all executables
 - meson: introduce `libgit_curl` dependency
 - meson: simplify use of the common-main library
 - meson: inline the static 'git' library
 - meson: fix OpenSSL fallback when not explicitly required
 - meson: fix exec path with enabled runtime prefix
 - Merge branch 'ps/build-meson-fixes' into ps/build-meson-fixes-0130

 Assorted fixes and improvements to the build procedure based on
 meson.

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

* ps/reftable-sans-compat-util (2025-02-07) 19 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()`
 - Merge branch 'ps/reftable-sign-compare' into ps/reftable-sans-compat-util
 (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?  Otherwise looking good.
 cf. <[email-masked]>
 The Windows bits may not be ready yet.
 cf. <[email-masked]>
 source: <[email-masked]>

* ac/doc-http-ssl-type-config (2025-02-05) 1 commit
  (merged to 'next' on 2025-02-13 at 4767266eb4)
 + docs: indicate http.sslCertType and sslKeyType

 Two configuration variables about SSL authentication material that
 weren't mentioned in the documentations are now mentioned.

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

* sj/ref-consistency-checks-more (2025-02-13) 8 commits
 - 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 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.

 Comments?
 source: <Z67LkxAFIAeaYr0U@ArchLinux>

* ua/os-version-capability (2025-02-14) 6 commits
 - agent: advertise OS name via agent capability
 - t5701: add setup test to remove side-effect dependency
 - version: extend get_uname_info() to hide system details
 - version: refactor get_uname_info()
 - version: refactor redact_non_printables()
 - version: replace manual ASCII checks with isprint() for clarity

 The value of "uname -s" is by default sent over the wire as a new
 capability, with an opt-out for privacy-concious folks.

 Getting there.
 source: <[email-masked]>

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

* cc/lop-remote (2025-02-14) 6 commits
 - doc: add technical design doc for large object promisors
 - promisor-remote: check advertised name or URL
 - Add 'promisor-remote' capability to protocol v2
 - version: make redact_non_printables() non-static
 - version: refactor redact_non_printables()
 - version: replace manual ASCII checks with isprint() for clarity

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

* ds/backfill (2025-02-03) 7 commits
  (merged to 'next' on 2025-02-10 at d6348c9f60)
 + backfill: assume --sparse when sparse-checkout is enabled
 + backfill: add --sparse option
 + backfill: add --min-batch-size=<n> option
 + backfill: basic functionality and tests
 + backfill: add builtin boilerplate
 + Merge branch 'master' into ds/backfill
 + Merge branch 'ds/path-walk-1' into ds/backfill

 Lazy-loading missing files in a blobless clone on demand is costly
 as it tends to be one-blob-at-a-time.  "git backfill" is introduced
 to help bulk-download necessary files beforehand.

 Will merge to 'master'.
 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.

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

* ps/send-pack-unhide-error-in-atomic-push (2025-02-03) 8 commits
  (merged to 'next' on 2025-02-10 at 7d93e5ad97)
 + send-pack: gracefully close the connection for atomic push
 + t5543: atomic push reports exit code failure
 + send-pack: new return code "ERROR_SEND_PACK_BAD_REF_STATUS"
 + t5548: add porcelain push test cases for dry-run mode
 + t5548: add new porcelain test cases
 + t5548: refactor test cases by resetting upstream
 + t5548: refactor to reuse setup_upstream() function
 + t5504: modernize test by moving heredocs into test bodies

 "git push --atomic --porcelain" used to ignore failures from the
 other side, losing the error status from the child process, which
 has been corrected.

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

* ej/cat-file-remote-object-info (2025-01-14) 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.

 Will discard.
 Has seen no activity or support for a month or so.
 source: <[email-masked]>

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

* sk/maintenance-remote-prune (2025-01-03) 1 commit
 . maintenance: add prune-remote-refs task

 A new periodic maintenance task to run "git remote prune" has been
 introduced.

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