From dfb1dc5c336f3fa709e32ce178525768713747f2 Mon Sep 17 00:00:00 2001 From: Felipe Contreras Date: Tue, 3 Sep 2013 10:05:32 -0700 Subject: [PATCH 1/4] rev-parse test: modernize quoting and whitespace Instead of cramming everything in one line, put the test body in an indented block after the opening test_expect_success line and quote and put the closing quote on a line by itself. Use single-quote instead of double-quote to quote the test body for more useful --verbose output. Signed-off-by: Felipe Contreras Signed-off-by: Jonathan Nieder Signed-off-by: Junio C Hamano --- t/t6101-rev-parse-parents.sh | 72 ++++++++++++++++++++++++++++-------- 1 file changed, 57 insertions(+), 15 deletions(-) diff --git a/t/t6101-rev-parse-parents.sh b/t/t6101-rev-parse-parents.sh index e673c25e94..c47b8695da 100755 --- a/t/t6101-rev-parse-parents.sh +++ b/t/t6101-rev-parse-parents.sh @@ -17,21 +17,62 @@ hide_error save_tag start2 unique_commit "start2" tree save_tag two_parents unique_commit "next" tree -p second -p start2 save_tag final unique_commit "final" tree -p two_parents -test_expect_success 'start is valid' 'git rev-parse start | grep "^[0-9a-f]\{40\}$"' -test_expect_success 'start^0' "test $(cat .git/refs/tags/start) = $(git rev-parse start^0)" -test_expect_success 'start^1 not valid' "if git rev-parse --verify start^1; then false; else :; fi" -test_expect_success 'second^1 = second^' "test $(git rev-parse second^1) = $(git rev-parse second^)" -test_expect_success 'final^1^1^1' "test $(git rev-parse start) = $(git rev-parse final^1^1^1)" -test_expect_success 'final^1^1^1 = final^^^' "test $(git rev-parse final^1^1^1) = $(git rev-parse final^^^)" -test_expect_success 'final^1^2' "test $(git rev-parse start2) = $(git rev-parse final^1^2)" -test_expect_success 'final^1^2 != final^1^1' "test $(git rev-parse final^1^2) != $(git rev-parse final^1^1)" -test_expect_success 'final^1^3 not valid' "if git rev-parse --verify final^1^3; then false; else :; fi" -test_expect_success '--verify start2^1' 'test_must_fail git rev-parse --verify start2^1' -test_expect_success '--verify start2^0' 'git rev-parse --verify start2^0' -test_expect_success 'final^1^@ = final^1^1 final^1^2' "test \"$(git rev-parse final^1^@)\" = \"$(git rev-parse final^1^1 final^1^2)\"" -test_expect_success 'final^1^! = final^1 ^final^1^1 ^final^1^2' "test \"$(git rev-parse final^1^\!)\" = \"$(git rev-parse final^1 ^final^1^1 ^final^1^2)\"" +test_expect_success 'start is valid' ' + git rev-parse start | grep "^[0-9a-f]\{40\}$" +' + +test_expect_success 'start^0' ' + test $(cat .git/refs/tags/start) = $(git rev-parse start^0) +' + +test_expect_success 'start^1 not valid' ' + if git rev-parse --verify start^1; then false; else :; fi +' + +test_expect_success 'second^1 = second^' ' + test $(git rev-parse second^1) = $(git rev-parse second^) +' + +test_expect_success 'final^1^1^1' ' + test $(git rev-parse start) = $(git rev-parse final^1^1^1) +' + +test_expect_success 'final^1^1^1 = final^^^' ' + test $(git rev-parse final^1^1^1) = $(git rev-parse final^^^) +' + +test_expect_success 'final^1^2' ' + test $(git rev-parse start2) = $(git rev-parse final^1^2) +' + +test_expect_success 'final^1^2 != final^1^1' ' + test $(git rev-parse final^1^2) != $(git rev-parse final^1^1) +' + +test_expect_success 'final^1^3 not valid' ' + if git rev-parse --verify final^1^3; then false; else :; fi +' + +test_expect_success '--verify start2^1' ' + test_must_fail git rev-parse --verify start2^1 +' + +test_expect_success '--verify start2^0' ' + git rev-parse --verify start2^0 +' + +test_expect_success 'final^1^@ = final^1^1 final^1^2' ' + test "$(git rev-parse final^1^@)" = "$(git rev-parse final^1^1 final^1^2)" +' + +test_expect_success 'final^1^! = final^1 ^final^1^1 ^final^1^2' ' + test "$(git rev-parse final^1^!)" = "$(git rev-parse final^1 ^final^1^1 ^final^1^2)" +' + +test_expect_success 'repack for next test' ' + git repack -a -d +' -test_expect_success 'repack for next test' 'git repack -a -d' test_expect_success 'short SHA-1 works' ' start=`git rev-parse --verify start` && echo $start && @@ -39,6 +80,7 @@ test_expect_success 'short SHA-1 works' ' echo $abbrv && abbrv=`git rev-parse --verify $abbrv` && echo $abbrv && - test $start = $abbrv' + test $start = $abbrv +' test_done From d8f7681337dd0c7944ba2293a72952110977077d Mon Sep 17 00:00:00 2001 From: Felipe Contreras Date: Tue, 3 Sep 2013 10:06:18 -0700 Subject: [PATCH 2/4] rev-parse test: use test_must_fail, not "if ; then false; fi" This way, if rev-parse segfaults then the test will fail instead of treating it the same way as a controlled failure. Signed-off-by: Felipe Contreras Signed-off-by: Jonathan Nieder Signed-off-by: Junio C Hamano --- t/t6101-rev-parse-parents.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/t/t6101-rev-parse-parents.sh b/t/t6101-rev-parse-parents.sh index c47b8695da..416067c374 100755 --- a/t/t6101-rev-parse-parents.sh +++ b/t/t6101-rev-parse-parents.sh @@ -26,7 +26,7 @@ test_expect_success 'start^0' ' ' test_expect_success 'start^1 not valid' ' - if git rev-parse --verify start^1; then false; else :; fi + test_must_fail git rev-parse --verify start^1 ' test_expect_success 'second^1 = second^' ' @@ -50,7 +50,7 @@ test_expect_success 'final^1^2 != final^1^1' ' ' test_expect_success 'final^1^3 not valid' ' - if git rev-parse --verify final^1^3; then false; else :; fi + test_must_fail git rev-parse --verify final^1^3 ' test_expect_success '--verify start2^1' ' From c812be9d81cf1fc587695d985bced50258b53d31 Mon Sep 17 00:00:00 2001 From: Jonathan Nieder Date: Tue, 3 Sep 2013 10:07:15 -0700 Subject: [PATCH 3/4] rev-parse test: use test_cmp instead of "test" builtin Use test_cmp instead of passing two command substitutions to the "test" builtin. This way: - when tests fail, they can print a helpful diff if run with "--verbose" - the argument order "test_cmp expect actual" feels natural, unlike test = that seems backwards - the exit status from invoking git is checked, so if rev-parse starts segfaulting then the test will notice and fail Use a custom function for this instead of test_cmp_rev to emphasize that we are testing the output from "git rev-parse" with certain arguments, not checking that the revisions are equal in abstract. Reported-by: Felipe Contreras Signed-off-by: Jonathan Nieder Signed-off-by: Junio C Hamano --- t/t6101-rev-parse-parents.sh | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/t/t6101-rev-parse-parents.sh b/t/t6101-rev-parse-parents.sh index 416067c374..8a6ff66242 100755 --- a/t/t6101-rev-parse-parents.sh +++ b/t/t6101-rev-parse-parents.sh @@ -8,6 +8,12 @@ test_description='Test git rev-parse with different parent options' . ./test-lib.sh . "$TEST_DIRECTORY"/lib-t6000.sh # t6xxx specific functions +test_cmp_rev_output () { + git rev-parse --verify "$1" >expect && + eval "$2" >actual && + test_cmp expect actual +} + date >path0 git update-index --add path0 save_tag tree git write-tree @@ -22,7 +28,7 @@ test_expect_success 'start is valid' ' ' test_expect_success 'start^0' ' - test $(cat .git/refs/tags/start) = $(git rev-parse start^0) + test_cmp_rev_output tags/start "git rev-parse start^0" ' test_expect_success 'start^1 not valid' ' @@ -30,19 +36,19 @@ test_expect_success 'start^1 not valid' ' ' test_expect_success 'second^1 = second^' ' - test $(git rev-parse second^1) = $(git rev-parse second^) + test_cmp_rev_output second^ "git rev-parse second^1" ' test_expect_success 'final^1^1^1' ' - test $(git rev-parse start) = $(git rev-parse final^1^1^1) + test_cmp_rev_output start "git rev-parse final^1^1^1" ' test_expect_success 'final^1^1^1 = final^^^' ' - test $(git rev-parse final^1^1^1) = $(git rev-parse final^^^) + test_cmp_rev_output final^^^ "git rev-parse final^1^1^1" ' test_expect_success 'final^1^2' ' - test $(git rev-parse start2) = $(git rev-parse final^1^2) + test_cmp_rev_output start2 "git rev-parse final^1^2" ' test_expect_success 'final^1^2 != final^1^1' ' @@ -62,11 +68,15 @@ test_expect_success '--verify start2^0' ' ' test_expect_success 'final^1^@ = final^1^1 final^1^2' ' - test "$(git rev-parse final^1^@)" = "$(git rev-parse final^1^1 final^1^2)" + git rev-parse final^1^1 final^1^2 >expect && + git rev-parse final^1^@ >actual && + test_cmp expect actual ' test_expect_success 'final^1^! = final^1 ^final^1^1 ^final^1^2' ' - test "$(git rev-parse final^1^!)" = "$(git rev-parse final^1 ^final^1^1 ^final^1^2)" + git rev-parse final^1 ^final^1^1 ^final^1^2 >expect && + git rev-parse final^1^! >actual && + test_cmp expect actual ' test_expect_success 'repack for next test' ' @@ -74,13 +84,8 @@ test_expect_success 'repack for next test' ' ' test_expect_success 'short SHA-1 works' ' - start=`git rev-parse --verify start` && - echo $start && - abbrv=`echo $start | sed s/.\$//` && - echo $abbrv && - abbrv=`git rev-parse --verify $abbrv` && - echo $abbrv && - test $start = $abbrv + start=$(git rev-parse --verify start) && + test_cmp_rev_output start "git rev-parse ${start%?}" ' test_done From 7495a17363de7397509710344e1c22f0918aceee Mon Sep 17 00:00:00 2001 From: Felipe Contreras Date: Tue, 3 Sep 2013 10:15:46 -0700 Subject: [PATCH 4/4] rev-parse test: use standard test functions for setup Save the reader from learning specialized t6* setup functions where familiar commands like test_commit, "git checkout --orphan", and "git merge" will do. While at it, wrap the setup commands in a test assertion so errors can be caught and stray output suppressed when running without --verbose as in other tests. Signed-off-by: Felipe Contreras Signed-off-by: Jonathan Nieder Signed-off-by: Junio C Hamano --- t/t6101-rev-parse-parents.sh | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/t/t6101-rev-parse-parents.sh b/t/t6101-rev-parse-parents.sh index 8a6ff66242..7ea14ced31 100755 --- a/t/t6101-rev-parse-parents.sh +++ b/t/t6101-rev-parse-parents.sh @@ -6,7 +6,6 @@ test_description='Test git rev-parse with different parent options' . ./test-lib.sh -. "$TEST_DIRECTORY"/lib-t6000.sh # t6xxx specific functions test_cmp_rev_output () { git rev-parse --verify "$1" >expect && @@ -14,14 +13,15 @@ test_cmp_rev_output () { test_cmp expect actual } -date >path0 -git update-index --add path0 -save_tag tree git write-tree -hide_error save_tag start unique_commit "start" tree -save_tag second unique_commit "second" tree -p start -hide_error save_tag start2 unique_commit "start2" tree -save_tag two_parents unique_commit "next" tree -p second -p start2 -save_tag final unique_commit "final" tree -p two_parents +test_expect_success 'setup' ' + test_commit start && + test_commit second && + git checkout --orphan tmp && + test_commit start2 && + git checkout master && + git merge -m next start2 && + test_commit final +' test_expect_success 'start is valid' ' git rev-parse start | grep "^[0-9a-f]\{40\}$"