summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--environment.c1
-rw-r--r--repository.c3
-rw-r--r--repository.h4
-rw-r--r--sha1_file.c6
4 files changed, 9 insertions, 5 deletions
diff --git a/environment.c b/environment.c
index da3f7da..a5eaa97 100644
--- a/environment.c
+++ b/environment.c
@@ -174,6 +174,7 @@ void setup_git_env(const char *git_dir)
args.object_dir = getenv_safe(&to_free, DB_ENVIRONMENT);
args.graft_file = getenv_safe(&to_free, GRAFT_ENVIRONMENT);
args.index_file = getenv_safe(&to_free, INDEX_ENVIRONMENT);
+ args.alternate_db = getenv_safe(&to_free, ALTERNATE_DB_ENVIRONMENT);
repo_set_gitdir(the_repository, git_dir, &args);
argv_array_clear(&to_free);
diff --git a/repository.c b/repository.c
index e65f413..04d85a2 100644
--- a/repository.c
+++ b/repository.c
@@ -60,6 +60,8 @@ void repo_set_gitdir(struct repository *repo,
repo_set_commondir(repo, o->commondir);
expand_base_dir(&repo->objectdir, o->object_dir,
repo->commondir, "objects");
+ free(repo->alternate_db);
+ repo->alternate_db = xstrdup_or_null(o->alternate_db);
expand_base_dir(&repo->graft_file, o->graft_file,
repo->commondir, "info/grafts");
expand_base_dir(&repo->index_file, o->index_file,
@@ -215,6 +217,7 @@ void repo_clear(struct repository *repo)
FREE_AND_NULL(repo->gitdir);
FREE_AND_NULL(repo->commondir);
FREE_AND_NULL(repo->objectdir);
+ FREE_AND_NULL(repo->alternate_db);
FREE_AND_NULL(repo->graft_file);
FREE_AND_NULL(repo->index_file);
FREE_AND_NULL(repo->worktree);
diff --git a/repository.h b/repository.h
index 84aeac2..2bfbf76 100644
--- a/repository.h
+++ b/repository.h
@@ -26,6 +26,9 @@ struct repository {
*/
char *objectdir;
+ /* Path to extra alternate object database if not NULL */
+ char *alternate_db;
+
/*
* Path to the repository's graft file.
* Cannot be NULL after initialization.
@@ -93,6 +96,7 @@ struct set_gitdir_args {
const char *object_dir;
const char *graft_file;
const char *index_file;
+ const char *alternate_db;
};
extern void repo_set_gitdir(struct repository *repo,
diff --git a/sha1_file.c b/sha1_file.c
index 831d9e7..4af422e 100644
--- a/sha1_file.c
+++ b/sha1_file.c
@@ -667,15 +667,11 @@ int foreach_alt_odb(alt_odb_fn fn, void *cb)
void prepare_alt_odb(void)
{
- const char *alt;
-
if (alt_odb_tail)
return;
- alt = getenv(ALTERNATE_DB_ENVIRONMENT);
-
alt_odb_tail = &alt_odb_list;
- link_alt_odb_entries(alt, PATH_SEP, NULL, 0);
+ link_alt_odb_entries(the_repository->alternate_db, PATH_SEP, NULL, 0);
read_info_alternates(get_object_directory(), 0);
}