Merge branch 'tr/maint-word-diff-regex-sticky' into maint
[git] / t / t9806-git-p4-options.sh
1 #!/bin/sh
2
3 test_description='git-p4 options'
4
5 . ./lib-git-p4.sh
6
7 test_expect_success 'start p4d' '
8         start_p4d
9 '
10
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 '
25
26 test_expect_success 'clone no --git-dir' '
27         test_must_fail "$GITP4" clone --git-dir=xx //depot
28 '
29
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 '
40
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 '
56
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 '
63
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 &&
77
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 '
85
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 '
95
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 '
119
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 &&
152
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 '
165
166 test_expect_success 'kill p4d' '
167         kill_p4d
168 '
169
170 test_done