odb: handle recreation of quarantine directories

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>
next
Patrick Steinhardt 2025-11-19 08:51:01 +01:00 committed by Junio C Hamano
parent 2816b748e5
commit ac65c70663
2 changed files with 7 additions and 5 deletions

7
odb.c
View File

@ -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,

View File

@ -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);
}