|
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