+1
index dfb0f1000f..89b1d53741 100644
--- a/Makefile
+++ b/Makefile
LIB_OBJS += shallow.o
LIB_OBJS += sideband.o
LIB_OBJS += sigchain.o
+LIB_OBJS += sparse-index.o
LIB_OBJS += split-index.o
LIB_OBJS += stable-qsort.o
LIB_OBJS += strbuf.o
+8
index f7fff0f5ab..d63569e404 100644
--- a/repo-settings.c
+++ b/repo-settings.c
UPDATE_DEFAULT_BOOL(r->settings.core_untracked_cache, UNTRACKED_CACHE_KEEP);
UPDATE_DEFAULT_BOOL(r->settings.fetch_negotiation_algorithm, FETCH_NEGOTIATION_DEFAULT);
+
+ /*
+ * This setting guards all index reads to require a full index
+ * over a sparse index. After suitable guards are placed in the
+ * codebase around uses of the index, this setting will be
+ * removed.
+ */
+ r->settings.command_requires_full_index = 1;
}
+10
-1
index c98298acd0..a8acae002f 100644
--- a/repository.c
+++ b/repository.c
#include "object.h"
#include "lockfile.h"
#include "submodule-config.h"
+#include "sparse-index.h"
/* The main repository */
static struct repository the_repo;
int repo_read_index(struct repository *repo)
{
+ int res;
+
if (!repo->index)
repo->index = xcalloc(1, sizeof(*repo->index));
else if (repo->index->repo != repo)
BUG("repo's index should point back at itself");
- return read_index_from(repo->index, repo->index_file, repo->gitdir);
+ 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 res;
}
int repo_hold_locked_index(struct repository *repo,
+2
index b385ca3c94..e06a230156 100644
--- a/repository.h
+++ b/repository.h
enum fetch_negotiation_setting fetch_negotiation_algorithm;
int core_multi_pack_index;
+
+ unsigned command_requires_full_index:1;
};
struct repository {
+8
new file mode 100644
index 0000000000..82183ead56
--- /dev/null
+++ b/sparse-index.c
+#include "cache.h"
+#include "repository.h"
+#include "sparse-index.h"
+
+void ensure_full_index(struct index_state *istate)
+{
+ /* intentionally left blank */
+}
+7
new file mode 100644
index 0000000000..09a20d036c
--- /dev/null
+++ b/sparse-index.h
+#ifndef SPARSE_INDEX_H__
+#define SPARSE_INDEX_H__
+
+struct index_state;
+void ensure_full_index(struct index_state *istate);
+
+#endif