Subject: [PATCH 1/4] run-command: add repo_start_command()

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

Currently start_command() relies on implicitly the_repository to close
object store before the spawning a child process. This prevents callers
from safely starting commands in context of a different repository.

Introduce repo_start_command() which takes 'struct repository *' as
argument. To avoid breaking existing callers, redefine start_command()
as a wrapper to pass the_repository to repo_start_command().

Signed-off-by: Burak Kaan Karaçay <[email-masked]>
---
 run-command.c | 7 ++++++-
 run-command.h | 4 +++-
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/run-command.c b/run-command.c
index b27064ef57..fadc3d5283 100644
--- a/run-command.c
+++ b/run-command.c
@@ -675,6 +675,11 @@ static void trace_run_command(const struct child_process *cp)
 }
 
 int start_command(struct child_process *cmd)
+{
+	return repo_start_command(the_repository, cmd);
+}
+
+int repo_start_command(struct repository *repo, struct child_process *cmd)
 {
 	int need_in, need_out, need_err;
 	int fdin[2], fdout[2], fderr[2];
@@ -743,7 +748,7 @@ int start_command(struct child_process *cmd)
 	fflush(NULL);
 
 	if (cmd->close_object_store)
-		odb_close(the_repository->objects);
+		odb_close(repo->objects);
 
 #ifndef GIT_WINDOWS_NATIVE
 {
diff --git a/run-command.h b/run-command.h
index e1ca965b5b..654ca659b3 100644
--- a/run-command.h
+++ b/run-command.h
@@ -2,7 +2,6 @@
 #define RUN_COMMAND_H
 
 #include "thread-utils.h"
-
 #include "strvec.h"
 
 /**
@@ -15,6 +14,7 @@
  * produces in the caller in order to process it.
  */
 
+struct repository;
 
 /**
  * This describes the arguments, redirections, and environment of a
@@ -205,7 +205,9 @@ char *git_shell_path(void);
  * that specifies the details and returns pipe FDs (if requested).
  * See below for details.
  */
+
 int start_command(struct child_process *);
+int repo_start_command(struct repository *, struct child_process *);
 
 /**
  * Wait for the completion of a sub-process that was started with
-- 
2.53.0