+#include "cache.h"
+#include "commit.h"
+#include "tree.h"
+#include "blob.h"
+#include "tag.h"
+
+#define REACHABLE 0x0001
+
+static int show_root = 0;
+static int show_tags = 0;
+static int show_unreachable = 0;
+static int keep_cache_objects = 0;
+static unsigned char head_sha1[20];
+
+static void check_connectivity(void)
+{
+ int i;
+
+ /* Look up all the requirements, warn about missing objects.. */
+ for (i = 0; i < nr_objs; i++) {
+ struct object *obj = objs[i];
+ struct object_list *refs;
+
+ if (!obj->parsed) {
+ printf("missing %s %s\n", obj->type, sha1_to_hex(obj->sha1));
+ continue;
+ }
+
+ for (refs = obj->refs; refs; refs = refs->next) {
+ if (refs->item->parsed)
+ continue;
+ printf("broken link from %7s %s\n",
+ obj->type, sha1_to_hex(obj->sha1));
+ printf(" to %7s %s\n",
+ refs->item->type, sha1_to_hex(refs->item->sha1));
+ }
+
+ /* Don't bother with tag reachability. */
+ if (obj->type == tag_type)
+ continue;
+
+ if (show_unreachable && !(obj->flags & REACHABLE)) {
+ printf("unreachable %s %s\n", obj->type, sha1_to_hex(obj->sha1));
+ continue;
+ }
+
+ if (!obj->used) {
+ printf("dangling %s %s\n", obj->type,
+ sha1_to_hex(obj->sha1));
+ }
+ }
+}
+