Added mark store/find to fast-import.
[gitweb.git] / fsck-objects.c
index 2b1aab488f2b8d64fa799adf427b6eeca35ac757..ae0ec8d039cfce698daa8a9f44c7f49b932373c8 100644 (file)
 #define REACHABLE 0x0001
 #define SEEN      0x0002
 
-static int show_root = 0;
-static int show_tags = 0;
-static int show_unreachable = 0;
-static int check_full = 0;
-static int check_strict = 0;
-static int keep_cache_objects = 0;
+static int show_root;
+static int show_tags;
+static int show_unreachable;
+static int check_full;
+static int check_strict;
+static int keep_cache_objects;
 static unsigned char head_sha1[20];
 
 #ifdef NO_D_INO_IN_DIRENT
@@ -60,11 +60,13 @@ static int objwarning(struct object *obj, const char *err, ...)
 
 static void check_connectivity(void)
 {
-       int i;
+       int i, max;
 
        /* Look up all the requirements, warn about missing objects.. */
-       for (i = 0; i < obj_allocs; i++) {
-               struct object *obj = objs[i];
+       max = get_max_object_index();
+       for (i = 0; i < max; i++) {
+               const struct object_refs *refs;
+               struct object *obj = get_indexed_object(i);
 
                if (!obj)
                        continue;
@@ -78,8 +80,8 @@ static void check_connectivity(void)
                        continue;
                }
 
-               if (obj->refs) {
-                       const struct object_refs *refs = obj->refs;
+               refs = lookup_object_refs(obj);
+               if (refs) {
                        unsigned j;
                        for (j = 0; j < refs->count; j++) {
                                struct object *ref = refs->ref[j];
@@ -295,13 +297,13 @@ static int fsck_sha1(unsigned char *sha1)
        if (obj->flags & SEEN)
                return 0;
        obj->flags |= SEEN;
-       if (obj->type == TYPE_BLOB)
+       if (obj->type == OBJ_BLOB)
                return 0;
-       if (obj->type == TYPE_TREE)
+       if (obj->type == OBJ_TREE)
                return fsck_tree((struct tree *) obj);
-       if (obj->type == TYPE_COMMIT)
+       if (obj->type == OBJ_COMMIT)
                return fsck_commit((struct commit *) obj);
-       if (obj->type == TYPE_TAG)
+       if (obj->type == OBJ_TAG)
                return fsck_tag((struct tag *) obj);
        /* By now, parse_object() would've returned NULL instead. */
        return objerror(obj, "unknown type '%d' (internal fsck error)", obj->type);
@@ -354,7 +356,7 @@ static void add_sha1_list(unsigned char *sha1, unsigned long ino)
        int nr;
 
        entry->ino = ino;
-       memcpy(entry->sha1, sha1, 20);
+       hashcpy(entry->sha1, sha1);
        nr = sha1_list.nr;
        if (nr == MAX_SHA1_ENTRIES) {
                fsck_sha1_list();
@@ -364,13 +366,13 @@ static void add_sha1_list(unsigned char *sha1, unsigned long ino)
        sha1_list.nr = ++nr;
 }
 
-static int fsck_dir(int i, char *path)
+static void fsck_dir(int i, char *path)
 {
        DIR *dir = opendir(path);
        struct dirent *de;
 
        if (!dir)
-               return 0;
+               return;
 
        while ((de = readdir(dir)) != NULL) {
                char name[100];
@@ -396,10 +398,9 @@ static int fsck_dir(int i, char *path)
                fprintf(stderr, "bad sha1 file: %s/%s\n", path, de->d_name);
        }
        closedir(dir);
-       return 0;
 }
 
-static int default_refs = 0;
+static int default_refs;
 
 static int fsck_handle_ref(const char *refname, const unsigned char *sha1)
 {
@@ -451,7 +452,7 @@ static int fsck_head_link(void)
        if (strncmp(git_refs_heads_master + pfxlen, "refs/heads/", 11))
                return error("HEAD points to something strange (%s)",
                             git_refs_heads_master + pfxlen);
-       if (!memcmp(null_sha1, sha1, 20))
+       if (is_null_sha1(sha1))
                return error("HEAD: not a valid git pointer");
        return 0;
 }
@@ -470,7 +471,7 @@ static int fsck_cache_tree(struct cache_tree *it)
                }
                mark_reachable(obj, REACHABLE);
                obj->used = 1;
-               if (obj->type != TYPE_TREE)
+               if (obj->type != OBJ_TREE)
                        err |= objerror(obj, "non-tree in cache-tree");
        }
        for (i = 0; i < it->subtree_nr; i++)