summaryrefslogtreecommitdiff
path: root/t/t9825-git-p4-handle-utf16-without-bom.sh
diff options
context:
space:
mode:
authorLars Schneider <larsxschneider@gmail.com>2015-09-21 10:01:40 (GMT)
committerJunio C Hamano <gitster@pobox.com>2015-09-22 19:15:12 (GMT)
commitfe18a0f2793b7559d5565bc65b53c7c018de3c21 (patch)
treef180abb8a108872435030cc8726f0456027f2d51 /t/t9825-git-p4-handle-utf16-without-bom.sh
parent45733fa93f287fbc04d6a6a3f5a39cc852c5cf50 (diff)
downloadgit-fe18a0f2793b7559d5565bc65b53c7c018de3c21.zip
git-fe18a0f2793b7559d5565bc65b53c7c018de3c21.tar.gz
git-fe18a0f2793b7559d5565bc65b53c7c018de3c21.tar.bz2
git-p4: add test case for "Translation of file content failed" error
A P4 repository can get into a state where it contains a file with type UTF-16 that does not contain a valid UTF-16 BOM. If git-p4 attempts to retrieve the file then the process crashes with a "Translation of file content failed" error. More info here: http://answers.perforce.com/articles/KB/3117 Signed-off-by: Lars Schneider <larsxschneider@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/t9825-git-p4-handle-utf16-without-bom.sh')
-rwxr-xr-xt/t9825-git-p4-handle-utf16-without-bom.sh50
1 files changed, 50 insertions, 0 deletions
diff --git a/t/t9825-git-p4-handle-utf16-without-bom.sh b/t/t9825-git-p4-handle-utf16-without-bom.sh
new file mode 100755
index 0000000..bdd5911
--- /dev/null
+++ b/t/t9825-git-p4-handle-utf16-without-bom.sh
@@ -0,0 +1,50 @@
+#!/bin/sh
+
+test_description='git p4 handling of UTF-16 files without BOM'
+
+. ./lib-git-p4.sh
+
+UTF16="\227\000\227\000"
+
+test_expect_success 'start p4d' '
+ start_p4d
+'
+
+test_expect_success 'init depot with UTF-16 encoded file and artificially remove BOM' '
+ (
+ cd "$cli" &&
+ printf "$UTF16" >file1 &&
+ p4 add -t utf16 file1 &&
+ p4 submit -d "file1"
+ ) &&
+
+ (
+ cd db &&
+ p4d -jc &&
+ # P4D automatically adds a BOM. Remove it here to make the file invalid.
+ sed -e "\$d" depot/file1,v >depot/file1,v.new &&
+ mv depot/file1,v.new depot/file1,v &&
+ printf "@$UTF16@" >>depot/file1,v &&
+ p4d -jrF checkpoint.1
+ )
+'
+
+test_expect_failure 'clone depot with invalid UTF-16 file in verbose mode' '
+ git p4 clone --dest="$git" --verbose //depot &&
+ test_when_finished cleanup_git &&
+ (
+ cd "$git" &&
+ printf "$UTF16" >expect &&
+ test_cmp_bin expect file1
+ )
+'
+
+test_expect_failure 'clone depot with invalid UTF-16 file in non-verbose mode' '
+ git p4 clone --dest="$git" //depot
+'
+
+test_expect_success 'kill p4d' '
+ kill_p4d
+'
+
+test_done