From: Pete Wyckoff <pw@padd.com>
To: git@vger.kernel.org
Cc: Junio C Hamano <gitster@pobox.com>, Johannes Sixt <j6t@kdbg.org>
Subject: [PATCHv2 10/21] git p4: scrub crlf for utf16 files on windows
Date: Sat, 26 Jan 2013 22:11:13 -0500 [thread overview]
Message-ID: <1359256284-5660-11-git-send-email-pw@padd.com> (raw)
In-Reply-To: <1359256284-5660-1-git-send-email-pw@padd.com>
Files of type utf16 are handled with "p4 print" instead of the
normal "p4 -G print" interface due to how the latter does not
produce correct output. See 55aa571 (git-p4: handle utf16
filetype properly, 2011-09-17) for details.
On windows, though, "p4 print" can not be told which line
endings to use, as there is no underlying client, and always
chooses crlf, even for utf16 files. Convert the \r\n into \n
when importing utf16 files.
The fix for this is complex, in that the problem is a property
of the NT version of p4. There are old versions of p4 that
were compiled directly for cygwin that should not be subjected
to text replacement. The right check here, then, is to look
at the p4 version, not the OS version. Note also that on cygwin,
platform.system() is "CYGWIN_NT-5.1" or similar, not "Windows".
Add a function to memoize the p4 version string and use it to
check for "/NT", indicating the Windows build of p4.
Signed-off-by: Pete Wyckoff <pw@padd.com>
---
git-p4.py | 24 +++++++++++++++++++++++-
1 file changed, 23 insertions(+), 1 deletion(-)
diff --git a/git-p4.py b/git-p4.py
index 445d704..c62b2ca 100755
--- a/git-p4.py
+++ b/git-p4.py
@@ -170,6 +170,22 @@ def p4_system(cmd):
expand = isinstance(real_cmd, basestring)
subprocess.check_call(real_cmd, shell=expand)
+_p4_version_string = None
+def p4_version_string():
+ """Read the version string, showing just the last line, which
+ hopefully is the interesting version bit.
+
+ $ p4 -V
+ Perforce - The Fast Software Configuration Management System.
+ Copyright 1995-2011 Perforce Software. All rights reserved.
+ Rev. P4/NTX86/2011.1/393975 (2011/12/16).
+ """
+ global _p4_version_string
+ if not _p4_version_string:
+ a = p4_read_pipe_lines(["-V"])
+ _p4_version_string = a[-1].rstrip()
+ return _p4_version_string
+
def p4_integrate(src, dest):
p4_system(["integrate", "-Dt", wildcard_encode(src), wildcard_encode(dest)])
@@ -1973,7 +1989,6 @@ class P4Sync(Command, P4UserMap):
self.syncWithOrigin = True
self.importIntoRemotes = True
self.maxChanges = ""
- self.isWindows = (platform.system() == "Windows")
self.keepRepoPath = False
self.depotPaths = None
self.p4BranchesInGit = []
@@ -2118,7 +2133,14 @@ class P4Sync(Command, P4UserMap):
# operations. utf16 is converted to ascii or utf8, perhaps.
# But ascii text saved as -t utf16 is completely mangled.
# Invoke print -o to get the real contents.
+ #
+ # On windows, the newlines will always be mangled by print, so put
+ # them back too. This is not needed to the cygwin windows version,
+ # just the native "NT" type.
+ #
text = p4_read_pipe(['print', '-q', '-o', '-', file['depotFile']])
+ if p4_version_string().find("/NT") >= 0:
+ text = text.replace("\r\n", "\n")
contents = [ text ]
if type_base == "apple":
--
1.8.1.1.460.g6fa8886
next prev parent reply other threads:[~2013-01-27 3:15 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-27 3:11 [PATCHv2 00/21] git p4: work on cygwin Pete Wyckoff
2013-01-27 3:11 ` [PATCHv2 01/21] git p4: temp branch name should use / even on windows Pete Wyckoff
2013-01-27 3:11 ` [PATCHv2 02/21] git p4: remove unused imports Pete Wyckoff
2013-01-27 3:11 ` [PATCHv2 03/21] git p4: generate better error message for bad depot path Pete Wyckoff
2013-01-27 3:11 ` [PATCHv2 04/21] git p4 test: use client_view to build the initial client Pete Wyckoff
2013-01-27 3:11 ` [PATCHv2 05/21] git p4 test: avoid loop in client_view Pete Wyckoff
2013-01-27 3:11 ` [PATCHv2 06/21] git p4 test: use client_view in t9806 Pete Wyckoff
2013-01-27 3:11 ` [PATCHv2 07/21] git p4 test: start p4d inside its db dir Pete Wyckoff
2013-01-27 3:11 ` [PATCHv2 08/21] git p4 test: translate windows paths for cygwin Pete Wyckoff
2013-01-27 3:11 ` [PATCHv2 09/21] git p4: remove unreachable windows \r\n conversion code Pete Wyckoff
2013-01-27 3:11 ` Pete Wyckoff [this message]
2013-01-27 3:11 ` [PATCHv2 11/21] git p4 test: newline handling Pete Wyckoff
2013-01-27 3:11 ` [PATCHv2 12/21] git p4 test: use LineEnd unix in windows tests too Pete Wyckoff
2013-01-27 3:11 ` [PATCHv2 13/21] git p4 test: avoid wildcard * in windows Pete Wyckoff
2013-01-27 3:11 ` [PATCHv2 14/21] git p4: cygwin p4 client does not mark read-only Pete Wyckoff
2013-01-27 3:11 ` [PATCHv2 15/21] git p4 test: use test_chmod for cygwin Pete Wyckoff
2013-01-27 3:11 ` [PATCHv2 16/21] git p4: disable read-only attribute before deleting Pete Wyckoff
2013-01-27 3:11 ` [PATCHv2 17/21] git p4: avoid shell when mapping users Pete Wyckoff
2013-01-27 3:11 ` [PATCHv2 18/21] git p4: avoid shell when invoking git rev-list Pete Wyckoff
2013-01-27 3:11 ` [PATCHv2 19/21] git p4: avoid shell when invoking git config --get-all Pete Wyckoff
2013-01-27 3:11 ` [PATCHv2 20/21] git p4: avoid shell when calling git config Pete Wyckoff
2013-01-27 3:11 ` [PATCHv2 21/21] git p4: introduce gitConfigBool Pete Wyckoff
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=1359256284-5660-11-git-send-email-pw@padd.com \
--to=pw@padd.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=j6t@kdbg.org \
/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).