Thread (2 messages) 2 messages, 2 authors, 3h ago

What's cooking in git.git (Jul 2026, #01)

From: Junio C Hamano <hidden>
Date: 2026-07-01 23:40:19

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.55 (final) has been tagged.  The next release is tentatively
called Git 2.56.  This week is the 0th week of the cycle, which is
time to see if there are any brown paper bag breakages and
regressions we need to fix.  Next week, I plan to start merging the
topics that have been cooking in 'next' down to 'master'.  It has
been customary to rewind 'next' and rebuild it on top of 'master'
soon after a major release, but IIRC, we didn't do so in Git 2.55;
perhaps we can do without rebuilding it this cycle as well.  We'll
see.

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/

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

* kk/commit-reach-find-all-fix (2026-06-29) 2 commits
 - commit-reach: guard !FIND_ALL early exit with generation ordering check
 - t6600: add test for merge-base early exit with clock skew

 The early-exit optimization in paint_down_to_common() has been gated
 on the queue being generation-ordered. This fixes a bug where git
 merge-base (without --all) could return incorrect results on
 repositories with v1 commit graphs and clock skew.

 Comments?
 cf. <xmqqa4sdw55v.fsf@gitster.g>
 source: [ref]


* bl/t7412-use-test-path-helpers (2026-06-29) 1 commit
 - submodule absorbgitdirs tests: use test_* helper functions

 t7412 that tests "git submodule absorbgitdirs" has been modernized to
 use test_path_is_file, test_path_is_dir, and test_path_is_missing
 helper functions instead of raw "test -[fde]" commands.

 Waiting for response(s) to review comment(s).
 cf. [ref]
 source: [ref]


* jk/format-patch-leakfix (2026-06-29) 2 commits
 - format-patch: fix leak of rev_info in prepare_bases()
 - t: move LSan errors from stdout to stderr

 A memory leak in the '--base' handling of 'git format-patch' has been
 plugged, and the leak-reporting of the test suite when running under a
 TAP harness has been improved.

 Will merge to 'next'?
 cf. [ref]
 source: [ref]


* ps/setup-split-discovery-and-setup (2026-06-30) 16 commits
 - setup: mark `set_git_work_tree()` as file-local
 - setup: pass worktree to `init_db()`
 - setup: drop redundant configuration of `startup_info->have_repository`
 - setup: make repository discovery self-contained
 - setup: propagate prefix via repository discovery
 - setup: drop static `cwd` variable
 - setup: move prefix into repository
 - setup: embed repository format in discovery
 - setup: introduce explicit repository discovery
 - setup: split up concerns of `setup_git_env_internal()`
 - setup: unify setup of shallow file
 - setup: mark bogus worktree in `apply_repository_format()`
 - setup: rename `check_repository_format_gently()`
 - Merge branch 'jk/repo-info-path-keys' into ps/setup-split-discovery-and-setup
 - Merge branch 'ps/setup-drop-global-state' into ps/setup-split-discovery-and-setup
 - Merge branch 'ps/refs-onbranch-fixes' into ps/setup-split-discovery-and-setup
 (this branch uses jk/repo-info-path-keys, ps/refs-onbranch-fixes and ps/setup-drop-global-state.)

 The repository discovery and repository configuration phases, which
 were previously intertwined in 'setup.c', have been split. Repository
 discovery now populates a 'struct repo_discovery' without modifying
 the repository state, and repository configuration takes this
 structure to initialize the repository, paving the way for clean
 unification of repository configuration.

 Needs review.
 source: [ref]


* pw/rebase-drop-notes-with-commit (2026-06-30) 15 commits
 - amend! sequencer: simplify pick_one_commit()
 - amend! sequencer: remove unnecessary "or" in pick_one_commit()
 - fixup! sequencer: never reschedule on failed commit
 - fixup! sequencer: be more careful with external merge
 - sequencer: do not record dropped commits as rewritten
 - sequencer: use an enum to represent result of picking a commit
 - sequencer: return early from pick_one_commit() on success
 - sequencer: simplify pick_one_commit()
 - sequencer: remove unnecessary condition in pick_one_commit()
 - sequencer: simplify handing of fixup with conflicts
 - sequencer: remove unnecessary "or" in pick_one_commit()
 - sequencer: never reschedule on failed commit
 - sequencer: be more careful with external merge
 - sequencer: move definition of is_final_fixup()
 - t3400: restore coverage for note copying with apply backend

 The rebase post-rewrite notes-copying logic has been corrected. When a
 commit is dropped during rebase (e.g., because its changes are already
 upstream), we no longer record it as rewritten, preventing its notes
 from being copied to an unrelated commit.

 Expecting a reroll.
 cf. [ref]
 source: [ref]


* jk/bloom-leak-fixes (2026-06-30) 3 commits
 - line-log: drop extra copy of range with bloom filters
 - revision: avoid leaking bloom keyvecs with multiple traversals
 - bloom: make bloom-filter slab initialization idempotent

 Plug various memory leaks in the Bloom-filter code paths that are
 exposed when running tests with the
 `GIT_TEST_COMMIT_GRAPH_CHANGED_PATHS=1` environment variable.

 Will merge to 'next'?
 cf. <xmqqo6gqobrt.fsf@gitster.g>
 source: [ref]


* js/ci-dockerized-pid-limit (2026-07-01) 1 commit
 - ci(dockerized): reduce the PID limit for private repositories

 Dockerized CI jobs running in private GitHub repositories have been
 adjusted to use explicit process and file limits, preventing resource
 exhaustion errors on private runners.

 Waiting for response(s) to review comment(s).
 cf. <xmqq5x2yps4c.fsf@gitster.g>
 source: [ref]


* js/coverity-fixes (2026-07-01) 13 commits
 - mingw: make exit_process() own the process handle on all paths
 - fsmonitor: plug token-data leak on early daemon-startup failures
 - reftable/table: release filter on error path
 - imap-send: avoid leaking the IMAP upload buffer
 - worktree: fix resource leaks when branch creation fails
 - submodule: fix cwd leak in get_superproject_working_tree()
 - dir: free allocations on parse-error paths in read_one_dir()
 - line-log: avoid redundant copy that leaks in process_ranges
 - run_diff_files: avoid memory leak
 - run-command: avoid close(-1) in start_command() error paths
 - download_https_uri_to_file(): do not leak fd upon failure
 - loose: avoid closing invalid fd on error path
 - load_one_loose_object_map(): fix resource leak

 A collection of fixes for various resource leaks, invalid file
 descriptor closures, and process handle ownership issues flagged by
 Coverity.

 Waiting for response(s) to review comment(s).
 cf. [ref]
 source: [ref]

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

* ap/http-redirect-wwwauth-fix (2026-06-02) 1 commit
 - http: preserve wwwauth_headers across redirects

 When cURL follows a redirect, the WWW-Authenticate headers from the
 redirect target were lost because credential_from_url() cleared the
 credential state. This has been fixed by preserving the collected
 headers across the redirect update.

 Expecting a reroll for too long, stalled.
 cf. [ref]
 source: [ref]


* jt/config-lock-timeout (2026-05-17) 1 commit
 - config: retry acquiring config.lock, configurable via core.configLockTimeout

 Configuration file locking now retries for a short period, avoiding
 failures when multiple processes attempt to update the configuration
 simultaneously.

 Waiting for response(s) to review comment(s) for too long, stalled.
 cf. [ref]
 source: [ref]


* js/parseopt-subcommand-autocorrection (2026-04-27) 11 commits
 - SQUASH???
 - doc: document autocorrect API
 - parseopt: add tests for subcommand autocorrection
 - parseopt: enable subcommand autocorrection for git-remote and git-notes
 - parseopt: autocorrect mistyped subcommands
 - autocorrect: provide config resolution API
 - autocorrect: rename AUTOCORRECT_SHOW to AUTOCORRECT_HINT
 - autocorrect: use mode and delay instead of magic numbers
 - help: move tty check for autocorrection to autocorrect.c
 - help: make autocorrect handling reusable
 - parseopt: extract subcommand handling from parse_options_step()

 The parse-options library learned to auto-correct misspelled
 subcommand names.

 Waiting for response(s) to review comment(s) for too long, stalled.
 cf. <xmqq33yzd9yf.fsf@gitster.g>
 cf. [ref]
 source: [ref]


* cl/conditional-config-on-worktree-path (2026-05-24) 2 commits
 - config: add "worktree" and "worktree/i" includeIf conditions
 - config: refactor include_by_gitdir() into include_by_path()

 The [includeIf "condition"] conditional inclusion facility for
 configuration files has learned to use the location of worktree
 in its condition.

 Waiting for response(s) to review comment(s) for too long, stalled.
 cf. <xmqq8q97et9b.fsf@gitster.g>
 source: [ref]

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

* tb/repack-geometric-cruft (2026-06-28) 11 commits
 - SQUASH??? bare grep !???
 - repack: support combining '--geometric' with '--cruft'
 - pack-objects: support '--refs-snapshot' with 'follow-reachable'
 - pack-objects: introduce '--stdin-packs=follow-reachable'
 - pack-objects: extract `stdin_packs_add_all_pack_entries()`
 - repack-geometry: drop unused redundant-pack removal
 - repack: delete geometric packs via existing_packs
 - repack: teach MIDX retention about geometric rollups
 - repack: mark geometric progression of packs as retained
 - repack: extract `locate_existing_pack()` helper
 - repack: unconditionally exclude non-kept packs

 Teach `git repack` to accept `--geometric` and `--cruft`
 together. When both are given, the geometric repack rolls up non-cruft
 packs as usual, while a separate cruft pack is written to collect
 unreachable objects.

 Expecting a reroll.
 cf. [ref]
 source: [ref]


* jk/reftable-leakfix (2026-06-28) 1 commit
 - reftable: fix unlikely leak on API error

 Leakfix.

 Will merge to 'next'.
 cf. [ref]
 source: [ref]


* sg/t3420-do-not-grep-in-missing-file (2021-10-10) 1 commit
  (merged to 'next' on 2026-06-29 at 2bf33c6a40)
 + t3420-rebase-autostash: don't try to grep non-existing files

 Test fix.

 Will merge to 'master'.
 source: [ref]


* ad/gpg-strip-cr-before-lf (2026-06-24) 1 commit
 - gpg-interface: fix strip_cr_before_lf to only remove CR before LF

 The GPG and SSH signature parsing code has been corrected to strip
 carriage return characters only when they immediately precede line
 feeds, instead of unconditionally stripping all carriage returns.

 Will merge to 'next'.
 source: [ref]


* jt/receive-pack-use-odb-transactions (2026-06-23) 6 commits
 - builtin/receive-pack: stage incoming objects via ODB transactions
 - odb/transaction: add transaction env interface
 - odb/transaction: propagate commit errors
 - odb/transaction: propagate begin errors
 - object-file: propagate files transaction errors
 - object-file: rename files transaction prepare function

 git-receive-pack has been refactored to use ODB transaction
 interfaces instead of directly managing tmp_objdir for staging
 incoming objects, bringing it closer to being ODB backend agnostic.

 Expecting a reroll.
 cf. [ref]
 cf. <akK05yZ6843K8Vdd@denethor>
 cf. <akLLB_J-pvJ7iR7c@denethor>
 source: [ref]


* ps/odb-drop-whence (2026-06-24) 7 commits
 - odb: document object info fields
 - odb: drop `whence` field from object info
 - treewide: convert users of `whence` to the new source field
 - odb: add `source` field to struct object_info_source
 - odb: make backend-specific fields optional
 - packfile: thread odb_source_packed through packed_object_info()
 - Merge branch 'ps/odb-source-packed' into ps/odb-drop-whence
 (this branch uses ps/odb-source-packed.)

 The whence field in struct object_info has been removed,
 refactoring backend-specific object information retrieval into an
 opt-in struct object_info_source structure.

 Will merge to 'next'?
 cf. [ref]
 cf. <xmqqv7b0rmt6.fsf@gitster.g>
 source: [ref]


* ps/reftable-hardening (2026-06-29) 12 commits
 - reftable/table: fix OOB read on truncated table
 - reftable/table: fix NULL pointer access when seeking to bogus offsets
 - reftable/block: fix OOB read with bogus restart offset
 - reftable/block: fix use of uninitialized memory when binsearch fails
 - reftable/block: fix OOB read with bogus restart count
 - reftable/block: fix OOB read with bogus block size
 - reftable/block: fix OOB write with bogus inflated log size
 - t/unit-tests: introduce test helper to write reftable blocks
 - reftable/record: don't abort when decoding invalid ref value type
 - reftable/basics: fix OOB read on binary search of empty range
 - oss-fuzz: add fuzzer for parsing reftables
 - meson: support building fuzzers with libFuzzer

 The reftable code has been hardened against corrupted tables by
 fixing out-of-bounds writes, out-of-bounds reads, and abort calls
 during parsing.

 Needs review.
 source: [ref]


* hn/branch-push-slip-advice (2026-06-27) 2 commits
 - push: suggest <remote> <branch> for a slash slip
 - branch: suggest <remote>/<branch> on upstream slip

 "git push origin/main" and "git branch origin main" could both be
 an obvious typo, in which case offer the obvious typofix.

 Will merge to 'next'.
 cf. <xmqqfr272lq7.fsf@gitster.g>
 source: [ref]


* jc/history-message-prep-fix (2026-06-29) 1 commit
 - history: streamline message preparation and plug file stream leak

 Code clean-up with leakfix for a write file stream.

 Will merge to 'next'?
 cf. [ref]
 source: <xmqqmrwdxrat.fsf@gitster.g>


* ty/migrate-excludes-file (2026-06-30) 1 commit
 - environment: move excludes_file into repo_config_values

 Move excludes_file global variable into per-repository structure.

 Needs review.
 source: [ref]


* kk/merge-base-exhaustion (2026-07-01) 10 commits
 . commit-reach: remove commit-date ordering fallback
 . commit-reach: move min_generation check into paint_queue_get()
 . commit-reach: terminate merge-base walk when one paint side is exhausted
 . commit-reach: introduce struct paint_state with per-side counters
 . t6600: add clock-skew topologies and step counts for edge cases
 . commit-reach: add trace2 instrumentation to paint_down_to_common()
 . t6099, t6600: add side-exhaustion regression tests
 . t6600: add test cases for side-exhaustion edge cases
 . test-lib-functions: improve diagnostic output for trace2 data assertions
 . Documentation/technical: add paint-down-to-common doc

 The merge-base computation has been optimized by stopping the walk
 early when one side's exclusive commits in the queue are exhausted,
 yielding significant speedups for queries with one-sided histories.

 Needs review.
 passes t6600 standalone, breaks when merged to 'seen'.
 source: [ref]


* dk/meson-enable-use-nsec-build (2026-06-20) 1 commit
 - meson: wire up USE_NSEC build knob

 The USE_NSEC build knob, which enables support for sub-second file
 timestamp resolution, has been wired up to the Meson build system.

 Waiting for response(s) to review comment(s).
 cf. [ref]
 cf. [ref]
 source: [ref]


* ps/connected-generic-promisor-checks (2026-06-25) 5 commits
  (merged to 'next' on 2026-06-29 at 10eef65b98)
 + connected: search promisor objects generically
 + connected: split out promisor-based connectivity check
 + odb/source-packed: support flags when iterating an object prefix
 + odb/source-packed: extract logic to skip certain packs
 + Merge branch 'ps/odb-source-packed' into ps/connected-generic-promisor-checks
 (this branch uses ps/odb-source-packed.)

 The connectivity check has been refactored to search for promisor
 objects in a generic way using the object database interface,
 rather than iterating packfiles directly. This allows connectivity
 checks to work properly in repositories that do not use packfiles.

 Will merge to 'master'.
 cf. [ref]
 source: [ref]


* ps/libgit-in-subdir (2026-06-30) 3 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
 (this branch uses ps/odb-source-packed.)

 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.

 Waiting for response(s) to review comment(s).
 cf. [ref]
 source: [ref]


* ps/odb-generalize-prepare (2026-06-22) 3 commits
 - odb: introduce `odb_prepare()`
 - odb/source: generalize `reprepare()` callback
 - Merge branch 'ps/odb-source-packed' into ps/odb-generalize-prepare
 (this branch uses ps/odb-source-packed.)

 The `reprepare()` callback for object database sources has been
 generalized into a `prepare()` callback with an optional flush cache
 flag, and a new `odb_prepare()` wrapper has been introduced to
 allow pre-opening object database sources.

 Will merge to 'next'?
 cf. [ref]
 source: [ref]


* jc/submittingpatches-design-critiques (2026-06-20) 1 commit
  (merged to 'next' on 2026-06-22 at 7495b5f9d6)
 + SubmittingPatches: address design critiques

 The documentation in SubmittingPatches has been updated to clarify how
 patch contributors should respond to design and viability critiques,
 and how the resolution of such critiques should be recorded in the
 final commit messages.

 Will merge to 'master'.
 cf. [ref]
 source: <xmqqeci0g4mz.fsf@gitster.g>


* wy/doc-clarify-review-replies (2026-06-21) 2 commits
  (merged to 'next' on 2026-06-29 at 21ae0599dc)
 + doc: advise batching patch rerolls
 + doc: encourage review replies before rerolling

 Documentation on community contribution guidelines has been updated to
 encourage replying to review comments before rerolling, and to advise
 a default limit of at most one reroll per day to give reviewers across
 different time zones enough time to participate.

 Will merge to 'master'.
 cf. [ref]
 source: [ref]


* ty/migrate-ignorecase (2026-06-19) 2 commits
 - config: use repo_ignore_case() to access core.ignorecase
 - environment: move ignore_case into repo_config_values

 The global configuration variable ignore_case (representing the
 core.ignorecase configuration) has been migrated into struct
 repo_config_values to tie it to a specific repository instance.

 Waiting for comments from Johannes.
 cf. <xmqqzf0mzc7j.fsf@gitster.g>
 source: [ref]


* mm/line-log-limited-ops (2026-06-27) 7 commits
 - diffcore-pickaxe: scope -G to the -L tracked range
 - diff: support --check with -L line ranges
 - line-log: support diff 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 and group the line-range filter for clarity

 "git log -L<range>:<path>" learned to limit various "diff" operations
 like --stat, --check, -G, to the specified range:path.

 Needs review.
 source: [ref]


* hn/history-squash (2026-06-28) 4 commits
 - history: re-edit a squash with every message
 - history: add squash subcommand to fold a range
 - 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,
 replaying any descendants on top.

 Waiting for response(s) to review comment(s).
 cf. <xmqqse65zyhw.fsf@gitster.g>
 cf. [ref]
 cf. [ref]
 source: [ref]


* mh/fetch-follow-remote-head-config (2026-06-19) 8 commits
  (merged to 'next' on 2026-06-22 at 423079e1c8)
 + fetch: fixup a misaligned comment
 + fetch: add configuration variable fetch.followRemoteHEAD
 + fetch: refactor do_fetch handling of followRemoteHEAD
 + fetch: return 0 on known git_fetch_config
 + fetch: rename function report_set_head
 + t5510: cleanup remote in followRemoteHEAD dangling ref test
 + doc: explain fetchRemoteHEADWarn advice
 + fetch: fixup set_head advice for warn-if-not-branch

 The `fetch.followRemoteHEAD` configuration variable has been added to
 provide a default for the per-remote `remote.<name>.followRemoteHEAD`
 setting.

 Will merge to 'master'.
 cf. <xmqqcxxp1j2t.fsf@gitster.g>
 source: [ref]


* ps/refs-writing-subcommands (2026-06-30) 5 commits
 - builtin/refs: add "rename" subcommand
 - builtin/refs: add "create" subcommand
 - builtin/refs: add "update" subcommand
 - builtin/refs: add "delete" subcommand
 - builtin/refs: drop `the_repository`

 The "git refs" toolbox has been extended with new "create", "delete",
 "update", and "rename" subcommands to create, delete, update, and
 rename references, respectively.

 Will merge to 'next'?
 cf. <xmqqcxx7susi.fsf@gitster.g>
 source: [ref]


* po/hash-object-size-t (2026-06-16) 6 commits
  (merged to 'next' on 2026-06-21 at b780a276b9)
 + hash-object: add a >4GB/LLP64 test case using filtered input
 + hash-object: add another >4GB/LLP64 test case
 + hash-object --stdin: verify that it works with >4GB/LLP64
 + hash algorithms: use size_t for section lengths
 + object-file.c: use size_t for header lengths
 + hash-object: demonstrate a >4GB/LLP64 problem

 Support for hashing loose or packed objects larger than 4GB on Windows
 and other LLP64 platforms has been improved by converting object header
 buffers and data-handling functions from 'unsigned long' to 'size_t'.

 Will merge to 'master'.
 cf. [ref]
 source: [ref]


* kh/submittingpatches-trailers (2026-06-18) 5 commits
  (merged to 'next' on 2026-06-22 at 2cd4a152c9)
 + SubmittingPatches: note that trailer order matters
 + SubmittingPatches: be consistent with trailer markup
 + SubmittingPatches: document Based-on-patch-by trailer
 + SubmittingPatches: discourage common Linux trailers
 + SubmittingPatches: encourage trailer use for substantial help

 The trailer sections in SubmittingPatches have been updated to
 encourage use of standard trailers.

 Will merge to 'master'.
 cf. <xmqq4ij0vo8f.fsf@gitster.g>
 source: [ref]


* mv/log-follow-mergy (2026-06-21) 1 commit
  (merged to 'next' on 2026-06-22 at f7e984a003)
 + log: improve --follow following renames for non-linear history

 "git log --follow" has been updated to handle non-linear history, in
 which the path being tracked gets renamed differently in multiple
 history lines, better.

 Will merge to 'master'.
 source: [ref]


* wy/doc-myfirstcontribution-trim-quotes (2026-06-11) 1 commit
 - MyFirstContribution: mention trimming quoted text in replies

 The contributor guide has been updated to advise new contributors to
 trim irrelevant quoted text when replying to review comments, matching
 the existing advice given to reviewers.

 Comments?
 cf. <xmqqcxxwljue.fsf@gitster.g>
 source: [ref]


* 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, and the pack
 exclusion logic incorrectly skipped packs from layers above the
 selected base, breaking reachability closure for bitmaps.

 Needs review.
 source: [ref]


* mm/test-grep-lint (2026-06-12) 6 commits
 - t: add greplint to detect bare grep assertions
 - t: convert grep assertions to test_grep
 - t: fix Lexer line count for $() inside double-quoted strings
 - t: extract chainlint's parser into shared module
 - t: fix grep assertions missing file arguments
 - t/README: document test_grep helper

 Waiting for response(s) to review comment(s).
 cf. [ref]
 cf. <xmqqqzlpt543.fsf@gitster.g>
 source: [ref]


* rs/cat-file-default-format-optim (2026-06-14) 1 commit
  (merged to 'next' on 2026-06-17 at 43ed8b3969)
 + cat-file: speed up default format

 Will merge to 'master'.
 cf. [ref]
 source: [ref]


* kk/prio-queue-get-put-fusion (2026-06-08) 2 commits
 - prio-queue: fold lazy_queue into prio_queue for automatic get+put fusion
 - prio-queue: rename .nr to .nr_ and add accessor helpers

 The lazy priority queue optimization pattern (deferring actual removal
 in prio_queue_get() to allow get+put fusion) has been folded directly
 into prio_queue itself, speeding up commit traversal workflows and
 simplifying callers.

 Will merge to 'next'?
 cf. <xmqqh5mjrbgq.fsf@gitster.g>
 source: [ref]


* td/ref-filter-memoize-contains (2026-06-12) 3 commits
 - commit-reach: die on contains walk errors
 - ref-filter: memoize --contains with generations
 - commit-reach: reject cycles in contains walk

 'git branch --contains' and 'git for-each-ref --contains' have
 been optimized to use the memoized commit traversal previously
 used only by 'git tag --contains', significantly speeding up
 connectivity checks across many candidate refs with shared
 history.

 Comments?
 cf. <xmqqqzlpulkp.fsf@gitster.g>
 source: [ref]


* tc/replay-linearize (2026-06-25) 3 commits
 - replay: offer an option to linearize the commit topology
 - replay: better explain how pick_regular_commit() picks a base
 - replay: add helper to put entry into mapped_commits

 git replay learns --linearize option to drop merge commits and
 linearize the replayed history, mimicking git rebase
 --no-rebase-merges.

 Waiting for response(s) to review comment(s).
 cf. <xmqq5x358byf.fsf@gitster.g>
 cf. [ref]
 cf. [ref]
 cf. [ref]
 source: [ref]


* ps/setup-drop-global-state (2026-06-10) 8 commits
  (merged to 'next' on 2026-06-15 at d9a8b88d47)
 + treewide: drop USE_THE_REPOSITORY_VARIABLE
 + environment: stop using `the_repository` in `is_bare_repository()`
 + environment: split up concerns of `is_bare_repository_cfg`
 + builtin/init: stop modifying `is_bare_repository_cfg`
 + setup: remove global `git_work_tree_cfg` variable
 + builtin/init: simplify logic to configure worktree
 + builtin/init: stop modifying global `git_work_tree_cfg` variable
 + Merge branch 'ps/setup-centralize-odb-creation' into ps/setup-drop-global-state
 (this branch is used by ps/setup-split-discovery-and-setup.)

 Continuation of "setup.c" refactoring to drop remaining global state
 (`git_work_tree_cfg`, `is_bare_repository_cfg`). The most notable
 outcome is that `is_bare_repository()` has been updated to no longer
 implicitly rely on `the_repository`.

 Will merge to 'master'.
 cf. <airVOrTboNDDGBak@denethor>
 cf. [ref]
 source: [ref]


* ps/refs-onbranch-fixes (2026-06-25) 12 commits
  (merged to 'next' on 2026-06-29 at 7b4929e311)
 + refs: protect against chicken-and-egg recursion
 + refs/reftable: lazy-load configuration to fix chicken-and-egg
 + reftable: split up write options
 + refs/files: lazy-load configuration to fix chicken-and-egg
 + refs: move parsing of "core.logAllRefUpdates" back into ref stores
 + repository: free main reference database
 + chdir-notify: drop unused `chdir_notify_reparent()`
 + refs: unregister reference stores from "chdir_notify"
 + setup: don't apply "GIT_REFERENCE_BACKEND" without a repository
 + setup: stop applying repository format twice
 + setup: inline `check_and_apply_repository_format()`
 + Merge branch 'ps/setup-centralize-odb-creation' into ps/refs-onbranch-fixes
 (this branch is used by ps/setup-split-discovery-and-setup.)

 Reference backend configuration is now loaded lazily to avoid
 recursive calls during repository initialization when "onbranch"
 configuration conditions are evaluated. This also fixes a memory
 leak and allows dropping the unused `chdir_notify_reparent()`
 machinery.

 Will merge to 'master'.
 cf. <xmqqse6ae45i.fsf@gitster.g>
 source: [ref]


* ps/odb-source-packed (2026-06-16) 18 commits
  (merged to 'next' on 2026-06-19 at dcf0c084e4)
 + odb/source-packed: drop pointer to "files" parent source
 + midx: refactor interfaces to work on "packed" source
 + odb/source-packed: stub out remaining functions
 + odb/source-packed: wire up `freshen_object()` callback
 + odb/source-packed: wire up `find_abbrev_len()` callback
 + odb/source-packed: wire up `count_objects()` callback
 + odb/source-packed: wire up `for_each_object()` callback
 + odb/source-packed: wire up `read_object_stream()` callback
 + odb/source-packed: wire up `read_object_info()` callback
 + packfile: use higher-level interface to implement `has_object_pack()`
 + odb/source-packed: wire up `reprepare()` callback
 + odb/source-packed: wire up `close()` callback
 + odb/source-packed: start converting to a proper `struct odb_source`
 + odb/source-packed: store pointer to "files" instead of generic source
 + packfile: move packed source into "odb/" subsystem
 + packfile: split out packfile list logic
 + packfile: rename `struct packfile_store` to `odb_source_packed`
 + Merge branch 'ps/odb-source-loose' into ps/odb-source-packed
 (this branch is used by ps/connected-generic-promisor-checks, ps/libgit-in-subdir, ps/odb-drop-whence and ps/odb-generalize-prepare.)

 The packed object source has been refactored into a proper struct
 odb_source.

 Will merge to 'master'.
 cf. <ajK2QKdW-TdflfR0@denethor>
 source: [ref]


* td/ref-filter-restore-prefix-iteration (2026-06-12) 1 commit
  (merged to 'next' on 2026-06-19 at a19dbb4193)
 + ref-filter: restore prefix-scoped iteration

 Commands that list branches and tags (like git branch and git tag)
 have been optimized to pass the namespace prefix when initializing
 their ref iterator, avoiding a loose-ref scaling regression in
 repositories with many unrelated loose references.

 Will merge to 'master'.
 cf. <xmqqik7fsv2m.fsf@gitster.g>
 source: [ref]


* ty/move-protect-hfs-ntfs (2026-06-20) 2 commits
  (merged to 'next' on 2026-06-20 at d8ca0d5180)
 + environment: use 'repo->initialized' for repo_protect_hfs() and repo_protect_ntfs()
  (merged to 'next' on 2026-06-15 at c2a30ca954)
 + environment: move 'protect_hfs' and 'protect_ntfs' into 'repo_config_values'

 The global configuration variables protect_hfs and protect_ntfs have
 been migrated into struct repo_config_values to tie them to
 per-repository configuration state.

 Will merge to 'master'.
 cf. [ref]
 cf. <xmqqse6uwdnz.fsf@gitster.g>
 source: [ref]
 source: [ref]


* ps/cat-file-remote-object-info (2026-07-01) 13 commits
 - cat-file: make remote-object-info allow-list dynamic
 - cat-file: validate remote atoms with an allow-list
 - cat-file: add remote-object-info to batch-command
 - transport: add client support for object-info
 - serve: advertise object-info feature
 - fetch-pack: move fetch initialization
 - connect: make `write_fetch_command_and_capabilities()` more generic
 - fetch-pack: move `write_fetch_command_and_capabilities()` to connect.c
 - fetch-pack: drop static `advertise_sid` variable
 - t1006: split test utility functions into new 'lib-cat-file.sh'
 - cat-file: declare loop counter inside for()
 - git-compat-util: add `strtoumax_szt()` with error handling
 - transport-helper: fix memory leak of helper on disconnect

 The `remote-object-info` command has been added to `git cat-file
 --batch-command`, allowing clients to request object metadata
 (currently size) from a remote server via protocol v2 without
 downloading the entire object.

 The client dynamically filters format placeholders based on
 server-advertised capabilities and safely returns empty strings for
 inapplicable or unsupported fields.

 Waiting for response(s) to review comment(s).
 cf. <xmqq7bneo9mh.fsf@gitster.g>
 source: [ref]


* ps/doc-recommend-b4 (2026-06-15) 3 commits
  (merged to 'next' on 2026-06-17 at dd9a463369)
 + b4: introduce configuration for the Git project
 + MyFirstContribution: recommend the use of b4
 + MyFirstContribution: recommend shallow threading of cover letters

 Project-specific configuration for b4 has been introduced, and the
 documentation has been updated to recommend using it as a
 streamlined method for submitting patches.

 Will merge to 'master'.
 cf. [ref]
 source: [ref]


* sn/rebase-update-refs-symrefs (2026-06-03) 1 commit
 - rebase: skip branch symref aliases

 "git rebase --update-refs" has been taught to resolve local branch
 symrefs to their referents before queuing updates. This correctly
 skips aliases of the current branch and avoids duplicate updates for
 underlying real branches, fixing failures when branch aliases (like a
 default branch rename) are present.

 Waiting for response(s) to review comment(s).
 cf. [ref]
 source: [ref]


* mm/diff-process-hunks (2026-06-14) 6 commits
 - blame: consult diff process for no-hunk detection
 - diff: bypass diff process with --no-ext-diff and in format-patch
 - diff: add long-running diff process via diff.<driver>.process
 - sub-process: separate process lifecycle from hashmap management
 - userdiff: add diff.<driver>.process config
 - xdiff: support external hunks via xpparam_t

 A new `diff.<driver>.process` configuration has been introduced to
 allow a long-running external process to act as a hunk provider to
 allows 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. [ref]
 source: [ref]


* tb/pack-path-walk-bitmap-delta-islands (2026-06-21) 5 commits
  (merged to 'next' on 2026-06-22 at 59cf1663e7)
 + pack-objects: support `--delta-islands` with `--path-walk`
 + pack-objects: extract `record_tree_depth()` helper
 + pack-objects: support reachability bitmaps with `--path-walk`
 + t/perf: drop p5311's lookup-table permutation
 + Merge branch 'ds/path-walk-filters' into tb/pack-path-walk-bitmap-delta-islands

 The pack-objects command now supports using reachability bitmaps and
 delta-islands concurrently with the `--path-walk` option, allowing
 faster packaging by falling back to path-walk when bitmaps cannot
 fully satisfy the request.

 Will merge to 'master'.
 cf. <xmqqwlvq1qyy.fsf@gitster.g>
 source: [ref]


* ty/migrate-trust-executable-bit (2026-06-19) 3 commits
 - environment: move trust_executable_bit into repo_config_values
 - read-cache: move 'ce_mode_from_stat()' to 'read-cache.c'
 - read-cache: remove redundant extern declarations

 The 'trust_executable_bit' (coming from 'core.filemode'
 configuration) has been migrated into 'repo_config_values' to tie it
 to a specific repository instance.

 Comments?
 cf. <xmqqcxx9ukvw.fsf@gitster.g>
 source: [ref]


* kk/prio-queue-cascade-sift (2026-06-01) 1 commit
 - prio-queue: use cascade-down for faster extract-min

 prio_queue_get() has been optimized by using a cascade-down approach
 (promoting the smaller child at each level and sifting up the last
 element from the leaf vacancy), which halves the number of comparisons
 per extract-min operation in the common case.

 On hold, waiting for kk/prio-queue-get-put-fusion to land first.
 cf. [ref]
 source: [ref]


* jk/repo-info-path-keys (2026-06-23) 3 commits
  (merged to 'next' on 2026-06-29 at fbf9652169)
 + repo: add path.gitdir with absolute and relative suffix formatting
 + repo: add path.commondir with absolute and relative suffix formatting
 + path: extract format_path() and use in rev-parse
 (this branch is used by ps/setup-split-discovery-and-setup.)

 The "git repo info" command has been taught new keys to output both
 absolute and relative paths for "gitdir" and "commondir", supported by
 a new path-formatting helper extracted from "git rev-parse".

 Will merge to 'master'.
 cf. <xmqqy0g3iz38.fsf@gitster.g>
 source: [ref]


* ps/history-drop (2026-07-01) 11 commits
 - builtin/history: implement "drop" subcommand
 - builtin/history: split handling of ref updates into two phases
 - replay: expose `replay_result_queue_update()`
 - reset: stop assuming that the caller passes in a clean index
 - reset: allow the caller to specify the current HEAD object
 - reset: introduce ability to skip updating HEAD
 - reset: introduce dry-run mode
 - reset: modernize flags passed to `reset_working_tree()`
 - reset: rename `reset_head()`
 - reset: drop `USE_THE_REPOSITORY_VARIABLE`
 - read-cache: split out function to drop unmerged entries to stage 0

 The experimental "git history" command has been taught a new "drop"
 subcommand to remove a commit and replay its descendants onto its
 parent.

 Needs review.
 source: [ref]


* jk/setup-gitfile-diag-fix (2026-06-16) 1 commit
  (merged to 'next' on 2026-06-18 at b63b3d1f25)
 + read_gitfile(): simplify NOT_A_REPO error message

 A regression in the error diagnosis code for invalid .git files has
 been fixed, avoiding a potential NULL-pointer crash when reporting
 that a .git file does not point to a valid repository.

 Will merge to 'master'.
 cf. <xmqqjyry4hax.fsf@gitster.g>
 source: [ref]


* kh/doc-trailers (2026-06-10) 10 commits
 - doc: interpret-trailers: document comment line treatment
 - doc: interpret-trailers: commit to “trailer block” term
 - doc: interpret-trailers: join new-trailers again
 - doc: interpret-trailers: add key format example
 - doc: interpret-trailers: explain key format
 - doc: interpret-trailers: explain the format after the intro
 - doc: interpret-trailers: not just for commit messages
 - doc: interpret-trailers: use “metadata” in Name as well
 - doc: interpret-trailers: replace “lines” with “metadata”
 - doc: interpret-trailers: stop fixating on RFC 822

 Documentation updates.

 Expecting a reroll.
 cf. [ref]
 source: [ref]


* za/completion-hide-dotfiles (2026-06-20) 2 commits
 - completion: hide dotfiles by default for path completion
 - completion: hide dotfiles for selected path completion

 The path completion for commands like `git rm` and `git mv`, is being
 updated to hide dotfiles by default, unless the user explicitly starts
 the path with a dot, matching standard shell-completion behavior.

 Waiting for response(s) to review comment(s).
 cf. <xmqqik71t3nr.fsf@gitster.g>
 source: [ref]


* 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

 The -m/-F/-c/-C options to supply commit log message from outside the
 editor are now supported for all "git commit --fixup" variations.

 Needs review.
 source: [ref]


* kh/doc-replay-config (2026-06-05) 4 commits
 - doc: replay: move “default” to the right-hand side
 - doc: replay: use a nested description list
 - doc: replay: improve config description
 - doc: link to config for git-replay(1)

 Doc update for "git replay" to actually refer to its configuration
 variables.

 Needs review.
 source: [ref]


* hn/status-pull-advice-qualified (2026-05-21) 1 commit
  (merged to 'next' on 2026-06-15 at 898a4df940)
 + remote: qualify "git pull" advice for non-upstream compareBranches

 Advice shown by "git status" when the local branch is behind or has
 diverged from its push branch has been updated to suggest "git pull
 <remote> <branch>".

 Will merge to 'master'.
 cf. <xmqq7bo6xuok.fsf@gitster.g>
 source: [ref]


* hn/branch-delete-merged (2026-06-24) 7 commits
 - branch: add --dry-run for --delete-merged
 - branch: add branch.<name>.deleteMerged opt-out
 - branch: add --delete-merged <branch>
 - branch: prepare delete_branches for a bulk caller
 - branch: let delete_branches skip unmerged branches on bulk refusal
 - branch: convert delete_branches() to a flags argument
 - branch: add --forked filter for --list mode

 "git branch" command learned "--delete-merged" option to remove
 local branches that have already been merged to the remote-tracking
 branches they track.

 Needs review.
 source: [ref]


* cc/promisor-auto-config-url-more (2026-05-27) 8 commits
  (merged to 'next' on 2026-06-15 at d1c99e75cc)
 + doc: promisor: improve acceptFromServer entry
 + promisor-remote: auto-configure unknown remotes
 + promisor-remote: trust known remotes matching acceptFromServerUrl
 + promisor-remote: introduce promisor.acceptFromServerUrl
 + promisor-remote: add 'local_name' to 'struct promisor_info'
 + urlmatch: add url_normalize_pattern() helper
 + urlmatch: change 'allow_globs' arg to bool
 + t5710: simplify 'mkdir X' followed by 'git -C X init'

 The handling of promisor-remote protocol capability has been
 loosened to allow the other side to add to the list of promisor
 remotes via the promisor.acceptFromServerURL configuration
 variable.

 Will merge to 'master'.
 cf. [ref]
 cf. <xmqqh5naxwfc.fsf@gitster.g>
 source: [ref]


* hn/checkout-track-fetch (2026-06-24) 2 commits
 - checkout: extend --track with a "fetch" mode to refresh start-point
 - branch: expose helpers for finding the remote owning a tracking ref

 "git checkout --track=..." learned to optionally fetch the branch
 from the remote the new branch will work with.

 Waiting for response(s) to review comment(s).
 cf. [ref]
 cf. [off-list ref]
 source: [off-list ref]


* en/ort-harden-against-corrupt-trees (2026-06-13) 5 commits
  (merged to 'next' on 2026-06-18 at e51bee59ca)
 + cache-tree: fix verify_cache() to catch non-adjacent D/F conflicts
 + merge-ort: abort merge when trees have duplicate entries
 + merge-ort: free diff pairs queue in clear_or_reinit_internal_opts()
 + merge-ort: drop unnecessary show_all_errors from collect_merge_info()
 + merge-ort: propagate callback errors from traverse_trees_wrapper()

 "ort" merge backend handles merging corrupt trees better by
 aborting when it should.

 Will merge to 'master'.
 cf. <xmqq5x3ldu4h.fsf@gitster.g>
 source: [off-list ref]


* pw/status-rebase-todo (2026-06-23) 2 commits
  (merged to 'next' on 2026-06-23 at a0fcde09dc)
 + status: improve rebase todo list parsing
 + sequencer: factor out parsing of todo commands

 The display of the rebase todo list in "git status" has been
 improved to correctly abbreviate object IDs for more commands and
 avoid misinterpreting refs as object IDs.

 Will merge to 'master'.
 source: [off-list ref]


* ps/shift-root-in-graph (2026-06-20) 3 commits
 - graph: indent visual root in graph
 - revision: add peek functions for lookahead
 - lib-log-graph: move check_graph function

 "git log --graph" has been modified to visually distinguish
 parentless "root" commits (and commits that become roots due to
 history simplification) by indenting them, preventing them from
 appearing falsely related to unrelated commits rendered immediately
 above them.

 Expecting a reroll.
 The peek-ahead approach may need to be scratched.
 cf. [off-list ref]
 cf. [off-list ref]
 cf. [off-list ref]
 source: [off-list ref]
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help