]>
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 | ||
78 | test_expect_success 'diff with rename detection batches blobs' ' | |
79 | test_when_finished "rm -rf server client trace" && | |
80 | ||
81 | test_create_repo server && | |
82 | echo a >server/a && | |
83 | printf "b\nb\nb\nb\nb\n" >server/b && | |
84 | git -C server add a b && | |
85 | git -C server commit -m x && | |
86 | rm server/b && | |
87 | printf "b\nb\nb\nb\nbX\n" >server/c && | |
88 | git -C server add c && | |
89 | git -C server commit -a -m x && | |
90 | ||
91 | test_config -C server uploadpack.allowfilter 1 && | |
92 | test_config -C server uploadpack.allowanysha1inwant 1 && | |
93 | git clone --bare --filter=blob:limit=0 "file://$(pwd)/server" client && | |
94 | ||
95 | # Ensure that there is exactly 1 negotiation by checking that there is | |
96 | # only 1 "done" line sent. ("done" marks the end of negotiation.) | |
97 | GIT_TRACE_PACKET="$(pwd)/trace" git -C client diff -M HEAD^ HEAD >out && | |
98 | grep "similarity index" out && | |
99 | grep "git> done" trace >done_lines && | |
100 | test_line_count = 1 done_lines | |
101 | ' | |
102 | ||
103 | test_done |