]> git.ipfire.org Git - thirdparty/git.git/commitdiff
git-p4: fix CR LF handling for utf16 files
authorMoritz Baumann <moritz.baumann@sap.com>
Wed, 20 Jul 2022 18:17:45 +0000 (18:17 +0000)
committerJunio C Hamano <gitster@pobox.com>
Wed, 20 Jul 2022 18:38:06 +0000 (11:38 -0700)
Perforce silently replaces LF with CR LF for "utf16" files if the client
is a native Windows client. Since git's autocrlf logic does not undo
this transformation for UTF-16 encoded files, git-p4 replaces CR LF with
LF during the sync if the file type "utf16" is detected and the Perforce
client platform indicates that this conversion is performed.

Windows only runs on little-endian architectures, therefore the encoding
of the byte stream received from the Perforce client is UTF-16-LE and
the relevant byte sequence is 0D 00 0A 00.

Signed-off-by: Moritz Baumann <moritz.baumann@sap.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-p4.py

index 8fbf6eb1fe385090489f55c87913d0867ad8c349..0a9d7e2ed7c5660895caa6eb40807a2bac6d8eae 100755 (executable)
--- a/git-p4.py
+++ b/git-p4.py
@@ -3148,7 +3148,7 @@ class P4Sync(Command, P4UserMap):
                     raise e
             else:
                 if p4_version_string().find('/NT') >= 0:
-                    text = text.replace(b'\r\n', b'\n')
+                    text = text.replace(b'\x0d\x00\x0a\x00', b'\x0a\x00')
                 contents = [text]
 
         if type_base == "apple":