]>
Commit | Line | Data |
---|---|---|
7fbbcb21 JT |
1 | #!/bin/sh |
2 | ||
3 | test_description='behavior of diff when reading objects in a partial clone' | |
4 | ||
5 | . ./test-lib.sh | |
6 | ||
7 | test_expect_success 'git show batches blobs' ' | |
8 | test_when_finished "rm -rf server client trace" && | |
9 | ||
10 | test_create_repo server && | |
11 | echo a >server/a && | |
12 | echo b >server/b && | |
13 | git -C server add a b && | |
14 | git -C server commit -m x && | |
15 | ||
16 | test_config -C server uploadpack.allowfilter 1 && | |
17 | test_config -C server uploadpack.allowanysha1inwant 1 && | |
18 | git clone --bare --filter=blob:limit=0 "file://$(pwd)/server" client && | |
19 | ||
20 | # Ensure that there is exactly 1 negotiation by checking that there is | |
21 | # only 1 "done" line sent. ("done" marks the end of negotiation.) | |
22 | GIT_TRACE_PACKET="$(pwd)/trace" git -C client show HEAD && | |
23 | grep "git> done" trace >done_lines && | |
24 | test_line_count = 1 done_lines | |
25 | ' | |
26 | ||
27 | test_expect_success 'diff batches blobs' ' | |
28 | test_when_finished "rm -rf server client trace" && | |
29 | ||
30 | test_create_repo server && | |
31 | echo a >server/a && | |
32 | echo b >server/b && | |
33 | git -C server add a b && | |
34 | git -C server commit -m x && | |
35 | echo c >server/c && | |
36 | echo d >server/d && | |
37 | git -C server add c d && | |
38 | git -C server commit -m x && | |
39 | ||
40 | test_config -C server uploadpack.allowfilter 1 && | |
41 | test_config -C server uploadpack.allowanysha1inwant 1 && | |
42 | git clone --bare --filter=blob:limit=0 "file://$(pwd)/server" client && | |
43 | ||
44 | # Ensure that there is exactly 1 negotiation by checking that there is | |
45 | # only 1 "done" line sent. ("done" marks the end of negotiation.) | |
46 | GIT_TRACE_PACKET="$(pwd)/trace" git -C client diff HEAD^ HEAD && | |
47 | grep "git> done" trace >done_lines && | |
48 | test_line_count = 1 done_lines | |
49 | ' | |
50 | ||
51 | test_expect_success 'diff skips same-OID blobs' ' | |
52 | test_when_finished "rm -rf server client trace" && | |
53 | ||
54 | test_create_repo server && | |
55 | echo a >server/a && | |
56 | echo b >server/b && | |
57 | git -C server add a b && | |
58 | git -C server commit -m x && | |
59 | echo another-a >server/a && | |
60 | git -C server add a && | |
61 | git -C server commit -m x && | |
62 | ||
63 | test_config -C server uploadpack.allowfilter 1 && | |
64 | test_config -C server uploadpack.allowanysha1inwant 1 && | |
65 | git clone --bare --filter=blob:limit=0 "file://$(pwd)/server" client && | |
66 | ||
67 | echo a | git hash-object --stdin >hash-old-a && | |
68 | echo another-a | git hash-object --stdin >hash-new-a && | |
69 | echo b | git hash-object --stdin >hash-b && | |
70 | ||
71 | # Ensure that only a and another-a are fetched. | |
72 | GIT_TRACE_PACKET="$(pwd)/trace" git -C client diff HEAD^ HEAD && | |
73 | grep "want $(cat hash-old-a)" trace && | |
74 | grep "want $(cat hash-new-a)" trace && | |
75 | ! grep "want $(cat hash-b)" trace | |
76 | ' | |
77 | ||
a63694f5 JT |
78 | test_expect_success 'when fetching missing objects, diff skips GITLINKs' ' |
79 | test_when_finished "rm -rf sub server client trace" && | |
80 | ||
81 | test_create_repo sub && | |
82 | test_commit -C sub first && | |
83 | ||
84 | test_create_repo server && | |
85 | echo a >server/a && | |
86 | git -C server add a && | |
87 | git -C server submodule add "file://$(pwd)/sub" && | |
88 | git -C server commit -m x && | |
89 | ||
90 | test_commit -C server/sub second && | |
91 | echo another-a >server/a && | |
92 | git -C server add a sub && | |
93 | git -C server commit -m x && | |
94 | ||
95 | test_config -C server uploadpack.allowfilter 1 && | |
96 | test_config -C server uploadpack.allowanysha1inwant 1 && | |
97 | git clone --bare --filter=blob:limit=0 "file://$(pwd)/server" client && | |
98 | ||
99 | echo a | git hash-object --stdin >hash-old-a && | |
100 | echo another-a | git hash-object --stdin >hash-new-a && | |
101 | ||
102 | # Ensure that a and another-a are fetched, and check (by successful | |
103 | # execution of the diff) that no invalid OIDs are sent. | |
104 | GIT_TRACE_PACKET="$(pwd)/trace" git -C client diff HEAD^ HEAD && | |
105 | grep "want $(cat hash-old-a)" trace && | |
106 | grep "want $(cat hash-new-a)" trace | |
107 | ' | |
108 | ||
7fbbcb21 JT |
109 | test_expect_success 'diff with rename detection batches blobs' ' |
110 | test_when_finished "rm -rf server client trace" && | |
111 | ||
112 | test_create_repo server && | |
113 | echo a >server/a && | |
114 | printf "b\nb\nb\nb\nb\n" >server/b && | |
115 | git -C server add a b && | |
116 | git -C server commit -m x && | |
117 | rm server/b && | |
118 | printf "b\nb\nb\nb\nbX\n" >server/c && | |
119 | git -C server add c && | |
120 | git -C server commit -a -m x && | |
121 | ||
122 | test_config -C server uploadpack.allowfilter 1 && | |
123 | test_config -C server uploadpack.allowanysha1inwant 1 && | |
124 | git clone --bare --filter=blob:limit=0 "file://$(pwd)/server" client && | |
125 | ||
126 | # Ensure that there is exactly 1 negotiation by checking that there is | |
127 | # only 1 "done" line sent. ("done" marks the end of negotiation.) | |
128 | GIT_TRACE_PACKET="$(pwd)/trace" git -C client diff -M HEAD^ HEAD >out && | |
129 | grep "similarity index" out && | |
130 | grep "git> done" trace >done_lines && | |
131 | test_line_count = 1 done_lines | |
132 | ' | |
133 | ||
134 | test_done |