From: "Kristofer Karlsson via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Kristofer Karlsson <krka@spotify.com>,
Kristofer Karlsson <krka@spotify.com>
Subject: [PATCH v5 3/6] connected: drop dependency on `the_repository`
Date: Fri, 23 Oct 2026 13:11:56 +0000 [thread overview]
Message-ID: <3a7a1fb95320ed7226d00b5ff759cf88dedf5de0.1792761119.git.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.2211.v5.git.1792761119.gitgitgadget@gmail.com>
From: Kristofer Karlsson <krka@spotify.com>
The next commits will need to use the repository to read configuration
in check_connected(). Rather than accessing `the_repository`, refactor
the code to instead require the caller to pass in a repository so that
we can remove `USE_THE_REPOSITORY_VARIABLE`.
Suggested-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Kristofer Karlsson <krka@spotify.com>
---
builtin/clone.c | 2 +-
builtin/fetch.c | 5 +++--
builtin/receive-pack.c | 12 ++++++++----
bundle.c | 2 +-
connected.c | 22 +++++++++++-----------
connected.h | 4 +++-
fetch-pack.c | 3 ++-
7 files changed, 29 insertions(+), 21 deletions(-)
diff --git a/builtin/clone.c b/builtin/clone.c
index 44037dd428..1532361ea0 100644
--- a/builtin/clone.c
+++ b/builtin/clone.c
@@ -572,7 +572,7 @@ static void update_remote_refs(const struct ref *refs,
opt.transport = transport;
opt.progress = transport->progress;
- if (check_connected(iterate_ref_map, &rm, &opt))
+ if (check_connected(the_repository, iterate_ref_map, &rm, &opt))
die(_("remote did not send all necessary objects"));
}
diff --git a/builtin/fetch.c b/builtin/fetch.c
index b2decc6cfd..0ef7fe92f1 100644
--- a/builtin/fetch.c
+++ b/builtin/fetch.c
@@ -1250,7 +1250,8 @@ static int store_updated_refs(struct display_state *display_state,
opt.exclude_hidden_refs_section = "fetch";
rm = ref_map;
- if (check_connected(iterate_ref_map, &rm, &opt)) {
+ if (check_connected(the_repository, iterate_ref_map,
+ &rm, &opt)) {
rc = error(_("%s did not send all necessary objects"),
display_state->url);
goto abort;
@@ -1422,7 +1423,7 @@ static int check_exist_and_connected(struct ref *ref_map)
opt.quiet = 1;
opt.exclude_hidden_refs_section = "fetch";
- return check_connected(iterate_ref_map, &rm, &opt);
+ return check_connected(the_repository, iterate_ref_map, &rm, &opt);
}
static int fetch_and_consume_refs(struct display_state *display_state,
diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c
index 1d5b050beb..4f8f58950a 100644
--- a/builtin/receive-pack.c
+++ b/builtin/receive-pack.c
@@ -1385,7 +1385,8 @@ static int update_shallow_ref(struct command *cmd, struct shallow_info *si)
oid_array_append(&extra, &si->shallow->oid[i]);
setup_alternate_shallow(&shallow_lock, &opt.shallow_file, &extra);
- if (check_connected(command_singleton_iterator, cmd, &opt)) {
+ if (check_connected(the_repository, command_singleton_iterator,
+ cmd, &opt)) {
rollback_shallow_file(the_repository, &shallow_lock);
oid_array_clear(&extra);
return -1;
@@ -1827,8 +1828,9 @@ static void set_connectivity_errors(struct command *commands,
odb_transaction_env(transaction, &env);
opt.env = env.v;
- if (!check_connected(command_singleton_iterator, &singleton,
- &opt))
+ if (!check_connected(the_repository,
+ command_singleton_iterator,
+ &singleton, &opt))
continue;
cmd->error_string = "missing necessary objects";
@@ -2090,7 +2092,9 @@ static void execute_commands(struct command *commands,
opt.env = env.v;
opt.exclude_hidden_refs_section = "receive";
- if (check_connected(iterate_receive_command_list, &data, &opt))
+ if (check_connected(the_repository,
+ iterate_receive_command_list,
+ &data, &opt))
set_connectivity_errors(commands, si, transaction);
if (use_sideband)
diff --git a/bundle.c b/bundle.c
index f55a521b2a..0a68e856f5 100644
--- a/bundle.c
+++ b/bundle.c
@@ -259,7 +259,7 @@ int verify_bundle(struct repository *r,
if (ret)
goto cleanup;
- if ((ret = check_connected(iterate_ref_map, &iter, &opts)))
+ if ((ret = check_connected(r, iterate_ref_map, &iter, &opts)))
error(_("some prerequisite commits exist in the object store, "
"but are not connected to the repository's history"));
diff --git a/connected.c b/connected.c
index 929b9bd28d..34045f1032 100644
--- a/connected.c
+++ b/connected.c
@@ -1,5 +1,3 @@
-#define USE_THE_REPOSITORY_VARIABLE
-
#include "git-compat-util.h"
#include "gettext.h"
#include "hex.h"
@@ -35,23 +33,24 @@ static int promised_object_cb(const struct object_id *oid UNUSED,
* objects in non-promisor packs, in which case we'll have to fall back to the
* rev-list-based connectivity checks. Returns a negative error code on error.
*/
-static int check_connected_promisor(oid_iterate_fn fn,
+static int check_connected_promisor(struct repository *repo,
+ oid_iterate_fn fn,
void *cb_data,
const struct object_id **oid)
{
struct odb_for_each_object_options opts = {
.flags = ODB_FOR_EACH_OBJECT_PROMISOR_ONLY,
- .prefix_hex_len = the_repository->hash_algo->hexsz,
+ .prefix_hex_len = repo->hash_algo->hexsz,
};
int err;
- odb_reprepare(the_repository->objects);
+ odb_reprepare(repo->objects);
do {
bool found = false;
opts.prefix = *oid;
- err = odb_for_each_object_ext(the_repository->objects, NULL,
+ err = odb_for_each_object_ext(repo->objects, NULL,
promised_object_cb, &found, &opts);
if (err < 0)
return err;
@@ -78,7 +77,8 @@ static int check_connected_promisor(oid_iterate_fn fn,
*
* Returns 0 if everything is connected, non-zero otherwise.
*/
-int check_connected(oid_iterate_fn fn, void *cb_data,
+int check_connected(struct repository *repo,
+ oid_iterate_fn fn, void *cb_data,
struct check_connected_options *opt)
{
struct child_process rev_list = CHILD_PROCESS_INIT;
@@ -101,8 +101,8 @@ int check_connected(oid_iterate_fn fn, void *cb_data,
return err;
}
- if (repo_has_promisor_remote(the_repository)) {
- err = check_connected_promisor(fn, cb_data, &oid);
+ if (repo_has_promisor_remote(repo)) {
+ err = check_connected_promisor(repo, fn, cb_data, &oid);
if (err) {
if (opt->err_fd)
close(opt->err_fd);
@@ -119,7 +119,7 @@ int check_connected(oid_iterate_fn fn, void *cb_data,
strvec_push(&rev_list.args,"rev-list");
strvec_push(&rev_list.args, "--objects");
strvec_push(&rev_list.args, "--stdin");
- if (repo_has_promisor_remote(the_repository))
+ if (repo_has_promisor_remote(repo))
strvec_push(&rev_list.args, "--exclude-promisor-objects");
if (!opt->is_deepening_fetch) {
strvec_push(&rev_list.args, "--not");
@@ -160,7 +160,7 @@ int check_connected(oid_iterate_fn fn, void *cb_data,
strbuf_add(&idx_file, transport->pack_lockfiles.items[0].string,
base_len);
strbuf_addstr(&idx_file, ".idx");
- new_pack = add_packed_git(the_repository, idx_file.buf,
+ new_pack = add_packed_git(repo, idx_file.buf,
idx_file.len, 1);
strbuf_release(&idx_file);
}
diff --git a/connected.h b/connected.h
index 16b2c84f2e..0624965baa 100644
--- a/connected.h
+++ b/connected.h
@@ -2,6 +2,7 @@
#define CONNECTED_H
struct object_id;
+struct repository;
struct transport;
/*
@@ -66,7 +67,8 @@ struct check_connected_options {
*
* If "opt" is NULL, behaves as if CHECK_CONNECTED_INIT was passed.
*/
-int check_connected(oid_iterate_fn fn, void *cb_data,
+int check_connected(struct repository *repo,
+ oid_iterate_fn fn, void *cb_data,
struct check_connected_options *opt);
#endif /* CONNECTED_H */
diff --git a/fetch-pack.c b/fetch-pack.c
index 30a4dd6119..2cf8f8d653 100644
--- a/fetch-pack.c
+++ b/fetch-pack.c
@@ -2186,7 +2186,8 @@ struct ref *fetch_pack(struct fetch_pack_args *args,
opt.shallow_file = alternate_shallow_file;
if (args->deepen)
opt.is_deepening_fetch = 1;
- if (check_connected(iterate_ref_map, &iterator, &opt)) {
+ if (check_connected(the_repository, iterate_ref_map,
+ &iterator, &opt)) {
error(_("remote did not send all necessary objects"));
free_refs(ref_cpy);
ref_cpy = NULL;
--
gitgitgadget
next prev parent reply other threads:[~2026-10-23 13:12 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-14 9:47 [PATCH 0/2] connected: add incremental connectivity check Kristofer Karlsson via GitGitGadget
2026-09-14 9:47 ` [PATCH 1/2] Documentation: describe connectivity checking Kristofer Karlsson via GitGitGadget
2026-09-14 9:47 ` [PATCH 2/2] connected: add incremental connectivity check via rev-list Kristofer Karlsson via GitGitGadget
2026-09-14 15:26 ` Junio C Hamano
2026-09-14 17:46 ` Kristofer Karlsson
2026-09-14 15:12 ` [PATCH 0/2] connected: add incremental connectivity check Junio C Hamano
2026-09-28 13:02 ` [PATCH v2 " Kristofer Karlsson via GitGitGadget
2026-09-28 13:02 ` [PATCH v2 1/2] Documentation: describe connectivity checking Kristofer Karlsson via GitGitGadget
2026-10-05 7:59 ` Patrick Steinhardt
2026-10-05 19:17 ` Junio C Hamano
2026-10-06 5:59 ` Patrick Steinhardt
2026-10-06 10:03 ` Kristofer Karlsson
2026-10-06 10:12 ` Kristofer Karlsson
2026-09-28 13:02 ` [PATCH v2 2/2] connected: add incremental connectivity check via rev-list Kristofer Karlsson via GitGitGadget
2026-10-05 8:00 ` Patrick Steinhardt
2026-10-06 10:37 ` Kristofer Karlsson
2026-10-06 12:08 ` Patrick Steinhardt
2026-10-06 12:36 ` Kristofer Karlsson
2026-10-12 12:07 ` [PATCH v3 0/4] connected: add incremental connectivity check Kristofer Karlsson via GitGitGadget
2026-10-12 12:07 ` [PATCH v3 1/4] Documentation: describe connectivity checking Kristofer Karlsson via GitGitGadget
2026-10-15 6:55 ` Patrick Steinhardt
2026-10-15 9:12 ` Kristofer Karlsson
2026-10-12 12:07 ` [PATCH v3 2/4] p5413: add perf tests for connectivity check Kristofer Karlsson via GitGitGadget
2026-10-15 6:55 ` Patrick Steinhardt
2026-10-15 9:14 ` Kristofer Karlsson
2026-10-12 12:07 ` [PATCH v3 3/4] connected: add transfer.connectivityCheck config and rev-list flag Kristofer Karlsson via GitGitGadget
2026-10-12 18:49 ` Junio C Hamano
2026-10-13 7:41 ` Kristofer Karlsson
2026-10-13 13:46 ` Junio C Hamano
2026-10-15 6:55 ` Patrick Steinhardt
2026-10-15 9:53 ` Kristofer Karlsson
2026-10-12 12:07 ` [PATCH v3 4/4] connected: add incremental connectivity check via rev-list Kristofer Karlsson via GitGitGadget
2026-10-15 6:55 ` Patrick Steinhardt
2026-10-15 9:51 ` Kristofer Karlsson
2026-10-15 11:50 ` Patrick Steinhardt
2026-10-16 11:50 ` Kristofer Karlsson
2026-10-19 7:30 ` Patrick Steinhardt
2026-10-12 18:55 ` [PATCH v3 0/4] connected: add incremental connectivity check Junio C Hamano
2026-10-13 7:54 ` Kristofer Karlsson
2026-10-21 11:22 ` [PATCH v4 0/6] " Kristofer Karlsson via GitGitGadget
2026-10-21 11:22 ` [PATCH v4 1/6] Documentation: describe connectivity checking Kristofer Karlsson via GitGitGadget
2026-10-21 11:22 ` [PATCH v4 2/6] p5413: add perf tests for connectivity check Kristofer Karlsson via GitGitGadget
2026-10-21 11:22 ` [PATCH v4 3/6] connected: drop dependency on `the_repository` Kristofer Karlsson via GitGitGadget
2026-10-21 11:22 ` [PATCH v4 4/6] connected: add transfer.connectivityCheck config Kristofer Karlsson via GitGitGadget
2026-10-21 11:22 ` [PATCH v4 5/6] connected: add incremental connectivity check via rev-list Kristofer Karlsson via GitGitGadget
2026-10-21 20:18 ` Junio C Hamano
2026-10-22 7:00 ` Kristofer Karlsson
2026-10-22 8:35 ` Kristofer Karlsson
2026-10-22 14:46 ` Junio C Hamano
2026-10-22 16:11 ` Kristofer Karlsson
2026-10-23 17:58 ` Junio C Hamano
2026-10-21 11:22 ` [PATCH v4 6/6] connected: add "auto" connectivity check mode Kristofer Karlsson via GitGitGadget
2026-10-23 13:11 ` [PATCH v5 0/6] connected: add incremental connectivity check Kristofer Karlsson via GitGitGadget
2026-10-23 13:11 ` [PATCH v5 1/6] Documentation: describe connectivity checking Kristofer Karlsson via GitGitGadget
2026-10-23 13:11 ` [PATCH v5 2/6] p5413: add perf tests for connectivity check Kristofer Karlsson via GitGitGadget
2026-10-23 13:11 ` Kristofer Karlsson via GitGitGadget [this message]
2026-10-23 13:11 ` [PATCH v5 4/6] connected: add transfer.connectivityCheck config Kristofer Karlsson via GitGitGadget
2026-10-23 13:11 ` [PATCH v5 5/6] connected: add incremental connectivity check via rev-list Kristofer Karlsson via GitGitGadget
2026-10-23 13:11 ` [PATCH v5 6/6] connected: add "auto" connectivity check mode Kristofer Karlsson via GitGitGadget
2026-10-23 18:52 ` [PATCH v5 0/6] connected: add incremental connectivity check Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3a7a1fb95320ed7226d00b5ff759cf88dedf5de0.1792761119.git.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=git@vger.kernel.org \
--cc=krka@spotify.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox