diff options
| author | Linus Torvalds <torvalds@osdl.org> | 2006-08-29 11:47:30 -0700 | 
|---|---|---|
| committer | Junio C Hamano <junkio@cox.net> | 2006-08-29 11:56:39 -0700 | 
| commit | 071fa89e25855a746728b835359eb263c7c7ee7f (patch) | |
| tree | edc87768558b00ae71a9101aeb29a74e3d33f5fb | |
| parent | 9e848013968959bd4de5d407c2ee91cb960c53bb (diff) | |
| download | git-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>
| -rw-r--r-- | fsck-objects.c | 19 | 
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) | 
