odb: get rid of `the_repository` when handling the primary source
The functions `set_temporary_primary_odb()` and `restore_primary_odb()` are responsible for managing a temporary primary source for the database. Both of these functions implicitly rely on `the_repository`. Refactor them to instead take an explicit object database parameter as argument and adjust callers. Rename the functions accordingly. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
parent
798c661ce3
commit
7eafd4472d
27
odb.c
27
odb.c
|
@ -329,7 +329,8 @@ void odb_add_to_alternates_memory(struct object_database *odb,
|
||||||
'\n', NULL, 0);
|
'\n', NULL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct odb_source *set_temporary_primary_odb(const char *dir, int will_destroy)
|
struct odb_source *odb_set_temporary_primary_source(struct object_database *odb,
|
||||||
|
const char *dir, int will_destroy)
|
||||||
{
|
{
|
||||||
struct odb_source *source;
|
struct odb_source *source;
|
||||||
|
|
||||||
|
@ -337,14 +338,14 @@ struct odb_source *set_temporary_primary_odb(const char *dir, int will_destroy)
|
||||||
* Make sure alternates are initialized, or else our entry may be
|
* Make sure alternates are initialized, or else our entry may be
|
||||||
* overwritten when they are.
|
* overwritten when they are.
|
||||||
*/
|
*/
|
||||||
odb_prepare_alternates(the_repository->objects);
|
odb_prepare_alternates(odb);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Make a new primary odb and link the old primary ODB in as an
|
* Make a new primary odb and link the old primary ODB in as an
|
||||||
* alternate
|
* alternate
|
||||||
*/
|
*/
|
||||||
source = xcalloc(1, sizeof(*source));
|
source = xcalloc(1, sizeof(*source));
|
||||||
source->odb = the_repository->objects;
|
source->odb = odb;
|
||||||
source->path = xstrdup(dir);
|
source->path = xstrdup(dir);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -353,8 +354,8 @@ struct odb_source *set_temporary_primary_odb(const char *dir, int will_destroy)
|
||||||
*/
|
*/
|
||||||
source->disable_ref_updates = 1;
|
source->disable_ref_updates = 1;
|
||||||
source->will_destroy = will_destroy;
|
source->will_destroy = will_destroy;
|
||||||
source->next = the_repository->objects->sources;
|
source->next = odb->sources;
|
||||||
the_repository->objects->sources = source;
|
odb->sources = source;
|
||||||
return source->next;
|
return source->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -366,19 +367,21 @@ static void free_object_directory(struct odb_source *source)
|
||||||
free(source);
|
free(source);
|
||||||
}
|
}
|
||||||
|
|
||||||
void restore_primary_odb(struct odb_source *restore_alt, const char *old_path)
|
void odb_restore_primary_source(struct object_database *odb,
|
||||||
|
struct odb_source *restore_source,
|
||||||
|
const char *old_path)
|
||||||
{
|
{
|
||||||
struct odb_source *cur_alt = the_repository->objects->sources;
|
struct odb_source *cur_source = odb->sources;
|
||||||
|
|
||||||
if (strcmp(old_path, cur_alt->path))
|
if (strcmp(old_path, cur_source->path))
|
||||||
BUG("expected %s as primary object store; found %s",
|
BUG("expected %s as primary object store; found %s",
|
||||||
old_path, cur_alt->path);
|
old_path, cur_source->path);
|
||||||
|
|
||||||
if (cur_alt->next != restore_alt)
|
if (cur_source->next != restore_source)
|
||||||
BUG("we expect the old primary object store to be the first alternate");
|
BUG("we expect the old primary object store to be the first alternate");
|
||||||
|
|
||||||
the_repository->objects->sources = restore_alt;
|
odb->sources = restore_source;
|
||||||
free_object_directory(cur_alt);
|
free_object_directory(cur_source);
|
||||||
}
|
}
|
||||||
|
|
||||||
char *compute_alternate_path(const char *path, struct strbuf *err)
|
char *compute_alternate_path(const char *path, struct strbuf *err)
|
||||||
|
|
26
odb.h
26
odb.h
|
@ -73,17 +73,6 @@ struct odb_source {
|
||||||
char *path;
|
char *path;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
|
||||||
* Replace the current writable object directory with the specified temporary
|
|
||||||
* object directory; returns the former primary object directory.
|
|
||||||
*/
|
|
||||||
struct odb_source *set_temporary_primary_odb(const char *dir, int will_destroy);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Restore a previous ODB replaced by set_temporary_main_odb.
|
|
||||||
*/
|
|
||||||
void restore_primary_odb(struct odb_source *restore_alternate, const char *old_path);
|
|
||||||
|
|
||||||
struct packed_git;
|
struct packed_git;
|
||||||
struct multi_pack_index;
|
struct multi_pack_index;
|
||||||
struct cached_object_entry;
|
struct cached_object_entry;
|
||||||
|
@ -187,6 +176,21 @@ void odb_clear(struct object_database *o);
|
||||||
*/
|
*/
|
||||||
struct odb_source *odb_find_source(struct object_database *odb, const char *obj_dir);
|
struct odb_source *odb_find_source(struct object_database *odb, const char *obj_dir);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Replace the current writable object directory with the specified temporary
|
||||||
|
* object directory; returns the former primary source.
|
||||||
|
*/
|
||||||
|
struct odb_source *odb_set_temporary_primary_source(struct object_database *odb,
|
||||||
|
const char *dir, int will_destroy);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Restore the primary source that was previously replaced by
|
||||||
|
* `odb_set_temporary_primary_source()`.
|
||||||
|
*/
|
||||||
|
void odb_restore_primary_source(struct object_database *odb,
|
||||||
|
struct odb_source *restore_source,
|
||||||
|
const char *old_path);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Iterate through all alternates of the database and execute the provided
|
* Iterate through all alternates of the database and execute the provided
|
||||||
* callback function for each of them. Stop iterating once the callback
|
* callback function for each of them. Stop iterating once the callback
|
||||||
|
|
10
tmp-objdir.c
10
tmp-objdir.c
|
@ -47,7 +47,7 @@ int tmp_objdir_destroy(struct tmp_objdir *t)
|
||||||
the_tmp_objdir = NULL;
|
the_tmp_objdir = NULL;
|
||||||
|
|
||||||
if (t->prev_source)
|
if (t->prev_source)
|
||||||
restore_primary_odb(t->prev_source, t->path.buf);
|
odb_restore_primary_source(t->repo->objects, t->prev_source, t->path.buf);
|
||||||
|
|
||||||
err = remove_dir_recursively(&t->path, 0);
|
err = remove_dir_recursively(&t->path, 0);
|
||||||
|
|
||||||
|
@ -279,7 +279,7 @@ int tmp_objdir_migrate(struct tmp_objdir *t)
|
||||||
if (t->prev_source) {
|
if (t->prev_source) {
|
||||||
if (t->repo->objects->sources->will_destroy)
|
if (t->repo->objects->sources->will_destroy)
|
||||||
BUG("migrating an ODB that was marked for destruction");
|
BUG("migrating an ODB that was marked for destruction");
|
||||||
restore_primary_odb(t->prev_source, t->path.buf);
|
odb_restore_primary_source(t->repo->objects, t->prev_source, t->path.buf);
|
||||||
t->prev_source = NULL;
|
t->prev_source = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -311,7 +311,8 @@ void tmp_objdir_replace_primary_odb(struct tmp_objdir *t, int will_destroy)
|
||||||
{
|
{
|
||||||
if (t->prev_source)
|
if (t->prev_source)
|
||||||
BUG("the primary object database is already replaced");
|
BUG("the primary object database is already replaced");
|
||||||
t->prev_source = set_temporary_primary_odb(t->path.buf, will_destroy);
|
t->prev_source = odb_set_temporary_primary_source(t->repo->objects,
|
||||||
|
t->path.buf, will_destroy);
|
||||||
t->will_destroy = will_destroy;
|
t->will_destroy = will_destroy;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -320,7 +321,8 @@ struct tmp_objdir *tmp_objdir_unapply_primary_odb(void)
|
||||||
if (!the_tmp_objdir || !the_tmp_objdir->prev_source)
|
if (!the_tmp_objdir || !the_tmp_objdir->prev_source)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
restore_primary_odb(the_tmp_objdir->prev_source, the_tmp_objdir->path.buf);
|
odb_restore_primary_source(the_tmp_objdir->repo->objects,
|
||||||
|
the_tmp_objdir->prev_source, the_tmp_objdir->path.buf);
|
||||||
the_tmp_objdir->prev_source = NULL;
|
the_tmp_objdir->prev_source = NULL;
|
||||||
return the_tmp_objdir;
|
return the_tmp_objdir;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue