Skip to contentSkip to conversation

What's cooking in git.git (Sep 2026, #04)

DISCUSSION Junio C Hamano 3 participants 6 messages Sep 10 – Sep 11

lore
Share & tools
lore
#0 lore raw

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 is a candidate to be in a future release). Commits prefixed with '-' are only in 'seen', and aren't considered "accepted" at all. They may be annotated with a URL to a message that raises issues but they are by no means exhaustive. A topic without enough support may be discarded after a long period of no activity (of course, it can be resubmitted when new interest arises).

Git 2.56-rc0 has been tagged. We have about 80 non-merge commits on 'next' and 228 non-merge commits on 'seen'. We want some of them in Git 2.56 final, but most of them will either cook in 'next' until then or be discarded to be sent afresh in a polished form after 2.56 final is tagged.

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/midx-missing-pack-fallback (2026-08-29) 4 commits
(merged to 'next' on 2026-09-04 at 73a4cd73de)
+ packfile: recover when a multi-pack-index names a removed pack
+ mktree: do not use OBJECT_INFO_QUICK when checking objects
+ mktree: plug per-tree leak in --batch mode
+ replay: fail gracefully when a merge input is unreadable
+ Merge branch 'ps/odb-generic-corrupt-objects' into en/midx-missing-pack-fallback

The object lookup machinery has been taught to gracefully recover when a multi-pack-index points to an owning pack that was removed during a concurrent geometric repack, and 'git replay' has been fixed to not segfault when reading such missing objects.

Graduated to 'master'.
cf. <[email protected]> cf. <[email protected]>
source: <[email protected]>

* hk/typofix (2026-08-31) 1 commit
(merged to 'next' on 2026-09-03 at d33f0c0813)
+ versioncmp: fix typo in versioncmp.c, t/t0022-crlf-rename.sh

Various spelling mistakes in comments and test descriptions have been corrected.

Graduated to 'master'.
source: <[email protected]>

* hn/ci-cancel-stale-pr-runs (2026-08-31) 1 commit (merged to 'next' on 2026-09-03 at e4d4816938)
+ ci: cancel stale pull request workflow runs

GitHub Actions CI workflow runs triggered by pull requests have been configured to cancel older runs when a new push is made to the same pull request.

Graduated to 'master'.
source: <[email protected]>

* jk/rev-info-argv-to-free (2026-08-31) 2 commits (merged to 'next' on 2026-09-04 at 9826377f2b)
+ revision: simplify mark_argv_for_free() callers
+ revision: hang on to "freed" argv elements

The memory ownership of argv elements passed to the revision machinery has been made more robust by keeping logically "freed" elements alive until the rev_info struct is released, preventing use-after-free bugs when options store references to them.

Graduated to 'master'.
cf. <[email protected]>
cf. <[email protected]>
cf. <[email protected]>
source: <[email protected]>

* ns/ref-symref-additional-tests (2026-08-20) 2 commits
(merged to 'next' on 2026-09-03 at 67a1cf3baa)
+ t1402: test forbidden characters in refnames
+ t1401: check symbolic-ref failure and --quiet silence on a non-symbolic ref

A few tests for the reference handling subsystem have been added to exercise the handling of forbidden characters and symbolic references.

Graduated to 'master'.
cf. <[email protected]>
source: <[email protected]>
source: <[email protected]>

* rs/worktree-add-basename-fixes (2026-08-25) 4 commits (merged to 'next' on 2026-09-03 at b04ceb887c)
+ worktree add: let worktree_basename() return string copy
+ worktree add: trim slashes when deriving branch name from path
+ worktree add: reject separator-only path
+ worktree add: don't read out of bounds in worktree_basename()

The string extraction logic for the branch name and worktree name from the given path in 'git worktree add' has been corrected and simplified to avoid out-of-bounds reads and improper handling of trailing slashes.

Graduated to 'master'.
cf. <[email protected]>
source: <[email protected]>

* tc/replay-linearize (2026-08-31) 3 commits
(merged to 'next' on 2026-09-04 at 92ae794bfc)
+ replay: offer an option to linearize the commit topology
+ replay: resolve the replay base outside pick_regular_commit()
+ replay: add helper to put entry into replayed_commits

The 'git replay' command has been taught the '--linearize' option to drop merge commits and linearize the replayed history, mimicking 'git rebase --no-rebase-merges'.

Graduated to 'master'.
cf. <CABPp-BF1=DZAxX5Now4pCKPi8=cpXo506z=8QVu2vYCSiKdqMA@mail.gmail.com>
source: <[email protected]>

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

* vm/advice-config-global-hint (2026-09-10) 3 commits
- advice: use global config for default branch name
- advice: introduce advice scoping mechanism
- advice: pass the entire advice_setting to vadvise()

Some advice messages would never trigger once a repository is initialized (e.g., advice.defaultBranchName). Update hint to disable them in per-user configuration file.

Needs review.
source: <[email protected]>

* ta/lint-gitlink-older-perl-fix (2026-09-07) 1 commit (merged to 'next' on 2026-09-10 at 4ca90b4922)
+ lint-gitlink: don't use empty lower bound in .{0,8}

The development helper script to lint gitlink references in the documentation has been updated to avoid a newer Perl regular expression syntax that breaks on older Perl versions.

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

* jc/rust-cargo-build-target (2026-09-10) 1 commit
- rust: respect CARGO_BUILD_TARGET when locating build output

When cross-compiling with Cargo, the output artifact is placed in a target-specific subdirectory, which causes the build system to fail to locate it. The build system has been updated to respect the 'CARGO_BUILD_TARGET' environment variable.

Needs review.
source: <[email protected]>

* mh/rust-crate-subdir (2026-09-10) 1 commit
- Move rust gitcore crate to a different subdirectory

The Rust code and its 'Cargo.toml' file have been moved from the top-level repository root and 'src/' directory into a dedicated 'rust/' subdirectory. This avoids confusing Cargo's packaging mechanism when the Git repository is included as a submodule in other Rust projects.

Needs review.
source: <[email protected]>

* ps/ref-storage-format (2026-09-09) 13 commits
- setup: allow "--ref-storage-format=" to specify a payload
- setup: rename "init.defaultRefFormat" to "init.defaultRefStorageFormat"
- t: rename GIT_TEST_DEFAULT_REF_FORMAT
- setup: rename ref storage format environment variables
- setup: refactor how we configure the ref storage format
- refs: expose function to parse reference URIs
- help: rename "default-ref-format" to "default-ref-storage-format"
- builtin/rev-parse: rename "--show-ref-format" to "--show-ref-storage-format"
- builtin/submodule: rename "--ref-format=" to "--ref-storage-format="
- builtin/refs: rename "--ref-format=" to "--ref-storage-format="
- builtin/clone: rename "--ref-format=" to "--ref-storage-format="
- builtin/init: rename "--ref-format=" to "--ref-storage-format="
- parse-options: allow for hidden aliases

The terminology regarding reference storage formats has been unified across command-line options, environment variables, configuration variables, and source code, standardizing on the phrase "ref storage format" (e.g., --ref-storage-format, 'GIT_REF_STORAGE_FORMAT'). Additionally, the --ref-storage-format option has been updated to accept payloads in the form <format>://<payload>.

Needs review.
source: <20260909-b4-pks-unify-ref-storage-format-v3-0-ca041fb40ad8@pks.im>

* ta/command-list-guides-sync-lint (2026-09-08) 2 commits
- lint-docs: check the guide list in command-list.txt
- command-list: add gitformat-loose(5) and gitpacking(7)

A new linter test has been added to Documentation/lint-manpages.sh to ensure that all non-command manual pages (guides and developer interfaces) listed in Documentation/Makefile are present in command-list.txt, replacing an older comment that reminded developers to keep them in sync.

Waiting for response.
cf. <[email protected]>
source: <[email protected]>

* ap/var-broken-down-idents (2026-09-09) 1 commit
- var: support broken-down idents, signing key, multiple args, and -z

Needs review.
source: <[email protected]>

* bc/maintenance-doc-markup-fix-for-asciidoc (2026-09-09) 1 commit
- doc: fix conjoined maintenance strategies in git-config(1)

Mark-up fix for 'git maintenance' documentation pages.

Will merge to 'next'?
cf. <[email protected]>
source: <20260910-maintenance-doc-bullet-fix-v2-1-3ed1c75e24b2@brighamcampbell.com>

* ks/history-commit-leakfix (2026-09-10) 1 commit
- builtin/history: unuse the commit buffer after use

Needs review.
(a newer iteration v3 exists as <[email protected]>)
source: <[email protected]>

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

* ps/libgit-in-subdir (2026-07-12) 2 commits
. Move libgit.a sources into separate "lib/" directory
. t/helper: prepare "test-example-tap.c" for introduction of "lib/" . Merge branch 'ps/odb-source-packed' into ps/libgit-in-subdir

The source files for 'libgit.a' have been moved into a new 'lib/' directory to clean up the top-level directory and clearly separate library code. This topic has been ejected for now, as it causes too many evil merges with other topics.

Waiting for response for too long, stalled.
cf. <[email protected]>
cf. <al6yCTDjBRn2HGq0@com-79390>
cf. <[email protected]>
cf. <[email protected]>
source: <[email protected]>

* hs/rebase-continue-edit (2026-07-21) 1 commit
- rebase: add --[no-]edit to --continue

Support for skipping the editor when continuing a rebase after conflict resolution has been added with the '--no-edit' option, and forcing it with '--edit'. A new configuration variable 'rebase.noEdit' can be used to set the default behavior.

Waiting for response for too long, will discard. cf. <[email protected]>
cf. <[email protected]>
source: <[email protected]>

* sn/rebase-update-refs-symrefs (2026-07-22) 2 commits
- rebase: guard non-branch symref targets
- rebase: skip branch symref aliases

'git rebase --update-refs' has been taught to resolve local branch symrefs to their referents before queuing updates, ensuring aliases of the current branch are skipped and duplicate updates are avoided to prevent failures when branch aliases are present.

Waiting for response for too long, will discard. cf. <[email protected]> cf. <[email protected]>
source: <[email protected]>

* tb/pack-with-duplicates (2026-07-24) 5 commits
- pack-bitmap: handle duplicate pack entries during MIDX reuse
- test-tool bitmap: reject packs with duplicate objects
- midx: verify duplicate pack entries by OID and offset
- packfile: recover delta cycles through duplicate entries
- t5308: test reverse indexes with duplicate objects

The handling of packfiles with duplicate object entries has been hardened. Specifically, reverse index lookup, delta cycle recovery, multi-pack-index verification, and pack reuse paths have been updated to correctly handle or gracefully reject duplicate entries.

Waiting for response for too long, will discard. cf. <[email protected]>
source: <[email protected]>

* cl/regexec-macos-leak (2026-07-28) 2 commits
- SQUASH???
- regexec: work around macOS TRE leak on invalid UTF-8

A compatibility workaround has been introduced for macOS to address a memory leak in the system regex engine when it encounters invalid multibyte sequences. The workaround segments the input buffer at invalid byte boundaries and searches each valid segment separately using regexec(), avoiding the leaking path.

Waiting for response for too long, will discard. cf. <[email protected]>
cf. <[email protected]>
source: <[email protected]>

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

* jk/ci-bump-debian-to-12 (2026-09-05) 1 commit
(merged to 'next' on 2026-09-07 at 10f7f0d2c3)
+ ci: bump debian-11 job to debian-12

The CI job for Debian 11 has been updated to use Debian 12, as the former is now out of the LTS period.

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

* tc/push-force-if-includes-fixes (2026-09-08) 2 commits
- push: fix --force-if-includes detached HEAD advice
- push: check pushed ref for --force-if-includes

The --force-if-includes protection for git push has been updated to consult the reflog of the local branch being pushed, rather than incorrectly checking the reflog of a local branch that shares the name of the remote destination branch. The push advice for detached HEAD scenarios has also been adjusted to indicate that the remote ref cannot be verified locally.

Needs review.
source: <[email protected]>

* as/cherry-pick-no-commit-doc (2026-09-05) 2 commits (merged to 'next' on 2026-09-09 at 2b9226bbc0)
+ doc: cherry-pick: note --no-commit skips CHERRY_PICK_HEAD
+ t3507: check no CHERRY_PICK_HEAD after conflicting --no-commit

The documentation for 'git cherry-pick' has been updated to clarify that the '--no-commit' option intentionally skips setting the 'CHERRY_PICK_HEAD' ref. A test has also been added to ensure this behavior holds even when the operation stops for conflicts.

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

* tn/fetch-pack-trace-packfile-uri (2026-07-26) 1 commit (merged to 'next' on 2026-09-08 at dd3c024f52)
+ fetch-pack: trace packfile URI downloads

The process of downloading packfile URIs in protocol v2 has been instrumented with a Trace2 region. This visibility allows tracking the cumulative time spent downloading external packs and the number of advertised URIs without emitting a separate event per pack.

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

* jc/history-missing-tree-errorfix (2026-09-02) 1 commit (merged to 'next' on 2026-09-10 at 36601bf096)
+ history: do not dereference NULL when parent tree is missing

Running "git history" in a corrupt repository can (unsurprisingly) segfault when a necessary tree object is not found.

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

* jc/pathspec-match-const (2026-09-03) 1 commit (merged to 'next' on 2026-09-07 at 5a00749668)
+ pathspec: match and original in pathspec_item are const (this branch is used by yt/pathspec-negative-prefix.)

Two members in "struct pathspec_item" were of type "char *", but nobody updated the string through these pointers. They have been made "const char *" instead.

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

* ps/tune-rerere-gc (2026-09-04) 2 commits
(merged to 'next' on 2026-09-07 at 6524063269)
+ builtin/maintenance: improve heuristic for "rerere gc"
+ rerere: extract logic to determine whether entries are stale

"git maintenance" triggered "rerere gc" in unappropriate times and interfered with "git rebase" etc. too much. The conditions "rerere gc" gets triggered have been tweaked.

Will merge to 'master'.
cf. <[email protected]>
cf. <CAA0xjtrL8DJp61jp7s0L6L+RviwQz=-PEo7qZvCTh+8nT2cdfw@mail.gmail.com>
source: <20260904-b4-pks-maintenance-rerere-gc-heuristic-v2-0-b1691121fe1c@pks.im>

* as/push-force-if-includes-no-reflog (2026-09-05) 1 commit
- push: fix --force-if-includes when remote-tracking ref has no reflog

The timestamp used for checking the reflog of a remote-tracking branch during 'git push --force-if-includes' was left uninitialized when the reflog was completely empty, which has been corrected.

Waiting for review.
cf. <[email protected]>
cf. <[email protected]>
source: <[email protected]>

* tb/rerere-lock-grace (2026-09-09) 3 commits
- sequencer: disable auto maintenance in spawned commands
- rebase, cherry-pick, revert: run auto maintenance when done
- config: add git_config_append_parameter()

The sequencer machinery (used by 'git rebase', 'git cherry-pick', and 'git revert') has been updated to defer automatic maintenance tasks until the end of the operation, preventing nested 'git commit', 'git merge', and 'exec' commands from triggering GC operations that could contend for locks or delete open packs while the sequence is in progress.

Waiting for response.
cf. <[email protected]>
source: <[email protected]>

* cc/lazy-fetch-trusted-bit (2026-09-08) 5 commits
- builtin/upload-pack: set GIT_NO_LAZY_FETCH to 0 on trusted repo
- promisor-remote: prevent infinite recursion when lazy fetching
- upload-pack: read uploadpack.lazyFetchTrusted
- setup: extract path_allowlist_apply()
- promisor-remote: factor out lazy_fetch_objects()

A new 'uploadpack.lazyFetchTrusted' configuration variable has been introduced to allow 'upload-pack' to lazily fetch missing objects from configured promisor remotes when serving trusted repositories.

Waiting for response.
cf. <[email protected]>
cf. <[email protected]>
cf. <[email protected]>
source: <[email protected]>

* ps/ci-depends-on-ruby (2026-09-01) 1 commit (merged to 'next' on 2026-09-08 at d0859510f8)
+ ci: fix missing Ruby dependency in "documentation" job

The CI job that builds the documentation failed because it lacked the 'gem' command. The 'asciidoc' package apparently stopped pulling in the 'ruby' package as a transitive dependency. The CI script has been updated to explicitly install 'ruby'.

Will merge to 'master'.
source: <20260901-b4-pks-ci-fix-documentation-job-v1-1-a8257ee2a9a4@pks.im>

* ps/odb-stop-registering-in-memory-sources (2026-09-02) 13 commits
- odb: remove the ability to link sources ad-hoc
- t/helper: stop registering alternates in "ref-store" command
- t/helper: adapt read-midx to not link ad-hoc source anymore
- builtin/multi-pack-index: refuse unknown sources with "--object-dir="
- odb/packed: fix memory leaks when freeing source
- tmp-objdir: drop unused function to register alternate
- odb: remove infrastructure to register submodule sources
- builtin/grep: stop registering submodule ODB as source
- submodule-config: stop registering submodule sources
- submodule-config: stop using the_hash_algo
- submodule-config: remove uses of the_repository
- cache-tree: remove dependency on the_repository
- cache-tree: drop the_repository in cache_tree_fully_valid()
- Merge branch 'ty/repository-fetch-if-missing' into ps/ps/odb-stop-registering-in-memory-sources

The mechanism to register in-memory alternate object sources has been removed, as submodule object databases are now accessed natively via their own repository structures. This simplifies object database management and prepares the codebase for migrating alternate tracking into the files backend.

Expecting a (hopefully small and final) reroll?
cf. <[email protected]>
source: <20260902-pks-odb-registering-in-memory-sources-v2-0-c6ca12fdea4d@pks.im>

* jk/ci-use-system-asciidoctor (2026-09-02) 2 commits (merged to 'next' on 2026-09-08 at e7621b4bad)
+ ci: drop ALREADY_HAVE_ASCIIDOCTOR variable
+ ci: fix missing Ruby dependency in "documentation" job

The CI script to install dependencies for the documentation build has been updated to install asciidoctor directly via the system package manager instead of pinning to an older version via gem. Additionally, an obsolete variable used for retired Azure Pipelines environments has been removed.

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

* jk/submodule-error-leak (2026-09-01) 2 commits (merged to 'next' on 2026-09-07 at d3bf064487)
+ submodule--helper: free URL when repository setup fails
+ repository: make repo_clear() idempotent

The error path in 'git submodule--helper' has been updated to plug a memory leak when a repository handle could not be obtained, leveraging an updated idempotent repo_clear().

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

* sa/rev-list-missing-only (2026-09-03) 1 commit (merged to 'next' on 2026-09-07 at b21b667619)
+ rev-list: add --missing-only option to filter output

The git rev-list command has been augmented with a '--missing-only' option that filters the output to only show missing objects, stripping the leading '?' character and suppressing present objects, which is useful when used in combination with '--missing=print' or '--missing=print-info'.

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

* wf/imap-send-draft (2026-09-01) 1 commit
(merged to 'next' on 2026-09-07 at 8a2a1bb827)
+ imap-send: add --draft to set IMAP \Draft flag

The 'git imap-send' command has been taught to take the '--draft' option to mark uploaded messages as drafts, which helps some email clients render them properly for editing and sending.

Will merge to 'master'.
cf. <[email protected]>
cf. <[email protected]>
source: <761c3f1b-e280-48b1-a2ad-770b68be3434@slotpi01m90>

* yt/pathspec-negative-prefix (2026-09-03) 2 commits
- dir: find common prefix among non-exclude pathspec items
- dir: do not apply prefix to negative pathspecs
- Merge branch 'jc/pathspec-match-const' into yt/pathspec-negative-prefix (this branch uses jc/pathspec-match-const.)

The pathspec matching logic has been updated to avoid out-of-bounds memory accesses when a negative pathspec is shorter than the common prefix of positive pathspecs.

Waiting for response.
cf. <CABPp-BFJo80oE=rtWc0FRNUxVh=6NHZeQmHD2q69VGwDcrHNhw@mail.gmail.com>
source: <[email protected]>

* cc/early-scan-options (2026-09-02) 6 commits
- fast-import: use early_scan_options() for --allow-unsafe-features
- parse-options: build early scan options from a struct option array
- parse-options: add parse_options_takes_argument()
- rev-parse: fix "--" detection when it is an option value
- bisect: fix "--" detection when a term name is "--"
- parse-options: add early_scan_options()

The process of parsing command-line options in commands that perform an early scan over their arguments (such as 'git bisect', 'git rev-parse', and 'git fast-import') has been unified using a new early-scan sub-API, which parses and skips known options taking separate values to prevent logic bugs.

Waiting for response.
cf. <[email protected]>
source: <[email protected]>

* ec/commit-fixup-options (2026-05-26) 2 commits
- commit: allow -c/-C for all kinds of --fixup
- commit: allow -m/-F for all kinds of --fixup

Support for '-m', '-F', '-c', or '-C' options to supply a commit log message from outside the editor has been added for all 'git commit --fixup' variations.

Expecting a reroll.
cf. <CA+JQ7M__GOnM9LHt0txry-G2z2CKhdZr0b-rU=Yd_A0gCEwmaQ@mail.gmail.com>
source: <[email protected]>

* jc/checkout-refactor (2026-08-30) 8 commits
- checkout: move post_checkout_hook() to checkout.c
- checkout: wrap overly long lines
- checkout: restructure switch, restore, and checkout entrypoints
- checkout: extract branch setup and tracking helpers
- checkout: extract option validation and pathspec helpers
- checkout: validate stage and merge option compatibility in checkout_paths()
- checkout: validate new branch name in checkout_branch()
- checkout: pass cb_option explicitly to branch name parsers

The front-end code for 'git checkout', 'git switch', and 'git restore' has been restructured to cleanly separate their pathspec and branch handling, eliminating a common bottleneck and paving the way to libify utility helpers.

Waiting for response.
cf. <[email protected]>
cf. <[email protected]>
source: <[email protected]>

* ll/doc-pushcert-if-asked (2026-08-29) 1 commit
- doc: remote-helpers: option pushcert if-asked

he remote helper documentation for the 'pushcert' option has been updated to mention that it can also take 'if-asked', reflecting the existing implementation in the code.

Needs review.
source: <[email protected]>

* ws/squelch-svn-migrate (2026-08-27) 2 commits
- Makefile: add NO_GIT_SVN knob to skip building/installing git-svn
- git-svn: don't print v1-layout migration noise when there's nothing to migrate

Needs review.
source: <[email protected]>

* dw/config-read-both-global (2026-08-23) 3 commits
- config: read global scope via config_sequence
- config: let sequence require a successful file
- path: use forward slashes in XDG config on Windows

The git config --global read operations have been updated to respect both $HOME/.gitconfig and $XDG_CONFIG_HOME/git/config, fixing an inconsistency where only the former was read when both configuration files are present.

Expecting a reroll.
cf. <[email protected]>
source: <20260823-fix-config-list-global-home-and-xdg-v2-0-b29cc63f017b@microsoft.com>

* vv/branch-recurse-no-start-ref (2026-08-21) 2 commits
- branch: allow recursion with no tracking name
- branch: do not track a start point with no ref

The --recurse-submodules option in 'git branch' has been fixed to avoid a crash when the start point is not a reference (e.g., a raw object ID). The creation path now skips setting up tracking and properly forwards the absent tracking name to the submodule helper.

Needs review.
source: <20260822-vv-branch-recurse-no-start-ref-v1-0-46dc140acaa8@zitro.id>

* ps/odb-alternates-at-creation (2026-09-08) 9 commits
- odb/source: remove the ability to write alternates
- builtin/clone: write alternates via odb_create_on_disk()
- odb/source: support writing alternates when creating the database
- builtin/clone: move setup of alternates for non-shared local clones
- builtin/clone: move setup of alternates for shared local clones
- builtin/clone: refactor handling of "--reference{,-if-able}"
- builtin/clone: move around setup_reference()
- builtin/clone: defer setup of the object database
- setup: split up concerns of init_db()
- Merge branch 'ps/odb-eagerly-load-alternates' into ps/odb-alternates-at-creation

The setup of alternates has been deferred to object database creation time during clone, which drops the unused ad-hoc alternate writing API, simplifying the object database backend interface.

Expecting a reroll.
cf. <[email protected]>
source: <20260909-pks-odb-write-alternates-at-creation-time-v4-0-d8a78ffc32e4@pks.im>

* ps/odb-pluggable-fsck (2026-08-30) 10 commits
- builtin/fsck: move loose object verification into the loose source
- builtin/fsck: move multi-pack index verification into the packed source
- builtin/fsck: move bitmap verification into the packed source
- builtin/fsck: move reverse index verification into the packed source
- builtin/fsck: move packfile verification into the packed source
- odb: provide infrastructure for pluggable fsck checks
- builtin/fsck: don't check alternates with "--no-full"
- builtin/fsck: de-globalize option handling
- builtin/fsck: merge fsck_obj_buffer() and fsck_obj()
- builtin/fsck: use fsck_obj_buffer() when checking loose objects
- Merge branch 'ps/odb-eagerly-load-alternates' into ps/odb-pluggable-fsck
- Merge branch 'ps/odb-pluggable-pack-generation' into ps/odb-pluggable-fsck

The consistency checks for the object database (fsck) have been decoupled from the generic builtin implementation and moved into the backend-specific object source layers, making them pluggable for different object storage formats.

Needs review.
cf. <CAOLa=ZSi1TiTZ=i=SQp+pmjTOm2_wY-NiCotx66+M6VDKx=ZXg@mail.gmail.com>
source: <[email protected]>

* en/no-amend-during-conflicts (2026-09-01) 5 commits (merged to 'next' on 2026-09-07 at e1faacbfe1)
+ commit: refuse partial commits during conflict resolution
+ commit: refuse to amend during conflict resolution
+ commit: reword the empty-commit rebase amend error
+ commit: allow a partial commit when a rebase pick becomes empty
+ commit: clarify FROM_REBASE_PICK and is_from_rebase() names

Teach 'am', 'revert', and 'rebase' that running 'commit --amend' or a partial 'commit <paths>' makes no sense during operations that stop and return control to the user to resolve conflicts left in the working tree, just like 'cherry-pick' and 'merge' do.

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

* as/utimensat-utimes (2026-08-21) 3 commits
- compat/posix: drop legacy <utime.h> header and shims
- treewide: use utimensat(2) instead of legacy utime(3p)
- compat/posix: introduce utimensat(2) wrapper

The codebase has been updated to use the newer utimensat() POSIX function instead of the obsolescent utime(), allowing high-precision timestamps while preserving fallback compatibility.

Waiting for response.
cf. <[email protected]>
source: <[email protected]>

* kn/receive-report-hook (2026-09-09) 4 commits
- hook: introduce the receive-report hook
- receive-pack: move message generation to separate function
- receive-pack: drop static variables to track report status version
- doc: add proc-receive hook info in 'git-receive-pack.adoc'

A new hook 'report' is added to 'git receive-pack', which runs after reference updates and allows the server to filter or modify the packet-line status report sent back to the client.

Waiting for response.
cf. <[email protected]>
source: <[email protected]>

* ap/http-preserve-wwwauth-redirect (2026-08-19) 1 commit
- http: preserve wwwauth_headers across redirects

When an HTTP request triggers a redirect and the target yields an authentication challenge, the WWW-Authenticate headers received during the redirect are now explicitly preserved across the credential URL update, fixing an issue where they were incorrectly cleared.

Needs review.
source: <20260819-http-preserve-wwwauth-redirect-v2-1-4c61039432b0@nvidia.com>

* kh/doc-datamodel (2026-09-05) 4 commits
(merged to 'next' on 2026-09-09 at b951b38ff5)
+ doc: datamodel: link to the glossary
+ doc: glossary: link four of the terms to gitdatamodel(7)
+ doc: git: link to the gitdatamodel(7) tutorial
+ doc: git: list gitdatamodel(7) as a concept guide

The gitdatamodel documentation page has been linked from a handful of key documentaiton pages.

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

* kh/format-rev-more-options (2026-08-18) 5 commits
- format-rev: learn --abbrev, --color, and --date
- doc: rev-list-options.adoc: factor out --date alts
- format-rev: factor option variables into a struct
- format-rev: place BUG calls first in callback
- format-rev: use lower case for opts description

The experimental 'git format-rev' has been taught a few more formatting options.

Needs review.
source: <[email protected]>

* gg/http-ssl-verify-status (2026-08-18) 1 commit
- http: add http.sslVerifyStatus to check stapled OCSP responses

The HTTP transport has been taught to check the revocation status of the server certificate using the stapled OCSP response during the TLS handshake via a new 'http.sslVerifyStatus' configuration variable.

Expecting a reroll.
cf. <CALgUfNgMzn=enM_vYkn=X9swkZwHovwf00YTXbc0EVN0u6u=HA@mail.gmail.com>
source: <[email protected]>

* ty/repo-config-cleanups (2026-08-07) 3 commits
- environment: remove inaccurate repo_config_values comments
- environment: clarify repository config getter documentation
- environment: drop redundant NULL checks in config getters

Repository configuration getters in 'environment.c' have been simplified by removing redundant NULL checks. The documentation for these getters in 'environment.h' has been clarified, and inaccurate section comments inside 'struct repo_config_values' have been removed.

Needs review.
source: <[email protected]>

* dk/use-nsec-runtime (2026-08-31) 3 commits
- core: convert build-time USE_NSEC into runtime core.useNanosec
- environment: align repo_config_values_init with struct declaration
- meson: expose knob for xmlto relative links in manuals

The build-time knob 'USE_NSEC' for nanosecond stat precision has been converted to a runtime configuration 'core.useNanosec', allowing distributions to bundle one binary that adapts to filesystem capabilities dynamically.

Waiting for response.
cf. <[email protected]>
source: <[email protected]>

* bc/restrict-hex-to-lowercase (2026-09-07) 7 commits
- hex: allow only lowercase object IDs in breaking changes mode
- t5324: adjust tests for corrupt commit-graph
- object-name: use hexval
- hex: label usages of hex parsing for object IDs
- hex: make hex_to_bytes accept kind of hex to use
- hex: allow specifying hex type with hex2chr
- hex: add functionality for lowercase-only hex

The parser for hex object names has been updated to reject uppercase hexadecimal characters when running in the breaking changes mode, in preparation for Git 3.0.

Needs review.
source: <[email protected]>

* js/mingw-build-updates (2026-09-09) 13 commits
(merged to 'next' on 2026-09-10 at 0ce62cfef4)
+ t0060: adjust the code style
+ mingw: allow git.exe to be used instead of the "Git wrapper"
+ mingw: ensure valid CTYPE
+ mingw: always define ETC_* for MSYS2 environments
+ windows: skip linking git-<command> for built-ins
+ mingw: rely on MSYS2's metadata instead of hard-coding it
+ mingw: only enable the MSYS2-specific stuff when compiling in MSYS2
+ mingw: set the prefix and HOST_CPU as per MSYS2's settings
+ mingw: avoid over-specifying --pic-executable
+ mingw: only use -Wl,--large-address-aware for 32-bit builds
+ mingw: drop the -D_USE_32BIT_TIME_T option
+ mingw: stop hard-coding CC = gcc
+ mingw: include the Python parts in the build

A collection of patches from Git for Windows has been upstreamed, mostly focusing on simplifying and robustifying build configurations for MinGW/MSYS2, dropping obsolete compatibility options, and allowing the main 'git.exe' to be used directly without the extra wrapper process on Windows.

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

* hn/checkout-m-autostash-refine (2026-09-03) 2 commits (merged to 'next' on 2026-09-07 at 1bc4ba5725)
+ checkout: separate autostash conflict advice from branch-switch message
+ stash: reserve exit status 1 for conflicts

The autostash fallback in 'git checkout -m' has been refined to only retry when there are local changes. Additionally, a blank line now visually separates autostash conflict advice from the subsequent branch-switch message.

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

* kj/repo-info-more-path-keys (2026-08-25) 7 commits
- repo: add path.cdup
- repo: add path.git-prefix
- repo: add path.grafts with absolute and relative suffixes
- repo: add path.index with absolute and relative suffixes
- repo: add path.hooks with absolute and relative suffixes
- repo: add path.superproject-root with absolute and relative suffixes
- repo: add path.toplevel with absolute and relative suffix formatting

The 'git repo info' command has been taught more keys to output paths of various repository components (such as the working tree root, superproject working tree, object database, etc.), supporting both absolute and relative path formats.

Needs review (Broken???)
cf. <CA+rGoLcZ6u+Rbz2PNGiaPbeHB=LSAqxi0r6jYZL3RjG6wimJ3Q@mail.gmail.com>
source: <[email protected]>

* tc/last-modified-bloom (2026-09-01) 6 commits
- last-modified: keep per-path Bloom filters for wildcard pathspecs
- last-modified: check pathspec against Bloom filter first
- revision: add Bloom check that includes parent directories
- bloom: add helper to check if any key in a vector is present
- revision: expose check for paths maybe changed in Bloom filter
- revision: move bloom keyvec precondition into function

The 'git last-modified' command has been optimized by using Bloom filters. It now reuses revision walk filtering logic from 'git log' to pre-filter commits, and maintains per-path Bloom filters even when wildcard pathspecs are used.

Waiting for response.
cf. <[email protected]>
cf. <[email protected]>
source: <[email protected]>

* ds/trace2-tolerate-failed-timestamp (2026-08-31) 7 commits
- trace2: remove use of xcalloc()
- trace2: remove use of ALLOC_GROW()
- trace2: remove use of xstrfmt()
- trace2: remove use of ALLOC_ARRAY()
- trace2: remove use of xstrdup()
- trace2: tolerate failed timestamp formatting
- banned-die: create header for banning of functions

Functions like xstrfmt() and xcalloc() have been banned from use in the trace2 API codebase to prevent calls to die() which lead to unwanted process exits and recursion when memory allocation fails.

Needs review.
source: <[email protected]>

* pz/fetch-submodule-errors-config (2026-07-16) 2 commits
- fetch: add fetch.submoduleErrors to make submodule fetch errors non-fatal
- submodule: fix premature failure in recursive submodule fetch

The 'git fetch' command can now configure how submodule fetch errors are handled via 'fetch.submoduleErrors' and '--submodule-errors', making them non-fatal. A premature failure during recursive submodule fetches has been fixed by deferring the error until the OID-based retry phase fails.

Needs review.
source: <[email protected]>

* fz/rebase-autosquash-empty (2026-08-27) 1 commit
- sequencer: honor --empty when a fixup!/squash! empties its target

A commit that is emptied by melding a 'fixup!' or 'squash!' commit during 'git rebase --autosquash' is now handled according to the '--empty' option, allowing it to be dropped, kept, or to halt the rebase.

Waiting for response.
cf. <[email protected]>
source: <[email protected]>

* mm/lib-httpd-cgi-safe (2026-09-01) 3 commits
(merged to 'next' on 2026-09-07 at 9ceb1bfd64)
+ t/lib-httpd: document writing concurrency-safe CGI helpers
+ t/lib-httpd: make http-429 first-request check atomic
+ t/lib-httpd: fix apply-one-time-script race under concurrent requests

CGI helper scripts used by HTTP-related test scripts have been updated to use atomic filesystem operations, preventing race conditions when Apache handles concurrent requests.

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

* ij/subtree-reject-v2-config (2026-07-06) 2 commits
- git-subtree: Bail out if we find output from Rust rewrite (test)
- git-subtree: Bail out if we find output from Rust rewrite

The shell script implementation of 'git subtree' has been updated to check for the presence of the configuration file of the new Rust implementation, preventing users from accidentally running the old script on repositories already managed by the new tool.

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

* mm/line-log-limited-ops (2026-09-02) 7 commits
- diffcore-pickaxe: limit -G to the -L tracked range
- diff: support --check with -L line ranges
- diff: support stat formats with -L
- diff: extract a line-range diff helper for reuse
- diff: emit -L hunk headers via xdiff's formatter
- diff: simplify the line-range filter by classifying removals immediately
- diff: rename line-range filter struct and clarify fields (this branch is used by mm/diff-process-hunks.)

The 'git log -L<range>:<path>' command has been taught to limit various 'diff' operations, such as '--stat', '--check', and '-G', to the specified range and path.

Needs review.
source: <[email protected]>

* hn/history-squash (2026-09-08) 8 commits
- history: support editing squashed commit messages
- history: create squashed commits without editing
- history: protect branches when squashing a range
- history: validate squash revision ranges
- history: add skeleton for squash subcommand
- sequencer: share the squash message marker helpers and flags
- history: give commit_tree_ext a message template
- history: extract helper for a commit's parent tree

The experimental 'git history' command has been taught a new 'squash' subcommand to fold a range of commits into a single commit, with any descendants replayed on top.

Needs review.
source: <[email protected]>

* tb/midx-incremental-custom-base (2026-06-12) 3 commits
- midx-write: include packs above custom incremental base
- midx: pass custom '--base' through incremental writes
- t5334: expose shared nth_line() helper

The 'git multi-pack-index write --incremental' command has been corrected to properly honor the '--base' option. Previously, the custom base was ignored by the normal write path; packs from layers above the selected base were incorrectly skipped by the pack exclusion logic, and reachability closure for bitmaps was broken.

Expecting a reroll.
cf. <an4uIQA09rDCwwBp@com-79390>
cf. <[email protected]>
source: <[email protected]>

* mm/diff-process-hunks (2026-08-13) 11 commits
- fixup! diff: consult oid-only hunk providers via diff.<driver>.process
- diff: consult oid-only hunk providers via diff.<driver>.process
- userdiff: add diff.<driver>.process config
- sub-process: add a gentle status read
- sub-process: separate process lifecycle from hashmap management
- blame: read precomputed hunks
- diff: read precomputed hunks for stat output
- diff: record precomputed hunks during stat output
- diff-hunks: add the store format, library, and command
- diff: introduce a hunk provider interface
- gitattributes: document how external diff drivers relate to diff features
- Merge branch 'mm/line-log-limited-ops' into mm/diff-process-hunks (this branch uses mm/line-log-limited-ops.)

A new 'diff.<driver>.process' configuration has been introduced to allow a long-running external process to act as a hunk provider, enabling external tools to control which lines Git considers changed while leaving all output formatting (word diff, color, blame, etc.) to Git's standard pipeline.

Expecting a reroll.
cf. <CAC2Qwm+kzT_3_GKrpay=JLGYsxS10oWCg2MJPHrCVogFHA0OdA@mail.gmail.com>
source: <[email protected]>

* kh/format-patch-range-diff-notes (2026-08-24) 3 commits . format-patch: learn --[no-]range-diff-notes
. revision.h: rename struct member to reflect notes role . format-patch: simplify get_notes_arg parameters

The 'format-patch' command has been updated with options to configure notes specifically for range-diff output, allowing them to differ from the notes displayed on the patches themselves.

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

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

* ps/fetch-packfile-uris-parallel (2026-08-21) 2 commits . fetch-pack: allow parallelizing packfile URI fetches . fetch-pack: prepare for threaded fetching of packfile URIs

The git fetch and git clone commands have been optimized to download packfile URIs in parallel when the new fetch.packfileURIThreads configuration is set, significantly speeding up fetches from servers that advertise multiple packfiles.

Retracted for now.
cf. <[email protected]>
source: <20260821-pks-parallelize-fetching-packfile-uris-v1-0-0df52d9427ce@pks.im>

* jc/die-for-incompatible-opts (2026-08-27) 1 commit . die_for_incompatible_opts(): unbounded number of options

The die_for_incompatible_opt[234]() family of functions has been generalized to handle an arbitrary number of mutually exclusive options via a variadic function.

Retracted.
cf. <[email protected]>
source: <[email protected]>

* zy/apply-abandoned-header-fix (2026-07-01) 1 commit . apply: avoid leaking abandoned git-header state

A candidate 'git diff' header parsed by 'git apply' has been isolated in a temporary structure, preventing any partially parsed state from polluting the main patch structure and causing assertions to trip if the header is ultimately rejected.

Discarded.
cf. <[email protected]>
source: <[email protected]>

#1 lore raw
Quoted 8 lines · Junio C Hamano

* bc/maintenance-doc-markup-fix-for-asciidoc (2026-09-09) 1 commit
- doc: fix conjoined maintenance strategies in git-config(1)

Mark-up fix for 'git maintenance' documentation pages.

Will merge to 'next'?
cf. <[email protected]>
source: <20260910-maintenance-doc-bullet-fix-v2-1-3ed1c75e24b2@brighamcampbell.com>

Yup, this version looks good to me.

Quoted 10 lines

* ps/libgit-in-subdir (2026-07-12) 2 commits
. Move libgit.a sources into separate "lib/" directory
. t/helper: prepare "test-example-tap.c" for introduction of "lib/" . Merge branch 'ps/odb-source-packed' into ps/libgit-in-subdir

The source files for 'libgit.a' have been moved into a new 'lib/' directory to clean up the top-level directory and clearly separate library code. This topic has been ejected for now, as it causes too many evil merges with other topics.

Quoted 6 lines

Waiting for response for too long, stalled.
cf. <[email protected]>
cf. <al6yCTDjBRn2HGq0@com-79390>
cf. <[email protected]>
cf. <[email protected]>
source: <[email protected]>

I didn't really have the feeling that I was gaining consensus on this series. Maybe I'll be able to build consensus at the Contributor's Summit, but until then we can probably just discard this series.

Quoted 22 lines

* ps/odb-stop-registering-in-memory-sources (2026-09-02) 13 commits
- odb: remove the ability to link sources ad-hoc
- t/helper: stop registering alternates in "ref-store" command
- t/helper: adapt read-midx to not link ad-hoc source anymore
- builtin/multi-pack-index: refuse unknown sources with "--object-dir="
- odb/packed: fix memory leaks when freeing source
- tmp-objdir: drop unused function to register alternate
- odb: remove infrastructure to register submodule sources
- builtin/grep: stop registering submodule ODB as source
- submodule-config: stop registering submodule sources
- submodule-config: stop using the_hash_algo
- submodule-config: remove uses of the_repository
- cache-tree: remove dependency on the_repository
- cache-tree: drop the_repository in cache_tree_fully_valid()
- Merge branch 'ty/repository-fetch-if-missing' into ps/ps/odb-stop-registering-in-memory-sources

The mechanism to register in-memory alternate object sources has been removed, as submodule object databases are now accessed natively via their own repository structures. This simplifies object database management and prepares the codebase for migrating alternate tracking into the files backend.

Quoted 3 lines

Expecting a (hopefully small and final) reroll?
cf. <[email protected]>
source: <20260902-pks-odb-registering-in-memory-sources-v2-0-c6ca12fdea4d@pks.im>

I didn't plan to as it was only changing a single word in a commit message, but fair enough. Sent out v3 now.

Patrick

#4 lore raw

jk/ci-use-system-asciidoctor

In reply to Junio C Hamano
Quoted 4 lines · Junio C Hamano

* ps/ci-depends-on-ruby (2026-09-01) 1 commit (merged to 'next' on 2026-09-08 at d0859510f8)
+ ci: fix missing Ruby dependency in "documentation" job

This seems to be duplicated...

Quoted 5 lines

* jk/ci-use-system-asciidoctor (2026-09-02) 2 commits (merged to 'next' on 2026-09-08 at e7621b4bad)
+ ci: drop ALREADY_HAVE_ASCIIDOCTOR variable
+ ci: fix missing Ruby dependency in "documentation" job

...here---perhaps we would like to fix that when those topics graduate.

$ git describe --contains --all 7918bd7d08 691dc53e2a
remotes/origin/next~6^2~1
remotes/origin/next~7^2
$ git range-diff 7918bd7d08...691dc53e2a
1:  7918bd7d08 ! 1:  691dc53e2a ci: fix missing Ruby dependency in "documentation" job
    @@ Commit message
           ./ci/install-dependencies.sh: 23: gem: not found

The root cause of this is that we never explicitly install Ruby, and
- consequently gem(1) isn't explicitly pulled inus, either. This used to
+ consequently gem(1) isn't explicitly pulled in, either. This used to
work alright because we transitively pulled in Ruby via asciidoc. But due to an update it seems that we stopped pulling in the transitive dependency, and consequently we don't have gem(1) available anymore.

It's always good not to immortalize typos in 'master' if we can choose.

#2 lore raw
In reply to Patrick Steinhardt
Quoted 11 lines · Patrick Steinhardt
Quoted 8 lines · Junio C Hamano

* bc/maintenance-doc-markup-fix-for-asciidoc (2026-09-09) 1 commit
- doc: fix conjoined maintenance strategies in git-config(1)

Mark-up fix for 'git maintenance' documentation pages.

Will merge to 'next'?
cf. <[email protected]>
source: <20260910-maintenance-doc-bullet-fix-v2-1-3ed1c75e24b2@brighamcampbell.com>

Yup, this version looks good to me.

Yup. We are after the -rc0 preview so let me fast track 'next' candidates, which usually spends one week in 'next' before moving to 'master', earlier than usual. A trivially-verifyable documentation fix like this one is a best example.

Quoted 5 lines
Quoted 5 lines

* ps/libgit-in-subdir (2026-07-12) 2 commits
. Move libgit.a sources into separate "lib/" directory
. t/helper: prepare "test-example-tap.c" for introduction of "lib/" . Merge branch 'ps/odb-source-packed' into ps/libgit-in-subdir

Quoted 8 lines
Quoted 5 lines

The source files for 'libgit.a' have been moved into a new 'lib/' directory to clean up the top-level directory and clearly separate library code. This topic has been ejected for now, as it causes too many evil merges with other topics.
...

I didn't really have the feeling that I was gaining consensus on this series. Maybe I'll be able to build consensus at the Contributor's Summit, but until then we can probably just discard this series.

To be fair, I do not think anybody would unwelcome a change that makes the sources easier to navigate---otherwise we wouldn't have odb/ or even builtin/ hierarchies today. It is just that different people views how easier to navigate a concrete change proposed makes the sources.

Quoted 8 lines
Quoted 5 lines

* ps/odb-stop-registering-in-memory-sources (2026-09-02) 13 commits
...
Expecting a (hopefully small and final) reroll?
cf. <[email protected]>
source: <20260902-pks-odb-registering-in-memory-sources-v2-0-c6ca12fdea4d@pks.im>

I didn't plan to as it was only changing a single word in a commit message, but fair enough. Sent out v3 now.

Thanks, let's merge it down to 'next' now.

#5 lore raw

Re: jk/ci-use-system-asciidoctor

In reply to Tuomas Ahola
Quoted 9 lines · Tuomas Ahola
Quoted 4 lines · Junio C Hamano

* ps/ci-depends-on-ruby (2026-09-01) 1 commit (merged to 'next' on 2026-09-08 at d0859510f8)
+ ci: fix missing Ruby dependency in "documentation" job

This seems to be duplicated...

Quoted 7 lines
Quoted 5 lines

* jk/ci-use-system-asciidoctor (2026-09-02) 2 commits (merged to 'next' on 2026-09-08 at e7621b4bad)
+ ci: drop ALREADY_HAVE_ASCIIDOCTOR variable
+ ci: fix missing Ruby dependency in "documentation" job

...here---perhaps we would like to fix that when those topics graduate.

Thanks for catching.

Quoted 1 line

It's always good not to immortalize typos in 'master' if we can choose.

;-)

#3 lore raw
In reply to Junio C Hamano
Quoted 16 lines · Junio C Hamano
Quoted 6 lines · Patrick Steinhardt
Quoted 5 lines · Junio C Hamano

* ps/libgit-in-subdir (2026-07-12) 2 commits
. Move libgit.a sources into separate "lib/" directory
. t/helper: prepare "test-example-tap.c" for introduction of "lib/" . Merge branch 'ps/odb-source-packed' into ps/libgit-in-subdir

Quoted 8 lines
Quoted 5 lines

The source files for 'libgit.a' have been moved into a new 'lib/' directory to clean up the top-level directory and clearly separate library code. This topic has been ejected for now, as it causes too many evil merges with other topics.
...

I didn't really have the feeling that I was gaining consensus on this series. Maybe I'll be able to build consensus at the Contributor's Summit, but until then we can probably just discard this series.

Quoted 5 lines

To be fair, I do not think anybody would unwelcome a change that makes the sources easier to navigate---otherwise we wouldn't have odb/ or even builtin/ hierarchies today. It is just that different people views how easier to navigate a concrete change proposed makes the sources.

Yeah. Thing is, changes like this are always going to be subjective. I expected lots of discussion around this particular one, so I knew that it was quite likely that I won't be able to build consensus and that there'd be lots of different opinions.

I personally still think that having library sources properly split out into its own hierarchy is a sensible first step. But I also agree with others that it makes sense to then further group files that belong to specific subsystems into their own directories. I don't really see these as mutually exclusive, we can have both.

Patrick