Documentation: refactor common operations into variables
[gitweb.git] / reachable.c
index bf7970661f26664e461ed5d6fd7a1982f7e8fadd..6f6835bf27481299a0374bc1c7746bad750cdd12 100644 (file)
@@ -80,8 +80,7 @@ static void process_tree(struct tree *tree,
                else
                        process_blob(lookup_blob(entry.sha1), p, &me, entry.path, cp);
        }
-       free(tree->buffer);
-       tree->buffer = NULL;
+       free_tree_buffer(tree);
 }
 
 static void process_tag(struct tag *tag, struct object_array *p,
@@ -152,11 +151,9 @@ static int add_one_reflog_ent(unsigned char *osha1, unsigned char *nsha1,
 
 static int add_one_ref(const char *path, const unsigned char *sha1, int flag, void *cb_data)
 {
-       struct object *object = parse_object(sha1);
+       struct object *object = parse_object_or_die(sha1, path);
        struct rev_info *revs = (struct rev_info *)cb_data;
 
-       if (!object)
-               die("bad object ref: %s:%s", path, sha1_to_hex(sha1));
        add_pending_object(revs, object, "");
 
        return 0;
@@ -232,6 +229,9 @@ void mark_reachable_objects(struct rev_info *revs, int mark_reflog,
        /* Add all external refs */
        for_each_ref(add_one_ref, revs);
 
+       /* detached HEAD is not included in the list above */
+       head_ref(add_one_ref, revs);
+
        /* Add all reflog info */
        if (mark_reflog)
                for_each_reflog(add_one_reflog, revs);