summaryrefslogtreecommitdiff
path: root/t/t9836-git-p4-metadata-encoding-python3.sh
blob: 63350dc4b5c6262480cd0be8fd88fba714c55428 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
#!/bin/sh
 
test_description='git p4 metadata encoding
 
This test checks that the import process handles inconsistent text
encoding in p4 metadata (author names, commit messages, etc) without
failing, and produces maximally sane output in git.'
 
. ./lib-git-p4.sh
 
python_target_version='3'
 
###############################
## SECTION REPEATED IN t9835 ##
###############################
 
# Please note: this test calls "git-p4.py" rather than "git-p4", because the
# latter references a specific path so we can't easily force it to run under
# the python version we need to.
 
python_major_version=$(python -V 2>&1 | cut -c  8)
python_target_binary=$(which python$python_target_version)
if ! test "$python_major_version" = "$python_target_version" && test "$python_target_binary"
then
	mkdir temp_python
	PATH="$(pwd)/temp_python:$PATH" && export PATH
	ln -s $python_target_binary temp_python/python
fi
 
python_major_version=$(python -V 2>&1 | cut -c  8)
if ! test "$python_major_version" = "$python_target_version"
then
	skip_all="skipping python$python_target_version-specific git p4 tests; python$python_target_version not available"
	test_done
fi
 
remove_user_cache () {
	rm "$HOME/.gitp4-usercache.txt" || true
}
 
test_expect_success 'start p4d' '
	start_p4d
'
 
test_expect_success 'init depot' '
	(
		cd "$cli" &&
 
		p4_add_user "utf8_author" "ǣuthor" &&
		P4USER=utf8_author &&
		touch file1 &&
		p4 add file1 &&
		p4 submit -d "first CL has some utf-8 tǣxt" &&
 
		p4_add_user "latin1_author" "$(echo æuthor |
			iconv -f utf8 -t latin1)" &&
		P4USER=latin1_author &&
		touch file2 &&
		p4 add file2 &&
		p4 submit -d "$(echo second CL has some latin-1 tæxt |
			iconv -f utf8 -t latin1)" &&
 
		p4_add_user "cp1252_author" "$(echo æuthœr |
			iconv -f utf8 -t cp1252)" &&
		P4USER=cp1252_author &&
		touch file3 &&
		p4 add file3 &&
		p4 submit -d "$(echo third CL has sœme cp-1252 tæxt |
		  iconv -f utf8 -t cp1252)" &&
 
		p4_add_user "cp850_author" "$(echo Åuthor |
			iconv -f utf8 -t cp850)" &&
		P4USER=cp850_author &&
		touch file4 &&
		p4 add file4 &&
		p4 submit -d "$(echo fourth CL hÅs some cp850 text |
			iconv -f utf8 -t cp850)"
	)
'
 
test_expect_success 'clone non-utf8 repo with strict encoding' '
	test_when_finished cleanup_git &&
	test_when_finished remove_user_cache &&
	test_must_fail git -c git-p4.metadataDecodingStrategy=strict p4.py clone --dest="$git" //depot@all 2>err &&
	grep "Decoding perforce metadata failed!" err
'
 
test_expect_success 'check utf-8 contents with passthrough strategy' '
	test_when_finished cleanup_git &&
	test_when_finished remove_user_cache &&
	git -c git-p4.metadataDecodingStrategy=passthrough p4.py clone --dest="$git" //depot@all &&
	(
		cd "$git" &&
		git log >actual &&
		grep "some utf-8 tǣxt" actual &&
		grep "ǣuthor" actual
	)
'
 
test_expect_success 'check latin-1 contents corrupted in git with passthrough strategy' '
	test_when_finished cleanup_git &&
	test_when_finished remove_user_cache &&
	git -c git-p4.metadataDecodingStrategy=passthrough p4.py clone --dest="$git" //depot@all &&
	(
		cd "$git" &&
		git log >actual &&
		badly_encoded_in_git=$(echo "some latin-1 tæxt" | iconv -f utf8 -t latin1) &&
		grep "$badly_encoded_in_git" actual &&
		bad_author_in_git="$(echo æuthor | iconv -f utf8 -t latin1)" &&
		grep "$bad_author_in_git" actual
	)
'
 
test_expect_success 'check utf-8 contents with fallback strategy' '
	test_when_finished cleanup_git &&
	test_when_finished remove_user_cache &&
	git -c git-p4.metadataDecodingStrategy=fallback p4.py clone --dest="$git" //depot@all &&
	(
		cd "$git" &&
		git log >actual &&
		grep "some utf-8 tǣxt" actual &&
		grep "ǣuthor" actual
	)
'
 
test_expect_success 'check latin-1 contents with fallback strategy' '
	test_when_finished cleanup_git &&
	test_when_finished remove_user_cache &&
	git -c git-p4.metadataDecodingStrategy=fallback p4.py clone --dest="$git" //depot@all &&
	(
		cd "$git" &&
		git log >actual &&
		grep "some latin-1 tæxt" actual &&
		grep "æuthor" actual
	)
'
 
test_expect_success 'check cp-1252 contents with fallback strategy' '
	test_when_finished cleanup_git &&
	test_when_finished remove_user_cache &&
	git -c git-p4.metadataDecodingStrategy=fallback p4.py clone --dest="$git" //depot@all &&
	(
		cd "$git" &&
		git log >actual &&
		grep "sœme cp-1252 tæxt" actual &&
		grep "æuthœr" actual
	)
'
 
test_expect_success 'check cp850 contents parsed with correct fallback' '
	test_when_finished cleanup_git &&
	test_when_finished remove_user_cache &&
	git -c git-p4.metadataDecodingStrategy=fallback -c git-p4.metadataFallbackEncoding=cp850 p4.py clone --dest="$git" //depot@all &&
	(
		cd "$git" &&
		git log >actual &&
		grep "hÅs some cp850 text" actual &&
		grep "Åuthor" actual
	)
'
 
test_expect_success 'check cp850-only contents escaped when cp1252 is fallback' '
	test_when_finished cleanup_git &&
	test_when_finished remove_user_cache &&
	git -c git-p4.metadataDecodingStrategy=fallback p4.py clone --dest="$git" //depot@all &&
	(
		cd "$git" &&
		git log >actual &&
		grep "h%8Fs some cp850 text" actual &&
		grep "%8Futhor" actual
	)
'
 
test_expect_success 'check cp-1252 contents on later sync after clone with fallback strategy' '
	test_when_finished cleanup_git &&
	test_when_finished remove_user_cache &&
	git -c git-p4.metadataDecodingStrategy=fallback p4.py clone --dest="$git" //depot@all &&
	(
		cd "$cli" &&
		P4USER=cp1252_author &&
		touch file10 &&
		p4 add file10 &&
		p4 submit -d "$(echo later CL has sœme more cp-1252 tæxt |
			iconv -f utf8 -t cp1252)"
	) &&
	(
		cd "$git" &&
 
		git p4.py sync --branch=master &&
 
		git log p4/master >actual &&
		grep "sœme more cp-1252 tæxt" actual &&
		grep "æuthœr" actual
	)
'
 
############################
## / END REPEATED SECTION ##
############################
 
 
test_expect_success 'fallback (both utf-8 and cp-1252 contents handled) is the default with python3' '
	test_when_finished cleanup_git &&
	test_when_finished remove_user_cache &&
	git p4.py clone --dest="$git" //depot@all &&
	(
		cd "$git" &&
		git log >actual &&
		grep "sœme cp-1252 tæxt" actual &&
		grep "æuthœr" actual
	)
'
 
test_done