aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@osdl.org>2006-06-29 21:38:55 -0700
committerJunio C Hamano <junkio@cox.net>2006-06-29 23:48:31 -0700
commitfc046a75d539a78e6b2c16534c4078617a69a327 (patch)
tree03842bdfab234301a0a0c693f30c087a58eeb51f
parent8dbbd14ea3ae1b4e825f1e7d314afddf26c67298 (diff)
downloadgit-fc046a75d539a78e6b2c16534c4078617a69a327.tar.gz
git-fc046a75d539a78e6b2c16534c4078617a69a327.tar.xz
Abstract out accesses to object hash array
There are a few special places where some programs accessed the object hash array directly, which bothered me because I wanted to play with some simple re-organizations. So this patch makes the object hash array data structures all entirely local to object.c, and the few users who wanted to look at it now get to use a function to query how many object index entries there can be, and to actually access the array. Signed-off-by: Linus Torvalds <torvalds@osdl.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r--fsck-objects.c7
-rw-r--r--name-rev.c13
-rw-r--r--object.c15
-rw-r--r--object.h5
4 files changed, 27 insertions, 13 deletions
diff --git a/fsck-objects.c b/fsck-objects.c
index 769bb2a6a..ef54a8a41 100644
--- a/fsck-objects.c
+++ b/fsck-objects.c
@@ -60,12 +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++) {
+ max = get_max_object_index();
+ for (i = 0; i < max; i++) {
const struct object_refs *refs;
- struct object *obj = objs[i];
+ struct object *obj = get_indexed_object(i);
if (!obj)
continue;
diff --git a/name-rev.c b/name-rev.c
index 3a5ac35d1..6a23f2d8a 100644
--- a/name-rev.c
+++ b/name-rev.c
@@ -234,12 +234,15 @@ int main(int argc, char **argv)
fwrite(p_start, p - p_start, 1, stdout);
}
} else if (all) {
- int i;
+ int i, max;
- for (i = 0; i < obj_allocs; i++)
- if (objs[i])
- printf("%s %s\n", sha1_to_hex(objs[i]->sha1),
- get_rev_name(objs[i]));
+ max = get_max_object_index();
+ for (i = 0; i < max; i++) {
+ struct object * obj = get_indexed_object(i);
+ if (!obj)
+ continue;
+ printf("%s %s\n", sha1_to_hex(obj->sha1), get_rev_name(obj));
+ }
} else {
int i;
for (i = 0; i < revs.nr; i++)
diff --git a/object.c b/object.c
index 37784cee9..31c77ea03 100644
--- a/object.c
+++ b/object.c
@@ -5,9 +5,18 @@
#include "commit.h"
#include "tag.h"
-struct object **objs;
-static int nr_objs;
-int obj_allocs;
+static struct object **objs;
+static int nr_objs, obj_allocs;
+
+unsigned int get_max_object_index(void)
+{
+ return obj_allocs;
+}
+
+struct object *get_indexed_object(unsigned int idx)
+{
+ return objs[idx];
+}
const char *type_names[] = {
"none", "blob", "tree", "commit", "bad"
diff --git a/object.h b/object.h
index 6f23a9a18..e0125e154 100644
--- a/object.h
+++ b/object.h
@@ -40,10 +40,11 @@ struct object {
};
extern int track_object_refs;
-extern int obj_allocs;
-extern struct object **objs;
extern const char *type_names[];
+extern unsigned int get_max_object_index(void);
+extern struct object *get_indexed_object(unsigned int);
+
static inline const char *typename(unsigned int type)
{
return type_names[type > TYPE_TAG ? TYPE_BAD : type];