git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Chris Li <git@chrisli.org>
To: git@vger.kernel.org
Cc: Pete Wyckoff <pw@padd.com>, Junio C Hamano <gitster@pobox.com>
Subject: [PATCH] git-p4: import utf16 file properly
Date: Tue, 13 Sep 2011 14:33:14 -0700	[thread overview]
Message-ID: <CANeU7QndA0yv1OzU3vta5B8r8nCRdBSqTy0Rboc_bbpst+1pcw@mail.gmail.com> (raw)

The current git-p4 does not handle utf16 files properly.
The "p4 print" command, when output to stdout, converts the
utf16 file into utf8. That effectively imported the utf16 file
as utf8 for git. In other words, git-p4 import a different
file compare to file check out by perforce. This breakes my
windows build in the company project.

The fix is simple, just ask perforce to print the depot
file into a real file. This way perforce will not performe
the utf16 to utf8 conversion. Git can import the exact same
file as perforce checkout.
---
 contrib/fast-import/git-p4 |    5 +++++
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/contrib/fast-import/git-p4 b/contrib/fast-import/git-p4
index 6b9de9e..5fb1ac7 100755
--- a/contrib/fast-import/git-p4
+++ b/contrib/fast-import/git-p4
@@ -1239,6 +1239,11 @@ class P4Sync(Command, P4UserMap):
             contents = map(lambda text:
re.sub(r'(?i)\$(Id|Header):[^$]*\$',r'$\1$', text), contents)
         elif file['type'] in ('text+k', 'ktext', 'kxtext',
'unicode+k', 'binary+k'):
             contents = map(lambda text:
re.sub(r'\$(Id|Header|Author|Date|DateTime|Change|File|Revision):[^$\n]*\$',r'$\1$',
text), contents)
+        elif file['type'] == 'utf16':
+             tmpFile = tempfile.NamedTemporaryFile()
+             p4CmdList("print -o %s %s"%(tmpFile.name, file['depotFile']))
+             contents = [ open(tmpFile.name).read() ]
+             tmpFile.close()

         self.gitStream.write("M %s inline %s\n" % (mode, relPath))

-- 
1.7.6

             reply	other threads:[~2011-09-13 21:33 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-09-13 21:33 Chris Li [this message]
2011-09-14  7:55 ` [PATCH] git-p4: import utf16 file properly Luke Diamand
2011-09-14 18:29   ` Chris Li
2011-09-14 18:39     ` Chris Li
2011-09-18  1:19       ` Pete Wyckoff
2011-09-14 18:56     ` Luke Diamand

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CANeU7QndA0yv1OzU3vta5B8r8nCRdBSqTy0Rboc_bbpst+1pcw@mail.gmail.com \
    --to=git@chrisli.org \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=pw@padd.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).