summaryrefslogtreecommitdiff
path: root/reachable.c
diff options
context:
space:
mode:
Diffstat (limited to 'reachable.c')
-rw-r--r--reachable.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/reachable.c b/reachable.c
index 69fa685..ed35201 100644
--- a/reachable.c
+++ b/reachable.c
@@ -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;
@@ -36,15 +43,14 @@ static int add_one_ref(const char *path, const unsigned char *sha1, int flag, vo
* The traversal will have already marked us as SEEN, so we
* only need to handle any progress reporting here.
*/
-static void mark_object(struct object *obj, const struct name_path *path,
- const char *name, void *data)
+static void mark_object(struct object *obj, const char *name, void *data)
{
update_progress(data);
}
static void mark_commit(struct commit *c, void *data)
{
- mark_object(&c->object, NULL, NULL, data);
+ mark_object(&c->object, NULL, data);
}
struct recent_data {