]> git.ipfire.org Git - thirdparty/git.git/commitdiff
odb: handle recreation of quarantine directories
authorPatrick Steinhardt <ps@pks.im>
Wed, 19 Nov 2025 07:51:01 +0000 (08:51 +0100)
committerJunio C Hamano <gitster@pobox.com>
Tue, 25 Nov 2025 20:16:00 +0000 (12:16 -0800)
In the preceding commit we have moved the logic that reparents object
database sources on chdir(3p) from "setup.c" into "odb.c". Let's also do
the same for any temporary quarantine directories so that the complete
reparenting logic is self-contained in "odb.c".

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

diff --git a/odb.c b/odb.c
index 70665fb7f48f0ff4662365f5744d5118e70c84a5..dc8f292f3d9645e2de8d990630a29cb4b4b1e20a 100644 (file)
--- a/odb.c
+++ b/odb.c
@@ -24,6 +24,7 @@
 #include "strbuf.h"
 #include "strvec.h"
 #include "submodule.h"
+#include "tmp-objdir.h"
 #include "trace2.h"
 #include "write-or-die.h"
 
@@ -1041,8 +1042,11 @@ static void odb_update_commondir(const char *name UNUSED,
                                 void *cb_data)
 {
        struct object_database *odb = cb_data;
+       struct tmp_objdir *tmp_objdir;
        struct odb_source *source;
 
+       tmp_objdir = tmp_objdir_unapply_primary_odb();
+
        /*
         * In theory, we only have to do this for the primary object source, as
         * alternates' paths are always resolved to an absolute path.
@@ -1059,6 +1063,9 @@ static void odb_update_commondir(const char *name UNUSED,
                free(source->path);
                source->path = path;
        }
+
+       if (tmp_objdir)
+               tmp_objdir_reapply_primary_odb(tmp_objdir, old_cwd, new_cwd);
 }
 
 struct object_database *odb_new(struct repository *repo,
diff --git a/setup.c b/setup.c
index a625f9fbc8b1b7fb470ec652a332a8da638f3dbd..ae66188af3f6f4bc16c5736a298389e932afe5ac 100644 (file)
--- a/setup.c
+++ b/setup.c
@@ -22,7 +22,6 @@
 #include "chdir-notify.h"
 #include "path.h"
 #include "quote.h"
-#include "tmp-objdir.h"
 #include "trace.h"
 #include "trace2.h"
 #include "worktree.h"
@@ -1056,14 +1055,10 @@ static void update_relative_gitdir(const char *name UNUSED,
 {
        char *path = reparent_relative_path(old_cwd, new_cwd,
                                            repo_get_git_dir(the_repository));
-       struct tmp_objdir *tmp_objdir = tmp_objdir_unapply_primary_odb();
-
        trace_printf_key(&trace_setup_key,
                         "setup: move $GIT_DIR to '%s'",
                         path);
        set_git_dir_1(path, true);
-       if (tmp_objdir)
-               tmp_objdir_reapply_primary_odb(tmp_objdir, old_cwd, new_cwd);
        free(path);
 }