Code

git-fsck-objects: lacking default references should not be fatal
authorLinus Torvalds <torvalds@osdl.org>
Tue, 29 Aug 2006 18:47:30 +0000 (11:47 -0700)
committerJunio C Hamano <junkio@cox.net>
Tue, 29 Aug 2006 18:56:39 +0000 (11:56 -0700)
The comment added says it all: if we have lost all references in a git
archive, git-fsck-objects should still work, so instead of dying it should
just notify the user about that condition.

This change was triggered by me just doing a "git-init-db" and then
populating that empty git archive with a pack/index file to look at it.
Having git-fsck-objects not work just because I didn't have any references
handy was rather irritating, since part of the reason for running
git-fsck-objects in the first place was to _find_ the missing references.

However, "--unreachable" really doesn't make sense in that situation, and
we want to turn it off to protect anybody who uses the old "git prune"
shell-script (rather than the modern built-in). The old pruning script
used to remove all objects that were reported as unreachable, and without
any refs, that obviously means everything - not worth it.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
fsck-objects.c

index ae0ec8d039cfce698daa8a9f44c7f49b932373c8..24286de15dbba4795b75112d3957e8974c3ceafa 100644 (file)
@@ -425,8 +425,23 @@ static int fsck_handle_ref(const char *refname, const unsigned char *sha1)
 static void get_default_heads(void)
 {
        for_each_ref(fsck_handle_ref);
-       if (!default_refs)
-               die("No default references");
+
+       /*
+        * Not having any default heads isn't really fatal, but
+        * it does mean that "--unreachable" no longer makes any
+        * sense (since in this case everything will obviously
+        * be unreachable by definition.
+        *
+        * Showing dangling objects is valid, though (as those
+        * dangling objects are likely lost heads).
+        *
+        * So we just print a warning about it, and clear the
+        * "show_unreachable" flag.
+        */
+       if (!default_refs) {
+               error("No default references");
+               show_unreachable = 0;
+       }
 }
 
 static void fsck_object_dir(const char *path)