summaryrefslogtreecommitdiff
path: root/fsck-objects.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@osdl.org>2006-08-29 11:47:30 -0700
committerJunio C Hamano <junkio@cox.net>2006-08-29 11:56:39 -0700
commit071fa89e25855a746728b835359eb263c7c7ee7f (patch)
treeedc87768558b00ae71a9101aeb29a74e3d33f5fb /fsck-objects.c
parent9e848013968959bd4de5d407c2ee91cb960c53bb (diff)
downloadgit-071fa89e25855a746728b835359eb263c7c7ee7f.tar.gz
git-fsck-objects: lacking default references should not be fatal
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>
Diffstat (limited to 'fsck-objects.c')
-rw-r--r--fsck-objects.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/fsck-objects.c b/fsck-objects.c
index ae0ec8d039..24286de15d 100644
--- a/fsck-objects.c
+++ b/fsck-objects.c
@@ -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)