mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
odb: introduce odb_source_new()
We have three different locations where we create a new ODB source. Deduplicate the logic via a new `odb_source_new()` function. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
f82e430b4e
commit
0820a4b120
23
odb.c
23
odb.c
@@ -141,6 +141,20 @@ static void read_info_alternates(struct object_database *odb,
|
|||||||
const char *relative_base,
|
const char *relative_base,
|
||||||
int depth);
|
int depth);
|
||||||
|
|
||||||
|
struct odb_source *odb_source_new(struct object_database *odb,
|
||||||
|
const char *path,
|
||||||
|
bool local)
|
||||||
|
{
|
||||||
|
struct odb_source *source;
|
||||||
|
|
||||||
|
CALLOC_ARRAY(source, 1);
|
||||||
|
source->odb = odb;
|
||||||
|
source->local = local;
|
||||||
|
source->path = xstrdup(path);
|
||||||
|
|
||||||
|
return source;
|
||||||
|
}
|
||||||
|
|
||||||
static struct odb_source *link_alt_odb_entry(struct object_database *odb,
|
static struct odb_source *link_alt_odb_entry(struct object_database *odb,
|
||||||
const char *dir,
|
const char *dir,
|
||||||
const char *relative_base,
|
const char *relative_base,
|
||||||
@@ -178,10 +192,7 @@ static struct odb_source *link_alt_odb_entry(struct object_database *odb,
|
|||||||
if (!alt_odb_usable(odb, pathbuf.buf, tmp.buf))
|
if (!alt_odb_usable(odb, pathbuf.buf, tmp.buf))
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
CALLOC_ARRAY(alternate, 1);
|
alternate = odb_source_new(odb, pathbuf.buf, false);
|
||||||
alternate->odb = odb;
|
|
||||||
alternate->local = false;
|
|
||||||
alternate->path = strbuf_detach(&pathbuf, NULL);
|
|
||||||
|
|
||||||
/* add the alternate entry */
|
/* add the alternate entry */
|
||||||
*odb->sources_tail = alternate;
|
*odb->sources_tail = alternate;
|
||||||
@@ -341,9 +352,7 @@ struct odb_source *odb_set_temporary_primary_source(struct object_database *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 = odb_source_new(odb, dir, false);
|
||||||
source->odb = odb;
|
|
||||||
source->path = xstrdup(dir);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Disable ref updates while a temporary odb is active, since
|
* Disable ref updates while a temporary odb is active, since
|
||||||
|
|||||||
4
odb.h
4
odb.h
@@ -89,6 +89,10 @@ struct odb_source {
|
|||||||
char *path;
|
char *path;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct odb_source *odb_source_new(struct object_database *odb,
|
||||||
|
const char *path,
|
||||||
|
bool local);
|
||||||
|
|
||||||
struct packed_git;
|
struct packed_git;
|
||||||
struct packfile_store;
|
struct packfile_store;
|
||||||
struct cached_object_entry;
|
struct cached_object_entry;
|
||||||
|
|||||||
14
repository.c
14
repository.c
@@ -160,20 +160,24 @@ void repo_set_gitdir(struct repository *repo,
|
|||||||
* until after xstrdup(root). Then we can free it.
|
* until after xstrdup(root). Then we can free it.
|
||||||
*/
|
*/
|
||||||
char *old_gitdir = repo->gitdir;
|
char *old_gitdir = repo->gitdir;
|
||||||
|
char *objects_path = NULL;
|
||||||
|
|
||||||
repo->gitdir = xstrdup(gitfile ? gitfile : root);
|
repo->gitdir = xstrdup(gitfile ? gitfile : root);
|
||||||
free(old_gitdir);
|
free(old_gitdir);
|
||||||
|
|
||||||
repo_set_commondir(repo, o->commondir);
|
repo_set_commondir(repo, o->commondir);
|
||||||
|
expand_base_dir(&objects_path, o->object_dir,
|
||||||
|
repo->commondir, "objects");
|
||||||
|
|
||||||
if (!repo->objects->sources) {
|
if (!repo->objects->sources) {
|
||||||
CALLOC_ARRAY(repo->objects->sources, 1);
|
repo->objects->sources = odb_source_new(repo->objects,
|
||||||
repo->objects->sources->odb = repo->objects;
|
objects_path, true);
|
||||||
repo->objects->sources->local = true;
|
|
||||||
repo->objects->sources_tail = &repo->objects->sources->next;
|
repo->objects->sources_tail = &repo->objects->sources->next;
|
||||||
|
free(objects_path);
|
||||||
|
} else {
|
||||||
|
free(repo->objects->sources->path);
|
||||||
|
repo->objects->sources->path = objects_path;
|
||||||
}
|
}
|
||||||
expand_base_dir(&repo->objects->sources->path, o->object_dir,
|
|
||||||
repo->commondir, "objects");
|
|
||||||
|
|
||||||
repo->objects->sources->disable_ref_updates = o->disable_ref_updates;
|
repo->objects->sources->disable_ref_updates = o->disable_ref_updates;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user