diff options
Diffstat (limited to '')
-rwxr-xr-x | t/t6004-rev-list-path-optim.sh | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/t/t6004-rev-list-path-optim.sh b/t/t6004-rev-list-path-optim.sh new file mode 100755 index 0000000..cd4f420 --- /dev/null +++ b/t/t6004-rev-list-path-optim.sh @@ -0,0 +1,99 @@ +#!/bin/sh + +test_description='git rev-list trivial path optimization test + + d/z1 + b0 b1 + o------------------------*----o main + / / + o---------o----o----o----o side + a0 c0 c1 a1 c2 + d/f0 d/f1 + d/z0 + +' + +GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main +export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME + +. ./test-lib.sh + +test_expect_success setup ' + echo Hello >a && + mkdir d && + echo World >d/f && + echo World >d/z && + git add a d && + test_tick && + git commit -m "Initial commit" && + git rev-parse --verify HEAD && + git tag initial +' + +test_expect_success path-optimization ' + test_tick && + commit=$(echo "Unchanged tree" | git commit-tree "HEAD^{tree}" -p HEAD) && + test $(git rev-list $commit | wc -l) = 2 && + test $(git rev-list $commit -- . | wc -l) = 1 +' + +test_expect_success 'further setup' ' + git checkout -b side && + echo Irrelevant >c && + echo Irrelevant >d/f && + git add c d/f && + test_tick && + git commit -m "Side makes an irrelevant commit" && + git tag side_c0 && + echo "More Irrelevancy" >c && + git add c && + test_tick && + git commit -m "Side makes another irrelevant commit" && + echo Bye >a && + git add a && + test_tick && + git commit -m "Side touches a" && + git tag side_a1 && + echo "Yet more Irrelevancy" >c && + git add c && + test_tick && + git commit -m "Side makes yet another irrelevant commit" && + git checkout main && + echo Another >b && + echo Munged >d/z && + git add b d/z && + test_tick && + git commit -m "Main touches b" && + git tag main_b0 && + git merge side && + echo Touched >b && + git add b && + test_tick && + git commit -m "Main touches b again" +' + +test_expect_success 'path optimization 2' ' + git rev-parse side_a1 initial >expected && + git rev-list HEAD -- a >actual && + test_cmp expected actual +' + +test_expect_success 'pathspec with leading path' ' + git rev-parse main^ main_b0 side_c0 initial >expected && + git rev-list HEAD -- d >actual && + test_cmp expected actual +' + +test_expect_success 'pathspec with glob (1)' ' + git rev-parse main^ main_b0 side_c0 initial >expected && + git rev-list HEAD -- "d/*" >actual && + test_cmp expected actual +' + +test_expect_success 'pathspec with glob (2)' ' + git rev-parse side_c0 initial >expected && + git rev-list HEAD -- "d/[a-m]*" >actual && + test_cmp expected actual +' + +test_done |