[PATCH] cvs2git and file permissions
[git.git] / object.c
index d093e17..5e83788 100644 (file)
--- a/object.c
+++ b/object.c
@@ -10,7 +10,7 @@ struct object **objs;
 int nr_objs;
 static int obj_allocs;
 
-static int find_object(unsigned char *sha1)
+static int find_object(const unsigned char *sha1)
 {
        int first = 0, last = nr_objs;
 
@@ -31,7 +31,7 @@ static int find_object(unsigned char *sha1)
         return -first-1;
 }
 
-struct object *lookup_object(unsigned char *sha1)
+struct object *lookup_object(const unsigned char *sha1)
 {
        int pos = find_object(sha1);
        if (pos >= 0)
@@ -39,7 +39,7 @@ struct object *lookup_object(unsigned char *sha1)
        return NULL;
 }
 
-void created_object(unsigned char *sha1, struct object *obj)
+void created_object(const unsigned char *sha1, struct object *obj)
 {
        int pos = find_object(sha1);
 
@@ -98,7 +98,7 @@ void mark_reachable(struct object *obj, unsigned int mask)
        }
 }
 
-struct object *parse_object(unsigned char *sha1)
+struct object *parse_object(const unsigned char *sha1)
 {
        unsigned long mapsize;
        void *map = map_sha1_file(sha1, &mapsize);
@@ -129,6 +129,10 @@ struct object *parse_object(unsigned char *sha1)
                } else if (!strcmp(type, "commit")) {
                        struct commit *commit = lookup_commit(sha1);
                        parse_commit_buffer(commit, buffer, size);
+                       if (!commit->buffer) {
+                               commit->buffer = buffer;
+                               buffer = NULL;
+                       }
                        obj = &commit->object;
                } else if (!strcmp(type, "tag")) {
                        struct tag *tag = lookup_tag(sha1);