]> git.ipfire.org Git - thirdparty/git.git/log
thirdparty/git.git
15 months agobuiltin/ls-files: stop using `the_repository`
Usman Akinyemi [Fri, 7 Mar 2025 23:35:05 +0000 (05:05 +0530)] 
builtin/ls-files: stop using `the_repository`

Remove the_repository global variable in favor of the repository
argument that gets passed in "builtin/ls-files.c".

When `-h` is passed to the command outside a Git repository, the
`run_builtin()` will call the `cmd_ls_files()` function with `repo` set
to NULL and then early in the function, `show_usage_with_options_if_asked()`
call will give the options help and exit.

Pass the repository available in the calling context to both
`expand_objectsize()` and `show_ru_info()` to remove their
dependency on the global `the_repository` variable.

Mentored-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Usman Akinyemi <usmanakinyemi202@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agobuiltin/pack-refs: stop using `the_repository`
Usman Akinyemi [Fri, 7 Mar 2025 23:35:04 +0000 (05:05 +0530)] 
builtin/pack-refs: stop using `the_repository`

Remove the_repository global variable in favor of the repository
argument that gets passed in "builtin/pack-refs.c".

When `-h` is passed to the command outside a Git repository, the
`run_builtin()` will call the `cmd_pack_refs()` function with `repo` set
to NULL and then early in the function, `parse_options()` call will give
the options help and exit.

Mentored-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Usman Akinyemi <usmanakinyemi202@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agobuiltin/send-pack: stop using `the_repository`
Usman Akinyemi [Fri, 7 Mar 2025 23:35:03 +0000 (05:05 +0530)] 
builtin/send-pack: stop using `the_repository`

Remove the_repository global variable in favor of the repository
argument that gets passed in "builtin/send-pack.c".

When `-h` is passed to the command outside a Git repository, the
`run_builtin()` will call the `cmd_send_pack()` function with `repo` set
to NULL and then early in the function, `parse_options()` call will give
the options help and exit.

Mentored-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Usman Akinyemi <usmanakinyemi202@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agobuiltin/verify-commit: stop using `the_repository`
Usman Akinyemi [Fri, 7 Mar 2025 23:35:02 +0000 (05:05 +0530)] 
builtin/verify-commit: stop using `the_repository`

Remove the_repository global variable in favor of the repository
argument that gets passed in "builtin/verify-commit.c".

When `-h` is passed to the command outside a Git repository, the
`run_builtin()` will call the `cmd_verify_commit()` function with `repo`
set to NULL and then early in the function, `parse_options()` call will
give the options help and exit.

Pass the repository available in the calling context to `verify_commit()`
to remove it's dependency on the global `the_repository` variable.

Mentored-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Usman Akinyemi <usmanakinyemi202@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agobuiltin/verify-tag: stop using `the_repository`
Usman Akinyemi [Fri, 7 Mar 2025 23:35:01 +0000 (05:05 +0530)] 
builtin/verify-tag: stop using `the_repository`

Remove the_repository global variable in favor of the repository
argument that gets passed in "builtin/verify-tag.c".

When `-h` is passed to the command outside a Git repository, the
`run_builtin()` will call the `cmd_verify_tag()` function with `repo` set
to NULL and then early in the function, `parse_options()` call will give
the options help and exit.

Mentored-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Usman Akinyemi <usmanakinyemi202@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agoconfig: teach repo_config to allow `repo` to be NULL
Usman Akinyemi [Fri, 7 Mar 2025 23:35:00 +0000 (05:05 +0530)] 
config: teach repo_config to allow `repo` to be NULL

The `repo` value can be NULL if a builtin command is run outside
any repository. The current implementation of `repo_config()` will
fail if `repo` is NULL.

If the `repo` is NULL the `repo_config()` can ignore the repository
configuration but it should read the other configuration sources like
the system-side configuration instead of failing.

Teach the `repo_config()` to allow `repo` to be NULL by calling the
`read_very_early_config()` which read config but only enumerate system
and global settings.

This will be useful in the following commits.

Suggested-by: Junio C Hamano <gitster@pobox.com>
Mentored-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Usman Akinyemi <usmanakinyemi202@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agofetch: fix following tags when fetching specific OID
Taylor Blau [Fri, 7 Mar 2025 23:27:03 +0000 (18:27 -0500)] 
fetch: fix following tags when fetching specific OID

In 3f763ddf28 (fetch: set remote/HEAD if it does not exist, 2024-11-22),
unconditionally adds "HEAD" to the list of ref prefixes we send to the
server.

This breaks a core assumption that the list of prefixes we send to the
server is complete. We must either send all prefixes we care about, or
none at all (in the latter case the server then advertises everything).

The tag following code is careful to only add "refs/tags/" to the list
of prefixes if there are already entries in the prefix list. But because
the new code from 3f763ddf28 runs after the tag code, and because it
unconditionally adds to the prefix list, we may end up with a prefix
list that _should_ have "refs/tags/" in it, but doesn't.

When that is the case, the server does not advertise any tags, and our
auto-following breaks because we never learned about any tags in the
first place.

Fix this by only adding "HEAD" to the ref prefixes when we know that we
are already limiting the advertisement. In either case we'll learn about
HEAD (either through the limited advertisement, or implicitly through a
full advertisement).

Reported-by: Igor Todorovski <itodorov@ca.ibm.com>
Co-authored-by: Jeff King <peff@peff.net>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agohelp: print zlib-ng version number
Toon Claes [Fri, 7 Mar 2025 14:18:08 +0000 (15:18 +0100)] 
help: print zlib-ng version number

When building against zlib-ng, the header file `zlib.h` is not included,
but `zlib-ng.h` is included instead. It's `zlib.h` that defines
`ZLIB_VERSION` and that macro is used to print out zlib version in
`git-version(1)` with `--build-options`. But when it's not defined, no
version is printed.

`zlib-ng.h` defines another macro: `ZLIBNG_VERSION`. Use that macro to
print the zlib-ng version in `git version --build-options` when it's
set. Otherwise fallback to `ZLIB_VERSION`.

Signed-off-by: Toon Claes <toon@iotcl.com>
Helped-by: Patrick Steinhardt <ps@pks.im>
Reviewed-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agohelp: include git-zlib.h to print zlib version
Toon Claes [Fri, 7 Mar 2025 14:18:07 +0000 (15:18 +0100)] 
help: include git-zlib.h to print zlib version

In 41f1a8435a (git-compat-util: move include of "compat/zlib.h" into
"git-zlib.h", 2025-01-28) some code was refactored to enable easier
linking against zlib-ng.

This removed `zlib.h` being indirectly included in `help.c`. As this
file uses `ZLIB_VERSION` to print the version number of zlib when
running git-version(1) with `--build-options`, this resulted in a
regression.

Include `git-zlib.h` directly into `help.c` to print zlib version
information. This brings back the zlib version in the output of
`git version --build-options`.

Signed-off-by: Toon Claes <toon@iotcl.com>
Reviewed-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agoMerge branch 'js/win-2.49-build-fixes'
Junio C Hamano [Thu, 6 Mar 2025 22:06:31 +0000 (14:06 -0800)] 
Merge branch 'js/win-2.49-build-fixes'

Hotfix to help building Git-for-Windows.

* js/win-2.49-build-fixes:
  cmake: generalize the handling of the `CLAR_TEST_OBJS` list
  meson: fix sorting
  ident: stop assuming that `gw_gecos` is writable

15 months agoMerge branch 'pw/repo-layout-doc-update'
Junio C Hamano [Thu, 6 Mar 2025 22:06:31 +0000 (14:06 -0800)] 
Merge branch 'pw/repo-layout-doc-update'

Some future breaking changes would remove certain parts of the
default repository, which were still described even when the
documents were built for the future with WITH_BREAKING_CHANGES.

* pw/repo-layout-doc-update:
  docs: fix repository-layout when building with breaking changes

15 months agoMerge branch 'tz/doc-txt-to-adoc-fixes'
Junio C Hamano [Thu, 6 Mar 2025 22:06:31 +0000 (14:06 -0800)] 
Merge branch 'tz/doc-txt-to-adoc-fixes'

Fallouts from recent renaming of documentation files from .txt
suffix to the new .adoc suffix have been corrected.

* tz/doc-txt-to-adoc-fixes: (38 commits)
  xdiff: *.txt -> *.adoc fixes
  unpack-trees.c: *.txt -> *.adoc fixes
  transport.h: *.txt -> *.adoc fixes
  trace2/tr2_sysenv.c: *.txt -> *.adoc fixes
  trace2.h: *.txt -> *.adoc fixes
  t6434: *.txt -> *.adoc fixes
  t6012: *.txt -> *.adoc fixes
  t/helper/test-rot13-filter.c: *.txt -> *.adoc fixes
  simple-ipc.h: *.txt -> *.adoc fixes
  setup.c: *.txt -> *.adoc fixes
  refs.h: *.txt -> *.adoc fixes
  pseudo-merge.h: *.txt -> *.adoc fixes
  parse-options.h: *.txt -> *.adoc fixes
  object-name.c: *.txt -> *.adoc fixes
  list-objects-filter-options.h: *.txt -> *.adoc fixes
  fsck.h: *.txt -> *.adoc fixes
  diffcore.h: *.txt -> *.adoc fixes
  diff.h: *.txt -> *.adoc fixes
  contrib/long-running-filter: *.txt -> *.adoc fixes
  config.c: *.txt -> *.adoc fixes
  ...

15 months agomerge-ort: fix slightly overzealous assertion for rename-to-self
Elijah Newren [Thu, 6 Mar 2025 15:30:27 +0000 (15:30 +0000)] 
merge-ort: fix slightly overzealous assertion for rename-to-self

merge-ort has a number of sanity checks on the file it is processing in
process_renames().  One of these sanity checks was slightly overzealous
because it indirectly assumed that a renamed file always ended up at a
different path than where it started.  That is normally an entirely fair
assumption, but directory rename detection can make things interesting.

As a quick refresher, if one side of history renames directory A/ -> B/,
and the other side of history adds new files to A/, then directory
rename detection notices and suggests moving those new files to B/.  A
similar thing is done for paths renamed into A/, causing them to be
transitively renamed into B/.  But, if the file originally came from B/,
then this can end up causing a file to be renamed back to itself.

It turns out the rest of the code following this assertion handled the
case fine; the assertion was just an extra sanity check, not a rigid
precondition.  Therefore, simply adjust the assertion to pass under this
special case as well.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agot6423: add a testcase causing a failed assertion in process_renames
Dmitry Goncharov [Thu, 6 Mar 2025 15:30:26 +0000 (15:30 +0000)] 
t6423: add a testcase causing a failed assertion in process_renames

If one side of history renames a directory A/ -> B/, and the other side
of history adds new files to A/, then directory rename detection notices
and moves or suggests moving those new files to B/.  A similar thing is
done for paths renamed into A/, causing them to be transitively renamed
into B/.  But, if the file originally came from B/, then this can end up
causing a file to be renamed back to itself.  merge-ort crashes under
this special case, due to a slightly overzealous assertion:

    git: merge-ort.c:3051: process_renames: Assertion `source_deleted || oldinfo->filemask & old_sidemask' failed.
    Aborted (core dumped)

Add a testcase demonstrating this.

Signed-off-by: Dmitry Goncharov <dgoncharov@users.sf.net>
[en: Instead of adding a new testsuite, place it near similar tests in
 t6423, adjusting to match the style of those tests.  Tweak the commit
 message to not repeat the entire testcase, but just describe the bug.
 Also update the line number in the error message.]
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agorefs.c: stop matching non-directory prefixes in exclude patterns
Taylor Blau [Thu, 6 Mar 2025 15:34:53 +0000 (10:34 -0500)] 
refs.c: stop matching non-directory prefixes in exclude patterns

In the packed-refs backend, our implementation of '--exclude' (dating
back to 59c35fac54 (refs/packed-backend.c: implement jump lists to avoid
excluded pattern(s), 2023-07-10)) considers, for example:

    $ git for-each-ref --exclude=refs/heads/ba

to exclude "refs/heads/bar", "refs/heads/baz", and so on.

The files backend, which does not implement '--exclude' (and relies on
the caller to cull out results that don't match) naturally will
enumerate "refs/heads/bar" and so on.

So in the above example, 'for-each-ref' will try and see if
"refs/heads/ba" matches "refs/heads/bar" (since the files backend simply
enumerated every loose reference), and, realizing that it does not
match, output the reference as expected. (A caller that did want to
exclude "refs/heads/bar" and "refs/heads/baz" might instead run "git
for-each-ref --exclude='refs/heads/ba*'").

This can lead to strange behavior, like seeing a different set of
references advertised via 'upload-pack' depending on what set of
references were loose versus packed.

So there is a subtle bug with '--exclude' which is that in the
packed-refs backend we will consider "refs/heads/bar" to be a pattern
match against "refs/heads/ba" when we shouldn't. Likewise, the reftable
backend (which in this case is bug-compatible with the packed backend)
exhibits the same broken behavior.

There are a few ways to fix this. One is to tighten the rules in
cmp_record_to_refname(), which is used to determine the start/end-points
of the jump list used by the packed backend. In this new "strict" mode,
the comparison function would handle the case where we've reached the
end of the pattern by introducing a new check like so:

    while (1) {
        if (*r1 == '\n')
            return *r2 ? -1 : 0;
        if (!*r2)
            if (strict && *r1 != '/')        /* <- here */
                return 1;
            return start ? 1 : -1;
        if (*r1 != *r2)
            return (unsigned char)*r1 < (unsigned char)*r2 ? -1 : +1;
        r1++;
        r2++;
    }

(eliding out the rest of cmp_record_to_refname()). Equivalently, we
could teach refs/packed-backend::populate_excluded_jump_list() to append
a trailing '/' if one does not already exist, forcing an exclude pattern
like "refs/heads/ba" to only match "refs/heads/ba/abc" and so forth.

But since the same problem exists in reftable, we can fix both at once
by performing this pre-processing step one layer up in refs.c at the
common entrypoint for the two, which is 'refs_ref_iterator_begin()'.

Since that solution is both the simplest and only requires modification
in one spot, let's normalize exclude patterns so that they end with a
trailing slash. This causes us to unify the behavior between all three
backends.

There is some minor test fallout in the "overlapping excluded regions"
test, which happens to use 'refs/ba' as an exclude pattern, and expects
references under the "refs/heads/bar/*" and "refs/heads/baz/*"
hierarchies to be excluded from the results.

But that test fallout is expected, because the test was codifying the
buggy behavior to begin with, and should have never been written that
way. Split that into its own test (since the range is no longer
overlapping under the stricter interpretation of --exclude patterns
presented here). Create a new test which does have overlapping
regions by using a refs/heads/bar/4/... hierarchy and excluding both
"refs/heads/bar" and "refs/heads/bar/4".

Reported-by: SURA <surak8806@gmail.com>
Helped-by: Jeff King <peff@peff.net>
Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agorefs.c: remove empty '--exclude' patterns
Taylor Blau [Thu, 6 Mar 2025 15:34:48 +0000 (10:34 -0500)] 
refs.c: remove empty '--exclude' patterns

In 59c35fac54 (refs/packed-backend.c: implement jump lists to avoid
excluded pattern(s), 2023-07-10), the packed-refs backend learned how to
construct "jump lists" to avoid enumerating sections of the packed-refs
file that we know the caller is going to throw out anyway.

This process works by finding the start- and end-points (that is, where
in the packed-refs file corresponds to the range we're going to ignore)
for each exclude pattern, then constructing a jump list based on that.
At enumeration time we'll consult the jump list to skip past everything
in the range(s) found in the previous step, saving time when excluding a
large portion of references.

But when there is a --exclude pattern which is just the empty string,
the behavior is a little funky. When we try and exclude the empty
string, the matched range covers the entire packed-refs file, meaning
that we won't output any packed references. But the empty pattern
doesn't actually match any references to begin with! For example, on my
copy of git.git I can do:

    $ git for-each-ref '' | wc -l
    0

So "git for-each-ref --exclude=''" shouldn't actually remove anything
from the output, and ought to be equivalent to "git for-each-ref". But
it's not, and in fact:

    $ git for-each-ref | wc -l
    2229
    $ git for-each-ref --exclude='' | wc -l
    480

But why does the '--exclude' version output only some of the references
in the repository? Here's a hint:

    $ find .git/refs -type f | wc -l
    480

Indeed, because the files backend doesn't implement[^1] the same jump
list concept as the packed backend we get the correct result for the
loose references, but none of the packed references.

Since the empty string exclude pattern doesn't match anything, we can
discard them before the packed-refs backend has a chance to even see it
(and likewise for reftable, which also implements a similar concept
since 1869525066 (refs/reftable: wire up support for exclude patterns,
2024-09-16)).

This approach (copying only some of the patterns into a strvec at the
refs.c layer) may seem heavy-handed, but it's setting us up to fix
another bug in the following commit where the fix will involve modifying
the incoming patterns.

[^1]: As noted in 59c35fac54. We technically could avoid opening and
  enumerating the contents of, for e.g., "$GIT_DIR/refs/heads/foo/" if
  we knew that we were excluding anything under the 'refs/heads/foo'
  hierarchy. But the --exclude stuff is all best-effort anyway, since
  the caller is expected to cull out any results that they don't want.

Noticed-by: Jeff King <peff@peff.net>
Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agocmake: generalize the handling of the `CLAR_TEST_OBJS` list
Johannes Schindelin [Thu, 6 Mar 2025 10:26:20 +0000 (10:26 +0000)] 
cmake: generalize the handling of the `CLAR_TEST_OBJS` list

A late-comer to the v2.49.0 party, `sk/unit-test-oid`, added yet another
array item to `CLAR_TEST_OBJS`, causing the `win+VS build` job to fail
with symptoms like this one:

  unit-tests-lib.lib(u-oid-array.obj) : error LNK2019: unresolved
  external symbol cl_parse_any_oid referenced in function fill_array

This is a similar scenario to the one that forced me to write
8afda42fce60 (cmake: generalize the handling of the `UNIT_TEST_OBJS`
list, 2024-09-18): The hard-coded echo of `CLAR_TEST_OBJS` in
`CMakeLists.txt` that recapitulates faithfully what was already
hard-coded in `Makefile` would either have to be updated whack-a-mole
style, or generalized.

Just like I chose the latter option for `UNIT_TEST_OBJS`, I now do the
same for `CLAR_TEST_OBJS`.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agomeson: fix sorting
Johannes Schindelin [Thu, 6 Mar 2025 10:26:19 +0000 (10:26 +0000)] 
meson: fix sorting

In 904339edbd80 (Introduce support for the Meson build system,
2024-12-06) the `meson.build` file was introduced, adding also a
Windows-specific list of source files. This list was obviously meant to
be sorted alphabetically, but there is one mistake. Let's fix that.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agoident: stop assuming that `gw_gecos` is writable
Johannes Schindelin [Thu, 6 Mar 2025 10:26:18 +0000 (10:26 +0000)] 
ident: stop assuming that `gw_gecos` is writable

In 590e081dea7c (ident: add NO_GECOS_IN_PWENT for systems without
pw_gecos in struct passwd, 2011-05-19), code was introduced to iterate
over the `gw_gecos` field; The loop variable is of type `char *`, which
assumes that `gw_gecos` is writable.

However, it is not necessarily writable (and it is a bad idea to have it
writable in the first place), so let's switch the loop variable type to
`const char *`.

This is not a new problem, but what is new is the Meson build. While it
does not trigger in CI builds, imitating the commands of
`ci/run-build-and-tests.sh` in a regular Git for Windows SDK (`meson
setup build . --fatal-meson-warnings --warnlevel 2 --werror --wrap-mode
nofallback -Dfuzzers=true` followed by `meson compile -C build --`
results in this beautiful error:

  "cc" [...] -o libgit.a.p/ident.c.obj "-c" ../ident.c
  ../ident.c: In function 'copy_gecos':
  ../ident.c:68:18: error: assignment discards 'const' qualifier from pointer target type [-Werror=discarded-qualifiers]
     68 |         for (src = get_gecos(w); *src && *src != ','; src++) {
        |                  ^
  cc1.exe: all warnings being treated as errors

Now, why does this not trigger in CI? The answer is as simple as it is
puzzling: The `win+Meson` job completely side-steps Git for Windows'
development environment, opting instead to use the GCC that is on the
`PATH` in GitHub-hosted `windows-latest` runners. That GCC is pinned to
v12.2.0 and targets the UCRT (unlikely to change any time soon, see
https://github.com/actions/runner-images/blob/win25/20250303.1/images/windows/toolsets/toolset-2022.json#L132-L141).
That is in stark contrast to Git for Windows, which uses GCC v14.2.0 and
targets MSVCRT. Git for Windows' `Makefile`-based build also obviously
uses different compiler flags, otherwise this compile error would have
had plenty of opportunity in almost 14 years to surface.

In other words, contrary to my expectations, the `win+Meson` job is
ill-equipped to replace the `win build` job because it exercises a
completely different tool version/compiler flags vector than what Git
for Windows needs.

Nevertheless, there is currently this huge push, including breaking
changes after -rc1 and all, for switching to Meson. Therefore, we need
to make it work, somehow, even in Git for Windows' SDK, hence this
patch, at this point in time.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agol10n: fr: 2.49 round 2
Jean-Noël Avila [Sat, 1 Mar 2025 14:02:22 +0000 (15:02 +0100)] 
l10n: fr: 2.49 round 2

Signed-off-by: Jean-Noël Avila <jn.avila@free.fr>
15 months agol10n: bg.po: Updated Bulgarian translation (5836t)
Alexander Shopov [Sat, 1 Mar 2025 21:28:22 +0000 (22:28 +0100)] 
l10n: bg.po: Updated Bulgarian translation (5836t)

Signed-off-by: Alexander Shopov <ash@kambanaria.org>
15 months agol10n: Updated translation for vi-2.49
Vũ Tiến Hưng [Thu, 6 Mar 2025 05:41:39 +0000 (12:41 +0700)] 
l10n: Updated translation for vi-2.49

Signed-off-by: Vũ Tiến Hưng <newcomerminecraft@gmail.com>
15 months agoA few more after -rc1
Junio C Hamano [Wed, 5 Mar 2025 18:37:53 +0000 (10:37 -0800)] 
A few more after -rc1

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agoMerge branch 'rs/reftable-reader-new-leakfix'
Junio C Hamano [Wed, 5 Mar 2025 18:37:45 +0000 (10:37 -0800)] 
Merge branch 'rs/reftable-reader-new-leakfix'

Leakfix.

* rs/reftable-reader-new-leakfix:
  reftable: release name on reftable_reader_new() error

15 months agoMerge branch 'pw/build-meson-technical-and-howto-docs'
Junio C Hamano [Wed, 5 Mar 2025 18:37:45 +0000 (10:37 -0800)] 
Merge branch 'pw/build-meson-technical-and-howto-docs'

Meson-based build procedure forgot to build some docs, which has
been corrected.

* pw/build-meson-technical-and-howto-docs:
  meson: fix building technical and howto docs

15 months agoMerge branch 'kn/ref-migrate-skip-reflog'
Junio C Hamano [Wed, 5 Mar 2025 18:37:45 +0000 (10:37 -0800)] 
Merge branch 'kn/ref-migrate-skip-reflog'

Usage string of "git refs" has been corrected.

* kn/ref-migrate-skip-reflog:
  refs: show --no-reflog in the help text

15 months agoMerge branch 'jc/breaking-changes-early-adopter-option'
Junio C Hamano [Wed, 5 Mar 2025 18:37:45 +0000 (10:37 -0800)] 
Merge branch 'jc/breaking-changes-early-adopter-option'

Doc update.

* jc/breaking-changes-early-adopter-option:
  BreakingChanges: clarify the procedure

15 months agoMerge branch 'dm/editorconfig-bash-is-like-sh'
Junio C Hamano [Wed, 5 Mar 2025 18:37:44 +0000 (10:37 -0800)] 
Merge branch 'dm/editorconfig-bash-is-like-sh'

The editorconfig file is updated to tell us that bash scripts are
similar to general Bourne shell scripts.

* dm/editorconfig-bash-is-like-sh:
  editorconfig: add .bash extension

15 months agoMerge branch 'cc/lop-remote'
Junio C Hamano [Wed, 5 Mar 2025 18:37:44 +0000 (10:37 -0800)] 
Merge branch 'cc/lop-remote'

Large-object promisor protocol extension.

* cc/lop-remote:
  doc: add technical design doc for large object promisors
  promisor-remote: check advertised name or URL
  Add 'promisor-remote' capability to protocol v2

15 months agoMerge branch 'sk/unit-test-oid'
Junio C Hamano [Wed, 5 Mar 2025 18:37:43 +0000 (10:37 -0800)] 
Merge branch 'sk/unit-test-oid'

Convert a few unit tests to the clar framework.

* sk/unit-test-oid:
  t/unit-tests: convert oidtree test to use clar test framework
  t/unit-tests: convert oidmap test to use clar test framework
  t/unit-tests: convert oid-array test to use clar test framework
  t/unit-tests: implement clar specific oid helper functions

15 months agoMerge branch 'ps/path-sans-the-repository'
Junio C Hamano [Wed, 5 Mar 2025 18:37:43 +0000 (10:37 -0800)] 
Merge branch 'ps/path-sans-the-repository'

The path.[ch] API takes an explicit repository parameter passed
throughout the callchain, instead of relying on the_repository
singleton instance.

* ps/path-sans-the-repository:
  path: adjust last remaining users of `the_repository`
  environment: move access to "core.sharedRepository" into repo settings
  environment: move access to "core.hooksPath" into repo settings
  repo-settings: introduce function to clear struct
  path: drop `git_path()` in favor of `repo_git_path()`
  rerere: let `rerere_path()` write paths into a caller-provided buffer
  path: drop `git_common_path()` in favor of `repo_common_path()`
  worktree: return allocated string from `get_worktree_git_dir()`
  path: drop `git_path_buf()` in favor of `repo_git_path_replace()`
  path: drop `git_pathdup()` in favor of `repo_git_path()`
  path: drop unused `strbuf_git_path()` function
  path: refactor `repo_submodule_path()` family of functions
  submodule: refactor `submodule_to_gitdir()` to accept a repo
  path: refactor `repo_worktree_path()` family of functions
  path: refactor `repo_git_path()` family of functions
  path: refactor `repo_common_path()` family of functions

15 months agodocs: fix repository-layout when building with breaking changes
Phillip Wood [Wed, 5 Mar 2025 10:42:37 +0000 (10:42 +0000)] 
docs: fix repository-layout when building with breaking changes

Since commit 8ccc75c2452 (remote: announce removal of "branches/" and
"remotes/", 2025-01-22) enabling WITH_BREAKING_CHANGES when building git
removes support for reading branches from ".git/branches" and remotes
from ".git/remotes". However those locations are still documented in
gitrepository-layout.adoc even though the build does not support them.

Rectify this by adding a new document attribute "with-breaking-changes"
and use it to make the inclusion of those sections of the documentation
conditional. Note that the name of the attribute does not match the test
prerequisite WITHOUT_BREAKING_CHANGES added in c5bc9a7f94a (Makefile:
wire up build option for deprecated features, 2025-01-22). This is to
avoid the awkward double negative ifndef::without_breaking_changes for
documentation that should be included when WITH_BREAKING_CHANGES is
enabled. The test prerequisite will be renamed to match the
documentation attribute in a future patch series.

Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agot1403: verify that path exists and is a file
Mahendra Dani [Tue, 4 Mar 2025 11:27:28 +0000 (16:57 +0530)] 
t1403: verify that path exists and is a file

Verify that if the path exists then it is a file using test_path_is_file().

Signed-off-by: Mahendra Dani <danimahendra0904@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agot/unit-tests: convert urlmatch-normalization test to clar
Seyi Kuforiji [Tue, 4 Mar 2025 11:33:23 +0000 (12:33 +0100)] 
t/unit-tests: convert urlmatch-normalization test to clar

Adapt urlmatch-normalization test file to use clar testing framework by
using clar assertions where necessary.

Mentored-by: Patrick Steinhardt <ps@pks.im>
Mentored-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Signed-off-by: Seyi Kuforiji <kuforiji98@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agot/unit-tests: convert trailer test to use clar
Seyi Kuforiji [Tue, 4 Mar 2025 11:33:22 +0000 (12:33 +0100)] 
t/unit-tests: convert trailer test to use clar

Adapt trailer test file to use clar testing framework by using clar
assertions where necessary. Split test into individual test functions
for clarity and maintainability. Each test case now has its own
function, making it easier to isolate failures and improve test
readability.

Mentored-by: Patrick Steinhardt <ps@pks.im>
Mentored-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Signed-off-by: Seyi Kuforiji <kuforiji98@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agoreftable: release name on reftable_reader_new() error
René Scharfe [Tue, 4 Mar 2025 16:11:54 +0000 (17:11 +0100)] 
reftable: release name on reftable_reader_new() error

If block_source_read_block() or parse_footer() fail, we leak the "name"
member of struct reftable_reader in reftable_reader_new().  Release it.

Reported by: H Z <shiyuyuranzh@gmail.com>
Helped-by: Jeff King <peff@peff.net>
Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agoGit 2.49-rc1 v2.49.0-rc1
Junio C Hamano [Tue, 4 Mar 2025 16:19:20 +0000 (08:19 -0800)] 
Git 2.49-rc1

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agorefs: show --no-reflog in the help text
Junio C Hamano [Mon, 3 Mar 2025 22:51:29 +0000 (14:51 -0800)] 
refs: show --no-reflog in the help text

We forgot that we must keep the documentation and help text in sync.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agoxdiff: *.txt -> *.adoc fixes
Todd Zullinger [Mon, 3 Mar 2025 20:44:32 +0000 (15:44 -0500)] 
xdiff: *.txt -> *.adoc fixes

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agounpack-trees.c: *.txt -> *.adoc fixes
Todd Zullinger [Mon, 3 Mar 2025 20:44:31 +0000 (15:44 -0500)] 
unpack-trees.c: *.txt -> *.adoc fixes

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agotransport.h: *.txt -> *.adoc fixes
Todd Zullinger [Mon, 3 Mar 2025 20:44:30 +0000 (15:44 -0500)] 
transport.h: *.txt -> *.adoc fixes

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agotrace2/tr2_sysenv.c: *.txt -> *.adoc fixes
Todd Zullinger [Mon, 3 Mar 2025 20:44:29 +0000 (15:44 -0500)] 
trace2/tr2_sysenv.c: *.txt -> *.adoc fixes

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agotrace2.h: *.txt -> *.adoc fixes
Todd Zullinger [Mon, 3 Mar 2025 20:44:28 +0000 (15:44 -0500)] 
trace2.h: *.txt -> *.adoc fixes

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agot6434: *.txt -> *.adoc fixes
Todd Zullinger [Mon, 3 Mar 2025 20:44:27 +0000 (15:44 -0500)] 
t6434: *.txt -> *.adoc fixes

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agot6012: *.txt -> *.adoc fixes
Todd Zullinger [Mon, 3 Mar 2025 20:44:26 +0000 (15:44 -0500)] 
t6012: *.txt -> *.adoc fixes

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agot/helper/test-rot13-filter.c: *.txt -> *.adoc fixes
Todd Zullinger [Mon, 3 Mar 2025 20:44:25 +0000 (15:44 -0500)] 
t/helper/test-rot13-filter.c: *.txt -> *.adoc fixes

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agosimple-ipc.h: *.txt -> *.adoc fixes
Todd Zullinger [Mon, 3 Mar 2025 20:44:24 +0000 (15:44 -0500)] 
simple-ipc.h: *.txt -> *.adoc fixes

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agosetup.c: *.txt -> *.adoc fixes
Todd Zullinger [Mon, 3 Mar 2025 20:44:23 +0000 (15:44 -0500)] 
setup.c: *.txt -> *.adoc fixes

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agorefs.h: *.txt -> *.adoc fixes
Todd Zullinger [Mon, 3 Mar 2025 20:44:22 +0000 (15:44 -0500)] 
refs.h: *.txt -> *.adoc fixes

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agopseudo-merge.h: *.txt -> *.adoc fixes
Todd Zullinger [Mon, 3 Mar 2025 20:44:21 +0000 (15:44 -0500)] 
pseudo-merge.h: *.txt -> *.adoc fixes

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agoparse-options.h: *.txt -> *.adoc fixes
Todd Zullinger [Mon, 3 Mar 2025 20:44:20 +0000 (15:44 -0500)] 
parse-options.h: *.txt -> *.adoc fixes

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agoobject-name.c: *.txt -> *.adoc fixes
Todd Zullinger [Mon, 3 Mar 2025 20:44:19 +0000 (15:44 -0500)] 
object-name.c: *.txt -> *.adoc fixes

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agolist-objects-filter-options.h: *.txt -> *.adoc fixes
Todd Zullinger [Mon, 3 Mar 2025 20:44:18 +0000 (15:44 -0500)] 
list-objects-filter-options.h: *.txt -> *.adoc fixes

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agofsck.h: *.txt -> *.adoc fixes
Todd Zullinger [Mon, 3 Mar 2025 20:44:17 +0000 (15:44 -0500)] 
fsck.h: *.txt -> *.adoc fixes

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agodiffcore.h: *.txt -> *.adoc fixes
Todd Zullinger [Mon, 3 Mar 2025 20:44:16 +0000 (15:44 -0500)] 
diffcore.h: *.txt -> *.adoc fixes

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agodiff.h: *.txt -> *.adoc fixes
Todd Zullinger [Mon, 3 Mar 2025 20:44:15 +0000 (15:44 -0500)] 
diff.h: *.txt -> *.adoc fixes

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agocontrib/long-running-filter: *.txt -> *.adoc fixes
Todd Zullinger [Mon, 3 Mar 2025 20:44:14 +0000 (15:44 -0500)] 
contrib/long-running-filter: *.txt -> *.adoc fixes

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agoconfig.c: *.txt -> *.adoc fixes
Todd Zullinger [Mon, 3 Mar 2025 20:44:13 +0000 (15:44 -0500)] 
config.c: *.txt -> *.adoc fixes

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agobuiltin.h: *.txt -> *.adoc fixes
Todd Zullinger [Mon, 3 Mar 2025 20:44:12 +0000 (15:44 -0500)] 
builtin.h: *.txt -> *.adoc fixes

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agoapply.c: *.txt -> *.adoc fixes
Todd Zullinger [Mon, 3 Mar 2025 20:44:11 +0000 (15:44 -0500)] 
apply.c: *.txt -> *.adoc fixes

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agoadvice.h: *.txt -> *.adoc fixes
Todd Zullinger [Mon, 3 Mar 2025 20:44:10 +0000 (15:44 -0500)] 
advice.h: *.txt -> *.adoc fixes

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agodoc: *.txt -> *.adoc fixes
Todd Zullinger [Mon, 3 Mar 2025 20:44:09 +0000 (15:44 -0500)] 
doc: *.txt -> *.adoc fixes

Update a few more instances of Documentation/*.txt files which have been
renamed to *.adoc.

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agotechnical/partial-clone: update reference to rev-list-options.adoc
Todd Zullinger [Mon, 3 Mar 2025 20:44:08 +0000 (15:44 -0500)] 
technical/partial-clone: update reference to rev-list-options.adoc

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agohowto/new-command: update reference to builtin docs
Todd Zullinger [Mon, 3 Mar 2025 20:44:07 +0000 (15:44 -0500)] 
howto/new-command: update reference to builtin docs

Commit ec14d4ecb5 (builtin.h: take over documentation from
api-builtin.txt, 2017-08-02) deleted api-builtin.txt and moved the
contents into builtin.h.  Most of the references were fixed in
d85e9448dd (new-command.txt: update reference to builtin docs,
2023-02-04), but one remained.  Fix it.

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agoMyFirstObjectWalk: *.txt -> *.adoc fixes
Todd Zullinger [Mon, 3 Mar 2025 20:44:06 +0000 (15:44 -0500)] 
MyFirstObjectWalk: *.txt -> *.adoc fixes

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agoMyFirstContribution: *.txt -> *.adoc fixes
Todd Zullinger [Mon, 3 Mar 2025 20:44:05 +0000 (15:44 -0500)] 
MyFirstContribution: *.txt -> *.adoc fixes

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agoCodingGuidelines: *.txt -> *.adoc fixes
Todd Zullinger [Mon, 3 Mar 2025 20:44:04 +0000 (15:44 -0500)] 
CodingGuidelines: *.txt -> *.adoc fixes

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agoREADME: *.txt -> *.adoc fixes
Todd Zullinger [Mon, 3 Mar 2025 20:44:03 +0000 (15:44 -0500)] 
README: *.txt -> *.adoc fixes

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agoMakefile: update reference to technical/racy-git.adoc
Todd Zullinger [Mon, 3 Mar 2025 20:44:02 +0000 (15:44 -0500)] 
Makefile: update reference to technical/racy-git.adoc

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agodoc: remove unneeded .gitattributes
Todd Zullinger [Mon, 3 Mar 2025 20:44:01 +0000 (15:44 -0500)] 
doc: remove unneeded .gitattributes

The top-level .gitattributes file contains entries for the Documentation
tree.  Documentation/.gitattributes has not been touched since it was
added in 14f9e128d3 (Define the project whitespace policy, 2008-02-10).

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months ago.gitattributes: more *.txt -> *.adoc updates
Todd Zullinger [Mon, 3 Mar 2025 20:44:00 +0000 (15:44 -0500)] 
.gitattributes: more *.txt -> *.adoc updates

All Documentation files now end in .adoc.  Update the entries for
git-merge.adoc, gitk.adoc, and user-manual.adoc to properly set the
conflict-marker-size attribute.

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agot0450: *.txt -> *.adoc fixes
Todd Zullinger [Mon, 3 Mar 2025 20:43:59 +0000 (15:43 -0500)] 
t0450: *.txt -> *.adoc fixes

After 1f010d6bdf (doc: use .adoc extension for AsciiDoc files,
2025-01-20), we no longer matched any files in this test.  The result is
that we did not test for mismatches in the documentation and --help
output.

Adjust the test to look at the renamed *.adoc files.

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agoBreakingChanges: clarify the procedure
Junio C Hamano [Fri, 28 Feb 2025 17:28:21 +0000 (09:28 -0800)] 
BreakingChanges: clarify the procedure

The point behind a compile-time switch is to ensure that we have a
mechanism to hide myriad of backward incompatible changes that may
be prepared and accumulated over time, yet make them available for
testing any time during the development toward the big version
boundary.  Add a few words to stress that point.

Since the document was first written, we have added the CI job that
the document anticipated us to have.  Rephrase to state the current
status.

The discussion in [*1*] made us abandon the "feature.git3" based
runtime switching of behaviour and instead adopt the compile-time
switching mechanism, but a stray sentence about runtime switching
still remained in the final text by mistake.  Remove it.

[Reference]

 *1* https://lore.kernel.org/git/xmqqldzel6ug.fsf@gitster.g/

Signed-off-by: Junio C Hamano <gitster@pobox.com>
Acked-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agodoc: add technical design doc for large object promisors
Christian Couder [Tue, 18 Feb 2025 11:32:04 +0000 (12:32 +0100)] 
doc: add technical design doc for large object promisors

Let's add a design doc about how we could improve handling liarge blobs
using "Large Object Promisors" (LOPs). It's a set of features with the
goal of using special dedicated promisor remotes to store large blobs,
and having them accessed directly by main remotes and clients.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agoA few more before -rc1
Junio C Hamano [Mon, 3 Mar 2025 16:52:50 +0000 (08:52 -0800)] 
A few more before -rc1

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agoMerge branch 'ps/build-meson-fixes'
Junio C Hamano [Mon, 3 Mar 2025 16:53:03 +0000 (08:53 -0800)] 
Merge branch 'ps/build-meson-fixes'

CI fix.

* ps/build-meson-fixes:
  gitlab-ci: fix "msvc-meson" test job succeeding despite test failures

15 months agoMerge branch 'ps/meson-contrib-bits'
Junio C Hamano [Mon, 3 Mar 2025 16:53:02 +0000 (08:53 -0800)] 
Merge branch 'ps/meson-contrib-bits'

Update meson-based build procedure to cover contrib/ and other
places as well.

* ps/meson-contrib-bits:
  ci: exercise credential helpers
  ci: fix propagating UTF-8 test locale in musl-based Meson job
  meson: wire up static analysis via Coccinelle
  meson: wire up git-contacts(1)
  meson: wire up credential helpers
  contrib/credential: fix compilation of "osxkeychain" helper
  contrib/credential: fix compiling "libsecret" helper
  contrib/credential: fix compilation of wincred helper with MSVC
  contrib/credential: fix "netrc" tests with out-of-tree builds
  GIT-BUILD-OPTIONS: propagate project's source directory

15 months agoMerge branch 'ms/merge-recursive-string-list-micro-optimization'
Junio C Hamano [Mon, 3 Mar 2025 16:53:02 +0000 (08:53 -0800)] 
Merge branch 'ms/merge-recursive-string-list-micro-optimization'

Rename processing in the recursive merge backend has seen a micro
optimization.

* ms/merge-recursive-string-list-micro-optimization:
  merge-recursive: optimize time complexity for process_renames

15 months agoMerge branch 'lo/doc-merge-submodule-update'
Junio C Hamano [Mon, 3 Mar 2025 16:53:02 +0000 (08:53 -0800)] 
Merge branch 'lo/doc-merge-submodule-update'

What happens to submodules during merge has been documented in a
bit more detail.

* lo/doc-merge-submodule-update:
  merge-strategies.adoc: detail submodule merge

15 months agoMerge branch 'ps/build-meson-fixes-0130'
Junio C Hamano [Mon, 3 Mar 2025 16:53:01 +0000 (08:53 -0800)] 
Merge branch 'ps/build-meson-fixes-0130'

Assorted fixes and improvements to the build procedure based on
meson.

* ps/build-meson-fixes-0130:
  gitlab-ci: restrict maximum number of link jobs on Windows
  meson: consistently use custom program paths to resolve programs
  meson: fix overwritten `git` variable
  meson: prevent finding sed(1) in a loop
  meson: improve handling of `sane_tool_path` option
  meson: improve PATH handling
  meson: drop separate version library
  meson: stop linking libcurl into all executables
  meson: introduce `libgit_curl` dependency
  meson: simplify use of the common-main library
  meson: inline the static 'git' library
  meson: fix OpenSSL fallback when not explicitly required
  meson: fix exec path with enabled runtime prefix

15 months agoMerge branch 'dk/test-aggregate-results-paste-fix'
Junio C Hamano [Mon, 3 Mar 2025 16:53:01 +0000 (08:53 -0800)] 
Merge branch 'dk/test-aggregate-results-paste-fix'

The use of "paste" command for aggregating the test results have
been corrected.

* dk/test-aggregate-results-paste-fix:
  t/aggregate-results: fix paste(1) invocation

15 months agoeditorconfig: add .bash extension
David Mandelberg [Sun, 2 Mar 2025 20:54:44 +0000 (15:54 -0500)] 
editorconfig: add .bash extension

Both files in the command below appear to be indented with tabs, and I'd
expect .bash files to have roughly the same style as .sh files.

$ find . -name \*.bash
./contrib/completion/git-completion.bash
./ci/check-directional-formatting.bash

Signed-off-by: David Mandelberg <david@mandelberg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agomeson: fix building technical and howto docs
Phillip Wood [Sun, 2 Mar 2025 16:02:30 +0000 (16:02 +0000)] 
meson: fix building technical and howto docs

When our asciidoc files were renamed from "*.txt" to "*.adoc" in
1f010d6bdf7 (doc: use .adoc extension for AsciiDoc files, 2025-01-20)
the "meson.build" file in "Documentation" was updated but the
"meson.build" files in the "technical" and "howto" subdirectories were
not. This causes the meson build to fail when configured with
-Ddocs=html. Fix this by updating the relevant "meson.build" files.

Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
Acked-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agobuiltin/diff-pairs: allow explicit diff queue flush
Justin Tobler [Fri, 28 Feb 2025 21:33:46 +0000 (15:33 -0600)] 
builtin/diff-pairs: allow explicit diff queue flush

The diffs queued from git-diff-pairs(1) are flushed when stdin is
closed. To enable greater flexibility, allow control over when the diff
queue is flushed by writing a single NUL byte on stdin between input
file pairs. Diff output between flushes is separated by a single NUL
byte.

Signed-off-by: Justin Tobler <jltobler@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agobuiltin: introduce diff-pairs command
Justin Tobler [Fri, 28 Feb 2025 21:33:45 +0000 (15:33 -0600)] 
builtin: introduce diff-pairs command

Through git-diff(1), a single diff can be generated from a pair of blob
revisions directly. Unfortunately, there is not a mechanism to compute
batches of specific file pair diffs in a single process. Such a feature
is particularly useful on the server-side where diffing between a large
set of changes is not feasible all at once due to timeout concerns.

To facilitate this, introduce git-diff-pairs(1) which acts as a backend
passing its NUL-terminated raw diff format input from stdin through diff
machinery to produce various forms of output such as patch or raw.

The raw format was originally designed as an interchange format and
represents the contents of the diff_queued_diff list making it possible
to break the diff pipeline into separate stages. For example,
git-diff-tree(1) can be used as a frontend to compute file pairs to
queue and feed its raw output to git-diff-pairs(1) to compute patches.
With this, batches of diffs can be progressively generated without
having to recompute renames or retrieve object context. Something like
the following:

git diff-tree -r -z -M $old $new |
git diff-pairs -p -z

should generate the same output as `git diff-tree -p -M`. Furthermore,
each line of raw diff formatted input can also be individually fed to a
separate git-diff-pairs(1) process and still produce the same output.

Based-on-patch-by: Jeff King <peff@peff.net>
Signed-off-by: Justin Tobler <jltobler@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agodiff: add option to skip resolving diff statuses
Justin Tobler [Fri, 28 Feb 2025 21:33:44 +0000 (15:33 -0600)] 
diff: add option to skip resolving diff statuses

By default, `diffcore_std()` resolves the statuses for queued diff file
pairs by calling `diff_resolve_rename_copy()`. If status information is
already manually set, invoking `diffcore_std()` may change the status
value.

Introduce the `skip_resolving_statuses` diff option that prevents
`diffcore_std()` from resolving file pair statuses when enabled.

Signed-off-by: Justin Tobler <jltobler@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agodiff: return diff_filepair from diff queue helpers
Justin Tobler [Fri, 28 Feb 2025 21:33:43 +0000 (15:33 -0600)] 
diff: return diff_filepair from diff queue helpers

The `diff_addremove()` and `diff_change()` functions set up and queue
diffs, but do not return the `diff_filepair` added to the queue. In a
subsequent commit, modifications to `diff_filepair` need to occur in
certain cases after being queued.

Since the existing `diff_addremove()` and `diff_change()` are also used
for callbacks in `diff_options` as types `add_remove_fn_t` and
`change_fn_t`, modifying the existing function signatures requires
further changes. The diff options for pruning use `file_add_remove()`
and `file_change()` where file pairs do not even get queued. Thus,
separate functions are implemented instead.

Split out the queuing operations into `diff_queue_addremove()` and
`diff_queue_change()` which also return a handle to the queued
`diff_filepair`. Both `diff_addremove()` and `diff_change()` are
reimplemented as thin wrappers around the new functions.

Signed-off-by: Justin Tobler <jltobler@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agodoc: fix build-docdep.perl
Junio C Hamano [Sat, 1 Mar 2025 18:25:10 +0000 (10:25 -0800)] 
doc: fix build-docdep.perl

We renamed from .txt to .adoc all the asciidoc source files and
necessary includes.  We also need to adjust the build-docdep tool to
work on files whose suffix is .adoc when computing the documentation
dependencies.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agocontrib/subtree: rename .txt to .adoc
Todd Zullinger [Sat, 1 Mar 2025 15:36:04 +0000 (10:36 -0500)] 
contrib/subtree: rename .txt to .adoc

The .txt extensions were changed to .adoc in 1f010d6bdf (doc: use .adoc
extension for AsciiDoc files, 2025-01-20).

Do the same for contrib/subtree.

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agocontrib/contacts: rename .txt to .adoc
Todd Zullinger [Sat, 1 Mar 2025 15:36:03 +0000 (10:36 -0500)] 
contrib/contacts: rename .txt to .adoc

The .txt extensions were changed to .adoc in 1f010d6bdf (doc: use .adoc
extension for AsciiDoc files, 2025-01-20).

Do the same for contrib/contacts.

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agodoc: update howto-index.sh for .adoc extensions
Todd Zullinger [Sat, 1 Mar 2025 15:36:02 +0000 (10:36 -0500)] 
doc: update howto-index.sh for .adoc extensions

The .txt extensions were changed to .adoc in 1f010d6bdf (doc: use .adoc
extension for AsciiDoc files, 2025-01-20).  This left broken links in
the generated howto-index.html.

Signed-off-by: Todd Zullinger <tmz@pobox.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agoMerge branch 'ps/meson-contrib-bits' into tz/doc-txt-to-adoc-fixes
Junio C Hamano [Sat, 1 Mar 2025 18:00:45 +0000 (10:00 -0800)] 
Merge branch 'ps/meson-contrib-bits' into tz/doc-txt-to-adoc-fixes

* ps/meson-contrib-bits:
  ci: exercise credential helpers
  ci: fix propagating UTF-8 test locale in musl-based Meson job
  meson: wire up static analysis via Coccinelle
  meson: wire up git-contacts(1)
  meson: wire up credential helpers
  contrib/credential: fix compilation of "osxkeychain" helper
  contrib/credential: fix compiling "libsecret" helper
  contrib/credential: fix compilation of wincred helper with MSVC
  contrib/credential: fix "netrc" tests with out-of-tree builds
  GIT-BUILD-OPTIONS: propagate project's source directory

15 months agopath: adjust last remaining users of `the_repository`
Patrick Steinhardt [Fri, 7 Feb 2025 11:03:41 +0000 (12:03 +0100)] 
path: adjust last remaining users of `the_repository`

With the preceding refactorings we now only have a couple of implicit
users of `the_repository` left in the "path" subsystem, all of which
depend on global state via `calc_shared_perm()`. Make the dependency on
`the_repository` explicit by passing the repo as a parameter instead and
adjust callers accordingly.

Note that this change bubbles up into a couple of subsystems that were
previously declared as free from `the_repository`. Instead of marking
all of them as `the_repository`-dependent again, we instead use the
repository that is available in the calling context. There are three
exceptions though with "copy.c", "pack-write.c" and "tempfile.c".
Adjusting these would require us to adapt callsites all over the place,
so this is left for a future iteration.

Mark "path.c" as free from `the_repository`.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agoenvironment: move access to "core.sharedRepository" into repo settings
Patrick Steinhardt [Fri, 7 Feb 2025 11:03:40 +0000 (12:03 +0100)] 
environment: move access to "core.sharedRepository" into repo settings

Similar as with the preceding commit, we track "core.sharedRepository"
via a pair of global variables. Move them into `struct repo_settings` so
that we can instead track them per-repository.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agoenvironment: move access to "core.hooksPath" into repo settings
Patrick Steinhardt [Fri, 7 Feb 2025 11:03:39 +0000 (12:03 +0100)] 
environment: move access to "core.hooksPath" into repo settings

The "core.hooksPath" setting is stored in a global variable and
populated via the `git_default_core_config`. This may cause issues in
the case where one is handling multiple different repositories in a
single process with different values for that config key, as we may or
may not see the correct value in that case. Furthermore, global state
blocks our path towards libification.

Refactor the code so that we instead store the value in `struct
repo_settings`. The value is computed as-needed and cached. The result
should be functionally the same as there aren't ever any code paths
where we'd execute hooks outside the context of a repository.

Note that this requires us to change the passed-in repository in the
`repo_git_path()` family of functions to be non-constant, as we call
`adjust_git_path()` there.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agorepo-settings: introduce function to clear struct
Patrick Steinhardt [Fri, 7 Feb 2025 11:03:38 +0000 (12:03 +0100)] 
repo-settings: introduce function to clear struct

We don't provide a way to clear a `struct repo_settings`, and instead
open-code this in `repo_clear()`. This is mixing up concerns and means
that developers have to touch multiple files whenever they add a new
field to the structure in case the associated resources need to be
released.

Provide a new `repo_settings_clear()` function to improve this.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agopath: drop `git_path()` in favor of `repo_git_path()`
Patrick Steinhardt [Fri, 7 Feb 2025 11:03:37 +0000 (12:03 +0100)] 
path: drop `git_path()` in favor of `repo_git_path()`

Remove `git_path()` in favor of the `repo_git_path()` family of
functions, which makes the implicit dependency on `the_repository` go
away.

Note that `git_path()` returned a string allocated via `get_pathname()`,
which uses a rotating set of statically allocated buffers. Consequently,
callers didn't have to free the returned string. The same isn't true for
`repo_common_path()`, so we also have to add logic to free the returned
strings.

This refactoring also allows us to remove `repo_common_pathv()` as well
as `get_pathname()` from the public interface.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agorerere: let `rerere_path()` write paths into a caller-provided buffer
Patrick Steinhardt [Fri, 7 Feb 2025 11:03:36 +0000 (12:03 +0100)] 
rerere: let `rerere_path()` write paths into a caller-provided buffer

Same as with `get_worktree_git_dir()` a couple of commits ago, the
`rerere_path()` function returns paths that need not be free'd by the
caller because `git_path()` internally uses `get_pathname()`.

Refactor the function to instead accept a caller-provided buffer that
the path will be written into, passing on ownership to the caller. This
refactoring prepares us for the removal of `git_path()`.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agoA bit more post -rc0
Junio C Hamano [Thu, 27 Feb 2025 23:22:47 +0000 (15:22 -0800)] 
A bit more post -rc0

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 months agoMerge branch 'jc/3.0-branches-remotes-update'
Junio C Hamano [Thu, 27 Feb 2025 23:23:01 +0000 (15:23 -0800)] 
Merge branch 'jc/3.0-branches-remotes-update'

Removal of ".git/branches" and ".git/remotes" support in the
BreakingChanges document has been further clarified.

* jc/3.0-branches-remotes-update:
  BreakingChanges: clarify branches/ and remotes/