What's cooking in git.git (Jul 2025, #03; Wed, 9)
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']
* kn/fetch-push-bulk-ref-update (2025-06-20) 6 commits (merged to 'next' on 2025-07-02 at db06df3871)
+ receive-pack: handle reference deletions separately
+ refs/files: skip updates with errors in batched updates
+ receive-pack: use batched reference updates
+ send-pack: fix memory leak around duplicate refs
+ fetch: use batched reference updates
+ refs: add function to translate errors to strings
"git push" and "git fetch" are taught to update refs in batches to
gain performance.
source: <20250519-501-update-git-fetch-1-to-use-partial-transactions-v3-0-6cdfd4f769b9@gmail.com>
source: <20250620-6769-address-test-failures-in-the-next-branch-caused-by-batched-reference-updates-v5-0-f35ee6b59a82@gmail.com>
--------------------------------------------------
[New Topics]
* ps/doc-pack-refs-auto-with-files-backend-fix (2025-07-08) 1 commit (merged to 'next' on 2025-07-09 at 200b4b24a8)
+ docs/git-pack-refs: document heuristic used for packing loose refs
Doc update.
Will merge to 'master'.
source: <20250708-b4-pks-pack-refs-document-files-heuristic-v1-1-e28d65a94573@pks.im>
* ps/refs-files-remove-empty-parent (2025-07-08) 1 commit (merged to 'next' on 2025-07-09 at f726af7117)
+ refs/files: remove empty parent dirs when ref creation fails
When a ref creation at refs/heads/foo/bar fails, the files backend now removes refs/heads/foo/ if the directory is otherwise not used.
Will merge to 'master'.
source: <20250708-b4-pks-reffiles-prune-empty-dirs-on-abort-v1-1-3bae02e4f034@pks.im>
* ps/t1006-tap-fix (2025-07-08) 1 commit
(merged to 'next' on 2025-07-09 at bbed1acc2a)
+ t1006: fix broken TAP format
Test fix.
Will merge to 'master'.
source: <[email protected]>
* pw/3.0-commentchar-auto-deprecation (2025-07-08) 2 commits
- commit: print advice when core.commentString=auto
- breaking-changes: deprecate support for core.commentString=auto
Proposes to deprecate "core.commentChar=auto" that attempts to dynamically pick a suitable comment character, as it is too much trouble to support for little benefit.
Comments?
source: <[email protected]>
* ps/object-store-midx (2025-07-09) 9 commits
- midx: remove now-unused linked list of multi-pack indices
- packfile: stop using linked MIDX list in get_all_packs()
- packfile: stop using linked MIDX list in find_pack_entry()
- packfile: refactor get_multi_pack_index() to work on sources
- midx: track whether we have loaded the MIDX
- midx: stop using linked list when closing MIDX
- packfile: refactor prepare_packed_git_one() to work on sources
- midx: start tracking per object database source
- Merge branch 'ps/object-store' into ps/object-store-midx (this branch uses ps/object-store.)
Redefine where the multi-pack-index sits in the object subsystem, which recently was restructured to allow multiple backends that support a single object source that belongs to one repository. A midx does span mulitple "object sources".
Comments?
source: <[email protected]>
* ps/object-file-wo-the-repository (2025-07-09) 20 commits
- object-file: drop USE_THE_REPOSITORY_VARIABLE
- environment: move object creation mode into repo settings
- environment: move compression level into repo settings
- object-file: get rid of the_repository in index-related functions
- object-file: get rid of the_repository in force_object_loose()
- object-file: get rid of the_repository in read_loose_object()
- object-file: get rid of the_repository in loose object iterators
- object-file: remove declaration for for_each_file_in_obj_subdir()
- object-file: inline for_each_loose_file_in_objdir_buf()
- object-file: get rid of the_repository when writing objects
- odb: introduce odb_write_object()
- loose: write loose objects map via their source
- object-file: get rid of the_repository in finalize_object_file()
- object-file: get rid of the_repository in loose_object_info()
- object-file: get rid of the_repository when freshening objects
- object-file: inline check_and_freshen() functions
- object-file: get rid of the_repository in has_loose_object()
- object-file: stop using the_hash_algo
- object-file: fix -Wsign-compare warnings
- Merge branch 'ps/object-store' into ps/object-file-wo-the-repository (this branch uses ps/object-store.)
Reduce implicit assumption and dependence on the_repository in the object-file subsystem.
Comments?
source: <20250709-pks-object-file-wo-the-repository-v1-0-62627b55707f@pks.im>
--------------------------------------------------
[Cooking]
* bs/remote-helpers-doc-markup-fix (2025-07-02) 1 commit (merged to 'next' on 2025-07-07 at 60c2a47d1b)
+ gitremote-helpers.adoc: fix formatting
Docfix.
Will merge to 'master'.
source: <[email protected]>
* cb/total-ram-bsd-fix (2025-07-07) 1 commit
(merged to 'next' on 2025-07-07 at d9a7ca747c)
+ builtin/gc: correct total_ram calculation with HAVE_BSD_SYSCTL
Use of sysctl() system call to learn the total RAM size used on BSDs has been corrected.
Will merge to 'master'.
source: <[email protected]>
* ps/use-reftable-as-default-in-3.0 (2025-07-04) 2 commits (merged to 'next' on 2025-07-07 at 3f3402f221)
+ setup: use "reftable" format when experimental features are enabled
+ BreakingChanges: announce switch to "reftable" format
The reftable ref backend has matured enough; Git 3.0 will make it the default format in a newly created repositories by default.
Will merge to 'master'.
source: <[email protected]>
* hy/read-cache-lock-error-fix (2025-07-03) 1 commit (merged to 'next' on 2025-07-07 at a97a188a9e)
+ read-cache: report lock error when refreshing index
A failure to open the index file for writing due to conflicting access did not state what went wrong, which has been corrected.
Will merge to 'master'.
source: <[email protected]>
* jk/all-negative-diff-filter-fix (2025-07-03) 1 commit (merged to 'next' on 2025-07-07 at 139dd3db75)
+ setup_revisions(): turn on diffs for all-negative diff filter
A diff-filter with negative-only specification like "git log --diff-filter=d" did not trigger correctly, which has been fixed.
Will merge to 'master'.
source: <[email protected]>
* jk/remote-avoid-overlapping-names (2025-07-08) 1 commit
- remote: detect collisions in remote names
"git remote" now detects remote names that overlap with each other (e.g., remote nickname "outer" and "outer/inner" are used at the same time), as it will lead to overlapping remote-tracking branches.
Will merge to 'next'.
source: <[email protected]>
* ps/meson-cleanups (2025-07-08) 8 commits
- ci: use Meson's new --slice option
- meson: update subproject wrappers
- meson: fix GIT_EXEC_PATH with overridden -Dlibexecdir=
- meson: fix lookup of shell on MINGW64
- meson: clean up unnecessary variables
- meson: improve summary of auto-detected features
- meson: stop printing 'https' option twice in our summaries
- meson: stop discovering native version of Python
Meson-based build update.
Will merge to 'next'?
source: <[email protected]>
* ps/perlless-test-fixes (2025-07-07) 2 commits (merged to 'next' on 2025-07-07 at 2c56966ff8)
+ t5333: fix missing terminator for sed(1) 's' command
+ t4150: fix warning printed by awk due to escaped '\@'
Test fixes.
Will merge to 'master'.
source: <[email protected]>
* re/ssh-sign-buffer-fix (2025-07-07) 1 commit
(merged to 'next' on 2025-07-07 at 36dad3e4dc)
+ ssh signing: don't detach the filename strbuf from key_file tempfile
Tempfile removal fix in the codepath to sign commits with SSH keys.
Will merge to 'master'.
source: <[email protected]>
* rj/freebsd-sysinfo-build-fix (2025-07-04) 1 commit (merged to 'next' on 2025-07-07 at bc4cbfd76d)
+ build: fix FreeBSD build when sysinfo compat library installed
Build fix for FreeBSD.
Will merge to 'master'.
source: <[email protected]>
* rp/apply-intent-to-add-fix (2025-07-07) 4 commits (merged to 'next' on 2025-07-07 at 957e3fd081)
+ apply docs: clarify wording for --intent-to-add
+ t4140: test apply --intent-to-add interactions
+ apply: only write intents to add for new files
+ apply: read in the index in --intent-to-add mode
"git apply -N" should start from the current index and register only new files, but it instead started from an empty index, which has been corrected.
Will merge to 'master'.
source: <[email protected]>
* ts/merge-orig-head-doc-fix (2025-07-05) 1 commit (merged to 'next' on 2025-07-07 at 08f4a573e5)
+ docs: correct ORIG_HEAD example in "git merge" documentation
Doc fix.
Will merge to 'master'.
source: <[email protected]>
* ua/t1517-short-help-tests (2025-07-06) 7 commits
- t/t1517: move verify-tag -h test to t1517
- t/t1517: move verify-commit -h test to t1517
- t/t1517: move send-pack -h test to t1517
- t/t1517: move pack-refs -h test to t1517
- t/t1517: move ls-files -h test to t1517
- t/t1517: move for-each-ref -h test to t1517
- t/t1517: move checkout-index -h test to t1517
Test shuffling.
Comments?
source: <[email protected]>
* ac/prune-wo-the-repository (2025-07-04) 2 commits
(merged to 'next' on 2025-07-07 at 3dd296a911)
+ builtin/prune: stop depending on 'the_repository'
+ repository: move 'repository_format_precious_objects' to repo scope
Some code paths in the "git prune" used to ignore passed in repository object and used the_repository singleton instance instead, which has been corrected.
Will merge to 'master'.
source: <[email protected]>
* ag/doc-send-email (2025-06-30) 5 commits
- docs: mention possible options for Proton Mail users
- docs: add a paragraph explaining the sendmailCmd option of sendemail
- docs: add an OAuth2.0 credential helper for AOL accounts
- docs: add outlookidfix config option to sendemail documentation
- docs: link OpenSSL's verify(1) manual page to know about -CAfile and -CApath options
Documentation updates for "git send-email".
Will merge to 'next'.
source: <[email protected]>
* rs/parse-options-precision (2025-07-09) 7 commits
- parse-options: add precision handling for OPTION_COUNTUP
- parse-options: add precision handling for OPTION_BITOP
- parse-options: add precision handling for OPTION_NEGBIT
- parse-options: add precision handling for OPTION_BIT
- parse-options: add precision handling for OPTION_SET_INT
- parse-options: add precision handling for PARSE_OPT_CMDMODE
- parse-options: require PARSE_OPT_NOARG for OPTION_BITOP
Define .precision to more canned parse-options type to avoid bugs coming from using a variable with a wrong type to capture the parsed values.
Will merge to 'next'.
source: <[email protected]>
* kh/doc-config-subcommands (2025-07-01) 5 commits (merged to 'next' on 2025-07-07 at b0db48b397)
+ config: mention --url in the synopsis
+ config: use --value instead of value-pattern
+ config: document --[no-]value
+ config: use --value=<pattern> consistently
+ config: document --[no-]show-names
Documentation updates.
Will merge to 'master'.
source: <[email protected]>
* kn/for-each-ref-skip (2025-07-08) 4 commits
- for-each-ref: introduce a '--start-after' option
- refs: selectively set prefix in the seek functions
- ref-cache: remove unused function 'find_ref_entry()'
- refs: expose ref_iterator via 'refs.h'
"git for-each-ref" learns "--skip-until" option to help applications that want to page its output.
Will merge to 'next'?
source: <20250708-306-git-for-each-ref-pagination-v3-0-8cfba1080be4@gmail.com>
* tc/last-modified (2025-07-09) 3 commits
- last-modified: use Bloom filters when available
- t/perf: add last-modified perf script
- last-modified: new subcommand to show when files were last modified
A new command "git last-modified" is proposed to show the closest ancestor commit that touched each path.
Comments?
source: <[email protected]>
* cb/daemon-reap-children (2025-06-26) 4 commits
- daemon: explicitly allow EINTR during poll()
- daemon: use sigaction() to install child_handler()
- compat/mingw: allow sigaction(SIGCHLD)
- compat/posix.h: track SA_RESTART fallback
Futz with SIGCHLD handling in "git daemon".
Stalled?
cf. <[email protected]>
source: <[email protected]>
* ac/auto-comment-char-fix (2025-06-30) 1 commit
- commit: avoid scanning trailing comments when 'core.commentChar' is "auto"
"git commit" that concludes a conflicted merge failed to notice and remove existing comment added automatically (like "# Conflicts:") when the core.commentstring is set to 'auto'.
Expecting a reroll.
cf. <[email protected]>
source: <[email protected]>
* kn/clang-format-updates (2025-07-02) 3 commits (merged to 'next' on 2025-07-07 at 0b0770e97a)
+ meson: add rule to run 'git clang-format'
+ clang-format: add 'RemoveBracesLLVM' to the main config
+ clang-format: set 'ColumnLimit' to 0
Update ".clang-format" and ".editorconfig" to match our style guide a bit better.
Will merge to 'master'.
source: <20250702-525-make-clang-format-more-robust-v3-0-705344f30580@gmail.com>
* ly/changed-paths-traversal (2025-07-04) 4 commits
- bloom: optimize multiple pathspec items in revision traversal
- bloom: replace struct bloom_key * with struct bloom_keyvec
- bloom: rename function operates on bloom_key
- bloom: add test helper to return murmur3 hash
Lift the limitation to use changed-path filter in "git log" so that it can be used for a pathspec with multiple literal paths.
Expecting a reroll.
cf. <[email protected]>
source: <[email protected]>
* mc/netrc-service-names (2025-06-25) 3 commits
(merged to 'next' on 2025-07-07 at e98100afdd)
+ contrib: better support symbolic port names in git-credential-netrc
+ contrib: warn for invalid netrc file ports in git-credential-netrc
+ contrib: use a more portable shebang for git-credential-netrc
"netrc" credential helper has been improved to understand textual service names (like smtp) in addition to the numeric port numbers (like 25).
Will merge to 'master'.
source: <[email protected]>
* ph/fetch-prune-optim (2025-07-01) 3 commits (merged to 'next' on 2025-07-09 at f0a1daff6a)
+ clean up interface for refs_warn_dangling_symrefs
+ refs: remove old refs_warn_dangling_symref
+ fetch-prune: optimize dangling-ref reporting
"git fetch --prune" used to be O(n^2) expensive when there are many refs, which has been corrected.
Will merge to 'master'.
cf. <[email protected]>
source: <[email protected]>
* bc/use-sha256-by-default-in-3.0 (2025-07-01) 11 commits
- Enable SHA-256 by default in breaking changes mode
- help: add a build option for default hash
- t5300: choose the built-in hash outside of a repo
- t4042: choose the built-in hash outside of a repo
- t1007: choose the built-in hash outside of a repo
- t: default to compile-time default hash if not set
- setup: use the default algorithm to initialize repo format
- Use legacy hash for legacy formats
- builtin: use default hash when outside a repository
- hash: add a constant for the legacy hash algorithm
- hash: add a constant for the default hash algorithm
Prepare to flip the default hash function to SHA-256.
Will merge to 'next'.
source: <[email protected]>
* jc/coccicheck-fails-make-when-it-fails (2025-06-23) 1 commit (merged to 'next' on 2025-07-07 at 0b7affe7cd)
+ coccicheck: fail "make" when it fails
"make coccicheck" succeeds even when spatch made suggestions, which has been updated to fail in such a case.
Will merge to 'master'.
source: <[email protected]>
* lo/repo-info (2025-06-19) 7 commits
. repo-info: add field layout.shallow
. repo-info: add field layout.bare
. repo-info: add the field references.format
. repo-info: add the --allow-empty flag
. repo-info: add plaintext as an output format
. repo-info: add the --format flag
. repo-info: declare the repo-info command
A new subcommand "git repo-info" gives users a way to grab various repository characteristics.
Expecting a reroll, if only to fix "make check-docs".
source: <[email protected]>
* cc/fast-import-export-signature-names (2025-07-09) 1 commit
- fast-(import|export): improve on commit signature output format
Clean up the way how signature on commit objects are exported to and imported from fast-import stream.
Will merge to 'next'?
source: <[email protected]>
* ac/deglobal-sparse-variables (2025-06-30) 3 commits
- environment: remove the global variable 'sparse_expect_files_outside_of_patterns'
- environment: move access to "core.sparsecheckoutcone" into repo_settings
- environment: move access to "core.sparsecheckout" into repo_settings
Two global variables related to sparse checkout have been moved to the repository settings structure.
Expecting a response.
cf. <[email protected]> cf. <[email protected]>
source: <[email protected]>
* ow/rebase-verify-insn-fmt-before-initializing-state (2025-06-09) 1 commit
- rebase: write script before initializing state
"git rebase -i" with bogus rebase.instructionFormat configuration failed to produce the todo file after recording the state files, leading to confused "git status"; this has been corrected.
Expecting a reroll.
cf. <[email protected]>
source: <[email protected]>
* bs/config-mak-freebsd (2025-07-02) 2 commits (merged to 'next' on 2025-07-07 at d6761aa225)
+ build: retire NO_UINTMAX_T
+ config.mak.uname: set NO_MEMMEM only for functional version
Drop FreeBSD 4 support and assume we are at least at FreeBSD 6 with memmem() supported.
Will merge to 'master'.
source: <[email protected]>
* jc/tag-idempotent-no-op (2025-06-10) 1 commit
- tag: allow idempotent "git tag" without "--force"
"git tag T O" when the tag T is already pointing at the object O is a no-op; we used to but no longer error out such a request and require "--force" and instead turn it into a no-op.
Will discard.
cf. <[email protected]>
source: <[email protected]>
* ss/compat-bswap-revamp (2025-06-11) 6 commits
- bswap.h: provide a built-in based version of bswap32/64 if possible
- bswap.h: remove optimized x86 version of bswap32/64
- bswap.h: always overwrite ntohl/ntohll macros
- bswap.h: define GIT_LITTLE_ENDIAN on MSVC as little endian
- bswap.h: add support for __BYTE_ORDER__
- Merge branch 'ss/revert-builtin-bswap-stuff' into ss/compat-bswap-revamp
Clean-up compat/bswap.h mess.
Stalled.
cf. <[email protected]>
source: <[email protected]>
* ja/doc-git-log-markup (2025-07-07) 9 commits
- doc: git-log: convert log config to new doc format
- doc: git-log: convert diff options to new doc format
- doc: git-log: convert pretty formats to new doc format
- doc: git-log: convert pretty options to new doc format
- doc: git-log: convert rev list options to new doc format
- doc: git-log: convert line range format to new doc format
- doc: git-log: convert line range options to new doc format
- doc: git-log convert rev-list-description to new doc format
- doc: convert git-log to new documentation format
Doc mark-up updates.
Will merge to 'next'?
source: <[email protected]>
* sk/reftable-clarify-tests (2025-06-05) 10 commits
- t/unit-tests: finalize migration of reftable-related tests
- t/unit-tests: convert reftable stack test to use clar
- t/unit-tests: convert reftable record test to use clar
- t/unit-tests: convert reftable readwrite test to use clar
- t/unit-tests: convert reftable table test to use clar
- t/unit-tests: convert reftable pq test to use clar
- t/unit-tests: convert reftable merged test to use clar
- t/unit-tests: convert reftable block test to use clar
- t/unit-tests: convert reftable basics test to use clar test framework
- t/unit-tests: implement clar specific reftable test helper functions
The reftable unit tests are now ported to the "clar" unit testing framework.
Expecting a reroll.
cf. <[email protected]>
source: <[email protected]>
* ly/load-bitmap-leakfix (2025-06-30) 3 commits (merged to 'next' on 2025-07-08 at 6e6d182a8c)
+ pack-bitmap: add load corrupt bitmap test
+ pack-bitmap: reword comments in test_bitmap_commits()
+ pack-bitmap: fix memory leak if load_bitmap() failed
Leakfix with a new and a bit invasive test.
Will merge to 'master'.
cf. <aG2XZYamUv5FWq/[email protected]>
source: <[email protected]>
* tb/prepare-midx-pack-cleanup (2025-05-28) 5 commits
- midx: return a packed_git pointer from prepare_midx_pack()
- midx-write.c: extract inner loop from fill_packs_from_midx()
- midx-write.c: guard against incremental MIDXs in want_included_pack()
- midx: access pack names through nth_midxed_pack_name()
- Merge branch 'ps/midx-negative-packfile-cache' into tb/prepare-midx-pack-cleanup
Improvement on Multi-pack-index API.
Expecting a reroll.
cf. <[email protected]>
source: <[email protected]>
* kj/renamed-submodule (2025-06-07) 2 commits
- submodule: skip redundant active entries when pattern covers path
- submodule: prevent overwriting .gitmodules entry on path reuse
The case where a new submodule takes a path where used to be a completely different subproject is now dealt a bit better than before.
What's the status of this one?
cf. <[email protected]>
source: <[email protected]>
* lm/add-p-context (2025-06-28) 4 commits
- add-patch: add diff.context command line overrides
- add-patch: respect diff.context configuration
- test: use "test_config"
- test: use "test_grep"
"git add/etc -p" now honors diff.context configuration variable, and learns to honor -U<n> option.
Expecting a response.
cf. <[email protected]>
source: <[email protected]>
* ps/object-store (2025-07-01) 17 commits
(merged to 'next' on 2025-07-07 at e19db55858)
+ odb: rename read_object_with_reference()
+ odb: rename pretend_object_file()
+ odb: rename has_object()
+ odb: rename repo_read_object_file()
+ odb: rename oid_object_info()
+ odb: trivial refactorings to get rid of the_repository
+ odb: get rid of the_repository when handling submodule sources
+ odb: get rid of the_repository when handling the primary source
+ odb: get rid of the_repository in for_each() functions
+ odb: get rid of the_repository when handling alternates
+ odb: get rid of the_repository in odb_mkstemp()
+ odb: get rid of the_repository in assert_oid_type()
+ odb: get rid of the_repository in find_odb()
+ odb: introduce parent pointers
+ object-store: rename files to "odb.{c,h}"
+ object-store: rename object_directory to odb_source
+ object-store: rename raw_object_store to object_database
(this branch is used by ps/object-file-wo-the-repository and ps/object-store-midx.)
Code clean-up around object access API.
Will merge to 'master'.
source: <20250701-pks-object-store-wo-the-repository-v6-0-dbf3894ab4e2@pks.im>
* cc/promisor-remote-capability (2025-06-25) 5 commits
- promisor-remote: use string constants for 'name' and 'url' too
- promisor-remote: allow a client to check fields
- promisor-remote: refactor how we parse advertised fields
- promisor-remote: allow a server to advertise more fields
- promisor-remote: refactor to get rid of 'struct strvec'
The "promisor-remote" capability mechanism has been updated to allow the "partialCloneFilter" settings and the "token" value to be communicated from the server side.
What's the status of this one?
cf. <[email protected]>
source: <[email protected]>
* sj/string-list (2025-06-28) 8 commits
(merged to 'next' on 2025-07-07 at 5a95dc8007)
+ u-string-list: move "remove duplicates" test to "u-string-list.c"
+ u-string-list: move "filter string" test to "u-string-list.c"
+ u-string-list: move "test_split_in_place" to "u-string-list.c"
+ u-string-list: move "test_split" into "u-string-list.c"
+ string-list: enable sign compare warnings check
+ string-list: return index directly when inserting an existing element
+ string-list: remove unused "insert_at" parameter from add_entry
+ string-list: fix sign compare warnings for loop iterator
Code and test clean-up around string-list API.
Will merge to 'master'.
source: <aGDAZ6a0-PyXXGmK@ArchLinux>
* tb/midx-avoid-cruft-packs (2025-06-23) 9 commits
- repack: exclude cruft pack(s) from the MIDX where possible
- pack-objects: introduce '--stdin-packs=follow'
- pack-objects: swap 'show_{object,commit}_pack_hint'
- pack-objects: fix typo in 'show_object_pack_hint()'
- pack-objects: perform name-hash traversal for unpacked objects
- pack-objects: declare 'rev_info' for '--stdin-packs' earlier
- pack-objects: factor out handling '--stdin-packs'
- pack-objects: limit scope in 'add_object_entry_from_pack()'
- pack-objects: use standard option incompatibility functions
"pack-objects" has been taught to avoid pointing into objects in cruft packs from midx.
Will merge to 'next'.
source: <[email protected]>
--------------------------------------------------
[Discarded]
* kn/fetch-push-bulk-ref-update-fixup (2025-06-20) 7 commits
. receive-pack: handle reference deletions separately
. refs/files: skip updates with errors in batched updates
. Merge branch 'kn/fetch-push-bulk-ref-update' into kn/fetch-push-bulk-ref-update-fixup
Follow-up fixes to the base topic.
Superseded--folded into the base topic.
source: <20250620-6769-address-test-failures-in-the-next-branch-caused-by-batched-reference-updates-v5-0-f35ee6b59a82@gmail.com>
* jc/cocci-dtype (2025-06-18) 1 commit
. cocci: do not directly access the .d_type member in struct dirent
Catch direct access to .d_type member of struct dirent, as some non-POSIX compliant systems we support lack it, and rewrite to use DTYPE() macro, which is not quite the right thing to do.
Would silently convert a broken code with code with another breakage.
source: <[email protected]>
On 10/07/2025 09:03, Junio C Hamano wrote:
[snip]
Quoted 10 lines
* ps/meson-cleanups (2025-07-08) 8 commits
- ci: use Meson's new--sliceoption
- meson: update subproject wrappers
- meson: fixGIT_EXEC_PATHwith overridden -Dlibexecdir=
- meson: fix lookup of shell on MINGW64
- meson: clean up unnecessary variables
- meson: improve summary of auto-detected features
- meson: stop printing 'https' option twice in our summaries
- meson: stop discovering native version of Python
Quoted 4 lines
Meson-based build update.
Will merge to 'next'?
source: <[email protected]>
The patch 'meson: fix GIT_EXEC_PATH with overridden -Dlibexecdir=' (6/8) which is part of this series, is essentially a revert of commit 837f637cf51 (meson.build: correct setting of GIT_EXEC_PATH, 2025-05-19). That commit did introduce a regression, but I have a patch (see below) which I think would be an improvement.
I had intended to test this patch some more before submitting it, and I think there are some additional problems, but it may be ready soon so that it could replace the patch in this series. (It seems silly to have to revert the revert before the next release ;) ).
The 'additional problems' exist no matter which patch is applied, so it can be addressed by a later patch on top. (I *think* there are additional problems - I have yet to properly investigate; look at the setting for GITEXECDIR_REL).
As a quick demonstration, no 'libexecdir' setting:
$ meson setup -Dprefix=/tmp/git build
...
User defined options
prefix : /tmp/git Found ninja-1.11.1 at /usr/bin/ninja
$ cd build $ meson compile INFO: autodetecting backend as ninja INFO: calculating backend command to run: /usr/bin/ninja [662/662] Copying file contrib/completion/git $ meson install ninja: Entering directory `/home/ramsay/git/build' [1/28] Generating GIT-VERSION-FILE wit... command (wrapped by meson to set env) Installing git to /tmp/git/libexec/git-core ... $ ls /tmp/git bin/ libexec/ share/ $ ls -l /tmp/git/bin/git lrwxrwxrwx 1 ramsay ramsay 23 Jul 10 18:44 /tmp/git/bin/git -> ../libexec/git-core/git* $ /tmp/git/bin/git --exec-path /tmp/git/libexec/git-core $ /tmp/git/bin/git daemon -h usage: git daemon [--verbose] [--syslog] [--export-all] ... $
Now with a relative path for 'libexecdir':
$ cd .. $ rm -rf build
$ meson setup -Dprefix=/tmp/git1 -Dlibexecdir=libexec-different build
...
User defined options
libexecdir : libexec-different
prefix : /tmp/git1 Found ninja-1.11.1 at /usr/bin/ninja
$ cd build $ meson compile INFO: autodetecting backend as ninja INFO: calculating backend command to run: /usr/bin/ninja [662/662] Copying file contrib/completion/git $ meson install ninja: Entering directory `/home/ramsay/git/build' [1/28] Generating GIT-VERSION-FILE wit... command (wrapped by meson to set env) Installing git to /tmp/git1/libexec-different ... $ ls /tmp/git1 bin/ libexec-different/ share/ $ ls -l /tmp/git1/bin/git lrwxrwxrwx 1 ramsay ramsay 24 Jul 10 18:54 /tmp/git1/bin/git -> ../libexec-different/git* $ /tmp/git1/bin/git --exec-path /tmp/git1/libexec-different $ /tmp/git1/bin/git daemon -h usage: git daemon [--verbose] [--syslog] [--export-all] ... $
And finally, with an absolute path for 'libexecdir':
$ cd .. $ rm -rf build
$ meson setup -Dprefix=/tmp/git2 -Dlibexecdir=/tmp/somewhere/else build
...
User defined options
libexecdir : /tmp/somewhere/else
prefix : /tmp/git2 Found ninja-1.11.1 at /usr/bin/ninja
$ cd build $ meson compile INFO: autodetecting backend as ninja INFO: calculating backend command to run: /usr/bin/ninja [662/662] Copying file contrib/completion/git $ meson install ninja: Entering directory `/home/ramsay/git/build' [1/28] Generating GIT-VERSION-FILE wit... command (wrapped by meson to set env) Installing git to /tmp/somewhere/else ... $ ls /tmp/git2 bin/ share/ $ ls /tmp/somewhere else/ $ ls /tmp/somewhere/else git* git-merge-octopus* git-send-email* git-archimport* git-merge-one-file* git-shell* git-cvsexportcommit* git-merge-resolve* git-sh-i18n git-cvsimport* git-mergetool* git-sh-i18n--envsubst* git-cvsserver* git-mergetool--lib git-sh-setup git-daemon* git-p4* git-submodule* git-difftool--helper* git-quiltimport* git-svn* git-filter-branch* git-receive-pack@ git-upload-archive@ git-http-backend* git-remote-ftp@ git-upload-pack@ git-http-fetch* git-remote-ftps@ git-web--browse* git-http-push* git-remote-http* mergetools/ git-imap-send* git-remote-https@ scalar* git-instaweb* git-request-pull* $ ls -l /tmp/git2/bin/git lrwxrwxrwx 1 ramsay ramsay 34 Jul 10 19:01 /tmp/git2/bin/git -> ../../../../tmp/somewhere/else/git* $ /tmp/git2/bin/git --exec-path /tmp/somewhere/else $ /tmp/git2/bin/git daemon -h usage: git daemon [--verbose] [--syslog] [--export-all] ... $
I had intended to do the equivalent 'make' invocations and check with 'tree' (by diffing the output) or similar, that the installations are the same, but they seem to be correct (just eyeballing them).
How would you like to proceed? (yes, I haven't written the commit message yet).
ATB,
Ramsay Jones
---- >8 ----
From: Ramsay Jones <[email protected]>
Subject: [PATCH] meson: fix installation when -Dlibexexdir is set
--- meson.build | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-)
meson.build +21 -21
@@ -1744,7 +1744,7 @@ git_builtin = executable('git', sources: builtin_sources + 'git.c', dependencies: [libgit_commonmain], install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, ) bin_wrappers += git_builtin
@@ -1752,35 +1752,35 @@ test_dependencies += executable('git-daemon', sources: 'daemon.c', dependencies: [libgit_commonmain], install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, ) test_dependencies += executable('git-sh-i18n--envsubst', sources: 'sh-i18n--envsubst.c', dependencies: [libgit_commonmain], install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, ) bin_wrappers += executable('git-shell', sources: 'shell.c', dependencies: [libgit_commonmain], install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, ) test_dependencies += executable('git-http-backend', sources: 'http-backend.c', dependencies: [libgit_commonmain], install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, ) bin_wrappers += executable('scalar', sources: 'scalar.c', dependencies: [libgit_commonmain], install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, ) if curl.found()
@@ -1796,14 +1796,14 @@ if curl.found() sources: 'remote-curl.c', dependencies: [libgit_curl], install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, ) test_dependencies += executable('git-http-fetch', sources: 'http-fetch.c', dependencies: [libgit_curl], install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, ) if expat.found()
@@ -1811,7 +1811,7 @@ if curl.found() sources: 'http-push.c', dependencies: [libgit_curl], install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, ) endif
@@ -1822,7 +1822,7 @@ if curl.found() ) install_symlink(alias + executable_suffix, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, pointing_to: 'git-remote-http', ) endforeach
@@ -1832,7 +1832,7 @@ test_dependencies += executable('git-imap-send', sources: 'imap-send.c', dependencies: [ use_curl_for_imap_send ? libgit_curl : libgit_commonmain ], install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, ) foreach alias : [ 'git-receive-pack', 'git-upload-archive', 'git-upload-pack' ]
@@ -1842,7 +1842,7 @@ foreach alias : [ 'git-receive-pack', 'git-upload-archive', 'git-upload-pack' ] ) install_symlink(alias + executable_suffix, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, pointing_to: 'git', ) endforeach
@@ -1856,9 +1856,9 @@ foreach symlink : [ 'scalar', ] if meson.version().version_compare('>=1.3.0') - pointing_to = fs.relative_to(get_option('libexecdir') / 'git-core' / symlink, get_option('bindir')) + pointing_to = fs.relative_to(git_exec_path / symlink, get_option('bindir')) else - pointing_to = '../libexec/git-core' / symlink + pointing_to = '..' / git_exec_path / symlink endif install_symlink(symlink,
@@ -1898,7 +1898,7 @@ foreach script : scripts_sh meson.project_build_root() / 'GIT-BUILD-OPTIONS', ], install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, ) endforeach
@@ -1931,7 +1931,7 @@ if perl_features_enabled input: perl_header_template, output: 'GIT-PERL-HEADER', configuration: { - 'GITEXECDIR_REL': get_option('libexecdir') / 'git-core', + 'GITEXECDIR_REL': git_exec_path, 'PERLLIBDIR_REL': perllibdir, 'LOCALEDIR_REL': get_option('datadir') / 'locale', 'INSTLIBDIR': perllibdir,
@@ -1955,7 +1955,7 @@ if perl_features_enabled output: fs.stem(script), command: generate_perl_command, install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, depends: [git_version_file], ) test_dependencies += generated_script
@@ -1964,9 +1964,9 @@ if perl_features_enabled bin_wrappers += generated_script if meson.version().version_compare('>=1.3.0') - pointing_to = fs.relative_to(get_option('libexecdir') / 'git-core' / fs.stem(script), get_option('bindir')) + pointing_to = fs.relative_to(git_exec_path / fs.stem(script), get_option('bindir')) else - pointing_to = '../libexec/git-core' / fs.stem(script) + pointing_to = '..' / git_exec_path / fs.stem(script) endif install_symlink(fs.stem(script),
@@ -1996,7 +1996,7 @@ if python.found() '@OUTPUT@', ], install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, ) test_dependencies += generated_python endforeach
@@ -2030,7 +2030,7 @@ mergetools = [ ] foreach mergetool : mergetools - install_data(mergetool, install_dir: get_option('libexecdir') / 'git-core' / 'mergetools') + install_data(mergetool, install_dir: git_exec_path / 'mergetools') endforeach if intl.found()
Signature · 1 line
2.50.0
Quoted 3 lines · Ramsay Jones
How would you like to proceed? (yes, I haven't written the commit message yet).
... appears near the end of the message, and the way _I_ would like to proceed is to make sure two parties involved in overlapping solutions to the same problem talk to each other and come up with a solution together. The first step to get you going would be to CC the other parties involved.
If the controversial step in Patrick's 8-patch series is relatively independent from others (which was the impression I got from "more or less random cleanups and improvements"), one approach with less friction is to simply omit it and make it 7-patch series. While you and Patric work out what the best approach to solve the libexecdir problem, the rest of the series can proceed without waiting, hopefully?
The rest is quoted from your message (without anything commented on by me) for Patrick's reference.
Thanks.
Quoted 332 lines
Quoted 9 lines
* ps/meson-cleanups (2025-07-08) 8 commits
- ci: use Meson's new--sliceoption
- meson: update subproject wrappers
- meson: fixGIT_EXEC_PATHwith overridden -Dlibexecdir=
- meson: fix lookup of shell on MINGW64
- meson: clean up unnecessary variables
- meson: improve summary of auto-detected features
- meson: stop printing 'https' option twice in our summaries
- meson: stop discovering native version of Python...
The patch 'meson: fixGIT_EXEC_PATHwith overridden -Dlibexecdir=' (6/8) which is part of this series, is essentially a revert of commit837f637cf51(meson.build: correct setting ofGIT_EXEC_PATH, 2025-05-19). That commit did introduce a regression, but I have a patch (see below) which I think would be an improvement.I had intended to test this patch some more before submitting it, and I think there are some additional problems, but it may be ready soon so that it could replace the patch in this series. (It seems silly to have to revert the revert before the next release ;) ).
The 'additional problems' exist no matter which patch is applied, so it can be addressed by a later patch on top. (I *think* there are additional problems - I have yet to properly investigate; look at the setting for
GITEXECDIR_REL).As a quick demonstration, no 'libexecdir' setting:
$ meson setup -Dprefix=/tmp/git build ... User defined options prefix : /tmp/gitFound ninja-1.11.1 at
/usr/bin/ninja$ cd build $ meson compile INFO: autodetecting backend as ninja INFO: calculating backend command to run: /usr/bin/ninja [662/662] Copying file contrib/completion/git $ meson install ninja: Entering directory `/home/ramsay/git/build' [1/28] Generating GIT-VERSION-FILE wit... command (wrapped by meson to set env) Installing git to /tmp/git/libexec/git-core ... $ ls /tmp/git bin/ libexec/ share/ $ ls -l /tmp/git/bin/git lrwxrwxrwx 1 ramsay ramsay 23 Jul 10 18:44 /tmp/git/bin/git -> ../libexec/git-core/git* $ /tmp/git/bin/git --exec-path /tmp/git/libexec/git-core $ /tmp/git/bin/git daemon -h usage: git daemon [--verbose] [--syslog] [--export-all] ... $Now with a relative path for 'libexecdir':
$ cd .. $ rm -rf build$ meson setup -Dprefix=/tmp/git1 -Dlibexecdir=libexec-different build ... User defined options libexecdir : libexec-different prefix : /tmp/git1Found ninja-1.11.1 at
/usr/bin/ninja$ cd build $ meson compile INFO: autodetecting backend as ninja INFO: calculating backend command to run: /usr/bin/ninja [662/662] Copying file contrib/completion/git $ meson install ninja: Entering directory `/home/ramsay/git/build' [1/28] Generating GIT-VERSION-FILE wit... command (wrapped by meson to set env) Installing git to /tmp/git1/libexec-different ... $ ls /tmp/git1 bin/ libexec-different/ share/ $ ls -l /tmp/git1/bin/git lrwxrwxrwx 1 ramsay ramsay 24 Jul 10 18:54 /tmp/git1/bin/git -> ../libexec-different/git* $ /tmp/git1/bin/git --exec-path /tmp/git1/libexec-different $ /tmp/git1/bin/git daemon -h usage: git daemon [--verbose] [--syslog] [--export-all] ... $And finally, with an absolute path for 'libexecdir':
$ cd .. $ rm -rf build$ meson setup -Dprefix=/tmp/git2 -Dlibexecdir=/tmp/somewhere/else build ... User defined options libexecdir : /tmp/somewhere/else prefix : /tmp/git2Found ninja-1.11.1 at
/usr/bin/ninja$ cd build $ meson compile INFO: autodetecting backend as ninja INFO: calculating backend command to run: /usr/bin/ninja [662/662] Copying file contrib/completion/git $ meson install ninja: Entering directory `/home/ramsay/git/build' [1/28] Generating GIT-VERSION-FILE wit... command (wrapped by meson to set env) Installing git to /tmp/somewhere/else ... $ ls /tmp/git2 bin/ share/ $ ls /tmp/somewhere else/ $ ls /tmp/somewhere/else git* git-merge-octopus* git-send-email* git-archimport* git-merge-one-file* git-shell* git-cvsexportcommit* git-merge-resolve* git-sh-i18n git-cvsimport* git-mergetool* git-sh-i18n--envsubst* git-cvsserver* git-mergetool--lib git-sh-setup git-daemon* git-p4* git-submodule* git-difftool--helper* git-quiltimport* git-svn* git-filter-branch* git-receive-pack@ git-upload-archive@ git-http-backend* git-remote-ftp@ git-upload-pack@ git-http-fetch* git-remote-ftps@ git-web--browse* git-http-push* git-remote-http* mergetools/ git-imap-send* git-remote-https@ scalar* git-instaweb* git-request-pull* $ ls -l /tmp/git2/bin/git lrwxrwxrwx 1 ramsay ramsay 34 Jul 10 19:01 /tmp/git2/bin/git -> ../../../../tmp/somewhere/else/git* $ /tmp/git2/bin/git --exec-path /tmp/somewhere/else $ /tmp/git2/bin/git daemon -h usage: git daemon [--verbose] [--syslog] [--export-all] ... $I had intended to do the equivalent 'make' invocations and check with 'tree' (by diffing the output) or similar, that the installations are the same, but they seem to be correct (just eyeballing them).
How would you like to proceed? (yes, I haven't written the commit message yet).
ATB,
Ramsay Jones---- >8 ----
From: Ramsay Jones <[email protected]>
Subject: [PATCH] meson: fix installation when -Dlibexexdir is setSigned-off-by Ramsay Jones <[email protected]>--- meson.build | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-)meson.build +21
-21@@ -1744,7 +1744,7 @@ git_builtin = executable('git', sources: builtin_sources + 'git.c', dependencies: [libgit_commonmain], install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, ) bin_wrappers += git_builtin@@ -1752,35 +1752,35 @@ test_dependencies += executable('git-daemon', sources: 'daemon.c', dependencies: [libgit_commonmain], install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, ) test_dependencies += executable('git-sh-i18n--envsubst', sources: 'sh-i18n--envsubst.c', dependencies: [libgit_commonmain], install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, ) bin_wrappers += executable('git-shell', sources: 'shell.c', dependencies: [libgit_commonmain], install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, ) test_dependencies += executable('git-http-backend', sources: 'http-backend.c', dependencies: [libgit_commonmain], install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, ) bin_wrappers += executable('scalar', sources: 'scalar.c', dependencies: [libgit_commonmain], install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, ) if curl.found()@@ -1796,14 +1796,14 @@ if curl.found() sources: 'remote-curl.c', dependencies: [libgit_curl], install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, ) test_dependencies += executable('git-http-fetch', sources: 'http-fetch.c', dependencies: [libgit_curl], install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, ) if expat.found()@@ -1811,7 +1811,7 @@ if curl.found() sources: 'http-push.c', dependencies: [libgit_curl], install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, ) endif@@ -1822,7 +1822,7 @@ if curl.found() ) install_symlink(alias + executable_suffix, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, pointing_to: 'git-remote-http', ) endforeach@@ -1832,7 +1832,7 @@ test_dependencies += executable('git-imap-send', sources: 'imap-send.c', dependencies: [ use_curl_for_imap_send ? libgit_curl : libgit_commonmain ], install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, ) foreach alias : [ 'git-receive-pack', 'git-upload-archive', 'git-upload-pack' ]@@ -1842,7 +1842,7 @@ foreach alias : [ 'git-receive-pack', 'git-upload-archive', 'git-upload-pack' ] ) install_symlink(alias + executable_suffix, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, pointing_to: 'git', ) endforeach@@ -1856,9 +1856,9 @@ foreach symlink : [ 'scalar', ] if meson.version().version_compare('>=1.3.0') - pointing_to = fs.relative_to(get_option('libexecdir') / 'git-core' / symlink, get_option('bindir')) + pointing_to = fs.relative_to(git_exec_path / symlink, get_option('bindir')) else - pointing_to = '../libexec/git-core' / symlink + pointing_to = '..' / git_exec_path / symlink endif install_symlink(symlink,@@ -1898,7 +1898,7 @@ foreach script : scripts_sh meson.project_build_root() / 'GIT-BUILD-OPTIONS', ], install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, ) endforeach@@ -1931,7 +1931,7 @@ if perl_features_enabled input: perl_header_template, output: 'GIT-PERL-HEADER', configuration: { - 'GITEXECDIR_REL': get_option('libexecdir') / 'git-core', + 'GITEXECDIR_REL': git_exec_path, 'PERLLIBDIR_REL': perllibdir, 'LOCALEDIR_REL': get_option('datadir') / 'locale', 'INSTLIBDIR': perllibdir,@@ -1955,7 +1955,7 @@ if perl_features_enabled output: fs.stem(script), command: generate_perl_command, install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, depends: [git_version_file], ) test_dependencies += generated_script@@ -1964,9 +1964,9 @@ if perl_features_enabled bin_wrappers += generated_script if meson.version().version_compare('>=1.3.0') - pointing_to = fs.relative_to(get_option('libexecdir') / 'git-core' / fs.stem(script), get_option('bindir')) + pointing_to = fs.relative_to(git_exec_path / fs.stem(script), get_option('bindir')) else - pointing_to = '../libexec/git-core' / fs.stem(script) + pointing_to = '..' / git_exec_path / fs.stem(script) endif install_symlink(fs.stem(script),@@ -1996,7 +1996,7 @@ if python.found() '@OUTPUT@', ], install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, ) test_dependencies += generated_python endforeach@@ -2030,7 +2030,7 @@ mergetools = [ ] foreach mergetool : mergetools - install_data(mergetool, install_dir: get_option('libexecdir') / 'git-core' / 'mergetools') + install_data(mergetool, install_dir: git_exec_path / 'mergetools') endforeach if intl.found()
Quoted 11 lines · Junio C Hamano
Quoted 3 lines · Ramsay Jones
How would you like to proceed? (yes, I haven't written the commit message yet).
... appears near the end of the message, and the way _I_ would like to proceed is to make sure two parties involved in overlapping solutions to the same problem talk to each other and come up with a solution together. The first step to get you going would be to CC the other parties involved.
Oops, I had intended to cc Patrick! :(
Quoted 7 lines
If the controversial step in Patrick's 8-patch series is relatively independent from others (which was the impression I got from "more or less random cleanups and improvements"), one approach with less friction is to simply omit it and make it 7-patch series. While you and Patric work out what the best approach to solve the libexecdir problem, the rest of the series can proceed without waiting, hopefully?
Yep, that would be my preferred route.
Having said that, Patrick's patch does remove the regression, so we could keep them separate if that is preferred. I don't mind either way. :)
Thanks!
ATB,
Ramsay Jones
"What's cooking" incremental update report
In reply to Junio C HamanoSince the latest issue of "What's cooking" (2025/07 #03), here are the changes. Two topics are now in 'next', a few topics have been updated with their new iteration.
--------------------------------------------------
[New]
* ps/sane-ctype-workaround (2025-07-09) 1 commit
- sane-ctype: fix compiler error on Amazon Linux 2
Our <sane-ctype.h> header file relied on that the system-supplied <ctype.h> header is not later included, which would override our macro definitions, but "amazon linux" broke this assumption. Fix this by preemptively including <ctype.h> near the beginning of <sane-ctype.h> ourselves.
Comments?
source: <fabacc9bc7ef7d462d1c7198d5edc18c76b82270.1752139420.git.ps@pks.im>
--------------------------------------------------
[Merged to 'next']
* ag/doc-send-email (2025-06-30) 5 commits
+ (merged to 'next' on 2025-07-09 at cf940e82a1)
+ + docs: mention possible options for Proton Mail users
+ + docs: add a paragraph explaining the sendmailCmd option of sendemail
+ + docs: add an OAuth2.0 credential helper for AOL accounts
+ + docs: add outlookidfix config option to sendemail documentation
+ + docs: link OpenSSL's verify(1) manual page to know about -CAfile and -CApath options
Documentation updates for "git send-email".
* rs/parse-options-precision (2025-07-09) 7 commits
+ (merged to 'next' on 2025-07-09 at aefffa21b7)
+ + parse-options: add precision handling for OPTION_COUNTUP
+ + parse-options: add precision handling for OPTION_BITOP
+ + parse-options: add precision handling for OPTION_NEGBIT
+ + parse-options: add precision handling for OPTION_BIT
+ + parse-options: add precision handling for OPTION_SET_INT
+ + parse-options: add precision handling for PARSE_OPT_CMDMODE
+ + parse-options: require PARSE_OPT_NOARG for OPTION_BITOP
Define .precision to more canned parse-options type to avoid bugs coming from using a variable with a wrong type to capture the parsed values.
--------------------------------------------------
[Updated]
-* cb/daemon-reap-children (2025-06-26) 4 commits +* cb/daemon-reap-children (2025-07-10) 2 commits
- - daemon: explicitly allow EINTR during poll()
- daemon: use sigaction() to install child_handler()
- compat/mingw: allow sigaction(SIGCHLD)
- - compat/posix.h: track SA_RESTART fallback
Futz with SIGCHLD handling in "git daemon".
- Stalled?
- cf. <[email protected]>
- source: <[email protected]>
+ Will merge to 'next'?
+ source: <[email protected]>
-* ly/changed-paths-traversal (2025-07-04) 4 commits
+* ly/changed-paths-traversal (2025-07-10) 4 commits
- bloom: optimize multiple pathspec items in revision traversal
- bloom: replace struct bloom_key * with struct bloom_keyvec
- bloom: rename function operates on bloom_key
- bloom: add test helper to return murmur3 hash
Lift the limitation to use changed-path filter in "git log" so that it can be used for a pathspec with multiple literal paths.
Expecting a reroll.
- cf. <[email protected]>
- source: <[email protected]>
+ cf. <[email protected]>
+ source: <[email protected]>
Hi Junio,
On Thu, Jul 10, 2025 at 1:36 PM Junio C Hamano <[email protected]> wrote:
[snip]
Quoted 6 lines
* ac/deglobal-sparse-variables (2025-06-30) 3 commits
- environment: remove the global variable 'sparse_expect_files_outside_of_patterns'
- environment: move access to "core.sparsecheckoutcone" intorepo_settings
- environment: move access to "core.sparsecheckout" intorepo_settings
Quoted 9 lines
Two global variables related to sparse checkout have been moved to the repository settings structure.
Expecting a response.
cf. <[email protected]> cf. <[email protected]>
source: <[email protected]>
I have responded to your message about keeping the topic in 'seen' or not: [1]
Thanks,
Ayush
[1]: https://lore.kernel.org/git/CAE7as+aTBTx8rZ467uv9QV5Wiqnyed5ndY-+smJ1ayYVx6qmRw@mail.gmail.com/
Quoted 23 lines · Ramsay Jones
Quoted 11 lines · Junio C Hamano
Quoted 3 lines · Ramsay Jones
How would you like to proceed? (yes, I haven't written the commit message yet).
... appears near the end of the message, and the way _I_ would like to proceed is to make sure two parties involved in overlapping solutions to the same problem talk to each other and come up with a solution together. The first step to get you going would be to CC the other parties involved.
Oops, I had intended to cc Patrick! :(
Quoted 7 lines
If the controversial step in Patrick's 8-patch series is relatively independent from others (which was the impression I got from "more or less random cleanups and improvements"), one approach with less friction is to simply omit it and make it 7-patch series. While you and Patric work out what the best approach to solve the libexecdir problem, the rest of the series can proceed without waiting, hopefully?
Quoted 5 lines
Yep, that would be my preferred route.
Having said that, Patrick's patch does remove the regression, so we could keep them separate if that is preferred. I don't mind either way. :)
I'm happy to just drop the patch and let you handle the regression.
There aren't any dependencies between the patches in this series, so it's as easy as removing the patch. Junio, do you want me to resend the series with the patch dropped or will you drop the patch on your side?
Thanks!
Patrick
Quoted 5 lines · Patrick Steinhardt
I'm happy to just drop the patch and let you handle the regression.
There aren't any dependencies between the patches in this series, so it's as easy as removing the patch. Junio, do you want me to resend the series with the patch dropped or will you drop the patch on your side?
Will do. As always, thanks for working well together.
Quoted 9 lines · Junio C Hamano
Quoted 5 lines · Patrick Steinhardt
I'm happy to just drop the patch and let you handle the regression.
There aren't any dependencies between the patches in this series, so it's as easy as removing the patch. Junio, do you want me to resend the series with the patch dropped or will you drop the patch on your side?
Will do. As always, thanks for working well together.
Thanks, will do. I need to do some more testing ... but I will send a patch soon.
ATB,
Ramsay Jones
Quoted 14 lines · Ayush Chandekar
Hi Junio,
On Thu, Jul 10, 2025 at 1:36 PM Junio C Hamano <[email protected]> wrote:
[snip]Quoted 9 lines
* ac/deglobal-sparse-variables (2025-06-30) 3 commits
- environment: remove the global variable 'sparse_expect_files_outside_of_patterns'
- environment: move access to "core.sparsecheckoutcone" intorepo_settings
- environment: move access to "core.sparsecheckout" intorepo_settingsTwo global variables related to sparse checkout have been moved to the repository settings structure.
Quoted 8 lines
Quoted 6 lines
Expecting a response.
cf. <[email protected]> cf. <[email protected]>
source: <[email protected]>I have responded to your message about keeping the topic in 'seen' or not: [1]
It is not an issue for which a response is being expected, though. Has the issue Phillip pointed out been resolved in the discussion?
Quoted 24 lines · Junio C Hamano
Quoted 21 lines · Ayush Chandekar
Hi Junio,
On Thu, Jul 10, 2025 at 1:36 PM Junio C Hamano <[email protected]> wrote:
[snip]Quoted 15 lines
* ac/deglobal-sparse-variables (2025-06-30) 3 commits
- environment: remove the global variable 'sparse_expect_files_outside_of_patterns'
- environment: move access to "core.sparsecheckoutcone" intorepo_settings
- environment: move access to "core.sparsecheckout" intorepo_settingsTwo global variables related to sparse checkout have been moved to the repository settings structure.
Expecting a response.
cf. <[email protected]> cf. <[email protected]>
source: <[email protected]>
Quoted 4 lines
Quoted 1 line
I have responded to your message about keeping the topic in 'seen' or not: [1]
It is not an issue for which a response is being expected, though. Has the issue Phillip pointed out been resolved in the discussion?
Really sorry about that, I will address to his issue.
Quoted 7 lines · Ayush Chandekar
Quoted 7 lines
Quoted 7 lines
Quoted 6 lines
Expecting a response.
cf. <[email protected]> cf. <[email protected]>
source: <[email protected]>
Quoted 6 lines
Quoted 4 lines
Quoted 1 line
I have responded to your message about keeping the topic in 'seen' or not: [1]
It is not an issue for which a response is being expected, though. Has the issue Phillip pointed out been resolved in the discussion?
Really sorry about that, I will address to his issue.
Heh, don't be sorry. Miscommunication happens.
And thanks for working on this topic.
cover meson regression fix
In reply to Ramsay JonesAs promised, here is the patch to fix the regression caused by commit 837f637cf5 ("meson.build: correct setting of GIT_EXEC_PATH", 2025-05-19).
I compared the meson and corresponding make installations, which shows (in addition to fixing the regression):
- the make install includes 'gitk' and 'git-gui' which is missing from the meson install.
- the make install includes all of the 'builtin' commands in the 'library executables' (e.g. git-add), which the meson install omits. (I thought we had stopped 'installing' the builtins).
- the make install uses hard links whereas meson uses symbolic links.
- meson omits the Irish translation (see patch #2).
I noticed some other problems, which I was chasing to see if I could fix them here, but it was taking me down an unexpectedly deep rabit hole, so ...
ATB,
Ramsay Jones
Ramsay Jones (2):
meson: fix installation when -Dlibexexdir is set po/meson.build: add missing 'ga' language code
meson.build | 42 +++++++++++++++++++++--------------------- po/meson.build | 1 + 2 files changed, 22 insertions(+), 21 deletions(-)
Signature · 1 line
2.50.0
PATCH 1/2 meson: fix installation when -Dlibexexdir is set
commit 837f637cf5 ("meson.build: correct setting of GIT_EXEC_PATH", 2025-05-19) corrected the GIT_EXEC_PATH build setting, but then forgot to update the installation path for the library executables. This causes a regression when attempting to execute commands, after installing to a non-standard location (reported here[1]):
$ meson -Dprefix=/tmp/git -Dlibexecdir=libexec-different build
$ meson install
$ /tmp/git/bin/git --exec-path
/tmp/git/libexec-different
$ /tmp/git/bin/git daemon
git: 'daemon' is not a git command. See 'git --help'In order to fix the issue, use the 'git_exec_path' variable (calculated while processing -Dlibexecdir) as the 'install_dir' field during the installation of the library executables.
[1]: <[email protected]>
--- meson.build | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-)
meson.build +21 -21
@@ -1744,7 +1744,7 @@ git_builtin = executable('git', sources: builtin_sources + 'git.c', dependencies: [libgit_commonmain], install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, ) bin_wrappers += git_builtin
@@ -1752,35 +1752,35 @@ test_dependencies += executable('git-daemon', sources: 'daemon.c', dependencies: [libgit_commonmain], install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, ) test_dependencies += executable('git-sh-i18n--envsubst', sources: 'sh-i18n--envsubst.c', dependencies: [libgit_commonmain], install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, ) bin_wrappers += executable('git-shell', sources: 'shell.c', dependencies: [libgit_commonmain], install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, ) test_dependencies += executable('git-http-backend', sources: 'http-backend.c', dependencies: [libgit_commonmain], install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, ) bin_wrappers += executable('scalar', sources: 'scalar.c', dependencies: [libgit_commonmain], install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, ) if curl.found()
@@ -1796,14 +1796,14 @@ if curl.found() sources: 'remote-curl.c', dependencies: [libgit_curl], install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, ) test_dependencies += executable('git-http-fetch', sources: 'http-fetch.c', dependencies: [libgit_curl], install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, ) if expat.found()
@@ -1811,7 +1811,7 @@ if curl.found() sources: 'http-push.c', dependencies: [libgit_curl], install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, ) endif
@@ -1822,7 +1822,7 @@ if curl.found() ) install_symlink(alias + executable_suffix, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, pointing_to: 'git-remote-http', ) endforeach
@@ -1832,7 +1832,7 @@ test_dependencies += executable('git-imap-send', sources: 'imap-send.c', dependencies: [ use_curl_for_imap_send ? libgit_curl : libgit_commonmain ], install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, ) foreach alias : [ 'git-receive-pack', 'git-upload-archive', 'git-upload-pack' ]
@@ -1842,7 +1842,7 @@ foreach alias : [ 'git-receive-pack', 'git-upload-archive', 'git-upload-pack' ] ) install_symlink(alias + executable_suffix, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, pointing_to: 'git', ) endforeach
@@ -1856,9 +1856,9 @@ foreach symlink : [ 'scalar', ] if meson.version().version_compare('>=1.3.0') - pointing_to = fs.relative_to(get_option('libexecdir') / 'git-core' / symlink, get_option('bindir')) + pointing_to = fs.relative_to(git_exec_path / symlink, get_option('bindir')) else - pointing_to = '../libexec/git-core' / symlink + pointing_to = '..' / git_exec_path / symlink endif install_symlink(symlink,
@@ -1898,7 +1898,7 @@ foreach script : scripts_sh meson.project_build_root() / 'GIT-BUILD-OPTIONS', ], install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, ) endforeach
@@ -1931,7 +1931,7 @@ if perl_features_enabled input: perl_header_template, output: 'GIT-PERL-HEADER', configuration: { - 'GITEXECDIR_REL': get_option('libexecdir') / 'git-core', + 'GITEXECDIR_REL': git_exec_path, 'PERLLIBDIR_REL': perllibdir, 'LOCALEDIR_REL': get_option('datadir') / 'locale', 'INSTLIBDIR': perllibdir,
@@ -1955,7 +1955,7 @@ if perl_features_enabled output: fs.stem(script), command: generate_perl_command, install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, depends: [git_version_file], ) test_dependencies += generated_script
@@ -1964,9 +1964,9 @@ if perl_features_enabled bin_wrappers += generated_script if meson.version().version_compare('>=1.3.0') - pointing_to = fs.relative_to(get_option('libexecdir') / 'git-core' / fs.stem(script), get_option('bindir')) + pointing_to = fs.relative_to(git_exec_path / fs.stem(script), get_option('bindir')) else - pointing_to = '../libexec/git-core' / fs.stem(script) + pointing_to = '..' / git_exec_path / fs.stem(script) endif install_symlink(fs.stem(script),
@@ -1996,7 +1996,7 @@ if python.found() '@OUTPUT@', ], install: true, - install_dir: get_option('libexecdir') / 'git-core', + install_dir: git_exec_path, ) test_dependencies += generated_python endforeach
@@ -2030,7 +2030,7 @@ mergetools = [ ] foreach mergetool : mergetools - install_data(mergetool, install_dir: get_option('libexecdir') / 'git-core' / 'mergetools') + install_data(mergetool, install_dir: git_exec_path / 'mergetools') endforeach if intl.found()
Signature · 1 line
2.50.0
PATCH 2/2 po/meson.build: add missing 'ga' language code
In reply to Ramsay JonesCommit bf5ce434db ("l10n: Add full Irish translation (ga.po)", 2025-05-16) added a new translation to git. In a make build, new 'po' files (ga.po in this case) are added to the build automatically using a wildcard pattern. In a meson build you have to add the language code ('ga') to a list explicitly to have it included in the build. In order to include the new translation in the meson build, add the 'ga' language code to the list of translations in the 'po/meson.build' file.
--- po/meson.build | 1 + 1 file changed, 1 insertion(+)
po/meson.build +1 -0
@@ -8,6 +8,7 @@ translations = i18n.gettext('git', 'el', 'es', 'fr', + 'ga', 'id', 'is', 'it',
Signature · 1 line
2.50.0