Thread (3 messages) 3 messages, 2 authors, 1d ago

[Outreachy PATCH v2] list-objects-filter-options: pass repository to partial clone helpers

flat view

From: Dorine Tipo <hidden>
Date: 2026-10-30 16:59:34
Subsystem: the rest · Maintainer: Linus Torvalds

partial_clone_register() and partial_clone_get_default_filter_spec()
use `the_repository` to look up promisor remotes and to update the
repository's configuration, which ties them to the main repository of
the process.

Accept the repository as a parameter instead, and have the callers in
builtin/clone.c and builtin/fetch.c pass `the_repository` explicitly.
This moves the dependency on the global one level up, without changing
behavior.

Remove the USE_THE_REPOSITORY_VARIABLE definition from
list-objects-filter-options.c, as the file no longer uses
`the_repository`.

Helped-by: Okhuomon Ajayi [off-list ref]
Signed-off-by: Dorine Tipo <redacted>
---
Changes since v1:
 - Drop USE_THE_REPOSITORY_VARIABLE, which is no longer needed

 builtin/clone.c               |  3 ++-
 builtin/fetch.c               |  7 +++++--
 list-objects-filter-options.c | 16 ++++++++--------
 list-objects-filter-options.h |  3 +++
 4 files changed, 18 insertions(+), 11 deletions(-)
diff --git a/builtin/clone.c b/builtin/clone.c
index 44037dd428..5a6859065e 100644
--- a/builtin/clone.c
+++ b/builtin/clone.c
@@ -1619,7 +1619,8 @@ int cmd_clone(int argc,
 				     remote_head_points_at, &branch_top);
 
 	if (filter_options.choice)
-		partial_clone_register(remote_name, &filter_options);
+		partial_clone_register(the_repository, remote_name,
+				       &filter_options);
 
 	if (is_local)
 		clone_local(path, git_dir);
diff --git a/builtin/fetch.c b/builtin/fetch.c
index 1f76ae6242..5277047476 100644
--- a/builtin/fetch.c
+++ b/builtin/fetch.c
@@ -2436,7 +2436,8 @@ static inline void fetch_one_setup_partial(struct remote *remote,
 	 * remote if there is currently no default filter-spec.
 	 */
 	if (filter_options->choice) {
-		partial_clone_register(remote->name, filter_options);
+		partial_clone_register(the_repository, remote->name,
+				       filter_options);
 		return;
 	}
 
@@ -2446,7 +2447,9 @@ static inline void fetch_one_setup_partial(struct remote *remote,
 	 * the config.
 	 */
 	if (!filter_options->choice)
-		partial_clone_get_default_filter_spec(filter_options, remote->name);
+		partial_clone_get_default_filter_spec(the_repository,
+						      filter_options,
+						      remote->name);
 	return;
 }
 
diff --git a/list-objects-filter-options.c b/list-objects-filter-options.c
index bc5d98f9e6..b74caf3bf7 100644
--- a/list-objects-filter-options.c
+++ b/list-objects-filter-options.c
@@ -1,5 +1,3 @@
-#define USE_THE_REPOSITORY_VARIABLE
-
 #include "git-compat-util.h"
 #include "config.h"
 #include "gettext.h"
@@ -362,6 +360,7 @@ void list_objects_filter_release(
 }
 
 void partial_clone_register(
+	struct repository *repo,
 	const char *remote,
 	struct list_objects_filter_options *filter_options)
 {
@@ -370,7 +369,7 @@ void partial_clone_register(
 	char *filter_name;
 
 	/* Check if it is already registered */
-	if ((promisor_remote = repo_promisor_remote_find(the_repository, remote))) {
+	if ((promisor_remote = repo_promisor_remote_find(repo, remote))) {
 		if (promisor_remote->partial_clone_filter)
 			/*
 			 * Remote is already registered and a filter is already
@@ -378,12 +377,12 @@ void partial_clone_register(
 			 */
 			return;
 	} else {
-		if (upgrade_repository_format(the_repository, 1) < 0)
+		if (upgrade_repository_format(repo, 1) < 0)
 			die(_("unable to upgrade repository format to support partial clone"));
 
 		/* Add promisor config for the remote */
 		cfg_name = xstrfmt("remote.%s.promisor", remote);
-		repo_config_set(the_repository, cfg_name, "true");
+		repo_config_set(repo, cfg_name, "true");
 		free(cfg_name);
 	}
 
@@ -393,19 +392,20 @@ void partial_clone_register(
 	 */
 	filter_name = xstrfmt("remote.%s.partialclonefilter", remote);
 	/* NEEDSWORK: 'expand' result leaking??? */
-	repo_config_set(the_repository, filter_name,
+	repo_config_set(repo, filter_name,
 			expand_list_objects_filter_spec(filter_options));
 	free(filter_name);
 
 	/* Make sure the config info are reset */
-	repo_promisor_remote_reinit(the_repository);
+	repo_promisor_remote_reinit(repo);
 }
 
 void partial_clone_get_default_filter_spec(
+	struct repository *repo,
 	struct list_objects_filter_options *filter_options,
 	const char *remote)
 {
-	struct promisor_remote *promisor = repo_promisor_remote_find(the_repository,
+	struct promisor_remote *promisor = repo_promisor_remote_find(repo,
 								     remote);
 	struct strbuf errbuf = STRBUF_INIT;
 
diff --git a/list-objects-filter-options.h b/list-objects-filter-options.h
index 77d7bbc846..6a349cb4da 100644
--- a/list-objects-filter-options.h
+++ b/list-objects-filter-options.h
@@ -6,6 +6,7 @@
 #include "strbuf.h"
 
 struct option;
+struct repository;
 
 /*
  * The list of defined filters for list-objects.
@@ -158,9 +159,11 @@ static inline void list_objects_filter_set_no_filter(
 }
 
 void partial_clone_register(
+	struct repository *repo,
 	const char *remote,
 	struct list_objects_filter_options *filter_options);
 void partial_clone_get_default_filter_spec(
+	struct repository *repo,
 	struct list_objects_filter_options *filter_options,
 	const char *remote);
 
-- 
2.34.1
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help