|
1 | 1 | #!/bin/sh |
2 | 2 |
|
3 | | -test_description='git rev-list trivial path optimization test' |
| 3 | +test_description='git rev-list trivial path optimization test |
| 4 | +
|
| 5 | + d/z1 |
| 6 | + b0 b1 |
| 7 | + o------------------------*----o master |
| 8 | + / / |
| 9 | + o---------o----o----o----o side |
| 10 | + a0 c0 c1 a1 c2 |
| 11 | + d/f0 d/f1 |
| 12 | + d/z0 |
| 13 | +
|
| 14 | +' |
4 | 15 |
|
5 | 16 | . ./test-lib.sh |
6 | 17 |
|
7 | 18 | test_expect_success setup ' |
8 | | -echo Hello > a && |
9 | | -git add a && |
10 | | -git commit -m "Initial commit" a && |
11 | | -initial=$(git rev-parse --verify HEAD) |
| 19 | + echo Hello >a && |
| 20 | + mkdir d && |
| 21 | + echo World >d/f && |
| 22 | + echo World >d/z && |
| 23 | + git add a d && |
| 24 | + test_tick && |
| 25 | + git commit -m "Initial commit" && |
| 26 | + git rev-parse --verify HEAD && |
| 27 | + git tag initial |
12 | 28 | ' |
13 | 29 |
|
14 | 30 | test_expect_success path-optimization ' |
15 | | - commit=$(echo "Unchanged tree" | git commit-tree "HEAD^{tree}" -p HEAD) && |
16 | | - test $(git rev-list $commit | wc -l) = 2 && |
17 | | - test $(git rev-list $commit -- . | wc -l) = 1 |
| 31 | + test_tick && |
| 32 | + commit=$(echo "Unchanged tree" | git commit-tree "HEAD^{tree}" -p HEAD) && |
| 33 | + test $(git rev-list $commit | wc -l) = 2 && |
| 34 | + test $(git rev-list $commit -- . | wc -l) = 1 |
18 | 35 | ' |
19 | 36 |
|
20 | 37 | test_expect_success 'further setup' ' |
21 | 38 | git checkout -b side && |
22 | 39 | echo Irrelevant >c && |
23 | | - git add c && |
| 40 | + echo Irrelevant >d/f && |
| 41 | + git add c d/f && |
| 42 | + test_tick && |
24 | 43 | git commit -m "Side makes an irrelevant commit" && |
| 44 | + git tag side_c0 && |
25 | 45 | echo "More Irrelevancy" >c && |
26 | 46 | git add c && |
| 47 | + test_tick && |
27 | 48 | git commit -m "Side makes another irrelevant commit" && |
28 | 49 | echo Bye >a && |
29 | 50 | git add a && |
| 51 | + test_tick && |
30 | 52 | git commit -m "Side touches a" && |
31 | | - side=$(git rev-parse --verify HEAD) && |
| 53 | + git tag side_a1 && |
32 | 54 | echo "Yet more Irrelevancy" >c && |
33 | 55 | git add c && |
| 56 | + test_tick && |
34 | 57 | git commit -m "Side makes yet another irrelevant commit" && |
35 | 58 | git checkout master && |
36 | 59 | echo Another >b && |
37 | | - git add b && |
| 60 | + echo Munged >d/z && |
| 61 | + git add b d/z && |
| 62 | + test_tick && |
38 | 63 | git commit -m "Master touches b" && |
| 64 | + git tag master_b0 && |
39 | 65 | git merge side && |
40 | 66 | echo Touched >b && |
41 | 67 | git add b && |
| 68 | + test_tick && |
42 | 69 | git commit -m "Master touches b again" |
43 | 70 | ' |
44 | 71 |
|
45 | 72 | test_expect_success 'path optimization 2' ' |
46 | | - ( echo "$side"; echo "$initial" ) >expected && |
| 73 | + git rev-parse side_a1 initial >expected && |
47 | 74 | git rev-list HEAD -- a >actual && |
48 | 75 | test_cmp expected actual |
49 | 76 | ' |
50 | 77 |
|
| 78 | +test_expect_success 'pathspec with leading path' ' |
| 79 | + git rev-parse master^ master_b0 side_c0 initial >expected && |
| 80 | + git rev-list HEAD -- d >actual && |
| 81 | + test_cmp expected actual |
| 82 | +' |
| 83 | + |
| 84 | +test_expect_success 'pathspec with glob (1)' ' |
| 85 | + git rev-parse master^ master_b0 side_c0 initial >expected && |
| 86 | + git rev-list HEAD -- "d/*" >actual && |
| 87 | + test_cmp expected actual |
| 88 | +' |
| 89 | + |
| 90 | +test_expect_success 'pathspec with glob (2)' ' |
| 91 | + git rev-parse side_c0 initial >expected && |
| 92 | + git rev-list HEAD -- "d/[a-m]*" >actual && |
| 93 | + test_cmp expected actual |
| 94 | +' |
| 95 | + |
51 | 96 | test_done |
0 commit comments