Subject: What's cooking in git.git (Aug 2024, #08; Wed, 21)

From: Junio C Hamano <[email-masked]>
Date: Wed, 21 Aug 2024 16:21:01 -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).

Among the topics that were sent to the list but not in 'next', there
are a few (conceptual) biggies like the Rust binding, clar unit test
framework, and documentation mark-up with s:[], that may need
further discussion.  There also are topics that are not covered well
by reviewers (yet).

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

* ag/git-svn-global-ignores (2024-08-14) 3 commits
  (merged to 'next' on 2024-08-15 at b8332fe306)
 + git-svn: mention `svn:global-ignores` in help+docs
  (merged to 'next' on 2024-08-08 at 3ba5e164a6)
 + git-svn: use `svn:global-ignores` to create .gitignore
 + git-svn: add public property `svn:global-ignores`

 "git svn" has been taught about svn:global-ignores property
 recent versions of Subversion has.
 source: <[email-masked]>
 source: <[email-masked]>

* jc/grammo-fixes (2024-08-09) 2 commits
  (merged to 'next' on 2024-08-15 at 111d5f5c13)
 + doc: grammofix in git-diff-tree
 + tutorial: grammofix

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

* jc/how-to-maintain-updates (2024-08-14) 1 commit
  (merged to 'next' on 2024-08-15 at 20ebc08e74)
 + howto-maintain: mention preformatted docs

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

* jk/apply-patch-mode-check-fix (2024-08-15) 1 commit
  (merged to 'next' on 2024-08-15 at 8e077b7875)
 + t4129: fix racy index when calling chmod after git-add

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

* jk/midx-unused-fix (2024-08-13) 1 commit
  (merged to 'next' on 2024-08-14 at 2ec51e52e1)
 + midx: drop unused parameters from add_midx_to_chain()

 Code clean-up in the base topic.
 source: <[email-masked]>

* js/ci-win-vs-build (2024-08-20) 2 commits
 + ci(win+VS): download the vcpkg artifacts using a dedicated GitHub Action
 + ci: bump microsoft/setup-msbuild from v1 to v2

 Sync with Windows+VS build jobs used at CI.
 source: <[email-masked]>

* ps/bundle-outside-repo-fix (2024-08-13) 2 commits
  (merged to 'next' on 2024-08-15 at 3b9ea8a38a)
 + bundle: default to SHA1 when reading bundle headers
 + builtin/bundle: have unbundle check for repo before opening its bundle

 "git bundle unbundle" outside a repository triggered a BUG()
 unnecessarily, which has been corrected.
 source: <[email-masked]>

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

* jk/send-email-mailmap (2024-08-20) 3 commits
 - send-email: add mailmap support via sendemail.mailmap and --mailmap
 - check-mailmap: add options for additional mailmap sources
 - check-mailmap: accept "user@host" contacts

 "git send-email" learned "--mailmap" option to allow rewriting the
 recipient addresses.

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

* ps/leakfixes-part-5 (2024-08-20) 21 commits
 - transport: fix leaking negotiation tips
 - transport: fix leaking arguments when fetching from bundle
 - builtin/fetch: fix leaking transaction with `--atomic`
 - remote: fix leaking peer ref when expanding refmap
 - remote: fix leaks when matching refspecs
 - remote: fix leaking config strings
 - builtin/fetch-pack: fix leaking refs
 - sideband: fix leaks when configuring sideband colors
 - builtin/send-pack: fix leaking refspecs
 - transport: fix leaking OID arrays in git:// transport data
 - t/helper: fix leaking multi-pack-indices in "read-midx"
 - builtin/repack: fix leaks when computing packs to repack
 - midx-write: fix leaking hashfile on error cases
 - builtin/archive: fix leaking `OPT_FILENAME()` value
 - builtin/upload-archive: fix leaking args passed to `write_archive()`
 - builtin/merge-tree: fix leaking `-X` strategy options
 - pretty: fix leaking key/value separator buffer
 - pretty: fix memory leaks when parsing pretty formats
 - convert: fix leaks when resetting attributes
 - mailinfo: fix leaking header data
 - Merge branch 'ps/leakfixes-part-4' into ps/leakfixes-part-5
 (this branch uses ps/leakfixes-part-4.)

 Even more leak fixes.

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

* sj/ref-contents-check (2024-08-20) 4 commits
 - ref: add symlink ref consistency check for files backend
 - ref: add symbolic ref content check for files backend
 - ref: add regular ref content check for files backend
 - fsck: introduce "FSCK_REF_REPORT_DEFAULT" macro

 Plumb through extra checks in refs API to "git fsck".

 Comments?
 source: <ZsIMc6cJ-kzMzW_8@ArchLinux>

* jc/coding-style-c-operator-with-spaces (2024-08-20) 1 commit
  (merged to 'next' on 2024-08-21 at 36bbb9022a)
 + CodingGuidelines: spaces around C operators

 Write down whitespacing rules around C opeators.

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

* jc/mailinfo-header-cleanup (2024-08-20) 1 commit
 - mailinfo: we parse fixed headers

 Code clean-up.

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

--------------------------------------------------
[Stalled]

* pp/add-parse-range-unit-test (2024-05-27) 1 commit
 - apply: add unit tests for parse_range

 A unit test for code that parses the hunk offset and length from a
 patch fragment header as been added.

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

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

* jk/mark-unused-parameters (2024-08-20) 16 commits
  (merged to 'next' on 2024-08-20 at 610d16d751)
 + t-hashmap: stop calling setup() for t_intern() test
  (merged to 'next' on 2024-08-19 at f85d6096c9)
 + scalar: mark unused parameters in dummy function
 + daemon: mark unused parameters in non-posix fallbacks
 + setup: mark unused parameter in config callback
 + test-mergesort: mark unused parameters in trivial callback
 + t-hashmap: mark unused parameters in callback function
 + reftable: mark unused parameters in virtual functions
 + reftable: drop obsolete test function declarations
 + reftable: ignore unused argc/argv in test functions
 + unit-tests: ignore unused argc/argv
 + t/helper: mark more unused argv/argc arguments
 + oss-fuzz: mark unused argv/argc argument
 + refs: mark unused parameters in do_for_each_reflog_helper()
 + refs: mark unused parameters in ref_store fsck callbacks
 + update-ref: mark more unused parameters in parser callbacks
 + imap-send: mark unused parameter in ssl_socket_connect() fallback

 Mark unused parameters as UNUSED to squelch -Wunused warnings.

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

* jk/drop-unused-parameters (2024-08-17) 5 commits
  (merged to 'next' on 2024-08-19 at f5c703013d)
 + diff-lib: drop unused index argument from get_stat_data()
 + ref-filter: drop unused parameters from email_atom_option_parser()
 + pack-bitmap: drop unused parameters from select_pseudo_merges()
 + pack-bitmap: load writer config from repository parameter
 + refs: drop some unused parameters from create_symref_lock()

 Drop unused parameters from functions.

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

* ps/maintenance-detach-fix-more (2024-08-21) 3 commits
 - builtin/maintenance: fix loose objects task emitting pack hash
 - t7900: exercise detaching via trace2 regions
 - t7900: fix flaky test due to leaking background job
 (this branch uses ps/maintenance-detach-fix.)

 A tests for "git maintenance" that were broken on Windows have been
 corrected.

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

* ps/reftable-concurrent-compaction (2024-08-19) 10 commits
 - reftable/stack: fix segfault when reload with reused readers fails
 - reftable/stack: reorder swapping in the reloaded stack contents
 - reftable/reader: keep readers alive during iteration
 - reftable/reader: introduce refcounting
 - reftable/stack: fix broken refnames in `write_n_ref_tables()`
 - reftable/reader: inline `reader_close()`
 - reftable/reader: inline `init_reader()`
 - reftable/reader: rename `reftable_new_reader()`
 - reftable/stack: inline `stack_compact_range_stats()`
 - reftable/blocksource: drop malloc block source
 (this branch uses ps/reftable-drop-generic.)

 The code path for compacting reftable files saw some bugfixes
 against concurrent operation.

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

* ah/git-prompt-portability (2024-08-20) 8 commits
  (merged to 'next' on 2024-08-21 at 14fa411577)
 + git-prompt: support custom 0-width PS1 markers
 + git-prompt: ta-da! document usage in other shells
 + git-prompt: don't use shell $'...'
 + git-prompt: add some missing quotes
 + git-prompt: replace [[...]] with standard code
 + git-prompt: don't use shell arrays
 + git-prompt: fix uninitialized variable
 + git-prompt: use here-doc instead of here-string

 The command line prompt support used to be littered with bash-isms,
 which has been corrected to work with more shells.

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

* ps/reftable-drop-generic (2024-08-15) 16 commits
 - reftable/generic: drop interface
 - t/helper: refactor to not use `struct reftable_table`
 - t/helper: use `hash_to_hex_algop()` to print hashes
 - t/helper: inline printing of reftable records
 - t/helper: inline `reftable_table_print()`
 - t/helper: inline `reftable_stack_print_directory()`
 - t/helper: inline `reftable_reader_print_file()`
 - t/helper: inline `reftable_dump_main()`
 - reftable/dump: drop unused `compact_stack()`
 - reftable/generic: move generic iterator code into iterator interface
 - reftable/iter: drop double-checking logic
 - reftable/stack: open-code reading refs
 - reftable/merged: stop using generic tables in the merged table
 - reftable/merged: rename `reftable_new_merged_table()`
 - reftable/merged: expose functions to initialize iterators
 - Merge branch 'ps/reftable-stack-compaction' into ps/reftable-drop-generic
 (this branch is used by ps/reftable-concurrent-compaction.)

 The code in the reftable library has been cleaned up by discarding
 unused "generic" interface.

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

* ps/hash-and-ref-format-from-config (2024-08-16) 5 commits
  (merged to 'next' on 2024-08-16 at 2028c02d01)
 + setup: make ref storage format configurable via config
 + setup: make object format configurable via config
 + setup: merge configuration of repository formats
 + t0001: delete repositories when object format tests finish
 + t0001: exercise initialization with ref formats more thoroughly

 The default object hash and ref backend format used to be settable
 only with explicit command line option to "git init" and
 environment variables, but now they can be configured in the user's
 global and system wide configuration.

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

* tb/pseudo-merge-bitmap-fixes (2024-08-15) 8 commits
  (merged to 'next' on 2024-08-19 at 10cc82b2fb)
 + pseudo-merge.c: ensure pseudo-merge groups are closed
 + pseudo-merge.c: do not generate empty pseudo-merge commits
 + t/t5333-pseudo-merge-bitmaps.sh: demonstrate empty pseudo-merge groups
 + pack-bitmap-write.c: select pseudo-merges even for small bitmaps
 + pack-bitmap: drop redundant args from `bitmap_writer_finish()`
 + pack-bitmap: drop redundant args from `bitmap_writer_build()`
 + pack-bitmap: drop redundant args from `bitmap_writer_build_type_index()`
 + pack-bitmap: initialize `bitmap_writer_init()` with packing_data
 (this branch is used by tb/incremental-midx-part-2.)

 We created a useless pseudo-merge reachability bitmap that is about
 0 commits, and attempted to include commits that are not in packs,
 which made no sense.  These bugs have been corrected.

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

* tb/incremental-midx-part-2 (2024-08-15) 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
 (this branch uses tb/pseudo-merge-bitmap-fixes.)

 Incremental updates of multi-pack index files.

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

* mt/rebase-x-quiet (2024-08-21) 1 commit
 - rebase --exec: respect --quiet

 "git rebase -x --quiet" was not quiet, which was corrected.

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

* ps/stash-keep-untrack-empty-fix (2024-08-16) 1 commit
  (merged to 'next' on 2024-08-16 at 3db6b6a815)
 + builtin/stash: fix `--keep-index --include-untracked` with empty HEAD

 A corner case bug in "git stash" was fixed.

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

* gt/unit-test-urlmatch-normalization (2024-08-20) 1 commit
  (merged to 'next' on 2024-08-21 at 3efed1ed8d)
 + t: migrate t0110-urlmatch-normalization to the new framework

 Another rewrite of test.

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

* ps/clar-unit-test (2024-08-20) 13 commits
 - clar: add CMake support
 - t/unit-tests: convert ctype tests to use clar
 - t/unit-tests: convert strvec tests to use clar
 - Makefile: wire up the clar unit testing framework
 - Makefile: do not use sparse on third-party sources
 - Makefile: make hdr-check depend on generated headers
 - Makefile: fix sparse dependency on GENERATED_H
 - clar: stop including `shellapi.h` unnecessarily
 - clar(win32): avoid compile error due to unused `fs_copy()`
 - clar: avoid compile error with mingw-w64
 - t/clar: fix compatibility with NonStop
 - t: import the clar unit testing framework
 - t: do not pass GIT_TEST_OPTS to unit tests with prove

 Import clar unit tests framework libgit2 folks invented for our
 use.

 Need to decide how to fill feature gap with our home-grown one
 cf. <[email-masked]>
 source: <[email-masked]>

* ps/maintenance-detach-fix (2024-08-16) 7 commits
  (merged to 'next' on 2024-08-16 at 5db1344236)
 + run-command: fix detaching when running auto maintenance
 + builtin/maintenance: add a `--detach` flag
 + builtin/gc: add a `--detach` flag
 + builtin/gc: stop processing log file on signal
 + builtin/gc: fix leaking config values
 + builtin/gc: refactor to read config into structure
 + config: fix constness of out parameter for `git_config_get_expiry()`
 (this branch is used by ps/maintenance-detach-fix-more.)

 Allow maintance tasks other than "gc" to properly go background
 when "git maintenance" run them.

 Will wait for the other topic and then merge to 'master'.
 source: <[email-masked]>

* jk/send-email-translate-aliases (2024-08-17) 3 commits
  (merged to 'next' on 2024-08-19 at dd207c3560)
 + send-email: teach git send-email option to translate aliases
 + t9001-send-email.sh: update alias list used for pine test
 + t9001-send-email.sh: fix quoting for mailrc --dump-aliases test

 "git send-email" learned "--translate-aliases" option that reads
 addresses from the standard input and emits the result of applying
 aliases on them to the standard output.

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

* cp/unit-test-reftable-block (2024-08-21) 11 commits
 - t-reftable-block: add tests for index blocks
 - t-reftable-block: add tests for obj blocks
 - t-reftable-block: add tests for log blocks
 - t-reftable-block: remove unnecessary variable 'j'
 - t-reftable-block: use xstrfmt() instead of xstrdup()
 - t-reftable-block: use block_iter_reset() instead of block_iter_close()
 - t-reftable-block: use reftable_record_key() instead of strbuf_addstr()
 - t-reftable-block: use reftable_record_equal() instead of check_str()
 - t-reftable-block: release used block reader
 - t: harmonize t-reftable-block.c with coding guidelines
 - t: move reftable/block_test.c to the unit testing framework

 Another test for reftable library ported to the unit test framework.

 Comments?
 source: <[email-masked]>

* js/libgit-rust (2024-08-09) 5 commits
 - cgit: add higher-level cgit crate
 - config: add git_configset_alloc() and git_configset_clear_and_free()
 - cgit-sys: add repo initialization and config access
 - cgit-sys: introduce Rust wrapper for libgit.a
 - common-main: split init and exit code into new files

 An rust binding to libgit.a functions has been introduced.

 Comments?
 source: <[email-masked]>

* jc/range-diff-lazy-setup (2024-08-09) 2 commits
 - remerge-diff: clean up temporary objdir at a central place
 - remerge-diff: lazily prepare temporary objdir on demand

 Code clean-up.

 Comments?
 source: <[email-masked]>

* jc/too-many-arguments (2024-08-06) 4 commits
 - miscellaneous: avoid "too many arguments"
 - notes: avoid "too many arguments"
 - cat-file: avoid "too many arguments"
 - refs: avoid "too many arguments"

 Error message clarification.

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

* ps/leakfixes-part-4 (2024-08-14) 23 commits
  (merged to 'next' on 2024-08-16 at 37502271ec)
 + builtin/diff: free symmetric diff members
 + diff: free state populated via options
 + builtin/log: fix leak when showing converted blob contents
 + userdiff: fix leaking memory for configured diff drivers
 + builtin/format-patch: fix various trivial memory leaks
 + diff: fix leak when parsing invalid ignore regex option
 + unpack-trees: clear index when not propagating it
 + sequencer: release todo list on error paths
 + merge-ort: unconditionally release attributes index
 + builtin/fast-export: plug leaking tag names
 + builtin/fast-export: fix leaking diff options
 + builtin/fast-import: plug trivial memory leaks
 + builtin/notes: fix leaking `struct notes_tree` when merging notes
 + builtin/rebase: fix leaking `commit.gpgsign` value
 + config: fix leaking comment character config
 + submodule-config: fix leaking name entry when traversing submodules
 + read-cache: fix leaking hashfile when writing index fails
 + bulk-checkin: fix leaking state TODO
 + object-name: fix leaking symlink paths in object context
 + object-file: fix memory leak when reading corrupted headers
 + git: fix leaking system paths
 + remote: plug memory leak when aliasing URLs
 + Merge branch 'ps/leakfixes-part-3' into ps/leakfixes-part-4
 (this branch is used by ps/leakfixes-part-5.)

 More leak fixes.

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

* cp/unit-test-reftable-readwrite (2024-08-13) 4 commits
  (merged to 'next' on 2024-08-16 at 8d68f73455)
 + t-reftable-readwrite: add test for known error
 + t-reftable-readwrite: use 'for' in place of infinite 'while' loops
 + t-reftable-readwrite: use free_names() instead of a for loop
 + t: move reftable/readwrite_test.c to the unit testing framework

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

* ps/config-wo-the-repository (2024-08-13) 21 commits
  (merged to 'next' on 2024-08-16 at 3d5462a90e)
 + config: hide functions using `the_repository` by default
 + global: prepare for hiding away repo-less config functions
 + config: don't depend on `the_repository` with branch conditions
 + config: don't have setters depend on `the_repository`
 + config: pass repo to functions that rename or copy sections
 + config: pass repo to `git_die_config()`
 + config: pass repo to `git_config_get_expiry_in_days()`
 + config: pass repo to `git_config_get_expiry()`
 + config: pass repo to `git_config_get_max_percent_split_change()`
 + config: pass repo to `git_config_get_split_index()`
 + config: pass repo to `git_config_get_index_threads()`
 + config: expose `repo_config_clear()`
 + config: introduce missing setters that take repo as parameter
 + path: hide functions using `the_repository` by default
 + path: stop relying on `the_repository` in `worktree_git_path()`
 + path: stop relying on `the_repository` when reporting garbage
 + hooks: remove implicit dependency on `the_repository`
 + editor: do not rely on `the_repository` for interactive edits
 + path: expose `do_git_common_path()` as `repo_common_pathv()`
 + path: expose `do_git_path()` as `repo_git_pathv()`
 + Merge branch 'ps/refs-wo-the-repository' into ps/config-wo-the-repository

 Use of API functions that implicitly depend on the_repository
 object in the config subsystem has been rewritten to pass a
 repository object through the callchain.

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

* ds/for-each-ref-is-base (2024-08-14) 4 commits
  (merged to 'next' on 2024-08-20 at dd5da48f40)
 + p1500: add is-base performance tests
 + for-each-ref: add 'is-base' token
 + commit: add gentle reference lookup method
 + commit-reach: add get_branch_base_for_tip

 'git for-each-ref' learned a new "--format" atom to find the branch
 that the history leading to a given commit "%(is-base:<commit>)" is
 likely based on.

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

* cc/promisor-remote-capability (2024-07-31) 4 commits
 - promisor-remote: check advertised name or URL
 - Add 'promisor-remote' capability to protocol v2
 - strbuf: refactor strbuf_trim_trailing_ch()
 - version: refactor strbuf_sanitize()

 The v2 protocol learned to allow the server to advertise possible
 promisor remotes, and the client to respond with what promissor
 remotes it uses, so that the server side can omit objects that the
 client can lazily obtain from these other promissor remotes.

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

* ja/doc-synopsis-markup (2024-08-12) 3 commits
 - doc: apply synopsis simplification on git-clone and git-init
 - doc: update the guidelines to reflect the current formatting rules
 - doc: introduce a synopsis custom paragraph attribute

 The way AsciiDoc is used for SYNOPSIS part of the manual pages has
 been revamped.  The sources, at least for the simple cases, got
 vastly pleasant to work with.

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

* tc/fetch-bundle-uri (2024-07-24) 3 commits
 - fetch: use bundle URIs when having creationToken heuristic
 - transport: introduce transport_has_remote_bundle_uri()
 - clone: remove double bundle list clear code

 Allow "git fetch" take advantage of bundleURI feature.

 Expecting a reroll or retraction.
 source: <ZqObobw8FsDMkllm@tanuki>

* ew/cat-file-optim (2024-07-15) 10 commits
 - cat-file: use writev(2) if available
 - cat-file: batch_write: use size_t for length
 - cat-file: batch-command uses content_limit
 - object_info: content_limit only applies to blobs
 - packfile: packed_object_info avoids packed_to_object_type
 - cat-file: use delta_base_cache entries directly
 - packfile: inline cache_or_unpack_entry
 - packfile: fix off-by-one in content_limit comparison
 - packfile: allow content-limit for cat-file
 - packfile: move sizep computation

 "git cat-file --batch" has been optimized.

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