summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Panteleev <git@thecybershadow.net>2017-01-23 18:00:58 (GMT)
committerJunio C Hamano <gitster@pobox.com>2017-01-23 20:06:29 (GMT)
commitd01b8203ec24732e5e8829db44a8150468f2fb7d (patch)
treea880b715baf5ab1ae3f6cdce781644a5b0a14bf2
parent14144d3b53b913b48970aa0947accfe34e745c0f (diff)
downloadgit-d01b8203ec24732e5e8829db44a8150468f2fb7d.zip
git-d01b8203ec24732e5e8829db44a8150468f2fb7d.tar.gz
git-d01b8203ec24732e5e8829db44a8150468f2fb7d.tar.bz2
show-ref: detect dangling refs under --verify as well
Move detection of dangling refs into show_one(), so that they are detected when --verify is present as well as when it is absent. Signed-off-by: Vladimir Panteleev <git@thecybershadow.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--builtin/show-ref.c16
-rwxr-xr-xt/t1403-show-ref.sh22
2 files changed, 30 insertions, 8 deletions
diff --git a/builtin/show-ref.c b/builtin/show-ref.c
index ab8e0dc..107d05f 100644
--- a/builtin/show-ref.c
+++ b/builtin/show-ref.c
@@ -22,6 +22,14 @@ static void show_one(const char *refname, const struct object_id *oid)
const char *hex;
struct object_id peeled;
+ /* This changes the semantics slightly that even under quiet we
+ * detect and return error if the repository is corrupt and
+ * ref points at a nonexistent object.
+ */
+ if (!has_sha1_file(oid->hash))
+ die("git show-ref: bad ref %s (%s)", refname,
+ oid_to_hex(oid));
+
if (quiet)
return;
@@ -77,14 +85,6 @@ static int show_ref(const char *refname, const struct object_id *oid,
match:
found_match++;
- /* This changes the semantics slightly that even under quiet we
- * detect and return error if the repository is corrupt and
- * ref points at a nonexistent object.
- */
- if (!has_sha1_file(oid->hash))
- die("git show-ref: bad ref %s (%s)", refname,
- oid_to_hex(oid));
-
show_one(refname, oid);
return 0;
diff --git a/t/t1403-show-ref.sh b/t/t1403-show-ref.sh
index c6872bd..30354fd 100755
--- a/t/t1403-show-ref.sh
+++ b/t/t1403-show-ref.sh
@@ -184,4 +184,26 @@ test_expect_success 'show-ref --verify HEAD' '
test_cmp expect actual
'
+test_expect_success 'show-ref --verify with dangling ref' '
+ sha1_file() {
+ echo "$*" | sed "s#..#.git/objects/&/#"
+ } &&
+
+ remove_object() {
+ file=$(sha1_file "$*") &&
+ test -e "$file" &&
+ rm -f "$file"
+ } &&
+
+ test_when_finished "rm -rf dangling" &&
+ (
+ git init dangling &&
+ cd dangling &&
+ test_commit dangling &&
+ sha=$(git rev-parse refs/tags/dangling) &&
+ remove_object $sha &&
+ test_must_fail git show-ref --verify refs/tags/dangling
+ )
+'
+
test_done