summaryrefslogtreecommitdiffstats
path: root/repository.c
diff options
context:
space:
mode:
Diffstat (limited to 'repository.c')
-rw-r--r--repository.c35
1 files changed, 28 insertions, 7 deletions
diff --git a/repository.c b/repository.c
index 6f7f6f002b..b2bf44c6fa 100644
--- a/repository.c
+++ b/repository.c
@@ -10,6 +10,8 @@
#include "object.h"
#include "lockfile.h"
#include "submodule-config.h"
+#include "sparse-index.h"
+#include "promisor-remote.h"
/* The main repository */
static struct repository the_repo;
@@ -72,7 +74,7 @@ void repo_set_gitdir(struct repository *repo,
repo_set_commondir(repo, o->commondir);
if (!repo->objects->odb) {
- repo->objects->odb = xcalloc(1, sizeof(*repo->objects->odb));
+ CALLOC_ARRAY(repo->objects->odb, 1);
repo->objects->odb_tail = &repo->objects->odb->next;
}
expand_base_dir(&repo->objects->odb->path, o->object_dir,
@@ -89,10 +91,6 @@ void repo_set_gitdir(struct repository *repo,
void repo_set_hash_algo(struct repository *repo, int hash_algo)
{
repo->hash_algo = &hash_algos[hash_algo];
-#ifndef ENABLE_SHA256
- if (hash_algo != GIT_HASH_SHA1)
- die(_("The hash algorithm %s is not supported in this build."), repo->hash_algo->name);
-#endif
}
/*
@@ -175,6 +173,10 @@ int repo_init(struct repository *repo,
repo_set_hash_algo(repo, format.hash_algo);
+ /* take ownership of format.partial_clone */
+ repo->repository_format_partial_clone = format.partial_clone;
+ format.partial_clone = NULL;
+
if (worktree)
repo_set_worktree(repo, worktree);
@@ -261,14 +263,33 @@ void repo_clear(struct repository *repo)
if (repo->index != &the_index)
FREE_AND_NULL(repo->index);
}
+
+ if (repo->promisor_remote_config) {
+ promisor_remote_clear(repo->promisor_remote_config);
+ FREE_AND_NULL(repo->promisor_remote_config);
+ }
}
int repo_read_index(struct repository *repo)
{
+ int res;
+
if (!repo->index)
- repo->index = xcalloc(1, sizeof(*repo->index));
+ CALLOC_ARRAY(repo->index, 1);
+
+ /* Complete the double-reference */
+ if (!repo->index->repo)
+ repo->index->repo = repo;
+ else if (repo->index->repo != repo)
+ BUG("repo's index should point back at itself");
+
+ res = read_index_from(repo->index, repo->index_file, repo->gitdir);
+
+ prepare_repo_settings(repo);
+ if (repo->settings.command_requires_full_index)
+ ensure_full_index(repo->index);
- return read_index_from(repo->index, repo->index_file, repo->gitdir);
+ return res;
}
int repo_hold_locked_index(struct repository *repo,