What's cooking in git.git (Mar 2025, #07; Wed, 26)
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).
I am still officially on vacation, but 2.50 cycle has been started and the first batch of topics are now in 'master'.
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']
* 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.
source: <[email protected]>
* ja/doc-block-delimiter-markup-fix (2025-03-10) 1 commit (merged to 'next' on 2025-03-11 at 8d6641a77e)
+ doc: add a blank line around block delimiters
Doc markup updates.
source: <[email protected]>
* 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.
source: <[email protected]>
* 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.
source: <Z8CMx7O19PMs9sVY@ArchLinux>
* 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.
source: <[email protected]>
* ua/some-builtins-wo-the-repository (2025-03-07) 8 commits (merged to 'next' on 2025-03-07 at 01f2b84529)
+ 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.
source: <[email protected]>
--------------------------------------------------
[New Topics]
* ds/maintenance-loose-objects-batchsize (2025-03-23) 2 commits
- maintenance: add loose-objects.batchSize config
- maintenance: force progress/no-quiet to children
The job to coalesce loose objects into packfiles in "git maintenance" now has configurable batch size.
Will merge to 'next'?
source: <[email protected]>
* js/libgit-cargo-package (2025-03-22) 5 commits
. libgit-{sys,rs}: add license and description fields . libgit-sys: exclude unnecessary directories in git-src . libgit-sys: parallelize build with Cargo's jobserver . libgit-sys: add symlink to git repo root and build out of tree . libgitpub: move to separate contrib/ directory
Breaks Windows CI job with "../.." symbolic link in the source.
source: <[email protected]>
* jt/clone-guess-remote-head-fix (2025-03-25) 3 commits
- advice: allow disabling default branch name advice
- builtin/clone: suppress unexpected default branch advice
- remote: allow guess_remote_head() to suppress advice
"git clone" still gave the message about the default branch name; this message has been turned into an advice message that can be turned off.
source: <[email protected]>
* lo/userdiff-gitconfig (2025-03-23) 1 commit
- userdiff: add builtin driver for gitconfig syntax
Expecting a reroll?
source: <[email protected]>
* rs/clear-commit-marks-simplify (2025-03-24) 1 commit
- commit: move clear_commit_marks_many() loop body to clear_commit_marks()
Code clean-up.
Will merge to 'next'.
source: <[email protected]>
* ta/bulk-checkin-signed-compare-false-warning-fix (2025-03-25) 1 commit
- bulk-checkin: fix sign compare warnings
Compiler warnings workaround.
Will merge to 'next'.
source: <[email protected]>
* dk/vimdiff-doc-fix (2025-03-25) 1 commit
- vimdiff: clarify the sigil used for marking the buffer to save
Doc update.
Will merge to 'next'.
source: <[email protected]>
* es/meson-build-skip-coccinelle (2025-03-25) 1 commit
- meson: disable coccinelle configuration when building from a tarball
Build fix.
Will merge to 'next'.
source: <[email protected]>
* fr/vimdiff-layout-fixes (2025-03-25) 2 commits
- mergetools: vimdiff: add tests for layout with REMOTE as the target
- mergetools: vimdiff: fix layout where REMOTE is the target
Layout configuration in vimdiff backend didn't work as advertised, which has been corrected.
Will merge to 'next'.
source: <[email protected]>
* js/comma-semicolon-confusion (2025-03-25) 10 commits
- detect-compiler: detect clang even if it found CUDA
- clang: warn when the comma operator is used
- compat/regex: explicitly mark intentional use of the comma operator
- wildmatch: explicitly mark intentional use of the comma operator
- diff-delta: explicitly mark intentional use of the comma operator
- xdiff: avoid using the comma operator unnecessarily
- clar: avoid using the comma operator unnecessarily
- kwset: avoid using the comma operator unnecessarily
- rebase: avoid using the comma operator unnecessarily
- remote-curl: avoid using the comma operator unnecessarily
Code clean-up.
Will merge to 'next'?
source: <[email protected]>
* js/imap-send-peer-cert-verify (2025-03-25) 1 commit (merged to 'next' on 2025-03-26 at 69df4dd915)
+ imap-send: explicitly verify the peer certificate
Will merge to 'master'.
source: <[email protected]>
* js/mingw-admins-are-special (2025-03-25) 2 commits (merged to 'next' on 2025-03-26 at dfcb9661a6)
+ test-tool path-utils: support debugging "dubious ownership" issues
+ mingw: special-case administrators even more
"Dubious ownership" checks on Windows has been tightened up.
Will merge to 'master'.
source: <[email protected]>
--------------------------------------------------
[Cooking]
* en/assert-wo-side-effects (2025-03-21) 3 commits
- treewide: replace assert() with ASSERT() in special cases
- ci: add build checking for side-effects in assert() calls
- git-compat-util: introduce ASSERT() macro
Ensure what we write in assert() does not have side effects, and introduce ASSERT() macro to mark those that cannot be mechanically checked for lack of side effects.
Will merge to 'next'.
source: <[email protected]>
* jt/ref-transaction-abort-fix (2025-03-21) 1 commit
- builtin/fetch: avoid aborting closed reference transaction
A ref transaction corner case fix.
Will merge to 'next'?
source: <[email protected]>
* kn/ci-meson-check-build-docs-fix (2025-03-20) 1 commit (merged to 'next' on 2025-03-24 at 135ce9ce61)
+ ci/github: add missing 'CI_JOB_IMAGE' env variable
GitHub Actions CI switched on a CI/CD variable that does not exist when choosing what packages to install etc., which has been corrected.
Will merge to 'master'.
source: <[email protected]>
* ms/reftable-block-writer-errors (2025-03-21) 3 commits
- reftable: adapt write_object_record() to propagate block_writer_add() errors
- reftable: adapt writer_add_record() to propagate block_writer_add() errors
- reftable: propagate specific error codes in block_writer_add()
Give more meaningful error return values from block writer layer of the reftable ref-API backend.
Will merge to 'next'.
cf. <[email protected]>
source: <[email protected]>
* tb/bitamp-typofix (2025-03-21) 1 commit
(merged to 'next' on 2025-03-26 at f068ddb5bb)
+ pseudo-merge.h: fix a typo
Typofix.
Will merge to 'master'.
source: <3b3cc5c0fa2d0696eb15c5d3c97a6c93a0d39252.1742338479.git.me@ttaylorr.com>
* tb/http-curl-keepalive (2025-03-21) 4 commits
- http.c: allow custom TCP keepalive behavior via config
- http.c: inline set_curl_keepalive()
- http.c: introduce set_long_from_env() for convenience
- http.c: remove unnecessary casts to long
TCP keepalive behaviour on http transports can now be configured by calling cURL library.
Will merge to 'next'.
cf. <CABPp-BEn+NfGu1c=ZWjwnFBJgmsxRVSq+Roin-KDQGqKPdDhCg@mail.gmail.com>
source: <[email protected]>
* tb/refspec-fetch-cleanup (2025-03-21) 5 commits
- refspec: replace refspec_item_init() with fetch/push variants
- refspec: remove refspec_item_init_or_die()
- refspec: replace refspec_init() with fetch/push variants
- refspec: treat 'fetch' as a Boolean value
- Merge branch 'jk/fetch-ref-prefix-cleanup' into tb/refspec-fetch-cleanup (this branch uses jk/fetch-ref-prefix-cleanup.)
Code clean-up.
Will merge to 'next'.
cf. <CABPp-BE6JmiXB+pUL1Z4ewVDbG2RBxCdA2m5-WTYtoKMTtu_Xw@mail.gmail.com>
source: <[email protected]>
* zy/send-email-error-handling (2025-03-25) 2 commits
- send-email: finer-grained SMTP error handling
- send-email: capture errors in an eval {} block
Auth-related (and unrelated) error handling in send-email has been made more robust.
Getting there.
source: <[email protected]>
* aj/doc-restore-p-update (2025-03-18) 1 commit (merged to 'next' on 2025-03-24 at bdcfdc7f4e)
+ doc: restore: remove note on --patch w/ pathspecs
Stale description in "git restore -p" documentation has been updated.
Will merge to 'master'.
source: <[email protected]>
* en/random-cleanups (2025-03-17) 5 commits
(merged to 'next' on 2025-03-18 at 87acd24a85)
+ merge-ort: remove extraneous word in comment
+ merge-ort: fix accidental strset<->strintmap
+ t7615: be more explicit about diff algorithm used
+ t6423: fix a comment that accidentally reversed two commits
+ stash: remove merge-recursive.h include
Miscellaneous code clean-ups.
Will merge to 'master'.
source: <[email protected]>
* es/meson-building-docs-requires-perl (2025-03-17) 1 commit (merged to 'next' on 2025-03-18 at 1c1d88dcb7)
+ meson: fix perl detection when docs are enabled, but perl bindings aren't
Build update.
Will merge to 'master'.
source: <[email protected]>
* hj/doc-rev-list-ancestry-fix (2025-03-18) 1 commit (merged to 'next' on 2025-03-18 at e94155a9ec)
+ doc: add missing commit C to the graph for --ancestry-path=H D..M
Doc update.
Will merge to 'master'.
source: <[email protected]>
* ja/doc-branch-markup (2025-03-20) 2 commits
(merged to 'next' on 2025-03-24 at ba6e1c7d0b)
+ doc: apply new format to git-branch man page
+ completion: take into account the formatting backticks for options
Doc mark-up updates.
Will merge to 'master'.
source: <[email protected]>
* ps/mingw-creat-excl-fix (2025-03-21) 2 commits
- compat/mingw: fix EACCESS when opening files with O_CREAT | O_EXCL
- meson: fix compat sources when compiling with MSVC
Fix lockfile contention in reftable code on Windows.
Comments?
source: <[email protected]>
* rs/xdiff-context-length-fix (2025-03-14) 1 commit (merged to 'next' on 2025-03-18 at aca4b320d2)
+ xdiff: avoid arithmetic overflow in xdl_get_hunk()
The xdiff code on 32-bit platform misbehaved when an insanely large context size is given, which has been corrected.
Will merge to 'master'.
source: <[email protected]>
* sj/meson-test-environ-fix (2025-03-14) 1 commit
- meson: use test_environment conditionally.
meson-based build procedure was overly aggressive in using test environment in two contrib/ directories, which was corrected.
Needs review.
source: <3d127f293818f935efdb9ca7bb556e6a8f233ef7.1741975557.git.sam@gentoo.org>
* tb/combine-cruft-below-size (2025-03-21) 6 commits
(merged to 'next' on 2025-03-24 at 699b83a925)
+ repack: begin combining cruft packs with --combine-cruft-below-size
+ repack: avoid combining cruft packs with --max-cruft-size
+ t/t7704-repack-cruft.sh: consolidate write_blob()
+ t/t7704-repack-cruft.sh: clarify wording in --max-cruft-size tests
+ t/t5329-pack-objects-cruft.sh: evict 'repack'-related tests
+ Merge branch 'tb/multi-cruft-pack-refresh-fix' into tb/combine-cruft-below-size (this branch uses tb/multi-cruft-pack-refresh-fix.)
"git repack" learned "--combine-cruft-below-size" option that controls how cruft-packs are combined.
Will merge to 'master'.
source: <[email protected]>
* jh/hash-init-fixes (2025-03-18) 1 commit (merged to 'next' on 2025-03-24 at 85b8299403)
+ index-pack, unpack-objects: restore missing ->init_fn
An earlier code refactoring of the hash machinery missed a few required calls to init_fn.
Will merge to 'master'.
cf. <[email protected]>
source: <[email protected]>
* jk/fetch-follow-remote-head-fix (2025-03-18) 3 commits
- fetch: don't ask for remote HEAD if followRemoteHEAD is "never"
- fetch: only respect followRemoteHEAD with configured refspecs
- Merge branch 'jk/fetch-ref-prefix-cleanup' into jk/fetch-follow-remote-head-fix (this branch uses jk/fetch-ref-prefix-cleanup.)
"git fetch [<remote>]" with only the configured fetch refspec should be the only thing to update refs/remotes/<remote>/HEAD, but the code was overly eager to do so in other cases.
Will merge to 'next'?
source: <[email protected]>
* pw/build-breaking-changes-doc (2025-03-18) 1 commit (merged to 'next' on 2025-03-24 at 56efeea47e)
+ docs: add BreakingChanges to TECH_DOCS target
A documentation page was left out from formatting and installation, which has been corrected.
Will merge to 'master'.
source: <[email protected]>
* pw/doc-pack-refs-markup-fix (2025-03-18) 1 commit (merged to 'next' on 2025-03-24 at 3bcea36a83)
+ pack-refs doc: fix indentation for --exclude
Doc markup fix.
Will merge to 'master'.
source: <[email protected]>
* sc/bundle-uri-use-all-refs-in-bundle (2025-03-18) 2 commits
- bundle-uri: add test for bundle-uri clones with tags
- bundle-uri: copy all bundle references ino the refs/bundle space
Bundle-URI feature did not use refs recorded in the bundle other than normal branches as anchoring points to optimize the follow-up fetch during "git clone"; now it is told to utilize all.
Comments?
source: <[email protected]>
* en/diff-rename-follow-fix (2025-03-14) 1 commit
(merged to 'next' on 2025-03-18 at 56808a7eda)
+ diffcore-rename: fix BUG when break detection and --follow used together
A corner-case bug in "git log --follow -B" has been fixed.
Will merge to 'master'.
source: <[email protected]>
* en/merge-ort-prepare-to-remove-recursive (2025-03-18) 6 commits (merged to 'next' on 2025-03-18 at a911944a1c)
+ am: switch from merge_recursive_generic() to merge_ort_generic()
+ merge-ort: fix merge.directoryRenames=false
+ t3650: document bug when directory renames are turned off
+ merge-ort: support having merge verbosity be set to 0
+ merge-ort: allow rename detection to be disabled
+ merge-ort: add new merge_ort_generic() function
First step of deprecating and removing merge-recursive.
Will merge to 'master'.
source: <[email protected]>
* jk/use-wunreachable-code-for-devs (2025-03-17) 3 commits (merged to 'next' on 2025-03-18 at fe32168eef)
+ config.mak.dev: enable -Wunreachable-code
+ git-compat-util: add NOT_CONSTANT macro and use it in atfork_prepare()
+ run-command: use errno to check for sigfillset() error
Enable -Wunreachable-code for developer builds.
Will merge to 'master'.
source: <[email protected]>
* ab/decorate-code-cleanup (2025-03-10) 1 commit
(merged to 'next' on 2025-03-18 at 7ede1484eb)
+ decorate: fix sign comparison warnings
Code clean-up.
Will merge to 'master'.
source: <[email protected]>
* ds/path-walk-2 (2025-03-25) 13 commits
- 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.
Comments?
source: <[email protected]>
* jc/name-rev-stdin (2025-03-12) 6 commits (merged to 'next' on 2025-03-24 at cfec2e409f)
+ name-rev: remove "--stdin" support
+ t6120: further modernize
+ t6120: avoid hiding "git" exit status
+ t: introduce WITH_BREAKING_CHANGES prerequisite
+ t: extend test_lazy_prereq
+ t: document test_lazy_prereq
Using "git name-rev --stdin" as an example, improve the framework to prepare tests to pretend to be in the future where the breaking changes have already happened.
Will merge to 'master'.
source: <[email protected]>
* jk/fetch-ref-prefix-cleanup (2025-03-10) 9 commits
(merged to 'next' on 2025-03-18 at ab3e5cf19f)
+ fetch: use ref prefix list to skip ls-refs
+ fetch: avoid ls-refs only to ask for HEAD symref update
+ fetch: stop protecting additions to ref-prefix list
+ fetch: ask server to advertise HEAD for config-less fetch
+ refspec_ref_prefixes(): clean up refspec_item logic
+ t5516: beef up exact-oid ref prefixes test
+ t5516: drop NEEDSWORK about v2 reachability behavior
+ t5516: prefer "oid" to "sha1" in some test titles
+ t5702: fix typo in test name
(this branch is used by jk/fetch-follow-remote-head-fix and tb/refspec-fetch-cleanup.)
In protocol v2 where the refs advertisement is constrained, we try to tell the server side not to limit the advertisement when there is no specific need to, which has been the source of confusion and recent bugs. Revamp the logic to simplify.
Will merge to 'master'.
source: <[email protected]>
* jt/rev-list-z (2025-03-21) 5 commits
- rev-list: support NUL-delimited --missing option
- rev-list: support NUL-delimited --boundary option
- rev-list: support delimiting objects with NUL bytes
- rev-list: refactor early option parsing
- rev-list: inline show_object_with_name() in show_object()
"git rev-list" learns machine-parsable output format that delimits each field with NUL.
Will merge to 'next'?
source: <[email protected]>
* kn/reflog-drop (2025-03-17) 2 commits
- reflog: implement subcommand to drop reflogs
- reflog: improve error for when reflog is not found
"git reflog" learns "drop" subcommand, that discards the entire reflog data for a ref.
Will merge to 'next'?
source: <20250314-493-add-command-to-purge-reflog-entries-v3-0-c24e23a6146d@gmail.com>
* am/dir-dedup-decl-of-repository (2025-03-11) 1 commit (merged to 'next' on 2025-03-18 at 9075454132)
+ dir.h: remove duplicate forward declaration of struct repository
Code cleanup.
Will merge to 'master'.
source: <[email protected]>
* cc/lop-remote (2025-03-18) 4 commits
(merged to 'next' on 2025-03-24 at 3b685ceef0)
+ promisor-remote: compare remote names case sensitively
+ promisor-remote: fix possible issue when no URL is advertised
+ promisor-remote: fix segfault when remote URL is missing
+ t5710: arrange to delete the client before cloning
Bugfix in newly introduced large-object-promisor remote support.
Will merge to 'master'.
source: <[email protected]>
* ps/ci-meson-check-build-docs (2025-03-12) 1 commit
- ci: perform build and smoke tests for Meson docs
CI update.
Will merge to 'next'.
source: <[email protected]>
* ps/meson-with-breaking-changes (2025-03-12) 3 commits (merged to 'next' on 2025-03-18 at 15b1c62eff)
+ meson: don't install git-pack-redundant(1) docs with breaking changes
+ meson: don't compile git-pack-redundant(1) with breaking changes
+ meson: define WITH_BREAKING_CHANGES when enabling breaking changes
Update meson based build procedure for breaking changes support.
Will merge to 'master'.
source: <[email protected]>
* md/t1403-path-is-file (2025-03-04) 1 commit
- t1403: verify that path exists and is a file
Test tweak.
source: <[email protected]>
* 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 protected]>
* dm/completion-remote-names-fix (2025-03-23) 2 commits (merged to 'next' on 2025-03-26 at b9460e20ae)
+ 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.
Will merge to 'master'.
source: <[email protected]>
* kn/non-transactional-batch-updates (2025-03-21) 9 commits
- update-ref: add --batch-updates flag for stdin mode
- refs: support rejection in batch updates during F/D checks
- refs: implement batch reference update 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: <20250320-245-partially-atomic-ref-updates-v4-0-3dcc1b311dc9@gmail.com>
* ps/object-wo-the-repository (2025-03-10) 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.
Looking good.
source: <20250310-b4-pks-objects-without-the-repository-v4-0-f201b8ec57ba@pks.im>
* 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 protected]>
* ps/refname-avail-check-optim (2025-03-12) 16 commits (merged to 'next' on 2025-03-18 at 726197f7e0)
+ 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.
Will merge to 'master'.
source: <[email protected]>
* tb/multi-cruft-pack-refresh-fix (2025-03-13) 1 commit (merged to 'next' on 2025-03-18 at e3f090e427)
+ builtin/pack-objects.c: freshen objects from existing cruft packs (this branch is used by tb/combine-cruft-below-size.)
Certain "cruft" objects would have never been refreshed when there are multiple cruft packs in the repository, which has been corrected.
Will merge to 'master'.
source: <1563552bbda0bc910c9f41b0fabc3225c4d778fc.1741889018.git.me@ttaylorr.com>
* 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 protected]>
source: <[email protected]>
* cc/signed-fast-export-import (2025-03-10) 6 commits (merged to 'next' on 2025-03-18 at d98973e2cb)
+ fast-export, fast-import: add support for signed-commits
+ fast-export: do not modify memory from get_commit_buffer
+ git-fast-export.adoc: 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.
Will merge to 'master'.
cf. <CABPp-BGyA8iBA0BFO8FcpZAMca94aVu2vHHRi4Oz=nCWxJSDPg@mail.gmail.com>
source: <[email protected]>
* 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 protected]>
* 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: <20250206-b4-pks-reftable-win32-in-use-errors-v2-1-56985a4f6186@pks.im>
* 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: <20250218-pks-reftable-drop-git-compat-util-v6-0-8c1f39fb4c02@pks.im>
* 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 protected]>
source: <[email protected]>
* tb/incremental-midx-part-2 (2025-03-21) 14 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
- Documentation: remove a "future work" item from the MIDX docs
Incrementally updating multi-pack index files.
Comments?
source: <[email protected]>
* 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 protected]>
--------------------------------------------------
[Discarded]
* jc/ci-meson-check-build-docs-fix (2025-03-14) 1 commit . install meson for Documentation job
(this branch uses ps/ci-meson-check-build-docs.)
The documentation CI job tries to build test documentation pages with both make- and meson-based build procedures, but somehow forgot to install meson in the Ci environment, which has been corrected.
Discarded. kn/ci-meson-check-build-docs-fix gives us the right fix. cf. <[email protected]>
cf. <CAOLa=ZRODjYfDXQ8m+hDosV7RBGDWeehzSvsR-+-HCmbS+tAcQ@mail.gmail.com>
source: <[email protected]>
Quoted 16 lines · Junio C Hamano
* tb/incremental-midx-part-2 (2025-03-21) 14 commits
- midx: implement writing incremental MIDX bitmaps
-pack-bitmap.c: useewah_or_iteratorfor type bitmap iterators
-pack-bitmap.c: keep track of each layer's type bitmaps
- ewah: implementstruct 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: teachrev-list --test-bitmapabout incremental MIDXs
-pack-bitmap.c: support bitmap pack-reuse with incremental MIDXs
-pack-bitmap.c: teachshow_objects_for_type()about incremental MIDXs
-pack-bitmap.c: teachbitmap_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
- Documentation: remove a "future work" item from the MIDX docs
Quoted 4 lines
Incrementally updating multi-pack index files.
Comments?
source: <[email protected]>
I think that this one is ready to go. Elijah was satisfied[1] with the changes between v4->v5. Peff looked at v4 and seemed generally satisfied[2], and I think the changes he suggested were faithfully implemented in v5.
If either have thoughts or think that it shouldn't be merged yet, I'm more than happy to keep plugging away at this one, but I suspect it's ready to start being merged down.
Thanks,
Taylor
[1]: https://lore.kernel.org/git/CABPp-BGv_KDdviT0C6khs0gaoHLSt+ZfmbAVrAkTyT9PC1=Unw@mail.gmail.com/
[2]: https://lore.kernel.org/git/[email protected]/
Quoted 19 lines · Taylor Blau
Quoted 18 lines · Junio C Hamano
* tb/incremental-midx-part-2 (2025-03-21) 14 commits
- midx: implement writing incremental MIDX bitmaps
-pack-bitmap.c: useewah_or_iteratorfor type bitmap iterators
-pack-bitmap.c: keep track of each layer's type bitmaps
- ewah: implementstruct 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: teachrev-list --test-bitmapabout incremental MIDXs
-pack-bitmap.c: support bitmap pack-reuse with incremental MIDXs
-pack-bitmap.c: teachshow_objects_for_type()about incremental MIDXs
-pack-bitmap.c: teachbitmap_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
- Documentation: remove a "future work" item from the MIDX docsIncrementally updating multi-pack index files.
Quoted 7 lines
Quoted 2 lines
Comments?
source: <[email protected]>I think that this one is ready to go. Elijah was satisfied[1] with the changes between
v4->v5. Peff looked at v4 and seemed generally satisfied[2], and I think the changes he suggested were faithfully implemented in v5.
Yep, sorry for the slow response; I was offline most of last week. All of my questions were addressed in v5.
-Peff
Quoted 12 lines · Junio C Hamano
* 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
Quoted 5 lines
The commands in the "diff" family learned longhands for "-S" and "-G" options.
The core part looked mostly good.
source: <[email protected]>
I'd be interested in seeing this land. I think I can read through review comments
and split the cleanups from the addition of long-form options (both of which I think are generally improvements), but without signoffs in the original commits I feel like I might be overstepping on the intellectual property---and I certainly wouldn't want to cause licensing trouble for Git.
What's the usual way to proceed in a case like this?
PS enjoy the vacation Junio---I'm hoping someone else will reply so that you don't need to :)
Cheers,
Ben
jk/fetch-follow-remote-head-fix, was Re: What's cooking in git.git (Mar 2025, #07; Wed, 26)
In reply to Junio C HamanoQuoted 6 lines · Junio C Hamano
* jk/fetch-follow-remote-head-fix (2025-03-18) 3 commits
- fetch: don't ask for remote HEAD if followRemoteHEAD is "never"
- fetch: only respect followRemoteHEAD with configured refspecs
- Merge branch 'jk/fetch-ref-prefix-cleanup' into jk/fetch-follow-remote-head-fix (this branch uses jk/fetch-ref-prefix-cleanup.)
Quoted 6 lines
"git fetch [<remote>]" with only the configured fetch refspec should be the only thing to update refs/remotes/<remote>/HEAD, but the code was overly eager to do so in other cases.
Will merge to 'next'?
source: <[email protected]>
I think so. The design was based on our discussion, and it seemed to get positive comments from you and Taylor. It might be nice to get an ack from Bence, since this is his feature I'm modifying.
Taylor did note one place where the resulting code is a little hard to read. That could be addressed by adding this on top (or it could be squashed into patch 1):
-- >8 --
Subject: [PATCH] fetch: make set_head() call easier to read
We ignore any error returned from set_head(), but 638060dcb9 (fetchset_head: refactor to use remote directly, 2025-01-26) left its call in a noop "if" conditional as a sort of note-to-self.
When c834d1a7ce (fetch: only respect followRemoteHEAD with configured refspecs, 2025-03-18) added a "do_set_head" flag, it was rolled into the same conditional, putting set_head() on the right-hand side of a short-circuit AND.
That's not wrong, but it really hides the point of the line, which is (maybe) calling the function.
Instead, let's have a full if() block for the flag, and then our comment (with some rewording) will be sufficient to clarify the error handling.
--- builtin/fetch.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
builtin/fetch.c +5 -4
@@ -1903,12 +1903,13 @@ static int do_fetch(struct transport *transport, "you need to specify exactly one branch with the --set-upstream option")); } } -if (do_set_head &&set_head (remote_refs, transport->remote)) - ; +if (do_set_head) {/* -* Way too many cases where this can go wrong -* so let's just fail silently for now. +* Way too many cases where this can go wrong so let's just +* ignore errors and fail silently for now. */ +set_head (remote_refs, transport->remote); + } cleanup:if (retcode) {
Signature · 1 line
2.49.0.578.gaa93496c6a
jk/zlib-inflate-fixes, was Re: What's cooking in git.git (Mar 2025, #07; Wed, 26)
In reply to Junio C HamanoQuoted 12 lines · Junio C Hamano
* 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(): skipzlib_post_call()sanity check onZ_NEED_DICT
-unpack_loose_header(): fix infinite loop on broken zlib input
-unpack_loose_header(): report headers without NUL as "bad"
-unpack_loose_header(): simplifynext_outassignment
-loose_object_info():BUG()on inflating content with unknown type
Quoted 5 lines
Fix our use of zlib corner cases.
Still being discussed.
cf. <[email protected]>
source: <[email protected]>
I don't think there's any more discussion happening here. IMHO it is ready for 'next'. The message you have in the cf. is about further possible cleanups for cat-file, which I think are out of scope.
I think you and I also discussed getting rid of support for these non-standard headers entirely, which would obsolete some of this work. I think that's worth doing (and I started on some patches towards it), but it would be a bigger change that breaks backwards compatibility. So I think we'd want these fixes in the meantime.
-Peff
Re: jk/fetch-follow-remote-head-fix, was Re: What's cooking in git.git (Mar 2025, #07; Wed, 26)
In reply to Jeff KingQuoted 12 lines · Jeff King
Quoted 10 lines · Junio C Hamano
* jk/fetch-follow-remote-head-fix (2025-03-18) 3 commits
- fetch: don't ask for remote HEAD if followRemoteHEAD is "never"
- fetch: only respect followRemoteHEAD with configured refspecs
- Merge branch 'jk/fetch-ref-prefix-cleanup' into jk/fetch-follow-remote-head-fix (this branch uses jk/fetch-ref-prefix-cleanup.)"git fetch [<remote>]" with only the configured fetch refspec should be the only thing to update refs/remotes/<remote>/HEAD, but the code was overly eager to do so in other cases.
Quoted 6 lines
Quoted 2 lines
Will merge to 'next'?
source: <[email protected]>I think so. The design was based on our discussion, and it seemed to get positive comments from you and Taylor. It might be nice to get an ack from Bence, since this is his feature I'm modifying.
Thanks, I saw the patches, but got swamped. I think it's perfectly reasonable to only update remote/HEAD when we're getting the entire remote, and not just bits and pieces. For bits and pieces update of remote/HEAD there's still remote set-head -a. I'm not sure if I should formally send an Acked-by on the patch?
And thanks for cleaning up the bugs this feature introduced!
Quoted 17 lines
Taylor did note one place where the resulting code is a little hard to read. That could be addressed by adding this on top (or it could be squashed into patch 1):
-- >8 --
Subject: [PATCH] fetch: makeset_head()call easier to readWe ignore any error returned from
set_head(), but638060dcb9(fetchset_head: refactor to use remote directly, 2025-01-26) left its call in a noop "if" conditional as a sort of note-to-self.When
c834d1a7ce(fetch: only respect followRemoteHEAD with configured refspecs, 2025-03-18) added a "do_set_head" flag, it was rolled into the same conditional, puttingset_head()on the right-hand side of a short-circuit AND.
Quoted 5 lines
That's not wrong, but it really hides the point of the line, which is (maybe) calling the function.
Instead, let's have a full
if()block for the flag, and then our comment (with some rewording) will be sufficient to clarify the error handling.
It also makes it more transparent that the comment belongs to the set_head line, so definitely tidier.
Thanks,
Bence
Quoted 28 lines
Signed-off-by Jeff King <[email protected]>--- builtin/fetch.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)builtin/fetch.c +5
-4@@ -1903,12 +1903,13 @@ static int do_fetch(struct transport *transport, "you need to specify exactly one branch with the --set-upstream option")); } } -if (do_set_head &&set_head (remote_refs, transport->remote)) - ; +if (do_set_head) {/* -* Way too many cases where this can go wrong -* so let's just fail silently for now. +* Way too many cases where this can go wrong so let's just +* ignore errors and fail silently for now. */ +set_head (remote_refs, transport->remote); + } cleanup:if (retcode) {
Signature · 1 line
bence.ferdinandy.com
Quoted 27 lines · D. Ben Knoble
Quoted 12 lines · Junio C Hamano
* 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 regexQuoted 5 lines
The commands in the "diff" family learned longhands for "-S" and "-G" options.
The core part looked mostly good.
source: <[email protected]>I'd be interested in seeing this land. I think I can read through review comments
and split the cleanups from the addition of long-form options (both of which I think are generally improvements), but without signoffs in the original commits I feel like I might be overstepping on the intellectual property---and I certainly wouldn't want to cause licensing trouble for Git.
Quoted 7 lines
What's the usual way to proceed in a case like this?
PS enjoy the vacation Junio---I'm hoping someone else will reply so that you don't need to :)
Cheers,
Ben
Looks like maybe my query got dropped during the vacation time: I saw the newest "What's cooking" said "Expecting a reroll"—did I miss an update in the original thread?
Signature · 1 line
D. Ben Knoble
Quoted 33 lines · D. Ben Knoble
Quoted 32 lines · D. Ben Knoble
Quoted 12 lines · Junio C Hamano
* 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 regexQuoted 5 lines
The commands in the "diff" family learned longhands for "-S" and "-G" options.
The core part looked mostly good.
source: <[email protected]>I'd be interested in seeing this land. I think I can read through review comments
and split the cleanups from the addition of long-form options (both of which I think are generally improvements), but without signoffs in the original commits I feel like I might be overstepping on the intellectual property---and I certainly wouldn't want to cause licensing trouble for Git.What's the usual way to proceed in a case like this?
PS enjoy the vacation Junio---I'm hoping someone else will reply so that you don't need to :)
Quoted 6 lines
Quoted 2 lines
Cheers,
BenLooks like maybe my query got dropped during the vacation time: I saw the newest "What's cooking" said "Expecting a reroll"—did I miss an update in the original thread?
Yeah, unfortunately it wouldn't be good to add changes of dubious origin that is not certified with DCO sign-off.
Thanks.