summaryrefslogtreecommitdiff
path: root/t
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2005-12-15 20:54:00 (GMT)
committerJunio C Hamano <junkio@cox.net>2005-12-15 20:54:00 (GMT)
commit6677c4665af2d73f670bec382bc82d0f2e9513fb (patch)
tree7197059b14f5e6b820d2b8708434347160ef26e6 /t
parent8431c4eb0976b0558eaa1df475ce6de6b52ce484 (diff)
downloadgit-6677c4665af2d73f670bec382bc82d0f2e9513fb.zip
git-6677c4665af2d73f670bec382bc82d0f2e9513fb.tar.gz
git-6677c4665af2d73f670bec382bc82d0f2e9513fb.tar.bz2
get_sha1_basic(): corner case ambiguity fix
When .git/refs/heads/frotz and .git/refs/tags/frotz existed, and the object name stored in .git/refs/heads/frotz were corrupt, we ended up picking tags/frotz without complaining. Worse yet, if the corrupt .git/refs/heads/frotz was more than 40 bytes and began with hexadecimal characters, it silently overwritten the initial part of the returned result. This commit adds a couple of tests to demonstrate these cases, with a fix. Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 't')
-rwxr-xr-xt/t0000-basic.sh48
-rwxr-xr-xt/test-lib.sh1
2 files changed, 49 insertions, 0 deletions
diff --git a/t/t0000-basic.sh b/t/t0000-basic.sh
index bc3e711..ffa723e 100755
--- a/t/t0000-basic.sh
+++ b/t/t0000-basic.sh
@@ -205,4 +205,52 @@ test_expect_success \
'no diff after checkout and git-update-index --refresh.' \
'git-diff-files >current && cmp -s current /dev/null'
+
+# extended sha1 parsing and ambiguity resolution
+
+GIT_AUTHOR_DATE='1995-01-29T16:00:00 -0800'
+GIT_AUTHOR_EMAIL=a.u.thor@example.com
+GIT_AUTHOR_NAME='A U Thor'
+GIT_COMMITTER_DATE='1995-01-29T16:00:00 -0800'
+GIT_COMMITTER_EMAIL=c.o.mmitter@example.com
+GIT_COMMITTER_NAME='C O Mmitter'
+export GIT_AUTHOR_DATE
+export GIT_AUTHOR_EMAIL
+export GIT_AUTHOR_NAME
+export GIT_COMMITTER_DATE
+export GIT_COMMITTER_EMAIL
+export GIT_COMMITTER_NAME
+
+test_expect_success \
+ 'initial commit.' \
+ 'commit=$(echo Initial commit | git-commit-tree $tree) &&
+ echo "$commit" >.git/refs/heads/master &&
+ git-ls-tree HEAD &&
+ test "$commit" = 51a092e9ef6cbbe66d258acd17599d3f80be6162'
+
+test_expect_success \
+ 'Ambiguous' \
+ 'echo "$commit" >.git/refs/heads/nasty &&
+ echo "$commit" >.git/refs/tags/nasty &&
+ if git-rev-parse --verify nasty
+ then
+ echo "should have barfed"
+ false
+ else
+ :
+ fi &&
+ # names directly underneath .git/ should not interfere
+ echo "$commit" >.git/refs/heads/description &&
+ git-rev-parse --verify description &&
+ # broken object name
+ echo fffffffffffffffffffffffffffffffffffffffg \
+ >.git/refs/heads/nasty &&
+ if git-rev-parse --verify nasty
+ then
+ echo "should have barfed"
+ false
+ else
+ :
+ fi'
+
test_done
diff --git a/t/test-lib.sh b/t/test-lib.sh
index 2819bef..a97d259 100755
--- a/t/test-lib.sh
+++ b/t/test-lib.sh
@@ -18,6 +18,7 @@ unset GIT_ALTERNATE_OBJECT_DIRECTORIES
unset GIT_AUTHOR_DATE
unset GIT_AUTHOR_EMAIL
unset GIT_AUTHOR_NAME
+unset GIT_COMMITTER_DATE
unset GIT_COMMITTER_EMAIL
unset GIT_COMMITTER_NAME
unset GIT_DIFF_OPTS