| #!/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 |