[PATCH] git-p4: don't convert utf16 files.
- From
- Chris Li <christ.li@gmail.com>
- Date
- Aug 19, 2011, 22:50 UTC
- Message-ID
- <CANeU7QmGJTr4V-tWzuPnP2P=9eQbGDgQxv2phAVbGXjU5tqYPQ@mail.gmail.com>
Some repository has some utf16 files git-p4 don't know how to convert. For those files, git-p4 just write the utf8 files. That is wrong, because git get different file than perforce does, causing some windows resource file fail to compile.
Using the "p4 print -o tmpfile depotfile" can avoid this convertion (and possible failure) all together.
Signed-off-by: Chris Li <git@chrisli.org>
--- git-p4 | 11 +++++------ 1 files changed, 5 insertions(+), 6 deletions(-)
diff --git a/git-p4 b/git-p4 index 672b0c2..0c6a5cc 100755 --- a/git-p4 +++ b/git-p4 @@ -755,12 +755,11 @@ class P4FileReader: break if header['type'].startswith('utf16'): - try: - text = textBuffer.getvalue().encode('utf_16') - except UnicodeDecodeError: - # File checked in to Perforce has an error. Try without encoding - print "Corrupt UTF-16 file in Perforce: %s" % header['depotFile'] - text = textBuffer.getvalue() + # Don't even try to convert utf16. Ask p4 to write the file directly. + tmpFile = tempfile.NamedTemporaryFile() + P4Helper().p4_system("print -o %s %s"%(tmpFile.name, header['depotFile'])) + text = open(tmpFile.name).read() + tmpFile.close() else: text = textBuffer.getvalue() textBuffer.close()
-- 1.7.6