From: Junio C Hamano Date: Wed, 24 Mar 2010 23:25:34 +0000 (-0700) Subject: Merge branch 'jc/maint-refs-dangling' X-Git-Tag: v1.7.1-rc0~46 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/954f7cfdac48b8d9fe91c29ecfa44ac0c639867c?hp=a5ee8faaee15d2f53de3bd182550f506a3162fbe Merge branch 'jc/maint-refs-dangling' * jc/maint-refs-dangling: refs: ref entry with NULL sha1 is can be a dangling symref --- diff --git a/refs.c b/refs.c index 63e30d74a7..a7518b6f0d 100644 --- a/refs.c +++ b/refs.c @@ -6,6 +6,7 @@ /* ISSYMREF=01 and ISPACKED=02 are public interfaces */ #define REF_KNOWS_PEELED 04 +#define REF_BROKEN 010 struct ref_list { struct ref_list *next; @@ -275,8 +276,10 @@ static struct ref_list *get_ref_dir(const char *base, struct ref_list *list) list = get_ref_dir(ref, list); continue; } - if (!resolve_ref(ref, sha1, 1, &flag)) + if (!resolve_ref(ref, sha1, 1, &flag)) { hashclr(sha1); + flag |= REF_BROKEN; + } list = add_ref(ref, sha1, flag, list, NULL); } free(ref); @@ -539,10 +542,10 @@ static int do_one_ref(const char *base, each_ref_fn fn, int trim, { if (strncmp(base, entry->name, trim)) return 0; - /* Is this a "negative ref" that represents a deleted ref? */ - if (is_null_sha1(entry->sha1)) - return 0; + if (!(flags & DO_FOR_EACH_INCLUDE_BROKEN)) { + if (entry->flag & REF_BROKEN) + return 0; /* ignore dangling symref */ if (!has_sha1_file(entry->sha1)) { error("%s does not point to a valid object!", entry->name); return 0; diff --git a/t/t5505-remote.sh b/t/t5505-remote.sh index a82c5ffa1c..2692050209 100755 --- a/t/t5505-remote.sh +++ b/t/t5505-remote.sh @@ -507,15 +507,15 @@ test_expect_success 'remote prune to cause a dangling symref' ' ( cd seven && git remote prune origin - ) 2>err && + ) >err 2>&1 && grep "has become dangling" err && - : And the dangling symref will not cause other annoying errors + : And the dangling symref will not cause other annoying errors && ( cd seven && git branch -a ) 2>err && - ! grep "points nowhere" err + ! grep "points nowhere" err && ( cd seven && test_must_fail git branch nomore origin