#!/bin/sh test_description='git rev-list trivial path optimization test d/z1 b0 b1 o------------------------*----o master / / o---------o----o----o----o side a0 c0 c1 a1 c2 d/f0 d/f1 d/z0 ' . ./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 master && echo Another >b && echo Munged >d/z && git add b d/z && test_tick && git commit -m "Master touches b" && git tag master_b0 && git merge side && echo Touched >b && git add b && test_tick && git commit -m "Master 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 master^ master_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 master^ master_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