From: larsxschneider@gmail.com Date: Mon, 07 Sep 2015 12:42:03 GMT Subject: [PATCH v1 2/2] git-p4: handle "Translation of file content failed" Message-ID: <1441629723-90604-3-git-send-email-larsxschneider@gmail.com> In-Reply-To: <1441629723-90604-1-git-send-email-larsxschneider@gmail.com> From: Lars Schneider A P4 repository can get into a state where it contains a file with file type UTF16 that does not not contain valid UTF16 characters. If git-p4 attempts to retrieve the file as UTF16 from P4 then the process crashes with a "Translation of file content failed" error. Fix this by detecting this error and retrieving the file as binary instead. The result in Git is the same. --- git-p4.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/git-p4.py b/git-p4.py index 36a4bcb..aaa0ad9 100755 --- a/git-p4.py +++ b/git-p4.py @@ -2186,10 +2186,17 @@ class P4Sync(Command, P4UserMap): # them back too. This is not needed to the cygwin windows version, # just the native "NT" type. # - text = p4_read_pipe(['print', '-q', '-o', '-', "%s@%s" % (file['depotFile'], file['change']) ]) - if p4_version_string().find("/NT") >= 0: - text = text.replace("\r\n", "\n") - contents = [ text ] + try: + text = p4_read_pipe(['print', '-q', '-o', '-', '%s@%s' % (file['depotFile'], file['change'])]) + except Exception as e: + if 'Translation of file content failed' in str(e): + type_base = 'binary' + else: + raise e + else: + if p4_version_string().find('/NT') >= 0: + text = text.replace('\r\n', '\n') + contents = [ text ] if type_base == "apple": # Apple filetype files will be streamed as a concatenation of -- 2.5.1