Signed-off-by: Stefan Beller <sbel...@google.com>
---
 commit.h     | 11 ++++-------
 object.h     |  6 ++++++
 repository.c |  4 ++++
 shallow.c    | 52 +++++++++++++++++++++++++---------------------------
 4 files changed, 39 insertions(+), 34 deletions(-)

diff --git a/commit.h b/commit.h
index 06795f0684..cdd12ad75d 100644
--- a/commit.h
+++ b/commit.h
@@ -196,19 +196,16 @@ extern struct commit_list 
*get_merge_bases_many_dirty(struct commit *one, int n,
 
 struct oid_array;
 struct ref;
-#define register_shallow(r, o) register_shallow_##r(o);
-extern int register_shallow_the_repository(const struct object_id *oid);
+extern int register_shallow(struct repository *r, const struct object_id *oid);
 extern int unregister_shallow(const struct object_id *oid);
 extern int for_each_commit_graft(each_commit_graft_fn, void *);
-extern int is_repository_shallow(void);
-#define is_repository_shallow(r) is_repository_shallow_##r()
-extern int is_repository_shallow_the_repository(void);
+extern int is_repository_shallow(struct repository *r);
+extern int for_each_commit_graft_the_repository(each_commit_graft_fn, void *);
 extern struct commit_list *get_shallow_commits(struct object_array *heads,
                int depth, int shallow_flag, int not_shallow_flag);
 extern struct commit_list *get_shallow_commits_by_rev_list(
                int ac, const char **av, int shallow_flag, int 
not_shallow_flag);
-#define set_alternate_shallow_file(r, p, o) set_alternate_shallow_file_##r(p, 
o)
-extern void set_alternate_shallow_file_the_repository(const char *path, int 
override);
+extern void set_alternate_shallow_file(struct repository *r, const char *path, 
int override);
 extern int write_shallow_commits(struct strbuf *out, int use_pack_protocol,
                                 const struct oid_array *extra);
 extern void setup_alternate_shallow(struct lock_file *shallow_lock,
diff --git a/object.h b/object.h
index 65b5326e0f..369295c7c1 100644
--- a/object.h
+++ b/object.h
@@ -11,6 +11,10 @@ struct object_parser {
        struct commit_graft **grafts;
        int grafts_alloc, grafts_nr;
 
+       int is_shallow;
+       struct stat_validity *shallow_stat;
+       char *alternate_shallow_file;
+
        struct alloc_state *blob_state;
        struct alloc_state *tree_state;
        struct alloc_state *commit_state;
@@ -20,6 +24,7 @@ struct object_parser {
 };
 
 extern struct buffer_slab the_repository_buffer_slab;
+extern struct stat_validity the_repository_shallow_stat;
 extern struct alloc_state the_repository_blob_state;
 extern struct alloc_state the_repository_tree_state;
 extern struct alloc_state the_repository_commit_state;
@@ -27,6 +32,7 @@ extern struct alloc_state the_repository_tag_state;
 extern struct alloc_state the_repository_object_state;
 #define OBJECT_PARSER_INIT { NULL, 0, 0, &the_repository_buffer_slab, \
        NULL, 0, 0, \
+       -1, &the_repository_shallow_stat, NULL, \
        &the_repository_blob_state, \
        &the_repository_tree_state, \
        &the_repository_commit_state, \
diff --git a/repository.c b/repository.c
index 3ee47b4c5d..64fb6d8b34 100644
--- a/repository.c
+++ b/repository.c
@@ -185,6 +185,10 @@ int repo_init(struct repository *repo, const char *gitdir, 
const char *worktree)
        if (worktree)
                repo_set_worktree(repo, worktree);
 
+       repo->parsed_objects.is_shallow = -1;
+       repo->parsed_objects.shallow_stat = xcalloc(1, sizeof(
+               *repo->parsed_objects.shallow_stat));
+
        ALLOC_GROW(open_repos, open_repos_nr + 1, open_repos_alloc);
        open_repos[open_repos_nr++] = repo;
 
diff --git a/shallow.c b/shallow.c
index 2849046477..64a4fcb57f 100644
--- a/shallow.c
+++ b/shallow.c
@@ -14,66 +14,65 @@
 #include "commit-slab.h"
 #include "revision.h"
 #include "list-objects.h"
+#include "repository.h"
 
-static int is_shallow = -1;
-static struct stat_validity shallow_stat;
-static char *alternate_shallow_file;
+struct stat_validity the_repository_shallow_stat;
 
-void set_alternate_shallow_file_the_repository(const char *path, int override)
+void set_alternate_shallow_file(struct repository *r, const char *path, int 
override)
 {
-       if (is_shallow != -1)
+       if (r->parsed_objects.is_shallow != -1)
                die("BUG: is_repository_shallow must not be called before 
set_alternate_shallow_file");
-       if (alternate_shallow_file && !override)
+       if (r->parsed_objects.alternate_shallow_file && !override)
                return;
-       free(alternate_shallow_file);
-       alternate_shallow_file = xstrdup_or_null(path);
+       free(r->parsed_objects.alternate_shallow_file);
+       r->parsed_objects.alternate_shallow_file = xstrdup_or_null(path);
 }
 
-int register_shallow_the_repository(const struct object_id *oid)
+int register_shallow(struct repository *r, const struct object_id *oid)
 {
        struct commit_graft *graft =
                xmalloc(sizeof(struct commit_graft));
-       struct commit *commit = lookup_commit(the_repository, oid);
+       struct commit *commit = lookup_commit(r, oid);
 
        oidcpy(&graft->oid, oid);
        graft->nr_parent = -1;
        if (commit && commit->object.parsed)
                commit->parents = NULL;
-       return register_commit_graft(the_repository, graft, 0);
+       return register_commit_graft(r, graft, 0);
 }
 
-int is_repository_shallow_the_repository(void)
+int is_repository_shallow(struct repository *r)
 {
        FILE *fp;
        char buf[1024];
-       const char *path = alternate_shallow_file;
+       const char *path = r->parsed_objects.alternate_shallow_file;
 
-       if (is_shallow >= 0)
-               return is_shallow;
+       if (r->parsed_objects.is_shallow >= 0)
+               return r->parsed_objects.is_shallow;
 
        if (!path)
-               path = git_path_shallow(the_repository);
+               path = git_path_shallow(r);
        /*
         * fetch-pack sets '--shallow-file ""' as an indicator that no
         * shallow file should be used. We could just open it and it
         * will likely fail. But let's do an explicit check instead.
         */
        if (!*path || (fp = fopen(path, "r")) == NULL) {
-               stat_validity_clear(&shallow_stat);
-               is_shallow = 0;
-               return is_shallow;
+               stat_validity_clear(r->parsed_objects.shallow_stat);
+               r->parsed_objects.is_shallow = 0;
+               return r->parsed_objects.is_shallow;
        }
-       stat_validity_update(&shallow_stat, fileno(fp));
-       is_shallow = 1;
+       stat_validity_update(r->parsed_objects.shallow_stat, fileno(fp));
+       r->parsed_objects.is_shallow = 1;
 
        while (fgets(buf, sizeof(buf), fp)) {
                struct object_id oid;
                if (get_oid_hex(buf, &oid))
                        die("bad shallow line: %s", buf);
-               register_shallow(the_repository, &oid);
+               register_shallow(r, &oid);
        }
        fclose(fp);
-       return is_shallow;
+       return r->parsed_objects.is_shallow;
 }
 
 struct commit_list *get_shallow_commits(struct object_array *heads, int depth,
@@ -219,13 +218,12 @@ struct commit_list *get_shallow_commits_by_rev_list(int 
ac, const char **av,
        return result;
 }
 
-#define check_shallow_file_for_update(r) check_shallow_file_for_update_##r()
-static void check_shallow_file_for_update_the_repository(void)
+static void check_shallow_file_for_update(struct repository *r)
 {
-       if (is_shallow == -1)
+       if (r->parsed_objects.is_shallow == -1)
                die("BUG: shallow must be initialized by now");
 
-       if (!stat_validity_check(&shallow_stat, 
git_path_shallow(the_repository)))
+       if (!stat_validity_check(r->parsed_objects.shallow_stat, 
git_path_shallow(the_repository)))
                die("shallow file has changed since we read it");
 }
 
-- 
2.15.1.433.g936d1b9894.dirty

Reply via email to