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