Merge branch 'ls/p4-lfs'
[gitweb.git] / reachable.c
index acac86ad3fae736a326774885b5f7380b03901bb..43616d49c7f88166d2fa2f009ca5b926d751ab0b 100644 (file)
@@ -22,11 +22,18 @@ static void update_progress(struct connectivity_progress *cp)
                display_progress(cp->progress, cp->count);
 }
 
-static int add_one_ref(const char *path, const unsigned char *sha1, int flag, void *cb_data)
+static int add_one_ref(const char *path, const struct object_id *oid,
+                      int flag, void *cb_data)
 {
-       struct object *object = parse_object_or_die(sha1, path);
        struct rev_info *revs = (struct rev_info *)cb_data;
+       struct object *object;
 
+       if ((flag & REF_ISSYMREF) && (flag & REF_ISBROKEN)) {
+               warning("symbolic ref is dangling: %s", path);
+               return 0;
+       }
+
+       object = parse_object_or_die(oid->hash, path);
        add_pending_object(revs, object, "");
 
        return 0;
@@ -155,8 +162,6 @@ void mark_reachable_objects(struct rev_info *revs, int mark_reflog,
                            struct progress *progress)
 {
        struct connectivity_progress cp;
-       struct each_ref_fn_sha1_adapter wrapped_add_one_ref =
-               {add_one_ref, revs};
 
        /*
         * Set up revision parsing, and mark us as being interested
@@ -170,10 +175,10 @@ void mark_reachable_objects(struct rev_info *revs, int mark_reflog,
        add_index_objects_to_pending(revs, 0);
 
        /* Add all external refs */
-       for_each_ref(each_ref_fn_adapter, &wrapped_add_one_ref);
+       for_each_ref(add_one_ref, revs);
 
        /* detached HEAD is not included in the list above */
-       head_ref(each_ref_fn_adapter, &wrapped_add_one_ref);
+       head_ref(add_one_ref, revs);
 
        /* Add all reflog info */
        if (mark_reflog)