]> Kevux Git Server - rit/log
rit
4 months agorefs: replace `refs_for_each_rawref()`
Patrick Steinhardt [Mon, 23 Feb 2026 11:59:46 +0000 (12:59 +0100)]
refs: replace `refs_for_each_rawref()`

Replace calls to `refs_for_each_rawref()` with the newly introduced
`refs_for_each_ref_ext()` function.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 months agorefs: replace `refs_for_each_ref_in()`
Patrick Steinhardt [Mon, 23 Feb 2026 11:59:45 +0000 (12:59 +0100)]
refs: replace `refs_for_each_ref_in()`

Replace calls to `refs_for_each_ref_in()` with the newly introduced
`refs_for_each_ref_ext()` function.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 months agorefs: improve verification for-each-ref options
Patrick Steinhardt [Mon, 23 Feb 2026 11:59:44 +0000 (12:59 +0100)]
refs: improve verification for-each-ref options

Improve verification of the passed-in for-each-ref options:

  - Require that the `refs` store must be given. It's arguably very
    surprising that we simply return successfully in case the ref store
    is a `NULL` pointer.

  - When expected to trim ref prefixes we will `BUG()` in case the
    refname would become empty or in case we're expected to trim a
    longer prefix than the refname is long. As such, this case is only
    guaranteed to _not_ `BUG()` in case the caller also specified a
    prefix. And furthermore, that prefix must end in a trailing slash,
    as otherwise it may produce an exact match that could lead us to
    trim to the empty string.

An audit shows that there are no callsites that rely on either of these
behaviours, so this should not result in a functional change.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 months agorefs: generalize `refs_for_each_fullref_in_prefixes()`
Patrick Steinhardt [Mon, 23 Feb 2026 11:59:43 +0000 (12:59 +0100)]
refs: generalize `refs_for_each_fullref_in_prefixes()`

The function `refs_for_each_fullref_in_prefixes()` can be used to
iterate over all references part of any of the user-provided prefixes.
In contrast to the `prefix` parameter of `refs_for_each_ref_ext()` it
knows to handle the case well where multiple of the passed-in prefixes
start with a common prefix by computing longest common prefixes and then
iterating over those.

While we could move this logic into `refs_for_each_ref_ext()`, this one
feels somewhat special as we perform multiple iterations. But what we
_can_ do is to generalize how this function works: instead of accepting
only a small handful of parameters, we can have it accept the full
options structure.

One obvious exception is that the caller must not provide a prefix via
the options. But this case can be easily detected.

Refactor the code accordingly.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 months agorefs: generalize `refs_for_each_namespaced_ref()`
Patrick Steinhardt [Mon, 23 Feb 2026 11:59:42 +0000 (12:59 +0100)]
refs: generalize `refs_for_each_namespaced_ref()`

The function `refs_for_each_namespaced_ref()` iterates through all
references that are part of the current ref namespace. This namespace
can be configured by setting the `GIT_NAMESPACE` environment variable
and is then retrieved by calling `get_git_namespace()`.

If a namespace is configured, then we:

  - Obviously only yield refs that exist in this namespace.

  - Rewrite exclude patterns so that they work for the given namespace,
    if any namespace is currently configured.

Port this logic to `refs_for_each_ref_ext()` by adding a new `namespace`
field to the options structure. This gives callers more flexibility as
they can decide by themselves whether they want to use the globally
configured or an arbitrary other namespace.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 months agorefs: speed up `refs_for_each_glob_ref_in()`
Patrick Steinhardt [Mon, 23 Feb 2026 11:59:41 +0000 (12:59 +0100)]
refs: speed up `refs_for_each_glob_ref_in()`

The function `refs_for_each_glob_ref_in()` can be used to iterate
through all refs in a specific prefix with globbing. The logic to handle
this is currently hosted by `refs_for_each_glob_ref_in()`, which sets up
a callback function that knows to filter out refs that _don't_ match the
given globbing pattern.

The way we do this is somewhat inefficient though: even though the
function is expected to only yield refs in the given prefix, we still
end up iterating through _all_ references, regardless of whether or not
their name matches the given prefix.

Extend `refs_for_each_ref_ext()` so that it can handle patterns and
adapt `refs_for_each_glob_ref_in()` to use it. This means we continue to
use the same callback-based infrastructure to filter individual refs via
the globbing pattern, but we can now also use the other functionality of
the `_ext()` variant.

Most importantly, this means that we now properly handle the prefix.
This results in a performance improvement when using a prefix where a
significant majority of refs exists outside of the prefix. The following
benchmark is an extreme case, with 1 million refs that exist outside the
prefix and a single ref that exists inside it:

    Benchmark 1: git rev-parse --branches=refs/heads/* (rev = HEAD~)
      Time (mean ± σ):     115.9 ms ±   0.7 ms    [User: 113.0 ms, System: 2.4 ms]
      Range (min … max):   114.9 ms … 117.8 ms    25 runs

    Benchmark 2: git rev-parse --branches=refs/heads/* (rev = HEAD)
      Time (mean ± σ):       1.1 ms ±   0.1 ms    [User: 0.3 ms, System: 0.7 ms]
      Range (min … max):     1.0 ms …   2.3 ms    2092 runs

    Summary
      git rev-parse --branches=refs/heads/* (rev = HEAD) ran
      107.01 ± 6.49 times faster than git rev-parse --branches=refs/heads/* (rev = HEAD~)

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 months agorefs: introduce `refs_for_each_ref_ext`
Patrick Steinhardt [Mon, 23 Feb 2026 11:59:40 +0000 (12:59 +0100)]
refs: introduce `refs_for_each_ref_ext`

In the refs subsystem we have a proliferation of functions that all
iterate through references. (Almost) all of these functions internally
call `do_for_each_ref()` and provide slightly different arguments so
that one can control different aspects of its behaviour. This approach
doesn't really scale: every time there is a slightly different use case
for iterating through refs we create another new function.

This combinatorial explosion doesn't make a lot of sense: it leads to
confusing interfaces and heightens the maintenance burden.

Refactor the code to become more composable by:

  - Exposing `do_for_each_ref()` as `refs_for_each_ref_ext()`.

  - Introducing an options structure that lets the caller control
    individual options.

This gives us a much better foundation to build on going forward.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 months agorefs: rename `each_ref_fn`
Patrick Steinhardt [Mon, 23 Feb 2026 11:59:39 +0000 (12:59 +0100)]
refs: rename `each_ref_fn`

Similar to the preceding commit, rename `each_ref_fn` to better match
our current best practices around how we name things.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 months agorefs: rename `do_for_each_ref_flags`
Patrick Steinhardt [Mon, 23 Feb 2026 11:59:38 +0000 (12:59 +0100)]
refs: rename `do_for_each_ref_flags`

The enum `do_for_each_ref_flags` and its individual values don't match
to our current best practices when it comes to naming things. Rename it
to `refs_for_each_flag`.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 months agorefs: move `do_for_each_ref_flags` further up
Patrick Steinhardt [Mon, 23 Feb 2026 11:59:37 +0000 (12:59 +0100)]
refs: move `do_for_each_ref_flags` further up

Move the `do_for_each_ref_flags` enum further up. This prepares for
subsequent changes, where the flags will be used by more functions.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 months agorefs: move `refs_head_ref_namespaced()`
Patrick Steinhardt [Mon, 23 Feb 2026 11:59:36 +0000 (12:59 +0100)]
refs: move `refs_head_ref_namespaced()`

The function `refs_head_ref_namespaced()` is somewhat special when
compared to most of the other functions that take a callback function:
while `refs_for_each_*()` functions yield multiple refs,
`refs_heasd_ref_namespaced()` will only yield at most the HEAD ref of
the current namespace. As such, the function is related to
`refs_head_ref()` and not to the for-each functions.

Move the function to be located next to `refs_head_ref()` to clarify.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 months agorefs: remove unused `refs_for_each_include_root_ref()`
Patrick Steinhardt [Mon, 23 Feb 2026 11:59:35 +0000 (12:59 +0100)]
refs: remove unused `refs_for_each_include_root_ref()`

Remove the unused `refs_for_each_include_root_ref()` function.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 months agoMerge branch 'ps/for-each-ref-in-fixes' into ps/refs-for-each
Junio C Hamano [Fri, 20 Feb 2026 18:09:32 +0000 (10:09 -0800)]
Merge branch 'ps/for-each-ref-in-fixes' into ps/refs-for-each

* ps/for-each-ref-in-fixes:
  bisect: simplify string_list memory handling
  bisect: fix misuse of `refs_for_each_ref_in()`
  pack-bitmap: fix bug with exact ref match in "pack.preferBitmapTips"
  pack-bitmap: deduplicate logic to iterate over preferred bitmap tips

4 months agobisect: simplify string_list memory handling
Jeff King [Thu, 19 Feb 2026 07:57:52 +0000 (08:57 +0100)]
bisect: simplify string_list memory handling

We declare the refs_for_removal string_list as NODUP, forcing us to
manually allocate strings we insert. And then when it comes time to
clean up, we set strdup_strings so that string_list_clear() will free
them for us.

This is a confusing pattern, and can be done much more simply by just
declaring the list with the DUP initializer in the first place.

It was written this way originally because one of the callsites
generated the item using xstrfmt(). But that spot switched to a plain
xstrdup() in the preceding commit. That means we can now just let the
string_list code handle allocation itself.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 months agobisect: fix misuse of `refs_for_each_ref_in()`
Patrick Steinhardt [Thu, 19 Feb 2026 07:57:51 +0000 (08:57 +0100)]
bisect: fix misuse of `refs_for_each_ref_in()`

All callers of `refs_for_each_ref_in()` pass in a string that is
terminated with a trailing slash to indicate that they only want to see
refs in that specific ref hierarchy. This is in fact a requirement if
one wants to use this function, as the function trims the prefix from
each yielded ref. So if there was a reference that was called
"refs/bisect" as in our example, the result after trimming would be the
empty string, and that's something we disallow.

Fix this by adding the trailing slash.

Furthermore, taking a closer look, we strip the prefix only to re-add it
in `mark_for_removal()`. This is somewhat roundabout, as we can instead
call `refs_for_each_fullref_in()` to not do any stripping at all. Do so
to simplify the code a bit.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 months agopack-bitmap: fix bug with exact ref match in "pack.preferBitmapTips"
Patrick Steinhardt [Thu, 19 Feb 2026 07:57:50 +0000 (08:57 +0100)]
pack-bitmap: fix bug with exact ref match in "pack.preferBitmapTips"

The "pack.preferBitmapTips" configuration allows the user to specify
which references should be preferred when generating bitmaps. This
option is typically expected to be set to a reference prefix, like for
example "refs/heads/".

It's not unreasonable though for a user to configure one specific
reference as preferred. But if they do, they'll hit a `BUG()`:

    $ git -c pack.preferBitmapTips=refs/heads/main repack -adb
    BUG: ../refs/iterator.c:366: attempt to trim too many characters
    error: pack-objects died of signal 6

The root cause for this bug is how we enumerate these references. We
call `refs_for_each_ref_in()`, which will:

  - Yield all references that have a user-specified prefix.

  - Trim each of these references so that the prefix is removed.

Typically, this function is called with a trailing slash, like
"refs/heads/", and in that case things work alright. But if the function
is called with the name of an existing reference then we'll try to trim
the full reference name, which would leave us with an empty name. And as
this would not really leave us with anything sensible, we call `BUG()`
instead of yielding this reference.

One could argue that this is a bug in `refs_for_each_ref_in()`. But the
question then becomes what the correct behaviour would be:

  - Do we want to skip exact matches? In our case we certainly don't
    want that, as the user has asked us to generate a bitmap for it.

  - Do we want to yield the reference with the empty refname? That would
    lead to a somewhat weird result.

Neither of these feel like viable options, so calling `BUG()` feels like
a sensible way out. The root cause ultimately is that we even try to
trim the whole refname in the first place. There are two possible ways
to fix this issue:

  - We can fix the bug by using `refs_for_each_fullref_in()` instead,
    which does not strip the prefix at all. Consequently, we would now
    start to accept all references that start with the configured
    prefix, including exact matches. So if we had "refs/heads/main", we
    would both match "refs/heads/main" and "refs/heads/main-branch".

  - Or we can fix the bug by appending a slash to the prefix if it
    doesn't already have one. This would mean that we only match
    ref hierarchies that start with this prefix.

While the first fix leaves the user with strictly _more_ configuration
options, we have already fixed a similar case in 10e8a9352b (refs.c:
stop matching non-directory prefixes in exclude patterns, 2025-03-06) by
using the second option. So for the sake of consistency, let's apply the
same fix here.

Clarify the documentation accordingly.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 months agopack-bitmap: deduplicate logic to iterate over preferred bitmap tips
Patrick Steinhardt [Thu, 19 Feb 2026 07:57:49 +0000 (08:57 +0100)]
pack-bitmap: deduplicate logic to iterate over preferred bitmap tips

We have two locations that iterate over the preferred bitmap tips as
configured by the user via "pack.preferBitmapTips". Both of these
callsites are subtly wrong: when the preferred bitmap tips contain an
exact refname match, then we will hit a `BUG()`.

Prepare for the fix by unifying the two callsites into a new
`for_each_preferred_bitmap_tip()` function.

This removes the last callsite of `bitmap_preferred_tips()` outside of
"pack-bitmap.c". As such, convert the function to be local to that file
only. Note that the function is still used by a second caller, so we
cannot just inline it.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 months agoThe 5th batch
Junio C Hamano [Tue, 17 Feb 2026 21:29:49 +0000 (13:29 -0800)]
The 5th batch

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 months agoMerge branch 'jc/doc-rerere-update'
Junio C Hamano [Tue, 17 Feb 2026 21:30:43 +0000 (13:30 -0800)]
Merge branch 'jc/doc-rerere-update'

Doc update.

* jc/doc-rerere-update:
  rerere: minor documantation update

4 months agoMerge branch 'sd/t7003-test-path-is-helpers'
Junio C Hamano [Tue, 17 Feb 2026 21:30:43 +0000 (13:30 -0800)]
Merge branch 'sd/t7003-test-path-is-helpers'

Test updates.

* sd/t7003-test-path-is-helpers:
  t7003: modernize path existence checks using test helpers

4 months agoMerge branch 'kh/doc-rerere-options-xref'
Junio C Hamano [Tue, 17 Feb 2026 21:30:43 +0000 (13:30 -0800)]
Merge branch 'kh/doc-rerere-options-xref'

Doc update.

* kh/doc-rerere-options-xref:
  doc: rerere-options.adoc: link to git-rerere(1)

4 months agoMerge branch 'bk/t2003-modernise'
Junio C Hamano [Tue, 17 Feb 2026 21:30:42 +0000 (13:30 -0800)]
Merge branch 'bk/t2003-modernise'

Test update.

* bk/t2003-modernise:
  t2003: modernize path existence checks using test helpers

4 months agoMerge branch 'rs/commit-commit-stack'
Junio C Hamano [Tue, 17 Feb 2026 21:30:42 +0000 (13:30 -0800)]
Merge branch 'rs/commit-commit-stack'

Code clean-up to use the commit_stack API.

* rs/commit-commit-stack:
  commit: use commit_stack

4 months agoMerge branch 'rs/clean-includes'
Junio C Hamano [Tue, 17 Feb 2026 21:30:42 +0000 (13:30 -0800)]
Merge branch 'rs/clean-includes'

Clean up redundant includes of header files.

* rs/clean-includes:
  remove duplicate includes

4 months agoMerge branch 'rs/xdiff-wo-the-repository'
Junio C Hamano [Tue, 17 Feb 2026 21:30:42 +0000 (13:30 -0800)]
Merge branch 'rs/xdiff-wo-the-repository'

Reduce dependency on the_repository of xdiff-interface layer.

* rs/xdiff-wo-the-repository:
  xdiff-interface: stop using the_repository

4 months agoMerge branch 'rs/version-wo-the-repository'
Junio C Hamano [Tue, 17 Feb 2026 21:30:41 +0000 (13:30 -0800)]
Merge branch 'rs/version-wo-the-repository'

Code clean-up.

* rs/version-wo-the-repository:
  version: stop using the_repository

4 months agoMerge branch 'yt/merge-file-outside-a-repository'
Junio C Hamano [Tue, 17 Feb 2026 21:30:41 +0000 (13:30 -0800)]
Merge branch 'yt/merge-file-outside-a-repository'

"git merge-file" can be run outside a repository, but it ignored
all configuration, even the per-user ones.  The command now uses
available configuration files to find its customization.

* yt/merge-file-outside-a-repository:
  merge-file: honor merge.conflictStyle outside of a repository

4 months agoMerge branch 'ja/doc-synopsis-style-even-more'
Junio C Hamano [Tue, 17 Feb 2026 21:30:41 +0000 (13:30 -0800)]
Merge branch 'ja/doc-synopsis-style-even-more'

A handful of documentation pages have been modernized to use the
"synopsis" style.

* ja/doc-synopsis-style-even-more:
  doc: convert git-show to synopsis style
  doc: fix some style issues in git-clone and for-each-ref-options
  doc: finalize git-clone documentation conversion to synopsis style
  doc: convert git-submodule to synopsis style

4 months agoMerge branch 'pc/lockfile-pid'
Junio C Hamano [Tue, 17 Feb 2026 21:30:41 +0000 (13:30 -0800)]
Merge branch 'pc/lockfile-pid'

Allow recording process ID of the process that holds the lock next
to a lockfile for diagnosis.

* pc/lockfile-pid:
  lockfile: add PID file for debugging stale locks

4 months agoThe 4th batch
Junio C Hamano [Fri, 13 Feb 2026 20:57:32 +0000 (12:57 -0800)]
The 4th batch

Signed-off-by: Junio C Hamano <gitster@pobox.com>
4 months agoMerge branch 'sb/merge-ours-sparse'
Junio C Hamano [Fri, 13 Feb 2026 21:39:26 +0000 (13:39 -0800)]
Merge branch 'sb/merge-ours-sparse'

"git merge-ours" is taught to work better in a sparse checkout.

* sb/merge-ours-sparse:
  merge-ours: integrate with sparse-index
  merge-ours: drop USE_THE_REPOSITORY_VARIABLE

4 months agoMerge branch 'sd/doc-my1c-api-config-reference-fix'
Junio C Hamano [Fri, 13 Feb 2026 21:39:26 +0000 (13:39 -0800)]
Merge branch 'sd/doc-my1c-api-config-reference-fix'

Docfix.

* sd/doc-my1c-api-config-reference-fix:
  doc: fix repo_config documentation reference

4 months agoMerge branch 'jc/ci-test-contrib-too'
Junio C Hamano [Fri, 13 Feb 2026 21:39:26 +0000 (13:39 -0800)]
Merge branch 'jc/ci-test-contrib-too'

Test contrib/ things in CI to catch breakages before they enter the
"next" branch.

* jc/ci-test-contrib-too:
  : Some of our downstream folks run more tests than we do and catch
  : breakages in them, namely, where contrib/*/Makefile has "test" target.
  : Let's make sure we fail upon accepting a new topic that break them in
  : 'seen'.
  ci: ubuntu: use GNU coreutils for dirname
  test: optionally test contrib in CI

4 months agoMerge branch 'jt/odb-transaction-per-source'
Junio C Hamano [Fri, 13 Feb 2026 21:39:25 +0000 (13:39 -0800)]
Merge branch 'jt/odb-transaction-per-source'

Transaction to create objects (or not) is currently tied to the
repository, but in the future a repository can have multiple object
sources, which may have different transaction mechanisms.  Make the
odb transaction API per object source.

* jt/odb-transaction-per-source:
  odb: transparently handle common transaction behavior
  odb: prepare `struct odb_transaction` to become generic
  object-file: rename transaction functions
  odb: store ODB source in `struct odb_transaction`

4 months agoMerge branch 'ps/commit-list-functions-renamed'
Junio C Hamano [Fri, 13 Feb 2026 21:39:25 +0000 (13:39 -0800)]
Merge branch 'ps/commit-list-functions-renamed'

Rename three functions around the commit_list data structure.

* ps/commit-list-functions-renamed:
  commit: rename `free_commit_list()` to conform to coding guidelines
  commit: rename `reverse_commit_list()` to conform to coding guidelines
  commit: rename `copy_commit_list()` to conform to coding guidelines

4 months agoMerge branch 'tc/last-modified-not-a-tree'
Junio C Hamano [Fri, 13 Feb 2026 21:39:25 +0000 (13:39 -0800)]
Merge branch 'tc/last-modified-not-a-tree'

Giving "git last-modified" a tree (not a commit-ish) died an
uncontrolled death, which has been corrected.

* tc/last-modified-not-a-tree:
  last-modified: verify revision argument is a commit-ish
  last-modified: remove double error message
  last-modified: fix memory leak when more than one commit is given
  last-modified: rewrite error message when more than one commit given

4 months agoMerge branch 'mc/doc-send-email-signed-off-by-cc'
Junio C Hamano [Fri, 13 Feb 2026 21:39:25 +0000 (13:39 -0800)]
Merge branch 'mc/doc-send-email-signed-off-by-cc'

Docfix.

* mc/doc-send-email-signed-off-by-cc:
  doc: send-email: correct --no-signed-off-by-cc misspelling

4 months agoMerge branch 'cf/c23-const-preserving-strchr-updates-0'
Junio C Hamano [Fri, 13 Feb 2026 21:39:24 +0000 (13:39 -0800)]
Merge branch 'cf/c23-const-preserving-strchr-updates-0'

ISO C23 redefines strchr and friends that tradiotionally took
a const pointer and returned a non-const pointer derived from it to
preserve constness (i.e., if you ask for a substring in a const
string, you get a const pointer to the substring).  Update code
paths that used non-const pointer to receive their results that did
not have to be non-const to adjust.

* cf/c23-const-preserving-strchr-updates-0:
  gpg-interface: remove an unnecessary NULL initialization
  global: constify some pointers that are not written to

4 months agoMerge branch 'jc/diff-highlight-main-master-testfix'
Junio C Hamano [Fri, 13 Feb 2026 21:39:24 +0000 (13:39 -0800)]
Merge branch 'jc/diff-highlight-main-master-testfix'

Test fix (in contrib/)

* jc/diff-highlight-main-master-testfix:
  diff-highlight: allow testing with Git 3.0 breaking changes

4 months agoMerge branch 'cs/subtree-reftable-testfix'
Junio C Hamano [Fri, 13 Feb 2026 21:39:24 +0000 (13:39 -0800)]
Merge branch 'cs/subtree-reftable-testfix'

Test fix (in contrib/)

* cs/subtree-reftable-testfix:
  contrib/subtree: fix tests with reftable backend

4 months agoMerge branch 'tc/memzero-array'
Junio C Hamano [Fri, 13 Feb 2026 21:39:24 +0000 (13:39 -0800)]
Merge branch 'tc/memzero-array'

Coccinelle rules update.

* tc/memzero-array:
  cocci: extend MEMZERO_ARRAY() rules

5 months agoMerge branch 'master' of https://github.com/j6t/gitk
Junio C Hamano [Wed, 11 Feb 2026 22:49:53 +0000 (14:49 -0800)]
Merge branch 'master' of https://github.com/j6t/gitk

* 'master' of https://github.com/j6t/gitk:
  gitk: fix msgfmt being required
  gitk: fix highlighted remote prefix of branches with directories

5 months agoThe 3rd batch
Junio C Hamano [Wed, 11 Feb 2026 19:53:49 +0000 (11:53 -0800)]
The 3rd batch

Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 months agoMerge branch 'rs/blame-ignore-colors-fix'
Junio C Hamano [Wed, 11 Feb 2026 20:29:08 +0000 (12:29 -0800)]
Merge branch 'rs/blame-ignore-colors-fix'

"git blame --ignore-revs=... --color-lines" did not account for
ignored revisions passing blame to the same commit an adjacent line
gets blamed for.

* rs/blame-ignore-colors-fix:
  blame: fix coloring for repeated suspects

5 months agoMerge branch 'hs/t9160-test-paths'
Junio C Hamano [Wed, 11 Feb 2026 20:29:07 +0000 (12:29 -0800)]
Merge branch 'hs/t9160-test-paths'

Test update.

* hs/t9160-test-paths:
  t9160:modernize test path checking

5 months agoMerge branch 'am/doc-github-contributiong-link-to-submittingpatches'
Junio C Hamano [Wed, 11 Feb 2026 20:29:07 +0000 (12:29 -0800)]
Merge branch 'am/doc-github-contributiong-link-to-submittingpatches'

GitHub repository banner update.

* am/doc-github-contributiong-link-to-submittingpatches:
  .github/CONTRIBUTING.md: link to SubmittingPatches on git-scm.com

5 months agoMerge branch 'kh/doc-shortlog-fix'
Junio C Hamano [Wed, 11 Feb 2026 20:29:07 +0000 (12:29 -0800)]
Merge branch 'kh/doc-shortlog-fix'

Doc fix.

* kh/doc-shortlog-fix:
  doc: shortlog: put back trailer paragraphs

5 months agoMerge branch 'sp/show-index-warn-fallback'
Junio C Hamano [Wed, 11 Feb 2026 20:29:06 +0000 (12:29 -0800)]
Merge branch 'sp/show-index-warn-fallback'

When "git show-index" is run outside a repository, it silently
defaults to SHA-1; the tool now warns when this happens.

* sp/show-index-warn-fallback:
  show-index: use gettext wrapping in user facing error messages
  show-index: warn when falling back to SHA-1 outside a repository

5 months agodoc: rerere-options.adoc: link to git-rerere(1)
Kristoffer Haugsbakk [Tue, 10 Feb 2026 19:56:49 +0000 (20:56 +0100)]
doc: rerere-options.adoc: link to git-rerere(1)

Five commands include these options. Let’s link to the command so that
the curious user can learn more about what “rerere” is about.

It’s also better to consistently refer to things like
e.g. “git-subcommand(1)” over `git subcommand` or `subcommand`.

Also apply the same treatment to git-add(1).

Signed-off-by: Kristoffer Haugsbakk <code@khaugsbakk.name>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 months agoxdiff-interface: stop using the_repository
René Scharfe [Mon, 9 Feb 2026 19:24:52 +0000 (20:24 +0100)]
xdiff-interface: stop using the_repository

Use the algorithm-agnostic is_null_oid() and push the dependency of
read_mmblob() on the_repository->objects to its callers.  This allows it
to be used with arbitrary object databases.

Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 months agoThe second batch
Junio C Hamano [Mon, 9 Feb 2026 20:08:48 +0000 (12:08 -0800)]
The second batch

Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 months agoMerge branch 'ty/perf-3400-optim'
Junio C Hamano [Mon, 9 Feb 2026 20:09:10 +0000 (12:09 -0800)]
Merge branch 'ty/perf-3400-optim'

Improve set-up time of a perf test.

* ty/perf-3400-optim:
  t/perf/p3400: speed up setup using fast-import

5 months agoMerge branch 'ac/string-list-sort-u-and-tests'
Junio C Hamano [Mon, 9 Feb 2026 20:09:10 +0000 (12:09 -0800)]
Merge branch 'ac/string-list-sort-u-and-tests'

The string_list API gains a new helper, string_list_sort_u(), and
new unit tests to extend coverage.

* ac/string-list-sort-u-and-tests:
  string-list: add string_list_sort_u() that mimics "sort -u"
  u-string-list: add unit tests for string-list methods

5 months agoMerge branch 'sb/doc-worktree-prune-expire-improvement'
Junio C Hamano [Mon, 9 Feb 2026 20:09:10 +0000 (12:09 -0800)]
Merge branch 'sb/doc-worktree-prune-expire-improvement'

The help text and the documentation for the "--expire" option of
"git worktree [list|prune]" have been improved.

* sb/doc-worktree-prune-expire-improvement:
  worktree: clarify that --expire only affects missing worktrees

5 months agoMerge branch 'kn/ref-batch-output-error-reporting-fix'
Junio C Hamano [Mon, 9 Feb 2026 20:09:10 +0000 (12:09 -0800)]
Merge branch 'kn/ref-batch-output-error-reporting-fix'

A handful of code paths that started using batched ref update API
(after Git 2.51 or so) lost detailed error output, which have been
corrected.

* kn/ref-batch-output-error-reporting-fix:
  fetch: delay user information post committing of transaction
  receive-pack: utilize rejected ref error details
  fetch: utilize rejected ref error details
  update-ref: utilize rejected error details if available
  refs: add rejection detail to the callback function
  refs: skip to next ref when current ref is rejected

5 months agoMerge branch 'pw/replay-drop-empty'
Junio C Hamano [Mon, 9 Feb 2026 20:09:09 +0000 (12:09 -0800)]
Merge branch 'pw/replay-drop-empty'

"git replay" is taught to drop commits that become empty (not the
ones that are empty in the original).

* pw/replay-drop-empty:
  replay: drop commits that become empty

5 months agoMerge branch 'ps/history'
Junio C Hamano [Mon, 9 Feb 2026 20:09:09 +0000 (12:09 -0800)]
Merge branch 'ps/history'

"git history" history rewriting UI.

* ps/history:
  builtin/history: implement "reword" subcommand
  builtin: add new "history" command
  wt-status: provide function to expose status for trees
  replay: support updating detached HEAD
  replay: support empty commit ranges
  replay: small set of cleanups
  builtin/replay: move core logic into "libgit.a"
  builtin/replay: extract core logic to replay revisions

5 months agorerere: minor documantation update
Junio C Hamano [Mon, 9 Feb 2026 18:27:29 +0000 (10:27 -0800)]
rerere: minor documantation update

Let's not call our users "it".  Also "rerere forget \*.c" does not
forget resolutions for just '*.c'; it forgets for all the files
whose filenames end with ".c".

Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 months agot7003: modernize path existence checks using test helpers
SoutrikDas [Mon, 9 Feb 2026 17:24:45 +0000 (22:54 +0530)]
t7003: modernize path existence checks using test helpers

Replace direct uses of 'test -f' and 'test -d' with
git's helper functions 'test_path_is_file' ,
'test_path_is_missing' and 'test_path_is_dir'

Signed-off-by: SoutrikDas <valusoutrik@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 months agot2003: modernize path existence checks using test helpers
Burak Kaan Karaçay [Mon, 9 Feb 2026 11:24:44 +0000 (14:24 +0300)]
t2003: modernize path existence checks using test helpers

The old style 'test -f' and 'test -d' checks are silent on failure,
which makes debugging difficult.

Replace them with the 'test_path_is_*' helpers which provide verbose
error messages when a test fails.

Signed-off-by: Burak Kaan Karaçay <bkkaracay@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 months agoversion: stop using the_repository
René Scharfe [Sun, 8 Feb 2026 17:01:24 +0000 (18:01 +0100)]
version: stop using the_repository

Actually it has never been used in version.c since cf7ee481902 (agent:
advertise OS name via agent capability, 2025-02-15) added the dependency
macro.  Remove it, along with the also unused struct declaration.

Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 months agoremove duplicate includes
René Scharfe [Sun, 8 Feb 2026 12:32:22 +0000 (13:32 +0100)]
remove duplicate includes

The following command reports that some header files are included twice:

   $ git grep '#include' '*.c' | sort | uniq -cd

Remove the second #include line in each case, as it has no effect.

Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 months agocommit: use commit_stack
René Scharfe [Sun, 8 Feb 2026 11:37:38 +0000 (12:37 +0100)]
commit: use commit_stack

Use commit_stack instead of open-coding it.  Also convert the loop
counter i to size_t to match the type of the nr member of struct
commit_stack.

Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 months agomerge-file: honor merge.conflictStyle outside of a repository
Yannik Tausch [Sat, 7 Feb 2026 21:37:48 +0000 (22:37 +0100)]
merge-file: honor merge.conflictStyle outside of a repository

When running outside a repository, git merge-file ignores the
merge.conflictStyle configuration variable entirely. Since the
function receives `repo` from the caller (which is NULL outside a
repository), and repo_config() falls back to reading system and user
configuration when passed NULL, pass `repo` to repo_config()
unconditionally.

Also document that merge.conflictStyle is honored.

Signed-off-by: Yannik Tausch <dev@ytausch.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 months agoci: ubuntu: use GNU coreutils for dirname
Colin Stagner [Sat, 7 Feb 2026 04:27:03 +0000 (22:27 -0600)]
ci: ubuntu: use GNU coreutils for dirname

The uutils version of `dirname` has output that is inconsistent
with GNU coreutils. Prefer the GNU implementation of this command.

Signed-off-by: Colin Stagner <ask+git@howdoi.land>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 months agomerge-ours: integrate with sparse-index
Sam Bostock [Fri, 6 Feb 2026 19:16:23 +0000 (19:16 +0000)]
merge-ours: integrate with sparse-index

The merge-ours built-in opens the index to compare it against HEAD.
The machinery used to do this (i.e. run_diff_index()) is capable of
working with a sparse index, but the start-up sequence of this
command does not take the necessary steps, so we end up expanding the
index fully before doing the comparison.

In order to convince sparse-index.c:is_sparse_index_allowed() to
return true, we need to:

 - Read basic configuration with git_default_config so that global
   variables like core_apply_sparse_checkout are populated.
   merge-ours currently does not read configuration at all.

 - Set command_requires_full_index to 0.

With that, the command can work without expanding the index fully
before doing its work.

Signed-off-by: Sam Bostock <sam@sambostock.ca>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 months agomerge-ours: drop USE_THE_REPOSITORY_VARIABLE
Sam Bostock [Fri, 6 Feb 2026 19:16:22 +0000 (19:16 +0000)]
merge-ours: drop USE_THE_REPOSITORY_VARIABLE

The merge-ours built-in uses the `the_repository` global to access
the repository. The project is moving away from this global in favor
of the `repo` parameter that is passed to each built-in command.
Since merge-ours is registered with RUN_SETUP, `repo` is guaranteed
to be non-NULL and can be used directly.

Drop the USE_THE_REPOSITORY_VARIABLE macro and use `repo` throughout.

While at it, remove a stray double blank line between the #include
block and the usage string.

Signed-off-by: Sam Bostock <sam@sambostock.ca>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 months agodoc: fix repo_config documentation reference
SoutrikDas [Fri, 6 Feb 2026 06:21:08 +0000 (11:51 +0530)]
doc: fix repo_config documentation reference

In MyFirstContribution.adoc, the link to the repo_config()
documentation is invalid because the related documentation was moved
to a different file.

Replace the path for the repo_config() documentation from
'Documentation/technical/api-config.h' to 'config.h'.

Signed-off-by: SoutrikDas <valusoutrik@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 months agodoc: convert git-show to synopsis style
Jean-Noël Avila [Fri, 6 Feb 2026 04:12:26 +0000 (04:12 +0000)]
doc: convert git-show to synopsis style

 * add synopsis block definition in asciidoc.conf.in
 * convert commands to synopsis style
 * use _<placeholder>_ for arguments
 * minor formatting fixes

Reviewed-by: Kristoffer Haugsbakk <kristofferhaugsbakk@fastmail.com>
Signed-off-by: Jean-Noël Avila <jn.avila@free.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 months agodoc: fix some style issues in git-clone and for-each-ref-options
Jean-Noël Avila [Fri, 6 Feb 2026 04:12:25 +0000 (04:12 +0000)]
doc: fix some style issues in git-clone and for-each-ref-options

 * spell out all forms of --[no-]reject-shallow in git-clone
 * use imperative mood for the first line of options
 * Use asciidoc NOTE macro
 * fix markups

Reviewed-by: Kristoffer Haugsbakk <kristofferhaugsbakk@fastmail.com>
Signed-off-by: Jean-Noël Avila <jn.avila@free.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 months agodoc: finalize git-clone documentation conversion to synopsis style
Jean-Noël Avila [Fri, 6 Feb 2026 04:12:24 +0000 (04:12 +0000)]
doc: finalize git-clone documentation conversion to synopsis style

Use backticks where appropriate for command-line options

Reviewed-by: Kristoffer Haugsbakk <kristofferhaugsbakk@fastmail.com>
Signed-off-by: Jean-Noël Avila <jn.avila@free.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 months agodoc: convert git-submodule to synopsis style
Jean-Noël Avila [Fri, 6 Feb 2026 04:12:23 +0000 (04:12 +0000)]
doc: convert git-submodule to synopsis style

 * convert commands to synopsis style
 * use _<placeholder>_ for arguments
 * convert inline lists into proper definition lists
 * minor formatting fixes

Reviewed-by: Kristoffer Haugsbakk <kristofferhaugsbakk@fastmail.com>
Signed-off-by: Jean-Noël Avila <jn.avila@free.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 months agogpg-interface: remove an unnecessary NULL initialization
Collin Funk [Fri, 6 Feb 2026 01:46:10 +0000 (17:46 -0800)]
gpg-interface: remove an unnecessary NULL initialization

We assign this variable unconditionally, so we do not need to
initialize it to NULL where it is defined.

Signed-off-by: Collin Funk <collin.funk1@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 months agoglobal: constify some pointers that are not written to
Collin Funk [Fri, 6 Feb 2026 01:46:09 +0000 (17:46 -0800)]
global: constify some pointers that are not written to

The recent glibc 2.43 release had the following change listed in its
NEWS file:

    For ISO C23, the functions bsearch, memchr, strchr, strpbrk, strrchr,
    strstr, wcschr, wcspbrk, wcsrchr, wcsstr and wmemchr that return
    pointers into their input arrays now have definitions as macros that
    return a pointer to a const-qualified type when the input argument is
    a pointer to a const-qualified type.

When compiling with GCC 15, which defaults to -std=gnu23, this causes
many warnings like this:

    merge-ort.c: In function ‘apply_directory_rename_modifications’:
    merge-ort.c:2734:36: warning: initialization discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
     2734 |                 char *last_slash = strrchr(cur_path, '/');
          |                                    ^~~~~~~

This patch fixes the more obvious ones by making them const when we do
not write to the returned pointer.

Signed-off-by: Collin Funk <collin.funk1@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 months agoStart 2.54 cycle
Junio C Hamano [Thu, 5 Feb 2026 23:07:22 +0000 (15:07 -0800)]
Start 2.54 cycle

Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 months agoMerge branch 'sp/t5500-cleanup'
Junio C Hamano [Thu, 5 Feb 2026 23:42:01 +0000 (15:42 -0800)]
Merge branch 'sp/t5500-cleanup'

Test clean-up.

* sp/t5500-cleanup:
  t5500: simplify test implementation and fix git exit code suppression

5 months agoMerge branch 'tc/last-modified-options-cleanup'
Junio C Hamano [Thu, 5 Feb 2026 23:42:01 +0000 (15:42 -0800)]
Merge branch 'tc/last-modified-options-cleanup'

The "-z" and "--max-depth" documentation (and implementation of
"-z") in the "git last-modified" command have been updated.

* tc/last-modified-options-cleanup:
  last-modified: change default max-depth to 0
  last-modified: document option '--max-depth'
  last-modified: document option '-z'
  last-modified: clarify in the docs the command takes a pathspec

5 months agoMerge branch 'lp/diff-stat-utf8-display-width-fix'
Junio C Hamano [Thu, 5 Feb 2026 23:42:01 +0000 (15:42 -0800)]
Merge branch 'lp/diff-stat-utf8-display-width-fix'

The computation of column width made by "git diff --stat" was
confused when pathnames contain non-ASCII characters.

* lp/diff-stat-utf8-display-width-fix:
  t4073: add test for diffstat paths length when containing UTF-8 chars
  diff: improve scaling of filenames in diffstat to handle UTF-8 chars

5 months agoMerge branch 'ac/sparse-checkout-string-list-cleanup'
Junio C Hamano [Thu, 5 Feb 2026 23:42:00 +0000 (15:42 -0800)]
Merge branch 'ac/sparse-checkout-string-list-cleanup'

Code clean-up.

* ac/sparse-checkout-string-list-cleanup:
  sparse-checkout: optimize string_list construction and add tests to verify deduplication.

5 months agoMerge branch 'sp/myfirstcontribution-include-update'
Junio C Hamano [Thu, 5 Feb 2026 23:42:00 +0000 (15:42 -0800)]
Merge branch 'sp/myfirstcontribution-include-update'

Doc update.

* sp/myfirstcontribution-include-update:
  doc: MyFirstContribution: fix missing dependencies and clarify build steps

5 months agoMerge branch 'dd/t5403-modernise'
Junio C Hamano [Thu, 5 Feb 2026 23:42:00 +0000 (15:42 -0800)]
Merge branch 'dd/t5403-modernise'

Test clean-up.

* dd/t5403-modernise:
  t5403: use test_cmp for post-checkout argument checks
  t5403: introduce check_post_checkout helper function

5 months agoMerge branch 'ap/http-probe-rpc-use-auth'
Junio C Hamano [Thu, 5 Feb 2026 23:41:58 +0000 (15:41 -0800)]
Merge branch 'ap/http-probe-rpc-use-auth'

HTTP transport failed to authenticate in some code paths, which has
been corrected.

* ap/http-probe-rpc-use-auth:
  remote-curl: use auth for probe_rpc() requests too

5 months agoMerge branch 'ar/submodule-gitdir-tweak'
Junio C Hamano [Thu, 5 Feb 2026 23:41:58 +0000 (15:41 -0800)]
Merge branch 'ar/submodule-gitdir-tweak'

Avoid local submodule repository directory paths overlapping with
each other by encoding submodule names before using them as path
components.

* ar/submodule-gitdir-tweak:
  submodule: detect conflicts with existing gitdir configs
  submodule: hash the submodule name for the gitdir path
  submodule: fix case-folding gitdir filesystem collisions
  submodule--helper: fix filesystem collisions by encoding gitdir paths
  builtin/credential-store: move is_rfc3986_unreserved to url.[ch]
  submodule--helper: add gitdir migration command
  submodule: allow runtime enabling extensions.submodulePathConfig
  submodule: introduce extensions.submodulePathConfig
  builtin/submodule--helper: add gitdir command
  submodule: always validate gitdirs inside submodule_name_to_gitdir
  submodule--helper: use submodule_name_to_gitdir in add_submodule

5 months agoMerge branch 'aa/add-p-previous-decisions'
Junio C Hamano [Thu, 5 Feb 2026 23:41:58 +0000 (15:41 -0800)]
Merge branch 'aa/add-p-previous-decisions'

"git add -p" and friends note what the current status of the hunk
being shown is.

* aa/add-p-previous-decisions:
  add -p: show user's hunk decision when selecting hunks

5 months agoMerge branch 'jk/remote-tracking-ref-leakfix'
Junio C Hamano [Thu, 5 Feb 2026 23:41:57 +0000 (15:41 -0800)]
Merge branch 'jk/remote-tracking-ref-leakfix'

Leakfix.

* jk/remote-tracking-ref-leakfix:
  remote: always allocate branch.push_tracking_ref
  remote: fix leak in branch_get_push_1() with invalid "simple" config
  remote: drop const return of tracking_for_push_dest()
  remote: return non-const pointer from error_buf()

5 months agodoc: send-email: correct --no-signed-off-by-cc misspelling
Matěj Cepl [Thu, 5 Feb 2026 16:24:01 +0000 (17:24 +0100)]
doc: send-email: correct --no-signed-off-by-cc misspelling

There is no option --signed-off-cc (without -by) for git send-email.

Signed-off-by: Matěj Cepl <mcepl@cepl.eu>
[kh: rebased and changed subject to house style]
Signed-off-by: Kristoffer Haugsbakk <code@khaugsbakk.name>
[jc: minor copyedit in the commit message]
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 months agotest: optionally test contrib in CI
Junio C Hamano [Mon, 2 Feb 2026 21:07:58 +0000 (13:07 -0800)]
test: optionally test contrib in CI

Recently it was reported that a topic merged to 'next' broke build
and test for contrib/subtree part of the system.

Instead of having those who run 'next' or 'master' to hit the build
and test breakage and report to us, make sure we notice breakages in
contrib/ area before they hit my tree at all, during their own
presubmit testing.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 months agoMerge branch 'pks-meson-fix-missing-msgfmt' of https://github.com/pks-gitlab/gitk
Johannes Sixt [Thu, 5 Feb 2026 12:45:51 +0000 (13:45 +0100)]
Merge branch 'pks-meson-fix-missing-msgfmt' of https://github.com/pks-gitlab/gitk

* 'pks-meson-fix-missing-msgfmt' of https://github.com/pks-gitlab/gitk:
  gitk: fix msgfmt being required

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
5 months agogitk: fix msgfmt being required
Patrick Steinhardt [Thu, 5 Feb 2026 11:50:13 +0000 (12:50 +0100)]
gitk: fix msgfmt being required

While the Meson build instructions already handle the case where msgfmt
wasn't found, we forgot to mark the dependency itself as optional. This
causes an error in case the executable could not be found:

  Project name: gitk
  Project version: undefined
  Program sh found: YES (C:\Program Files\Git\bin\sh.EXE)
  Program wish found: YES (C:\Program Files\Git\mingw64\bin\wish.EXE)
  Program chmod found: YES (C:\Program Files\Git\usr\bin\chmod.EXE)
  Program mv found: YES (C:\Program Files\Git\usr\bin\mv.EXE)
  Program sed found: YES (C:\Program Files\Git\usr\bin\sed.EXE)
  Program msgfmt found: NO

  subprojects\gitk\meson.build:28:3: ERROR: Program 'msgfmt' not found or not executable

Fix the issue by adding the `required: false` parameter.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
5 months agocontrib/subtree: fix tests with reftable backend
Colin Stagner [Wed, 4 Feb 2026 04:38:11 +0000 (22:38 -0600)]
contrib/subtree: fix tests with reftable backend

One git-subtree test-case relies on git internals to infer the
default branch name. This test fails with the new reftable
backend.

    GIT_TEST_DEFAULT_REF_FORMAT=reftable \
      meson test t7900-subtree

This test script already sets

    GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main

which eliminates the need to infer a branch name at runtime.
Hardcode the branch name.

Signed-off-by: Colin Stagner <ask+git@howdoi.land>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 months agodiff-highlight: allow testing with Git 3.0 breaking changes
Junio C Hamano [Tue, 3 Feb 2026 21:26:00 +0000 (13:26 -0800)]
diff-highlight: allow testing with Git 3.0 breaking changes

The diff-highlight (in contrib/) comes with its own test script,
which relies on the initial branch name being 'master'.  This is not
just encoded in the test logic, but in the illustration in the file
that shows the topology of the history.

Force the initial branch name to 'master' to allow it pass.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 months ago.mailmap: fix email for Phil Hord
Phil Hord [Tue, 3 Feb 2026 18:12:13 +0000 (10:12 -0800)]
.mailmap: fix email for Phil Hord

My canonical and old emails were reversed, somehow. Also add
an entry for a new email that may sneak in.

Signed-off-by: Phil Hord <phil.hord@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 months agococci: extend MEMZERO_ARRAY() rules
Toon Claes [Tue, 3 Feb 2026 10:29:03 +0000 (11:29 +0100)]
cocci: extend MEMZERO_ARRAY() rules

Recently the MEMZERO_ARRAY() macro was introduced. In that commit also
coccinelle rules were added to capture cases that can be converted to
use that macro.

Later a few more cases were manually converted to use the macro, but
coccinelle didn't capture those. Extend the rules to capture those as
well.

In various cases the code could be further beautified by removing
parentheses which are no longer needed. Modify the coccinelle rules to
optimize those as well and fix them.

During conversion indentation also used spaces where tabs should be
used, fix that in one go.

Signed-off-by: Toon Claes <toon@iotcl.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 months agodoc: shortlog: put back trailer paragraphs
Kristoffer Haugsbakk [Tue, 3 Feb 2026 09:48:52 +0000 (10:48 +0100)]
doc: shortlog: put back trailer paragraphs

47beb37b (shortlog: match commit trailers with --group, 2020-09-27)
added the `trailer` bullet point with three paragraphs.[1] Later,
3dc95e09 (shortlog: support arbitrary commit format `--group`s,
2022-10-24) put the single-paragraph bullet point about `format` right
after the first paragraph about `trailer`. That meant that the second
and third paragraphs for `trailer` got moved to `format`.

Move the two paragraphs back to `trailer`. We now also need one blank
line before the final bullet point so that it does not get joined with
the second bullet point.

† 1: Technically the bullet list formatting was immediately fixed to
     include all three paragraphs in 63d24fa0 (shortlog: allow multiple
     groups to be specified, 2020-09-27)

Acked-by: Jeff King <peff@peff.net>
Signed-off-by: Kristoffer Haugsbakk <code@khaugsbakk.name>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 months agoodb: transparently handle common transaction behavior
Justin Tobler [Tue, 3 Feb 2026 00:10:02 +0000 (18:10 -0600)]
odb: transparently handle common transaction behavior

A new ODB transaction is created and returned via
`odb_transaction_begin()` and stored in the ODB. Only a single
transaction may be pending at a time. If the ODB already has a
transaction, the function is expected to return NULL. Similarly, when
committing a transaction via `odb_transaction_commit()` the transaction
being committed must match the pending transaction and upon commit reset
the ODB transaction to NULL.

These behaviors apply regardless of the ODB transaction implementation.
Move the corresponding logic into `odb_transaction_{begin,commit}()`
accordingly.

Signed-off-by: Justin Tobler <jltobler@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 months agoodb: prepare `struct odb_transaction` to become generic
Justin Tobler [Tue, 3 Feb 2026 00:10:01 +0000 (18:10 -0600)]
odb: prepare `struct odb_transaction` to become generic

An ODB transaction handles how objects are stored temporarily and
eventually committed. Due to object storage being implemented
differently for a given ODB source, the ODB transactions must be
implemented in a manner specific to the source the objects are being
written to. To provide generic transactions, `struct odb_transaction` is
updated to store a commit callback that can be configured to support a
specific ODB source. For now `struct odb_transaction_files` is the
only transaction type and what is always returned when starting a
transaction.

Signed-off-by: Justin Tobler <jltobler@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 months agoobject-file: rename transaction functions
Justin Tobler [Tue, 3 Feb 2026 00:10:00 +0000 (18:10 -0600)]
object-file: rename transaction functions

In a subsequent commit, ODB transactions are made more generic to
facilitate each ODB source providing its own transaction handling.
Rename `object_file_transaction_{begin,commit}()` to
`odb_transaction_files_{begin,commit}()` to better match the future
source specific transaction implementation.

Signed-off-by: Justin Tobler <jltobler@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 months agoodb: store ODB source in `struct odb_transaction`
Justin Tobler [Tue, 3 Feb 2026 00:09:59 +0000 (18:09 -0600)]
odb: store ODB source in `struct odb_transaction`

Each `struct odb_transaction` currently stores a reference to the
`struct object_database`. Since transactions are handled per object
source, instead store a reference to the source.

Signed-off-by: Justin Tobler <jltobler@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 months agoblame: fix coloring for repeated suspects
René Scharfe [Sun, 1 Feb 2026 11:47:53 +0000 (12:47 +0100)]
blame: fix coloring for repeated suspects

The option --ignore-rev passes the blame to an older commit.  This can
cause adjacent scoreboard entries to blame the same commit.  Currently
we only look at the present entry when determining whether a line needs
to be colored for --color-lines.  Check the previous entry as well.

Reported-by: Seth McDonald <sethmcmail@pm.me>
Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
5 months agot9160:modernize test path checking
HodaSalim [Mon, 2 Feb 2026 16:18:00 +0000 (18:18 +0200)]
t9160:modernize test path checking

Replace old-style path checks with Git's dedicated test helpers:
- test -f → test_path_is_file
- test -d → test_path_is_dir
- test -s → test_file_not_empty

Fix typos with the word "subsequent"

Found using: git grep "test -[efd]" t/

This improves test readability and provides better error messages
when path checks fail.

Signed-off-by: HodaSalim <hoda.s.salim@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>