Subject: [PATCH 2/4] run-command: use repo_start_command() in strict callers

From: Burak Kaan Karaçay <[email-masked]>
Date: Wed, 11 Mar 2026 18:19:21 +0300

Some callers have been freed from global state and they do not define
the 'USE_THE_REPOSITORY_VARIABLE' macro.

To complete the mitigation of 'start_command()', update these callers to
use repo_start_command() and pass their local 'struct repository' as an
argument, completely eliminating their hidden reliance on the global
state.

Signed-off-by: Burak Kaan Karaçay <[email-masked]>
---
 builtin/difftool.c | 4 ++--
 odb.c              | 2 +-
 pager.c            | 2 +-
 repack-promisor.c  | 2 +-
 send-pack.c        | 4 ++--
 5 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/builtin/difftool.c b/builtin/difftool.c
index e4bc1f8316..15ac552edf 100644
--- a/builtin/difftool.c
+++ b/builtin/difftool.c
@@ -257,7 +257,7 @@ static void changed_files(struct repository *repo,
 	diff_files.out = -1;
 	diff_files.dir = workdir;
 	strvec_pushf(&diff_files.env, "GIT_INDEX_FILE=%s", index_path);
-	if (start_command(&diff_files))
+	if (repo_start_command(repo, &diff_files))
 		die("could not obtain raw diff");
 	fp = xfdopen(diff_files.out, "r");
 	while (!strbuf_getline_nul(&buf, fp)) {
@@ -437,7 +437,7 @@ static int run_dir_diff(struct repository *repo,
 	child->clean_on_exit = 1;
 	child->dir = prefix;
 	child->out = -1;
-	if (start_command(child))
+	if (repo_start_command(repo, child))
 		die("could not obtain raw diff");
 	fp = xfdopen(child->out, "r");
 
diff --git a/odb.c b/odb.c
index 776de5356c..8ec279f84e 100644
--- a/odb.c
+++ b/odb.c
@@ -535,7 +535,7 @@ static void read_alternate_refs(struct repository *repo,
 
 	fill_alternate_refs_command(repo, &cmd, path);
 
-	if (start_command(&cmd))
+	if (repo_start_command(repo, &cmd))
 		return;
 
 	fh = xfdopen(cmd.out, "r");
diff --git a/pager.c b/pager.c
index 5531fff50e..9a23ed958d 100644
--- a/pager.c
+++ b/pager.c
@@ -169,7 +169,7 @@ void setup_pager(struct repository *r)
 	prepare_pager_args(&pager_process, pager);
 	pager_process.in = -1;
 	strvec_push(&pager_process.env, "GIT_PAGER_IN_USE");
-	if (start_command(&pager_process))
+	if (repo_start_command(r, &pager_process))
 		die("unable to execute pager '%s'", pager);
 
 	/* original process continues, but writes to the pipe */
diff --git a/repack-promisor.c b/repack-promisor.c
index 90318ce150..dba161a11a 100644
--- a/repack-promisor.c
+++ b/repack-promisor.c
@@ -125,7 +125,7 @@ void pack_geometry_repack_promisors(struct repository *repo,
 	prepare_pack_objects(&cmd, args, packtmp);
 	strvec_push(&cmd.args, "--stdin-packs");
 	cmd.in = -1;
-	if (start_command(&cmd))
+	if (repo_start_command(repo, &cmd))
 		die(_("could not start pack-objects to repack promisor packs"));
 
 	in = xfdopen(cmd.in, "w");
diff --git a/send-pack.c b/send-pack.c
index 67d6987b1c..c339c3d1ca 100644
--- a/send-pack.c
+++ b/send-pack.c
@@ -92,7 +92,7 @@ static int pack_objects(struct repository *r,
 	po.out = args->stateless_rpc ? -1 : fd;
 	po.git_cmd = 1;
 	po.clean_on_exit = 1;
-	if (start_command(&po))
+	if (repo_start_command(r, &po))
 		die_errno("git pack-objects failed");
 
 	/*
@@ -459,7 +459,7 @@ static void get_commons_through_negotiation(struct repository *r,
 		return;
 	}
 
-	if (start_command(&child))
+	if (repo_start_command(r, &child))
 		die(_("send-pack: unable to fork off fetch subprocess"));
 
 	do {
-- 
2.53.0