]>
Commit | Line | Data |
---|---|---|
d00d2ed1 PW |
1 | #!/bin/sh |
2 | ||
6ab1d76c | 3 | test_description='git p4 tests' |
d00d2ed1 | 4 | |
fc002330 | 5 | . ./lib-git-p4.sh |
d00d2ed1 | 6 | |
fc002330 PW |
7 | test_expect_success 'start p4d' ' |
8 | start_p4d | |
d00d2ed1 PW |
9 | ' |
10 | ||
11 | test_expect_success 'add p4 files' ' | |
fc002330 PW |
12 | ( |
13 | cd "$cli" && | |
14 | echo file1 >file1 && | |
15 | p4 add file1 && | |
16 | p4 submit -d "file1" && | |
17 | echo file2 >file2 && | |
18 | p4 add file2 && | |
19 | p4 submit -d "file2" | |
20 | ) | |
d00d2ed1 PW |
21 | ' |
22 | ||
6ab1d76c PW |
23 | test_expect_success 'basic git p4 clone' ' |
24 | git p4 clone --dest="$git" //depot && | |
f40ae5ce | 25 | test_when_finished cleanup_git && |
fc002330 PW |
26 | ( |
27 | cd "$git" && | |
28 | git log --oneline >lines && | |
29 | test_line_count = 1 lines | |
30 | ) | |
f0c9fe05 PW |
31 | ' |
32 | ||
0f487d30 PW |
33 | test_expect_success 'depot typo error' ' |
34 | test_must_fail git p4 clone --dest="$git" /depot 2>errs && | |
35 | grep "Depot paths must start with" errs | |
36 | ' | |
37 | ||
6ab1d76c PW |
38 | test_expect_success 'git p4 clone @all' ' |
39 | git p4 clone --dest="$git" //depot@all && | |
f40ae5ce | 40 | test_when_finished cleanup_git && |
fc002330 PW |
41 | ( |
42 | cd "$git" && | |
43 | git log --oneline >lines && | |
44 | test_line_count = 2 lines | |
45 | ) | |
d00d2ed1 PW |
46 | ' |
47 | ||
6ab1d76c | 48 | test_expect_success 'git p4 sync uninitialized repo' ' |
27c6000b | 49 | test_create_repo "$git" && |
f40ae5ce | 50 | test_when_finished cleanup_git && |
fc002330 PW |
51 | ( |
52 | cd "$git" && | |
4256397a PW |
53 | test_must_fail git p4 sync 2>errs && |
54 | test_i18ngrep "Perhaps you never did" errs | |
fc002330 | 55 | ) |
27c6000b PW |
56 | ' |
57 | ||
58 | # | |
59 | # Create a git repo by hand. Add a commit so that HEAD is valid. | |
60 | # Test imports a new p4 repository into a new git branch. | |
61 | # | |
6ab1d76c | 62 | test_expect_success 'git p4 sync new branch' ' |
27c6000b | 63 | test_create_repo "$git" && |
f40ae5ce | 64 | test_when_finished cleanup_git && |
fc002330 PW |
65 | ( |
66 | cd "$git" && | |
67 | test_commit head && | |
6ab1d76c | 68 | git p4 sync --branch=refs/remotes/p4/depot //depot@all && |
fc002330 PW |
69 | git log --oneline p4/depot >lines && |
70 | test_line_count = 2 lines | |
71 | ) | |
27c6000b PW |
72 | ' |
73 | ||
da191d15 PW |
74 | test_expect_success 'clone two dirs' ' |
75 | ( | |
76 | cd "$cli" && | |
77 | mkdir sub1 sub2 && | |
78 | echo sub1/f1 >sub1/f1 && | |
79 | echo sub2/f2 >sub2/f2 && | |
80 | p4 add sub1/f1 && | |
81 | p4 submit -d "sub1/f1" && | |
82 | p4 add sub2/f2 && | |
83 | p4 submit -d "sub2/f2" | |
84 | ) && | |
6ab1d76c | 85 | git p4 clone --dest="$git" //depot/sub1 //depot/sub2 && |
da191d15 PW |
86 | test_when_finished cleanup_git && |
87 | ( | |
88 | cd "$git" && | |
89 | git ls-files >lines && | |
90 | test_line_count = 2 lines && | |
91 | git log --oneline p4/master >lines && | |
92 | test_line_count = 1 lines | |
93 | ) | |
94 | ' | |
95 | ||
96 | test_expect_success 'clone two dirs, @all' ' | |
97 | ( | |
98 | cd "$cli" && | |
99 | echo sub1/f3 >sub1/f3 && | |
100 | p4 add sub1/f3 && | |
101 | p4 submit -d "sub1/f3" | |
102 | ) && | |
6ab1d76c | 103 | git p4 clone --dest="$git" //depot/sub1@all //depot/sub2@all && |
da191d15 PW |
104 | test_when_finished cleanup_git && |
105 | ( | |
106 | cd "$git" && | |
107 | git ls-files >lines && | |
108 | test_line_count = 3 lines && | |
109 | git log --oneline p4/master >lines && | |
110 | test_line_count = 3 lines | |
111 | ) | |
112 | ' | |
113 | ||
114 | test_expect_success 'clone two dirs, @all, conflicting files' ' | |
115 | ( | |
116 | cd "$cli" && | |
117 | echo sub2/f3 >sub2/f3 && | |
118 | p4 add sub2/f3 && | |
119 | p4 submit -d "sub2/f3" | |
120 | ) && | |
6ab1d76c | 121 | git p4 clone --dest="$git" //depot/sub1@all //depot/sub2@all && |
da191d15 PW |
122 | test_when_finished cleanup_git && |
123 | ( | |
124 | cd "$git" && | |
125 | git ls-files >lines && | |
126 | test_line_count = 3 lines && | |
127 | git log --oneline p4/master >lines && | |
128 | test_line_count = 4 lines && | |
129 | echo sub2/f3 >expected && | |
130 | test_cmp expected f3 | |
131 | ) | |
132 | ' | |
133 | ||
68b28593 | 134 | test_expect_success 'exit when p4 fails to produce marshaled output' ' |
08c5eb7a PW |
135 | mkdir badp4dir && |
136 | test_when_finished "rm badp4dir/p4 && rmdir badp4dir" && | |
137 | cat >badp4dir/p4 <<-EOF && | |
68b28593 PW |
138 | #!$SHELL_PATH |
139 | exit 1 | |
140 | EOF | |
08c5eb7a | 141 | chmod 755 badp4dir/p4 && |
a0327c0e PW |
142 | ( |
143 | PATH="$TRASH_DIRECTORY/badp4dir:$PATH" && | |
144 | export PATH && | |
145 | test_expect_code 1 git p4 clone --dest="$git" //depot >errs 2>&1 | |
146 | ) && | |
147 | cat errs && | |
41ca19b6 | 148 | test_i18ngrep ! Traceback errs |
68b28593 PW |
149 | ' |
150 | ||
78189bea PW |
151 | # Hide a file from p4d, make sure we catch its complaint. This won't fail in |
152 | # p4 changes, files, or describe; just in p4 print. If P4CLIENT is unset, the | |
153 | # message will include "Librarian checkout". | |
154 | test_expect_success 'exit gracefully for p4 server errors' ' | |
155 | test_when_finished "mv \"$db\"/depot/file1,v,hidden \"$db\"/depot/file1,v" && | |
156 | mv "$db"/depot/file1,v "$db"/depot/file1,v,hidden && | |
157 | test_when_finished cleanup_git && | |
158 | test_expect_code 1 git p4 clone --dest="$git" //depot@1 >out 2>err && | |
159 | test_i18ngrep "Error from p4 print" err | |
160 | ' | |
161 | ||
162 | test_expect_success 'clone --bare should make a bare repository' ' | |
23a2666c | 163 | rm -rf "$git" && |
6ab1d76c | 164 | git p4 clone --dest="$git" --bare //depot && |
f40ae5ce | 165 | test_when_finished cleanup_git && |
fc002330 PW |
166 | ( |
167 | cd "$git" && | |
695d6998 PW |
168 | test_path_is_missing .git && |
169 | git config --get --bool core.bare true && | |
170 | git rev-parse --verify refs/remotes/p4/master && | |
171 | git rev-parse --verify refs/remotes/p4/HEAD && | |
172 | git rev-parse --verify refs/heads/master && | |
173 | git rev-parse --verify HEAD | |
fc002330 | 174 | ) |
38200076 PW |
175 | ' |
176 | ||
4e2e6ce4 PW |
177 | # Sleep a bit so that the top-most p4 change did not happen "now". Then |
178 | # import the repo and make sure that the initial import has the same time | |
179 | # as the top-most change. | |
180 | test_expect_success 'initial import time from top change time' ' | |
181 | p4change=$(p4 -G changes -m 1 //depot/... | marshal_dump change) && | |
182 | p4time=$(p4 -G changes -m 1 //depot/... | marshal_dump time) && | |
183 | sleep 3 && | |
6ab1d76c | 184 | git p4 clone --dest="$git" //depot && |
4e2e6ce4 | 185 | test_when_finished cleanup_git && |
fc002330 PW |
186 | ( |
187 | cd "$git" && | |
188 | gittime=$(git show -s --raw --pretty=format:%at HEAD) && | |
189 | echo $p4time $gittime && | |
190 | test $p4time = $gittime | |
191 | ) | |
4e2e6ce4 | 192 | ' |
848de9c3 | 193 | |
e6777fde PW |
194 | test_expect_success 'unresolvable host in P4PORT should display error' ' |
195 | test_when_finished cleanup_git && | |
196 | git p4 clone --dest="$git" //depot && | |
197 | ( | |
198 | cd "$git" && | |
199 | P4PORT=nosuchhost:65537 && | |
200 | export P4PORT && | |
201 | test_expect_code 1 git p4 sync >out 2>err && | |
202 | grep "connect to nosuchhost" err | |
203 | ) | |
204 | ' | |
205 | ||
fc002330 PW |
206 | test_expect_success 'kill p4d' ' |
207 | kill_p4d | |
d00d2ed1 PW |
208 | ' |
209 | ||
210 | test_done |