]> git.ipfire.org Git - thirdparty/git.git/log
thirdparty/git.git
8 months agoDocumentation/git-update-ref.txt: drop “flag”
Kristoffer Haugsbakk [Mon, 21 Oct 2024 20:47:24 +0000 (22:47 +0200)] 
Documentation/git-update-ref.txt: drop “flag”

The other paragraphs on options say “With <option>,”.  Let’s be uniform.

Also add missing word “that”.

Signed-off-by: Kristoffer Haugsbakk <code@khaugsbakk.name>
Signed-off-by: Taylor Blau <me@ttaylorr.com>
8 months agoThe second batch
Taylor Blau [Tue, 15 Oct 2024 21:12:40 +0000 (17:12 -0400)] 
The second batch

Signed-off-by: Taylor Blau <me@ttaylorr.com>
8 months agoMerge branch 'jk/fsmonitor-event-listener-race-fix'
Taylor Blau [Tue, 15 Oct 2024 20:56:43 +0000 (16:56 -0400)] 
Merge branch 'jk/fsmonitor-event-listener-race-fix'

On macOS, fsmonitor can fall into a race condition that results in
a client waiting forever to be notified for an event that have
already happened.  This problem has been corrected.

* jk/fsmonitor-event-listener-race-fix:
  fsmonitor: initialize fs event listener before accepting clients
  simple-ipc: split async server initialization and running

8 months agoMerge branch 'xx/remote-server-option-config'
Taylor Blau [Tue, 15 Oct 2024 20:56:43 +0000 (16:56 -0400)] 
Merge branch 'xx/remote-server-option-config'

A new configuration variable remote.<name>.serverOption makes the
transport layer act as if the --serverOption=<value> option is
given from the command line.

* xx/remote-server-option-config:
  ls-remote: leakfix for not clearing server_options
  fetch: respect --server-option when fetching multiple remotes
  transport.c::handshake: make use of server options from remote
  remote: introduce remote.<name>.serverOption configuration
  transport: introduce parse_transport_option() method

8 months agoMerge branch 'js/doc-platform-support-link-fix'
Taylor Blau [Tue, 15 Oct 2024 20:56:43 +0000 (16:56 -0400)] 
Merge branch 'js/doc-platform-support-link-fix'

Docfix.

* js/doc-platform-support-link-fix:
  docs: fix the `maintain-git` links in `technical/platform-support`

8 months agoMerge branch 'jh/config-unset-doc-fix'
Taylor Blau [Tue, 15 Oct 2024 20:56:43 +0000 (16:56 -0400)] 
Merge branch 'jh/config-unset-doc-fix'

Docfix.

* jh/config-unset-doc-fix:
  git-config.1: remove value from positional args in unset usage

8 months agoStart the 2.48 cycle
Junio C Hamano [Thu, 10 Oct 2024 21:22:07 +0000 (14:22 -0700)] 
Start the 2.48 cycle

Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoMerge branch 'jk/output-prefix-cleanup'
Junio C Hamano [Thu, 10 Oct 2024 21:22:29 +0000 (14:22 -0700)] 
Merge branch 'jk/output-prefix-cleanup'

Code clean-up.

* jk/output-prefix-cleanup:
  diff: store graph prefix buf in git_graph struct
  diff: return line_prefix directly when possible
  diff: return const char from output_prefix callback
  diff: drop line_prefix_length field
  line-log: use diff_line_prefix() instead of custom helper

8 months agoMerge branch 'ps/leakfixes-part-8'
Junio C Hamano [Thu, 10 Oct 2024 21:22:27 +0000 (14:22 -0700)] 
Merge branch 'ps/leakfixes-part-8'

More leakfixes.

* ps/leakfixes-part-8: (23 commits)
  builtin/send-pack: fix leaking list of push options
  remote: fix leaking push reports
  t/helper: fix leaks in proc-receive helper
  pack-write: fix return parameter of `write_rev_file_order()`
  revision: fix leaking saved parents
  revision: fix memory leaks when rewriting parents
  midx-write: fix leaking buffer
  pack-bitmap-write: fix leaking OID array
  pseudo-merge: fix leaking strmap keys
  pseudo-merge: fix various memory leaks
  line-log: fix several memory leaks
  diff: improve lifecycle management of diff queues
  builtin/revert: fix leaking `gpg_sign` and `strategy` config
  t/helper: fix leaking repository in partial-clone helper
  builtin/clone: fix leaking repo state when cloning with bundle URIs
  builtin/pack-redundant: fix various memory leaks
  builtin/stash: fix leaking `pathspec_from_file`
  submodule: fix leaking submodule entry list
  wt-status: fix leaking buffer with sparse directories
  shell: fix leaking strings
  ...

8 months agoMerge branch 'ds/line-log-asan-fix'
Junio C Hamano [Thu, 10 Oct 2024 21:22:27 +0000 (14:22 -0700)] 
Merge branch 'ds/line-log-asan-fix'

Use after free and double freeing at the end in "git log -L... -p"
had been identified and fixed.

* ds/line-log-asan-fix:
  line-log: protect inner strbuf from free

8 months agoMerge branch 'sk/doc-maintenance-schedule'
Junio C Hamano [Thu, 10 Oct 2024 21:22:26 +0000 (14:22 -0700)] 
Merge branch 'sk/doc-maintenance-schedule'

Doc update to clarify how periodical maintenance are scheduled,
spread across time to avoid thundering hurds.

* sk/doc-maintenance-schedule:
  doc: add a note about staggering of maintenance

8 months agoMerge branch 'tb/notes-amlog-doc'
Junio C Hamano [Thu, 10 Oct 2024 21:22:25 +0000 (14:22 -0700)] 
Merge branch 'tb/notes-amlog-doc'

Document "amlog" notes.

* tb/notes-amlog-doc:
  Documentation: mention the amlog in howto/maintain-git.txt

8 months agoMerge branch 'ps/reftable-alloc-failures'
Junio C Hamano [Thu, 10 Oct 2024 21:22:24 +0000 (14:22 -0700)] 
Merge branch 'ps/reftable-alloc-failures'

The reftable library is now prepared to expect that the memory
allocation function given to it may fail to allocate and to deal
with such an error.

* ps/reftable-alloc-failures: (26 commits)
  reftable/basics: fix segfault when growing `names` array fails
  reftable/basics: ban standard allocator functions
  reftable: introduce `REFTABLE_FREE_AND_NULL()`
  reftable: fix calls to free(3P)
  reftable: handle trivial allocation failures
  reftable/tree: handle allocation failures
  reftable/pq: handle allocation failures when adding entries
  reftable/block: handle allocation failures
  reftable/blocksource: handle allocation failures
  reftable/iter: handle allocation failures when creating indexed table iter
  reftable/stack: handle allocation failures in auto compaction
  reftable/stack: handle allocation failures in `stack_compact_range()`
  reftable/stack: handle allocation failures in `reftable_new_stack()`
  reftable/stack: handle allocation failures on reload
  reftable/reader: handle allocation failures in `reader_init_iter()`
  reftable/reader: handle allocation failures for unindexed reader
  reftable/merged: handle allocation failures in `merged_table_init_iter()`
  reftable/writer: handle allocation failures in `reftable_new_writer()`
  reftable/writer: handle allocation failures in `writer_index_hash()`
  reftable/record: handle allocation failures when decoding records
  ...

8 months agoMerge branch 'ja/doc-synopsis-markup'
Junio C Hamano [Thu, 10 Oct 2024 21:22:24 +0000 (14:22 -0700)] 
Merge branch 'ja/doc-synopsis-markup'

The way AsciiDoc is used for SYNOPSIS part of the manual pages has
been revamped.  The sources, at least for the simple cases, got
vastly pleasant to work with.

* ja/doc-synopsis-markup:
  doc: apply synopsis simplification on git-clone and git-init
  doc: update the guidelines to reflect the current formatting rules
  doc: introduce a synopsis typesetting

8 months agogit-config.1: remove value from positional args in unset usage
Josh Heinrichs [Tue, 8 Oct 2024 14:29:20 +0000 (08:29 -0600)] 
git-config.1: remove value from positional args in unset usage

The synopsis for `git config unset` mentions two positional arguments:
`<name>` and `<value>`. While the first argument is correct, the second
is not. Users are expected to provide the value via `--value=<value>`.

Remove the positional argument. The `--value=<value>` option is already
documented correctly, so this is all we need to do to fix the
documentation.

Signed-off-by: Josh Heinrichs <joshiheinrichs@gmail.com>
Reviewed-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agofsmonitor: initialize fs event listener before accepting clients
Jeff King [Tue, 8 Oct 2024 08:36:13 +0000 (04:36 -0400)] 
fsmonitor: initialize fs event listener before accepting clients

There's a racy hang in fsmonitor on macOS that we sometimes see in CI.
When we serve a client, what's supposed to happen is:

  1. The client thread calls with_lock__wait_for_cookie() in which we
     create a cookie file and then wait for a pthread_cond event

  2. The filesystem event listener sees the cookie file creation, does
     some internal book-keeping, and then triggers the pthread_cond.

But there's a problem: we start the listener that accepts client threads
before we start the fs event thread. So it's possible for us to accept a
client which creates the cookie file and starts waiting before the fs
event thread is initialized, and we miss those filesystem events
entirely. That leaves the client thread hanging forever.

In CI, the symptom is that t9210 (which is testing scalar, which always
enables fsmonitor under the hood) may hang forever in "scalar clone". It
is waiting on "git fetch" which is waiting on the fsmonitor daemon.

The race happens more frequently under load, but you can trigger it
predictably with a sleep like this, which delays the start of the fs
event thread:

  --- a/compat/fsmonitor/fsm-listen-darwin.c
  +++ b/compat/fsmonitor/fsm-listen-darwin.c
  @@ -510,6 +510,7 @@ void fsm_listen__loop(struct fsmonitor_daemon_state *state)
          FSEventStreamSetDispatchQueue(data->stream, data->dq);
          data->stream_scheduled = 1;

  +       sleep(1);
          if (!FSEventStreamStart(data->stream)) {
                  error(_("Failed to start the FSEventStream"));
                  goto force_error_stop_without_loop;

One solution might be to reverse the order of initialization: start the
fs event thread before we start the thread listening for clients. But
the fsmonitor code explicitly does it in the opposite direction. The fs
event thread wants to refer to the ipc_server_data struct, so we need it
to be initialized first.

A further complication is that we need a signal from the fs event thread
that it is actually ready and listening. And those details happen within
backend-specific fsmonitor code, whereas the initialization is in the
shared code.

So instead, let's use the ipc_server init/start split added in the
previous commit. The generic fsmonitor code will init the ipc_server but
_not_ start it, leaving that to the backend specific code, which now
needs to call ipc_server_start_async() at the right time.

For macOS, that is right after we start the FSEventStream that you can
see in the diff above.

It's not clear to me if Windows suffers from the same problem (and we
simply don't trigger it in CI), or if it is immune. Regardless, the
obvious place to start accepting clients there is right after we've
established the ReadDirectoryChanges watch.

This makes the hangs go away in our macOS CI environment, even when
compiled with the sleep() above.

Helped-by: Koji Nakamaru <koji.nakamaru@gree.net>
Signed-off-by: Jeff King <peff@peff.net>
Acked-by: Koji Nakamaru <koji.nakamaru@gree.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agosimple-ipc: split async server initialization and running
Jeff King [Tue, 8 Oct 2024 08:33:47 +0000 (04:33 -0400)] 
simple-ipc: split async server initialization and running

To start an async ipc server, you call ipc_server_run_async(). That
initializes the ipc_server_data object, and starts all of the threads
running, which may immediately start serving clients.

This can create some awkward timing problems, though. In the fsmonitor
daemon (the sole user of the simple-ipc system), we want to create the
ipc server early in the process, which means we may start serving
clients before the rest of the daemon is fully initialized.

To solve this, let's break run_async() into two parts: an initialization
which allocates all data and spawns the threads (without letting them
run), and a start function which actually lets them begin work. Since we
have two simple-ipc implementations, we have to handle this twice:

  - in ipc-unix-socket.c, we have a central listener thread which hands
    connections off to worker threads using a work_available mutex. We
    can hold that mutex after init, and release it when we're ready to
    start.

    We do need an extra "started" flag so that we know whether the main
    thread is holding the mutex or not (e.g., if we prematurely stop the
    server, we want to make sure all of the worker threads are released
    to hear about the shutdown).

  - in ipc-win32.c, we don't have a central mutex. So we'll introduce a
    new startup_barrier mutex, which we'll similarly hold until we're
    ready to let the threads proceed.

    We again need a "started" flag here to make sure that we release the
    barrier mutex when shutting down, so that the sub-threads can
    proceed to the finish.

I've renamed the run_async() function to init_async() to make sure we
catch all callers, since they'll now need to call the matching
start_async().

We could leave run_async() as a wrapper that does both, but there's not
much point. There are only two callers, one of which is fsmonitor, which
will want to actually do work between the two calls. And the other is
just a test-tool wrapper.

For now I've added the start_async() calls in fsmonitor where they would
otherwise have happened, so there should be no behavior change with this
patch.

Signed-off-by: Jeff King <peff@peff.net>
Acked-by: Koji Nakamaru <koji.nakamaru@gree.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agols-remote: leakfix for not clearing server_options
Xing Xin [Tue, 8 Oct 2024 03:38:19 +0000 (03:38 +0000)] 
ls-remote: leakfix for not clearing server_options

Ensure `server_options` is properly cleared using `string_list_clear()`
in `builtin/ls-remote.c:cmd_ls_remote`.

Although we cannot yet enable `TEST_PASSES_SANITIZE_LEAK=true` for
`t/t5702-protocol-v2.sh` due to other existing leaks, this fix ensures
that "git-ls-remote" related server options tests pass the sanitize leak
check:

  ...
  ok 12 - server-options are sent when using ls-remote
  ok 13 - server-options from configuration are used by ls-remote
  ...

Signed-off-by: Xing Xin <xingxin.xx@bytedance.com>
Reviewed-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agofetch: respect --server-option when fetching multiple remotes
Xing Xin [Tue, 8 Oct 2024 03:38:18 +0000 (03:38 +0000)] 
fetch: respect --server-option when fetching multiple remotes

Fix an issue where server options specified via the command line
(`--server-option` or `-o`) were not sent when fetching from multiple
remotes using Git protocol v2.

To reproduce the issue with a repository containing multiple remotes:

  GIT_TRACE_PACKET=1 git -c protocol.version=2 fetch --server-option=demo --all

Observe that no server options are sent to any remote.

The root cause was identified in `builtin/fetch.c:fetch_multiple`, which
is invoked when fetching from more than one remote. This function forks
a `git-fetch` subprocess for each remote but did not include the
specified server options in the subprocess arguments.

This commit ensures that command-line specified server options are
properly passed to each subprocess. Relevant tests have been added.

Signed-off-by: Xing Xin <xingxin.xx@bytedance.com>
Reviewed-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agotransport.c::handshake: make use of server options from remote
Xing Xin [Tue, 8 Oct 2024 03:38:17 +0000 (03:38 +0000)] 
transport.c::handshake: make use of server options from remote

Utilize the `server_options` from the corresponding remote during the
handshake in `transport.c` when Git protocol v2 is detected. This helps
initialize the `server_options` in `transport.h:transport` if no server
options are set for the transport (typically via `--server-option` or
`-o`).

While another potential place to incorporate server options from the
remote is in `transport.c:transport_get`, setting server options for a
transport using a protocol other than v2 could lead to unexpected errors
(see `transport.c:die_if_server_options`).

Relevant tests and documentation have been updated accordingly.

Signed-off-by: Xing Xin <xingxin.xx@bytedance.com>
Reviewed-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoremote: introduce remote.<name>.serverOption configuration
Xing Xin [Tue, 8 Oct 2024 03:38:16 +0000 (03:38 +0000)] 
remote: introduce remote.<name>.serverOption configuration

Currently, server options for Git protocol v2 can only be specified via
the command line option "--server-option" or "-o", which is inconvenient
when users want to specify a list of default options to send. Therefore,
we are introducing a new configuration to hold a list of default server
options, akin to the `push.pushOption` configuration for push options.

Initially, I named the new configuration `fetch.serverOption` to align
with `push.pushOption`. However, after discussing with Patrick, it was
renamed to `remote.<name>.serverOption` as suggested, because:

1. Server options are designed to be server-specific, making it more
   logical to use a per-remote configuration.
2. Using "fetch." prefixed configurations in git-clone or git-ls-remote
   seems out of place and inconsistent in design.

The parsing logic for `remote.<name>.serverOption` also relies on
`transport.c:parse_transport_option`, similar to `push.pushOption`, and
they follow the same priority design:

1. Server options set in lower-priority configuration files (e.g.,
   /etc/gitconfig or $HOME/.gitconfig) can be overridden or unset in
   more specific repository configurations using an empty string.
2. Command-line specified server options take precedence over those from
   the configuration.

Server options from configuration are stored to the corresponding
`remote.h:remote` as a new field `server_options`.  The field will be
utilized in the subsequent commit to help initialize the
`server_options` of `transport.h:transport`.

And documentation have been updated accordingly.

Helped-by: Patrick Steinhardt <ps@pks.im>
Helped-by: Junio C Hamano <gitster@pobox.com>
Reported-by: Liu Zhongbo <liuzhongbo.6666@bytedance.com>
Signed-off-by: Xing Xin <xingxin.xx@bytedance.com>
Reviewed-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agotransport: introduce parse_transport_option() method
Xing Xin [Tue, 8 Oct 2024 03:38:15 +0000 (03:38 +0000)] 
transport: introduce parse_transport_option() method

Add the `parse_transport_option()` method to parse the `push.pushOption`
configuration. This method will also be used in the next commit to
handle the new `remote.<name>.serverOption` configuration for setting
server options in Git protocol v2.

Signed-off-by: Xing Xin <xingxin.xx@bytedance.com>
Reviewed-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agodocs: fix the `maintain-git` links in `technical/platform-support`
Johannes Schindelin [Mon, 7 Oct 2024 21:49:24 +0000 (21:49 +0000)] 
docs: fix the `maintain-git` links in `technical/platform-support`

These links should point to `.html` files, not to `.txt` ones.

Compare also to 4945f046c7f (api docs: link to html version of
api-trace2, 2022-09-16).

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoGit 2.47 v2.47.0
Junio C Hamano [Sun, 6 Oct 2024 22:56:06 +0000 (15:56 -0700)] 
Git 2.47

Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoMerge tag 'l10n-2.47.0-rnd2' of https://github.com/git-l10n/git-po
Junio C Hamano [Sun, 6 Oct 2024 18:14:12 +0000 (11:14 -0700)] 
Merge tag 'l10n-2.47.0-rnd2' of https://github.com/git-l10n/git-po

l10n-2.47.0-rnd2

* tag 'l10n-2.47.0-rnd2' of https://github.com/git-l10n/git-po:
  l10n: Update German translation
  l10n: bg.po: Updated Bulgarian translation (5772t)
  l10n: vi: Updated translation for 2.47
  l10n: zh_TW: Git 2.47
  l10n: new lead for Catalan translation
  l10n: Update Catalan translation
  l10n: fr.po: 2.47.0
  l10n: zh_CN: updated translation for 2.47
  l10n: po-id for 2.47
  l10n: tr: Update Turkish translations for 2.47.0
  l10n: sv.po: Update Swedish translation

8 months agoMerge branch 'l10n-de-2.47' of github.com:ralfth/git
Jiang Xin [Sun, 6 Oct 2024 04:06:21 +0000 (12:06 +0800)] 
Merge branch 'l10n-de-2.47' of github.com:ralfth/git

* 'l10n-de-2.47' of github.com:ralfth/git:
  l10n: Update German translation

8 months agoMerge branch 'master' of github.com:alshopov/git-po
Jiang Xin [Sun, 6 Oct 2024 04:04:11 +0000 (12:04 +0800)] 
Merge branch 'master' of github.com:alshopov/git-po

* 'master' of github.com:alshopov/git-po:
  l10n: bg.po: Updated Bulgarian translation (5772t)

8 months agoMerge branch 'catalan-247' of github.com:Softcatala/git-po
Jiang Xin [Sun, 6 Oct 2024 04:03:46 +0000 (12:03 +0800)] 
Merge branch 'catalan-247' of github.com:Softcatala/git-po

* 'catalan-247' of github.com:Softcatala/git-po:
  l10n: Update Catalan translation

8 months agoMerge branch 'new-catalan-maintainer' of github.com:Softcatala/git-po
Jiang Xin [Sun, 6 Oct 2024 04:03:08 +0000 (12:03 +0800)] 
Merge branch 'new-catalan-maintainer' of github.com:Softcatala/git-po

* 'new-catalan-maintainer' of github.com:Softcatala/git-po:
  l10n: new lead for Catalan translation

8 months agoMerge branch 'l10n/zh-TW/2024-10-05' of github.com:l10n-tw/git-po
Jiang Xin [Sun, 6 Oct 2024 03:39:29 +0000 (11:39 +0800)] 
Merge branch 'l10n/zh-TW/2024-10-05' of github.com:l10n-tw/git-po

* 'l10n/zh-TW/2024-10-05' of github.com:l10n-tw/git-po:
  l10n: zh_TW: Git 2.47

8 months agoMerge branch 'tl/zh_CN_2.47.0_rnd' of github.com:dyrone/git
Jiang Xin [Sun, 6 Oct 2024 03:39:03 +0000 (11:39 +0800)] 
Merge branch 'tl/zh_CN_2.47.0_rnd' of github.com:dyrone/git

* 'tl/zh_CN_2.47.0_rnd' of github.com:dyrone/git:
  l10n: zh_CN: updated translation for 2.47

8 months agoMerge branch 'master' of github.com:nafmo/git-l10n-sv
Jiang Xin [Sun, 6 Oct 2024 03:38:15 +0000 (11:38 +0800)] 
Merge branch 'master' of github.com:nafmo/git-l10n-sv

* 'master' of github.com:nafmo/git-l10n-sv:
  l10n: sv.po: Update Swedish translation

8 months agoMerge branch 'fr_2.47.0_rnd1' of github.com:jnavila/git
Jiang Xin [Sun, 6 Oct 2024 03:37:56 +0000 (11:37 +0800)] 
Merge branch 'fr_2.47.0_rnd1' of github.com:jnavila/git

* 'fr_2.47.0_rnd1' of github.com:jnavila/git:
  l10n: fr.po: 2.47.0

8 months agoMerge branch 'vi-2.47' of github.com:Nekosha/git-po
Jiang Xin [Sun, 6 Oct 2024 03:35:59 +0000 (11:35 +0800)] 
Merge branch 'vi-2.47' of github.com:Nekosha/git-po

* 'vi-2.47' of github.com:Nekosha/git-po:
  l10n: vi: Updated translation for 2.47

8 months agoMerge branch 'po-id' of github.com:bagasme/git-po
Jiang Xin [Sun, 6 Oct 2024 03:35:06 +0000 (11:35 +0800)] 
Merge branch 'po-id' of github.com:bagasme/git-po

* 'po-id' of github.com:bagasme/git-po:
  l10n: po-id for 2.47

8 months agol10n: Update German translation
Ralf Thielow [Sat, 5 Oct 2024 17:28:19 +0000 (19:28 +0200)] 
l10n: Update German translation

Reviewed-by: Matthias Rüster <matthias.ruester@gmail.com>
Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>
8 months agol10n: bg.po: Updated Bulgarian translation (5772t)
Alexander Shopov [Sat, 5 Oct 2024 11:16:48 +0000 (13:16 +0200)] 
l10n: bg.po: Updated Bulgarian translation (5772t)

Signed-off-by: Alexander Shopov <ash@kambanaria.org>
8 months agol10n: vi: Updated translation for 2.47
Vũ Tiến Hưng [Thu, 26 Sep 2024 07:41:59 +0000 (14:41 +0700)] 
l10n: vi: Updated translation for 2.47

Signed-off-by: Vũ Tiến Hưng <newcomerminecraft@gmail.com>
8 months agol10n: zh_TW: Git 2.47
Yi-Jyun Pan [Sat, 5 Oct 2024 03:36:12 +0000 (11:36 +0800)] 
l10n: zh_TW: Git 2.47

Co-authored-by: Lumynous <lumynou5.tw@gmail.com>
Signed-off-by: Yi-Jyun Pan <pan93412@gmail.com>
8 months agol10n: new lead for Catalan translation
Jordi Mas [Sat, 5 Oct 2024 07:26:43 +0000 (09:26 +0200)] 
l10n: new lead for Catalan translation

Signed-off-by: Jordi Mas <jmas@softcatala.org>
8 months agol10n: Update Catalan translation
Jordi Mas [Sat, 5 Oct 2024 07:19:18 +0000 (09:19 +0200)] 
l10n: Update Catalan translation

Signed-off-by: Jordi Mas <jmas@softcatala.org>
8 months agoMostly there for 2.47 final
Junio C Hamano [Fri, 4 Oct 2024 21:21:16 +0000 (14:21 -0700)] 
Mostly there for 2.47 final

Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoMerge branch 'kn/osx-fsmonitor-with-submodules-fix'
Junio C Hamano [Fri, 4 Oct 2024 21:21:43 +0000 (14:21 -0700)] 
Merge branch 'kn/osx-fsmonitor-with-submodules-fix'

macOS with fsmonitor daemon can hang forever when a submodule is
involved, which has been corrected.

* kn/osx-fsmonitor-with-submodules-fix:
  fsmonitor OSX: fix hangs for submodules

8 months agoMerge branch 'ak/doc-typofix'
Junio C Hamano [Fri, 4 Oct 2024 21:21:43 +0000 (14:21 -0700)] 
Merge branch 'ak/doc-typofix'

Typofixes.

* ak/doc-typofix:
  Documentation: fix typos
  Documentation/config: fix typos

8 months agoMerge branch 'tb/weak-sha1-for-tail-sum'
Junio C Hamano [Fri, 4 Oct 2024 21:21:42 +0000 (14:21 -0700)] 
Merge branch 'tb/weak-sha1-for-tail-sum'

Build fix.

* tb/weak-sha1-for-tail-sum:
  hash.h: set NEEDS_CLONE_HELPER_UNSAFE in fallback mode

8 months agoMerge branch 'ps/reftable-concurrent-writes'
Junio C Hamano [Fri, 4 Oct 2024 21:21:41 +0000 (14:21 -0700)] 
Merge branch 'ps/reftable-concurrent-writes'

Test fix.

* ps/reftable-concurrent-writes:
  t0610: work around flaky test with concurrent writers

8 months agoMerge branch 'mh/w-unused-fix'
Junio C Hamano [Fri, 4 Oct 2024 21:21:41 +0000 (14:21 -0700)] 
Merge branch 'mh/w-unused-fix'

Buildfix.

* mh/w-unused-fix:
  utf8.h: squelch unused-parameter warnings with NO_ICONV

8 months agoMerge branch 'rs/archive-with-attr-pathspec-fix'
Junio C Hamano [Fri, 4 Oct 2024 21:21:40 +0000 (14:21 -0700)] 
Merge branch 'rs/archive-with-attr-pathspec-fix'

Message update.

* rs/archive-with-attr-pathspec-fix:
  archive: fix misleading error message

8 months agoMerge branch 'ak/typofix-2.46-maint'
Junio C Hamano [Fri, 4 Oct 2024 21:21:40 +0000 (14:21 -0700)] 
Merge branch 'ak/typofix-2.46-maint'

Typofixes.

* ak/typofix-2.46-maint:
  perl: fix a typo
  mergetool: fix a typo
  reftable: fix a typo
  trace2: fix typos

8 months agol10n: fr.po: 2.47.0
Jean-Noël Avila [Fri, 27 Sep 2024 20:05:44 +0000 (22:05 +0200)] 
l10n: fr.po: 2.47.0

Signed-off-by: Jean-Noël Avila <jn.avila@free.fr>
8 months agol10n: zh_CN: updated translation for 2.47
Teng Long [Fri, 4 Oct 2024 18:56:55 +0000 (02:56 +0800)] 
l10n: zh_CN: updated translation for 2.47

Signed-off-by: Teng Long <dyroneteng@gmail.com>
8 months agoA bit more after 2.47-rc1
Junio C Hamano [Fri, 4 Oct 2024 17:13:51 +0000 (10:13 -0700)] 
A bit more after 2.47-rc1

Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoMerge branch 'ds/read-cache-mempool-leakfix'
Junio C Hamano [Fri, 4 Oct 2024 17:14:07 +0000 (10:14 -0700)] 
Merge branch 'ds/read-cache-mempool-leakfix'

Leakfix.

* ds/read-cache-mempool-leakfix:
  read-cache: free threaded memory pool

8 months agoMerge branch 'jc/doc-discarding-stalled-topics'
Junio C Hamano [Fri, 4 Oct 2024 17:14:06 +0000 (10:14 -0700)] 
Merge branch 'jc/doc-discarding-stalled-topics'

Document that inactive topics are subject to be discarded.

* jc/doc-discarding-stalled-topics:
  howto-maintain-git: discarding inactive topics

8 months agoMerge branch 'jk/test-lsan-improvements'
Junio C Hamano [Fri, 4 Oct 2024 17:14:06 +0000 (10:14 -0700)] 
Merge branch 'jk/test-lsan-improvements'

Usability improvements for running tests in leak-checking mode.

* jk/test-lsan-improvements:
  test-lib: check for leak logs after every test
  test-lib: show leak-sanitizer logs on --immediate failure
  test-lib: stop showing old leak logs

8 months agot0610: work around flaky test with concurrent writers
Patrick Steinhardt [Fri, 4 Oct 2024 15:32:16 +0000 (17:32 +0200)] 
t0610: work around flaky test with concurrent writers

In 6241ce2170 (refs/reftable: reload locked stack when preparing
transaction, 2024-09-24) we have introduced a new test that exercises
how the reftable backend behaves with many concurrent writers all racing
with each other. This test was introduced after a couple of fixes in
this context that should make concurrent writes behave gracefully. As it
turns out though, Windows systems do not yet handle concurrent writes
properly, as we've got two reports for Cygwin and MinGW failing in this
newly added test.

The root cause of this is how we update the "tables.list" file: when
writing a new stack of tables we first write the data into a lockfile
and then rename that file into place. But Windows forbids us from doing
that rename when the target path is open for reading by another process.
And as the test races both readers and writers with each other we are
quite likely to hit this edge case.

This is not a regression: the logic didn't work before the mentioned
commit, and after the commit it performs well on Linux and macOS, and
the situation on Windows should have at least improved a bit. But the
test shows that we need to put more thought into how to make this work
properly there.

Work around the issue by disabling the test on Windows for now. While at
it, increase the locking timeout to address reported timeouts when using
either the address or memory sanitizer, which also tend to significantly
extend the runtime of this test.

This should be revisited after Git v2.47 is out.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agofsmonitor OSX: fix hangs for submodules
Koji Nakamaru [Fri, 4 Oct 2024 00:07:13 +0000 (00:07 +0000)] 
fsmonitor OSX: fix hangs for submodules

fsmonitor_classify_path_absolute() expects state->path_gitdir_watch.buf
has no trailing '/' or '.' For a submodule, fsmonitor_run_daemon() sets
the value with trailing "/." (as repo_get_git_dir(the_repository) on
Darwin returns ".") so that fsmonitor_classify_path_absolute() returns
IS_OUTSIDE_CONE.

In this case, fsevent_callback() doesn't update cookie_list so that
fsmonitor_publish() does nothing and with_lock__mark_cookies_seen() is
not invoked.

As with_lock__wait_for_cookie() infinitely waits for state->cookies_cond
that with_lock__mark_cookies_seen() should unlock, the whole daemon
hangs.

Remove trailing "/." from state->path_gitdir_watch.buf for submodules
and add a corresponding test in t7527-builtin-fsmonitor.sh. The test is
disabled for MINGW because hangs treated with this patch occur only for
Darwin and there is no simple way to terminate the win32 fsmonitor
daemon that hangs.

Suggested-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Suggested-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Koji Nakamaru <koji.nakamaru@gree.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoreftable/basics: fix segfault when growing `names` array fails
Patrick Steinhardt [Fri, 4 Oct 2024 04:58:53 +0000 (06:58 +0200)] 
reftable/basics: fix segfault when growing `names` array fails

When growing the `names` array fails we would end up with a `NULL`
pointer. This causes two problems:

  - We would run into a segfault because we try to free names that we
    have assigned to the array already.

  - We lose track of the old array and cannot free its contents.

Fix this issue by using a temporary variable. Like this we do not
clobber the old array that we tried to reallocate, which will remain
valid when a call to realloc(3P) fails.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agol10n: po-id for 2.47
Bagas Sanjaya [Tue, 24 Sep 2024 02:52:25 +0000 (09:52 +0700)] 
l10n: po-id for 2.47

Update following components:

  * add-patch.c
  * apply.c
  * builtin/check-mailmap.c
  * builtin/checkout.c
  * builtin/commit.c
  * builtin/config.c
  * builtin/fetch.c
  * builtin/gc.c
  * builtin/multi-pack-index.c
  * builtin/refs.c
  * builtin/show-refs.c
  * builtin/sparse-checkout.c
  * builtin/submodule--helper.c
  * loose.c
  * midx-write.c
  * midx.c
  * object-file.c
  * ref-filter.c
  * refs/file-backend.c
  * scalar.c
  * setup.c
  * git-send-email.perl

Translate following new components:

  * t/unit-tests/unit-tests.c

Signed-off-by: Bagas Sanjaya <bagasdotme@gmail.com>
8 months agodiff: store graph prefix buf in git_graph struct
Jeff King [Thu, 3 Oct 2024 21:13:17 +0000 (17:13 -0400)] 
diff: store graph prefix buf in git_graph struct

The diffopt output_prefix interface makes it the callback's job to
handle ownership of the memory it returns, keeping it valid while
callers are using it and then eventually freeing it when we are done
diffing.

In diff_output_prefix_callback() we handle this with a static strbuf,
effectively "leaking" it when the diff is done (but not triggering any
leak detectors because it's technically still reachable). This has not
been a big problem in practice, but it is a problem for libification:
two diffs running in the same process could stomp on each other's prefix
buffers.

Since we only need the strbuf when we are formatting graph padding, we
can give ownership of the strbuf to the git_graph struct, letting us
free it when that struct is no longer in use.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agodiff: return line_prefix directly when possible
Jeff King [Thu, 3 Oct 2024 21:11:31 +0000 (17:11 -0400)] 
diff: return line_prefix directly when possible

We may point our output_prefix callback to diff_output_prefix_callback()
in any of these cases:

  1. we have a user-provided line_prefix

  2. we have a graph prefix to show

  3. both (1) and (2)

The function combines the available elements into a strbuf and returns
its pointer.

In the case that we just have the line_prefix, though, there is no need
for the strbuf. We can return the string directly.

This is a minor optimization by itself, but also will allow us to clean
up some memory ownership issues on top.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agodiff: return const char from output_prefix callback
Jeff King [Thu, 3 Oct 2024 21:09:24 +0000 (17:09 -0400)] 
diff: return const char from output_prefix callback

The diff_options structure has an output_prefix callback for returning a
prefix string, but it does so by returning a pointer to a strbuf.

This makes the interface awkward. There's no reason the callback should
need to use a strbuf, and it creates questions about whether the
ownership of the resulting buffer should be transferred to the caller
(it should not be, but a recent attempt to clean up this code led to a
double-free in some cases).

The one advantage we get is that the strbuf contains a ptr/len pair, so
we could in theory have a prefix with embedded NULs. But we can observe
that none of the existing callbacks would ever produce such a NUL (they
are usually just indentation or graph symbols, and even the
"--line-prefix" option takes a NUL-terminated string).

And anyway, only one caller (the one in log_tree_diff_flush) actually
looks at the strbuf length. In every other case we use a helper function
which discards the length and just returns the NUL-terminated string.

So let's just have the callback return a "const char *" pointer. It's up
to the callbacks themselves if they want to use a strbuf under the hood.
And now the caller in log_tree_diff_flush() can just use the helper
function along with everybody else. That lets us even simplify out the
function pointer check, since the helper returns an empty string
(technically this does mean we'll sometimes issue an empty fputs() call,
but I don't think this code path is hot enough to care about that).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agodiff: drop line_prefix_length field
Jeff King [Thu, 3 Oct 2024 21:06:54 +0000 (17:06 -0400)] 
diff: drop line_prefix_length field

The diff_options structure holds a line_prefix string and an associated
length. But the length is always just the strlen() of the NUL-terminated
string. Let's simplify the code by just storing the string pointer and
assuming it is NUL-terminated when we use it.

This will cause us to compute the string length in a few extra spots,
but I don't think any of these are particularly hot code paths.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoline-log: use diff_line_prefix() instead of custom helper
Jeff King [Thu, 3 Oct 2024 21:06:27 +0000 (17:06 -0400)] 
line-log: use diff_line_prefix() instead of custom helper

Our local output_prefix() is exactly the same as the public
diff_line_prefix() function. Let's just use that one, saving us a little
bit of code.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoperl: fix a typo
Andrew Kreimer [Wed, 2 Oct 2024 22:38:16 +0000 (01:38 +0300)] 
perl: fix a typo

Fix a typo in comments.

Signed-off-by: Andrew Kreimer <algonell@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agomergetool: fix a typo
Andrew Kreimer [Wed, 2 Oct 2024 22:38:14 +0000 (01:38 +0300)] 
mergetool: fix a typo

Fix a typo in comments.

Signed-off-by: Andrew Kreimer <algonell@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoreftable: fix a typo
Andrew Kreimer [Wed, 2 Oct 2024 22:38:13 +0000 (01:38 +0300)] 
reftable: fix a typo

Fix a typo in comments.

Signed-off-by: Andrew Kreimer <algonell@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agotrace2: fix typos
Andrew Kreimer [Wed, 2 Oct 2024 22:38:12 +0000 (01:38 +0300)] 
trace2: fix typos

Fix typos in comments.

Signed-off-by: Andrew Kreimer <algonell@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoDocumentation: mention the amlog in howto/maintain-git.txt
Taylor Blau [Thu, 3 Oct 2024 01:09:56 +0000 (21:09 -0400)] 
Documentation: mention the amlog in howto/maintain-git.txt

Part of the maintainer's job is to keep up-to-date and publish the
'amlog' which stores a mapping between a patch's 'Message-Id' e-mail
header and the commit generated by applying said patch.

But our Documentation/howto/maintain-git.txt does not mention the amlog,
or the scripts which exist to help the maintainer keep the amlog
up-to-date.

(This bit me during the first integration round I did as interim
maintainer[1] involved a lot of manual clean-up. More recently it has
come up as part of a research effort to better understand a patch's
lifecycle on the list[2].)

Address this gap by briefly documenting the existence and purpose of the
'post-applypatch' hook in maintaining the amlog entries.

[1]: https://lore.kernel.org/git/Y19dnb2M+yObnftj@nand.local/
[2]: https://lore.kernel.org/git/CAJoAoZ=4ARuH3aHGe5yC_Xcnou_c396q_ZienYPY7YnEzZcyEg@mail.gmail.com/

Suggested-by: Junio C Hamano <gitster@pobox.com>
Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agodoc: add a note about staggering of maintenance
Shubham Kanodia [Thu, 3 Oct 2024 08:57:57 +0000 (08:57 +0000)] 
doc: add a note about staggering of maintenance

Git maintenance tasks are staggered to a random minute of the hour per
client to avoid thundering herd issues. Updates the doc to add a note
about the same.

Signed-off-by: Shubham Kanodia <shubham.kanodia10@gmail.com>
Acked-by: Derrick Stolee <stolee@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agohash.h: set NEEDS_CLONE_HELPER_UNSAFE in fallback mode
Jeff King [Wed, 2 Oct 2024 23:26:18 +0000 (19:26 -0400)] 
hash.h: set NEEDS_CLONE_HELPER_UNSAFE in fallback mode

Commit 253ed9ecff (hash.h: scaffolding for _unsafe hashing variants,
2024-09-26) introduced the concept of having two hash algorithms: a safe
and an unsafe one. When the Makefile knobs do not explicitly request an
unsafe one, we fall back to using the safe algorithm.

However, the fallback to do so forgot one case: we should inherit the
NEEDS_CLONE_HELPER flag from the safe variant. Failing to do so means
that we'll end up defining two clone functions (the algorithm specific
one, and the generic one that just calls memcpy). You'll see an error
like this:

  $ make OPENSSL_SHA1=1
  [...]
  sha1/openssl.h:46:29: error: redefinition of ‘openssl_SHA1_Clone’
     46 | #define platform_SHA1_Clone openssl_SHA1_Clone
        |                             ^~~~~~~~~~~~~~~~~~
  hash.h:83:40: note: in expansion of macro ‘platform_SHA1_Clone’
     83 | #    define platform_SHA1_Clone_unsafe platform_SHA1_Clone
        |                                        ^~~~~~~~~~~~~~~~~~~
  hash.h:101:33: note: in expansion of macro ‘platform_SHA1_Clone_unsafe’
    101 | #  define git_SHA1_Clone_unsafe platform_SHA1_Clone_unsafe
        |                                 ^~~~~~~~~~~~~~~~~~~~~~~~~~
  hash.h:133:20: note: in expansion of macro ‘git_SHA1_Clone_unsafe’
    133 | static inline void git_SHA1_Clone_unsafe(git_SHA_CTX_unsafe *dst,
        |                    ^~~~~~~~~~~~~~~~~~~~~
  sha1/openssl.h:37:20: note: previous definition of ‘openssl_SHA1_Clone’ with type ‘void(struct openssl_SHA1_CTX *, const struct openssl_SHA1_CTX *)’
     37 | static inline void openssl_SHA1_Clone(struct openssl_SHA1_CTX *dst,
        |                    ^~~~~~~~~~~~~~~~~~

This only matters when compiling with openssl as the "safe" variant,
since it's the only algorithm that requires a clone helper (and even
then, only if you are using openssl 3.0+). And you should never do that,
because it's not safe. But still, the invocation above used to work and
should continue to do so until we decide to require a
collision-detecting variant for the safe algorithm entirely.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoarchive: fix misleading error message
René Scharfe [Thu, 3 Oct 2024 15:51:01 +0000 (17:51 +0200)] 
archive: fix misleading error message

The error message added by 296743a7ca (archive: load index before
pathspec checks, 2024-09-21) is misleading: unpack_trees() is not
touching the working tree at all here, but just loading a tree into
the index.  Correct it.

Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoline-log: protect inner strbuf from free
Derrick Stolee [Thu, 3 Oct 2024 11:58:42 +0000 (11:58 +0000)] 
line-log: protect inner strbuf from free

The output_prefix() method in line-log.c may call a function pointer via
the diff_options struct. This function pointer returns a strbuf struct
and then its buffer is passed back. However, that implies that the
consumer is responsible to free the string. This is especially true
because the default behavior is to duplicate the empty string.

The existing functions used in the output_prefix pointer include:

 1. idiff_prefix_cb() in diff-lib.c. This returns the data pointer, so
    the value exists across multiple calls.

 2. diff_output_prefix_callback() in graph.c. This uses a static strbuf
    struct, so it reuses buffers across calls. These should not be
    freed.

 3. output_prefix_cb() in range-diff.c. This is similar to the
    diff-lib.c case.

In each case, we should not be freeing this buffer. We can convert the
output_prefix() function to return a const char pointer and stop freeing
the result.

This choice is essentially the opposite of what was done in 394affd46d
(line-log: always allocate the output prefix, 2024-06-07).

This was discovered via 'valgrind' while investigating a public report
of a bug in 'git log --graph -L' [1].

[1] https://github.com/git-for-windows/git/issues/5185

This issue would have been caught by the new test, when Git is compiled
with ASan to catch these double frees.

Co-authored-by: Jeff King <peff@peff.net>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Derrick Stolee <stolee@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agol10n: tr: Update Turkish translations for 2.47.0
Emir SARI [Tue, 24 Sep 2024 06:55:47 +0000 (09:55 +0300)] 
l10n: tr: Update Turkish translations for 2.47.0

Signed-off-by: Emir SARI <emir_sari@icloud.com>
8 months agoutf8.h: squelch unused-parameter warnings with NO_ICONV
Mike Hommey [Wed, 2 Oct 2024 20:01:40 +0000 (05:01 +0900)] 
utf8.h: squelch unused-parameter warnings with NO_ICONV

Since DEVELOPER=YesPlease build enables -Wunused-parameter warnings
these days, the fallback definition for reencode_string_len() that
did not touch any of its parameters but one needs to be annotated
properly.

Signed-off-by: Mike Hommey <mh@glandium.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoreftable/basics: ban standard allocator functions
Patrick Steinhardt [Wed, 2 Oct 2024 10:56:39 +0000 (12:56 +0200)] 
reftable/basics: ban standard allocator functions

The reftable library uses pluggable allocators, which means that we
shouldn't ever use the standard allocator functions. But it is an easy
mistake to make to accidentally use e.g. free(3P) instead of the
reftable-specific `reftable_free()` function, and we do not have any
mechanism to detect this misuse right now.

Introduce a couple of macros that ban the standard allocators, similar
to how we do it in "banned.h".

Note that we do not ban the following two classes of functions:

  - Macros like `FREE_AND_NULL()` or `REALLOC_ARRAY()`. As those expand
    to code that contains already-banned functions we'd get a compiler
    error even without banning those macros explicitly.

  - Git-specific allocators like `xmalloc()` and friends. The primary
    reason is that there are simply too many of them, so we're rather
    aiming for best effort here. Furthermore, the eventual goal is to
    make them unavailable in the reftable library place by not pulling
    them in via "git-compat-utils.h" anymore.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoreftable: introduce `REFTABLE_FREE_AND_NULL()`
Patrick Steinhardt [Wed, 2 Oct 2024 10:56:36 +0000 (12:56 +0200)] 
reftable: introduce `REFTABLE_FREE_AND_NULL()`

We have several calls to `FREE_AND_NULL()` in the reftable library,
which of course uses free(3P). As the reftable allocators are pluggable
we should rather call the reftable specific function, which is
`reftable_free()`.

Introduce a new macro `REFTABLE_FREE_AND_NULL()` and adapt the callsites
accordingly.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoreftable: fix calls to free(3P)
Patrick Steinhardt [Wed, 2 Oct 2024 10:56:33 +0000 (12:56 +0200)] 
reftable: fix calls to free(3P)

There are a small set of calls to free(3P) in the reftable library. As
the reftable allocators are pluggable we should rather call the reftable
specific function, which is `reftable_free()`.

Convert the code accordingly.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoreftable: handle trivial allocation failures
Patrick Steinhardt [Wed, 2 Oct 2024 10:56:31 +0000 (12:56 +0200)] 
reftable: handle trivial allocation failures

Handle trivial allocation failures in the reftable library and its unit
tests.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoreftable/tree: handle allocation failures
Patrick Steinhardt [Wed, 2 Oct 2024 10:56:25 +0000 (12:56 +0200)] 
reftable/tree: handle allocation failures

The tree interfaces of the reftable library handle both insertion and
searching of tree nodes with a single function, where the behaviour is
altered between the two via an `insert` bit. This makes it quit awkward
to handle allocation failures because on inserting we'd have to check
for `NULL` pointers and return an error, whereas on searching entries we
don't have to handle it as an allocation error.

Split up concerns of this function into two separate functions, one for
inserting entries and one for searching entries. This makes it easy for
us to check for allocation errors as `tree_insert()` should never return
a `NULL` pointer now. Adapt callers accordingly.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoreftable/pq: handle allocation failures when adding entries
Patrick Steinhardt [Wed, 2 Oct 2024 10:56:22 +0000 (12:56 +0200)] 
reftable/pq: handle allocation failures when adding entries

Handle allocation failures when adding entries to the pqueue. Adapt its
only caller accordingly.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoreftable/block: handle allocation failures
Patrick Steinhardt [Wed, 2 Oct 2024 10:56:19 +0000 (12:56 +0200)] 
reftable/block: handle allocation failures

Handle allocation failures in `block_writer_init()` and
`block_reader_init()`. This requires us to bubble up error codes into
`writer_reinit_block_writer()`. Adapt call sites accordingly.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoreftable/blocksource: handle allocation failures
Patrick Steinhardt [Wed, 2 Oct 2024 10:56:17 +0000 (12:56 +0200)] 
reftable/blocksource: handle allocation failures

Handle allocation failures in the blocksource code.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoreftable/iter: handle allocation failures when creating indexed table iter
Patrick Steinhardt [Wed, 2 Oct 2024 10:56:14 +0000 (12:56 +0200)] 
reftable/iter: handle allocation failures when creating indexed table iter

Handle allocation failures in `new_indexed_table_ref_iter()`. While at
it, rename the function to match our coding style.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoreftable/stack: handle allocation failures in auto compaction
Patrick Steinhardt [Wed, 2 Oct 2024 10:56:11 +0000 (12:56 +0200)] 
reftable/stack: handle allocation failures in auto compaction

Handle allocation failures in `reftable_stack_auto_compact()`.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoreftable/stack: handle allocation failures in `stack_compact_range()`
Patrick Steinhardt [Wed, 2 Oct 2024 10:56:07 +0000 (12:56 +0200)] 
reftable/stack: handle allocation failures in `stack_compact_range()`

Handle allocation failures in `stack_compact_range()`.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoreftable/stack: handle allocation failures in `reftable_new_stack()`
Patrick Steinhardt [Wed, 2 Oct 2024 10:56:04 +0000 (12:56 +0200)] 
reftable/stack: handle allocation failures in `reftable_new_stack()`

Handle allocation failures in `reftable_new_stack()`.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoreftable/stack: handle allocation failures on reload
Patrick Steinhardt [Wed, 2 Oct 2024 10:56:01 +0000 (12:56 +0200)] 
reftable/stack: handle allocation failures on reload

Handle allocation failures in `reftable_stack_reload_once()`.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoreftable/reader: handle allocation failures in `reader_init_iter()`
Patrick Steinhardt [Wed, 2 Oct 2024 10:55:59 +0000 (12:55 +0200)] 
reftable/reader: handle allocation failures in `reader_init_iter()`

Handle allocation failures in `reader_init_iter()`. This requires us to
also adapt `reftable_reader_init_*_iterator()` to bubble up the new
error codes. Adapt callers accordingly.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoreftable/reader: handle allocation failures for unindexed reader
Patrick Steinhardt [Wed, 2 Oct 2024 10:55:56 +0000 (12:55 +0200)] 
reftable/reader: handle allocation failures for unindexed reader

Handle allocation failures when creating unindexed readers.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoreftable/merged: handle allocation failures in `merged_table_init_iter()`
Patrick Steinhardt [Wed, 2 Oct 2024 10:55:54 +0000 (12:55 +0200)] 
reftable/merged: handle allocation failures in `merged_table_init_iter()`

Handle allocation failures in `merged_table_init_iter()`. While at it,
merge `merged_iter_init()` into the function. It only has a single
caller and merging them makes it easier to handle allocation failures
consistently.

This change also requires us to adapt `reftable_stack_init_*_iterator()`
to bubble up the new error codes of `merged_table_iter_init()`. Adapt
callsites accordingly.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoreftable/writer: handle allocation failures in `reftable_new_writer()`
Patrick Steinhardt [Wed, 2 Oct 2024 10:55:48 +0000 (12:55 +0200)] 
reftable/writer: handle allocation failures in `reftable_new_writer()`

Handle allocation failures in `reftable_new_writer()`. Adapt the
function to return an error code to return such failures. While at it,
rename it to match our code style as we have to touch up every callsite
anyway.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoreftable/writer: handle allocation failures in `writer_index_hash()`
Patrick Steinhardt [Wed, 2 Oct 2024 10:55:45 +0000 (12:55 +0200)] 
reftable/writer: handle allocation failures in `writer_index_hash()`

Handle allocation errors in `writer_index_hash()`. Adjust its only
caller in `reftable_writer_add_ref()` accordingly.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoreftable/record: handle allocation failures when decoding records
Patrick Steinhardt [Wed, 2 Oct 2024 10:55:43 +0000 (12:55 +0200)] 
reftable/record: handle allocation failures when decoding records

Handle allocation failures when decoding records. While at it, fix some
error codes to be `REFTABLE_FORMAT_ERROR`.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoreftable/record: handle allocation failures on copy
Patrick Steinhardt [Wed, 2 Oct 2024 10:55:40 +0000 (12:55 +0200)] 
reftable/record: handle allocation failures on copy

Handle allocation failures when copying records. While at it, convert
from `xstrdup()` to `reftable_strdup()`. Adapt callsites to check for
error codes.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoreftable/basics: handle allocation failures in `parse_names()`
Patrick Steinhardt [Wed, 2 Oct 2024 10:55:38 +0000 (12:55 +0200)] 
reftable/basics: handle allocation failures in `parse_names()`

Handle allocation failures in `parse_names()` by returning `NULL` in
case any allocation fails. While at it, refactor the function to return
the array directly instead of assigning it to an out-pointer.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoreftable/basics: handle allocation failures in `reftable_calloc()`
Patrick Steinhardt [Wed, 2 Oct 2024 10:55:35 +0000 (12:55 +0200)] 
reftable/basics: handle allocation failures in `reftable_calloc()`

Handle allocation failures in `reftable_calloc()`.

While at it, remove our use of `st_mult()` that would cause us to die on
an overflow. From the caller's point of view there is not much of a
difference between arguments that are too large to be multiplied and a
request that is too big to handle by the allocator: in both cases the
allocation cannot be fulfilled. And in neither of these cases do we want
the reftable library to die.

While we could use `unsigned_mult_overflows()` to handle the overflow
gracefully, we instead open-code it to further our goal of converting
the reftable codebase to become a standalone library that can be reused
by external projects.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoreftable: introduce `reftable_strdup()`
Patrick Steinhardt [Wed, 2 Oct 2024 10:55:30 +0000 (12:55 +0200)] 
reftable: introduce `reftable_strdup()`

The reftable library provides the ability to swap out allocators. There
is a gap here though, because we continue to use `xstrdup()` even in the
case where all the other allocators have been swapped out.

Introduce `reftable_strdup()` that uses `reftable_malloc()` to do the
allocation.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoreftable/basics: merge "publicbasics" into "basics"
Patrick Steinhardt [Wed, 2 Oct 2024 10:55:27 +0000 (12:55 +0200)] 
reftable/basics: merge "publicbasics" into "basics"

The split between "basics" and "publicbasics" is somewhat arbitrary and
not in line with how we typically structure code in the reftable
library. While we do indeed split up headers into a public and internal
part, we don't do that for the compilation unit itself. Furthermore, the
declarations for "publicbasics.c" are in "reftable-malloc.h", which
isn't in line with our naming schema, either.

Fix these inconsistencies by:

  - Merging "publicbasics.c" into "basics.c".

  - Renaming "reftable-malloc.h" to "reftable-basics.h" as the public
    header.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
8 months agoreftable/error: introduce out-of-memory error code
Patrick Steinhardt [Wed, 2 Oct 2024 10:55:24 +0000 (12:55 +0200)] 
reftable/error: introduce out-of-memory error code

The reftable library does not use the same memory allocation functions
as the rest of the Git codebase. Instead, as the reftable library is
supposed to be usable as a standalone library without Git, it provides a
set of pluggable memory allocators.

Compared to `xmalloc()` and friends these allocators are _not_ expected
to die when an allocation fails. This design choice is concious, as a
library should leave it to its caller to handle any kind of error. While
it is very likely that the caller cannot really do much in the case of
an out-of-memory situation anyway, we are not the ones to make that
decision.

Curiously though, we never handle allocation errors even though memory
allocation functions are allowed to fail. And as we do not plug in Git's
memory allocator via `reftable_set_alloc()` either the consequence is
that we'd instead segfault as soon as we run out of memory.

While the easy fix would be to wire up `xmalloc()` and friends, it
would only fix the usage of the reftable library in Git itself. Other
users like libgit2, which is about to revive its efforts to land a
backend for reftables, wouldn't be able to benefit from this solution.

Instead, we are about to do it the hard way: adapt all allocation sites
to perform error checking. Introduce a new error code for out-of-memory
errors that we will wire up in subsequent steps.

This commit also serves as the motivator for all the remaining steps in
this series such that we do not have to repeat the same arguments in
every single subsequent commit.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>