summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--builtin/grep.c3
-rw-r--r--environment.c5
-rw-r--r--object-store.h18
-rw-r--r--object.c14
-rw-r--r--path.c3
-rw-r--r--repository.c15
-rw-r--r--repository.h11
-rw-r--r--sha1_file.c4
8 files changed, 56 insertions, 17 deletions
diff --git a/builtin/grep.c b/builtin/grep.c
index 3ca4ac8..1e9cdbd 100644
--- a/builtin/grep.c
+++ b/builtin/grep.c
@@ -22,6 +22,7 @@
#include "pathspec.h"
#include "submodule.h"
#include "submodule-config.h"
+#include "object-store.h"
static char const * const grep_usage[] = {
N_("git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"),
@@ -432,7 +433,7 @@ static int grep_submodule(struct grep_opt *opt, struct repository *superproject,
* object.
*/
grep_read_lock();
- add_to_alternates_memory(submodule.objectdir);
+ add_to_alternates_memory(submodule.objects->objectdir);
grep_read_unlock();
if (oid) {
diff --git a/environment.c b/environment.c
index a5eaa97..93c9fbb 100644
--- a/environment.c
+++ b/environment.c
@@ -14,6 +14,7 @@
#include "fmt-merge-msg.h"
#include "commit.h"
#include "argv-array.h"
+#include "object-store.h"
int trust_executable_bit = 1;
int trust_ctime = 1;
@@ -270,9 +271,9 @@ const char *get_git_work_tree(void)
char *get_object_directory(void)
{
- if (!the_repository->objectdir)
+ if (!the_repository->objects->objectdir)
BUG("git environment hasn't been setup");
- return the_repository->objectdir;
+ return the_repository->objects->objectdir;
}
int odb_mkstemp(struct strbuf *template, const char *pattern)
diff --git a/object-store.h b/object-store.h
new file mode 100644
index 0000000..abfaae0
--- /dev/null
+++ b/object-store.h
@@ -0,0 +1,18 @@
+#ifndef OBJECT_STORE_H
+#define OBJECT_STORE_H
+
+struct raw_object_store {
+ /*
+ * Path to the repository's object store.
+ * Cannot be NULL after initialization.
+ */
+ char *objectdir;
+
+ /* Path to extra alternate object database if not NULL */
+ char *alternate_db;
+};
+
+struct raw_object_store *raw_object_store_new(void);
+void raw_object_store_clear(struct raw_object_store *o);
+
+#endif /* OBJECT_STORE_H */
diff --git a/object.c b/object.c
index 9e6f9ff..6ddd612 100644
--- a/object.c
+++ b/object.c
@@ -4,6 +4,7 @@
#include "tree.h"
#include "commit.h"
#include "tag.h"
+#include "object-store.h"
static struct object **obj_hash;
static int nr_objs, obj_hash_size;
@@ -445,3 +446,16 @@ void clear_commit_marks_all(unsigned int flags)
obj->flags &= ~flags;
}
}
+
+struct raw_object_store *raw_object_store_new(void)
+{
+ struct raw_object_store *o = xmalloc(sizeof(*o));
+
+ memset(o, 0, sizeof(*o));
+ return o;
+}
+void raw_object_store_clear(struct raw_object_store *o)
+{
+ FREE_AND_NULL(o->objectdir);
+ FREE_AND_NULL(o->alternate_db);
+}
diff --git a/path.c b/path.c
index da8b655..3308b7b 100644
--- a/path.c
+++ b/path.c
@@ -10,6 +10,7 @@
#include "submodule-config.h"
#include "path.h"
#include "packfile.h"
+#include "object-store.h"
static int get_st_mode_bits(const char *path, int *mode)
{
@@ -382,7 +383,7 @@ static void adjust_git_path(const struct repository *repo,
strbuf_splice(buf, 0, buf->len,
repo->index_file, strlen(repo->index_file));
else if (dir_prefix(base, "objects"))
- replace_dir(buf, git_dir_len + 7, repo->objectdir);
+ replace_dir(buf, git_dir_len + 7, repo->objects->objectdir);
else if (git_hooks_path && dir_prefix(base, "hooks"))
replace_dir(buf, git_dir_len + 5, git_hooks_path);
else if (repo->different_commondir)
diff --git a/repository.c b/repository.c
index 62f52f4..a4848c1 100644
--- a/repository.c
+++ b/repository.c
@@ -1,5 +1,6 @@
#include "cache.h"
#include "repository.h"
+#include "object-store.h"
#include "config.h"
#include "submodule-config.h"
@@ -12,6 +13,7 @@ void initialize_the_repository(void)
the_repository = &the_repo;
the_repo.index = &the_index;
+ the_repo.objects = raw_object_store_new();
repo_set_hash_algo(&the_repo, GIT_HASH_SHA1);
}
@@ -58,10 +60,10 @@ void repo_set_gitdir(struct repository *repo,
free(old_gitdir);
repo_set_commondir(repo, o->commondir);
- expand_base_dir(&repo->objectdir, o->object_dir,
+ expand_base_dir(&repo->objects->objectdir, o->object_dir,
repo->commondir, "objects");
- free(repo->alternate_db);
- repo->alternate_db = xstrdup_or_null(o->alternate_db);
+ free(repo->objects->alternate_db);
+ repo->objects->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,
@@ -140,6 +142,8 @@ static int repo_init(struct repository *repo,
struct repository_format format;
memset(repo, 0, sizeof(*repo));
+ repo->objects = raw_object_store_new();
+
if (repo_init_gitdir(repo, gitdir))
goto error;
@@ -214,13 +218,14 @@ 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);
FREE_AND_NULL(repo->submodule_prefix);
+ raw_object_store_clear(repo->objects);
+ FREE_AND_NULL(repo->objects);
+
if (repo->config) {
git_configset_clear(repo->config);
FREE_AND_NULL(repo->config);
diff --git a/repository.h b/repository.h
index f21fd93..09df94a 100644
--- a/repository.h
+++ b/repository.h
@@ -2,9 +2,10 @@
#define REPOSITORY_H
struct config_set;
+struct git_hash_algo;
struct index_state;
+struct raw_object_store;
struct submodule_cache;
-struct git_hash_algo;
struct repository {
/* Environment */
@@ -21,13 +22,9 @@ struct repository {
char *commondir;
/*
- * Path to the repository's object store.
- * Cannot be NULL after initialization.
+ * Holds any information related to accessing the raw object content.
*/
- char *objectdir;
-
- /* Path to extra alternate object database if not NULL */
- char *alternate_db;
+ struct raw_object_store *objects;
/*
* Path to the repository's graft file.
diff --git a/sha1_file.c b/sha1_file.c
index 4af422e..af5aa83 100644
--- a/sha1_file.c
+++ b/sha1_file.c
@@ -29,6 +29,7 @@
#include "quote.h"
#include "packfile.h"
#include "fetch-object.h"
+#include "object-store.h"
const unsigned char null_sha1[GIT_MAX_RAWSZ];
const struct object_id null_oid;
@@ -671,7 +672,8 @@ void prepare_alt_odb(void)
return;
alt_odb_tail = &alt_odb_list;
- link_alt_odb_entries(the_repository->alternate_db, PATH_SEP, NULL, 0);
+ link_alt_odb_entries(the_repository->objects->alternate_db,
+ PATH_SEP, NULL, 0);
read_info_alternates(get_object_directory(), 0);
}