Add support for negative refs
authorLinus Torvalds <torvalds@osdl.org>
Tue, 12 Sep 2006 03:10:15 +0000 (20:10 -0700)
committerJunio C Hamano <junkio@cox.net>
Mon, 18 Sep 2006 02:09:11 +0000 (19:09 -0700)
You can remove a ref that is packed two different ways: either simply
repack all the refs without that one, or create a loose ref that has the
magic all-zero SHA1.

This also adds back the test that a ref actually has the object it
points to.

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

diff --git a/refs.c b/refs.c
index 5f80a68922c913ef62932657ddf621a2babc4a76..72e22834fa3c78e5b968425a0586dbc3ed4ea397 100644 (file)
--- a/refs.c
+++ b/refs.c
@@ -280,6 +280,12 @@ static int do_for_each_ref(const char *base, int (*fn)(const char *path, const u
                }
                if (strncmp(base, entry->name, trim))
                        continue;
+               if (is_null_sha1(entry->sha1))
+                       continue;
+               if (!has_sha1_file(entry->sha1)) {
+                       error("%s does not point to a valid object!", entry->name);
+                       continue;
+               }
                retval = fn(entry->name + trim, entry->sha1);
                if (retval)
                        return retval;