1 #!/bin/sh
3 test_description='git-p4 options'
5 . ./lib-git-p4.sh
7 test_expect_success 'start p4d' '
8 start_p4d
9 '
11 test_expect_success 'init depot' '
12 (
13 cd "$cli" &&
14 echo file1 >file1 &&
15 p4 add file1 &&
16 p4 submit -d "change 1" &&
17 echo file2 >file2 &&
18 p4 add file2 &&
19 p4 submit -d "change 2" &&
20 echo file3 >file3 &&
21 p4 add file3 &&
22 p4 submit -d "change 3"
23 )
24 '
26 test_expect_success 'clone no --git-dir' '
27 test_must_fail "$GITP4" clone --git-dir=xx //depot
28 '
30 test_expect_success 'clone --branch' '
31 "$GITP4" clone --branch=refs/remotes/p4/sb --dest="$git" //depot &&
32 test_when_finished cleanup_git &&
33 (
34 cd "$git" &&
35 git ls-files >files &&
36 test_line_count = 0 files &&
37 test_path_is_file .git/refs/remotes/p4/sb
38 )
39 '
41 test_expect_success 'clone --changesfile' '
42 cf="$TRASH_DIRECTORY/cf" &&
43 test_when_finished "rm \"$cf\"" &&
44 printf "1\n3\n" >"$cf" &&
45 "$GITP4" clone --changesfile="$cf" --dest="$git" //depot &&
46 test_when_finished cleanup_git &&
47 (
48 cd "$git" &&
49 git log --oneline p4/master >lines &&
50 test_line_count = 2 lines
51 test_path_is_file file1 &&
52 test_path_is_missing file2 &&
53 test_path_is_file file3
54 )
55 '
57 test_expect_success 'clone --changesfile, @all' '
58 cf="$TRASH_DIRECTORY/cf" &&
59 test_when_finished "rm \"$cf\"" &&
60 printf "1\n3\n" >"$cf" &&
61 test_must_fail "$GITP4" clone --changesfile="$cf" --dest="$git" //depot@all
62 '
64 # imports both master and p4/master in refs/heads
65 # requires --import-local on sync to find p4 refs/heads
66 # does not update master on sync, just p4/master
67 test_expect_success 'clone/sync --import-local' '
68 "$GITP4" clone --import-local --dest="$git" //depot@1,2 &&
69 test_when_finished cleanup_git &&
70 (
71 cd "$git" &&
72 git log --oneline refs/heads/master >lines &&
73 test_line_count = 2 lines &&
74 git log --oneline refs/heads/p4/master >lines &&
75 test_line_count = 2 lines &&
76 test_must_fail "$GITP4" sync &&
78 "$GITP4" sync --import-local &&
79 git log --oneline refs/heads/master >lines &&
80 test_line_count = 2 lines &&
81 git log --oneline refs/heads/p4/master >lines &&
82 test_line_count = 3 lines
83 )
84 '
86 test_expect_success 'clone --max-changes' '
87 "$GITP4" clone --dest="$git" --max-changes 2 //depot@all &&
88 test_when_finished cleanup_git &&
89 (
90 cd "$git" &&
91 git log --oneline refs/heads/master >lines &&
92 test_line_count = 2 lines
93 )
94 '
96 test_expect_success 'clone --keep-path' '
97 (
98 cd "$cli" &&
99 mkdir -p sub/dir &&
100 echo f4 >sub/dir/f4 &&
101 p4 add sub/dir/f4 &&
102 p4 submit -d "change 4"
103 ) &&
104 "$GITP4" clone --dest="$git" --keep-path //depot/sub/dir@all &&
105 test_when_finished cleanup_git &&
106 (
107 cd "$git" &&
108 test_path_is_missing f4 &&
109 test_path_is_file sub/dir/f4
110 ) &&
111 cleanup_git &&
112 "$GITP4" clone --dest="$git" //depot/sub/dir@all &&
113 (
114 cd "$git" &&
115 test_path_is_file f4 &&
116 test_path_is_missing sub/dir/f4
117 )
118 '
120 # clone --use-client-spec must still specify a depot path
121 # if given, it should rearrange files according to client spec
122 # when it has view lines that match the depot path
123 # XXX: should clone/sync just use the client spec exactly, rather
124 # than needing depot paths?
125 test_expect_success 'clone --use-client-spec' '
126 (
127 # big usage message
128 exec >/dev/null &&
129 test_must_fail "$GITP4" clone --dest="$git" --use-client-spec
130 ) &&
131 cli2="$TRASH_DIRECTORY/cli2" &&
132 mkdir -p "$cli2" &&
133 test_when_finished "rmdir \"$cli2\"" &&
134 (
135 cd "$cli2" &&
136 p4 client -i <<-EOF
137 Client: client2
138 Description: client2
139 Root: $cli2
140 View: //depot/sub/... //client2/bus/...
141 EOF
142 ) &&
143 P4CLIENT=client2 &&
144 test_when_finished cleanup_git &&
145 "$GITP4" clone --dest="$git" --use-client-spec //depot/... &&
146 (
147 cd "$git" &&
148 test_path_is_file bus/dir/f4 &&
149 test_path_is_missing file1
150 ) &&
151 cleanup_git &&
153 # same thing again, this time with variable instead of option
154 mkdir "$git" &&
155 (
156 cd "$git" &&
157 git init &&
158 git config git-p4.useClientSpec true &&
159 "$GITP4" sync //depot/... &&
160 git checkout -b master p4/master &&
161 test_path_is_file bus/dir/f4 &&
162 test_path_is_missing file1
163 )
164 '
166 test_expect_success 'kill p4d' '
167 kill_p4d
168 '
170 test_done