git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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 11/21] git p4 test: newline handling
Date: Sat, 26 Jan 2013 22:11:14 -0500	[thread overview]
Message-ID: <1359256284-5660-12-git-send-email-pw@padd.com> (raw)
In-Reply-To: <1359256284-5660-1-git-send-email-pw@padd.com>

P4 stores newlines in the depos as \n.  By default, git does this
too, both on unix and windows.  Test to make sure that this stays
true.

Both git and p4 have mechanisms to use \r\n in the working
directory.  Exercise these.

Signed-off-by: Pete Wyckoff <pw@padd.com>
---
 t/t9802-git-p4-filetype.sh | 117 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 117 insertions(+)

diff --git a/t/t9802-git-p4-filetype.sh b/t/t9802-git-p4-filetype.sh
index 21924df..c5ab626 100755
--- a/t/t9802-git-p4-filetype.sh
+++ b/t/t9802-git-p4-filetype.sh
@@ -8,6 +8,123 @@ test_expect_success 'start p4d' '
 	start_p4d
 '
 
+#
+# This series of tests checks newline handling  Both p4 and
+# git store newlines as \n, and have options to choose how
+# newlines appear in checked-out files.
+#
+test_expect_success 'p4 client newlines, unix' '
+	(
+		cd "$cli" &&
+		p4 client -o | sed "/LineEnd/s/:.*/:unix/" | p4 client -i &&
+		printf "unix\ncrlf\n" >f-unix &&
+		printf "unix\r\ncrlf\r\n" >f-unix-as-crlf &&
+		p4 add -t text f-unix &&
+		p4 submit -d f-unix &&
+
+		# LineEnd: unix; should be no change after sync
+		cp f-unix f-unix-orig &&
+		p4 sync -f &&
+		test_cmp f-unix-orig f-unix &&
+
+		# make sure stored in repo as unix newlines
+		# use sed to eat python-appened newline
+		p4 -G print //depot/f-unix | marshal_dump data 2 |\
+		    sed \$d >f-unix-p4-print &&
+		test_cmp f-unix-orig f-unix-p4-print &&
+
+		# switch to win, make sure lf -> crlf
+		p4 client -o | sed "/LineEnd/s/:.*/:win/" | p4 client -i &&
+		p4 sync -f &&
+		test_cmp f-unix-as-crlf f-unix
+	)
+'
+
+test_expect_success 'p4 client newlines, win' '
+	(
+		cd "$cli" &&
+		p4 client -o | sed "/LineEnd/s/:.*/:win/" | p4 client -i &&
+		printf "win\r\ncrlf\r\n" >f-win &&
+		printf "win\ncrlf\n" >f-win-as-lf &&
+		p4 add -t text f-win &&
+		p4 submit -d f-win &&
+
+		# LineEnd: win; should be no change after sync
+		cp f-win f-win-orig &&
+		p4 sync -f &&
+		test_cmp f-win-orig f-win &&
+
+		# make sure stored in repo as unix newlines
+		# use sed to eat python-appened newline
+		p4 -G print //depot/f-win | marshal_dump data 2 |\
+		    sed \$d >f-win-p4-print &&
+		test_cmp f-win-as-lf f-win-p4-print &&
+
+		# switch to unix, make sure lf -> crlf
+		p4 client -o | sed "/LineEnd/s/:.*/:unix/" | p4 client -i &&
+		p4 sync -f &&
+		test_cmp f-win-as-lf f-win
+	)
+'
+
+test_expect_success 'ensure blobs store only lf newlines' '
+	test_when_finished cleanup_git &&
+	(
+		cd "$git" &&
+		git init &&
+		git p4 sync //depot@all &&
+
+		# verify the files in .git are stored only with newlines
+		o=$(git ls-tree p4/master -- f-unix | cut -f1 | cut -d\  -f3) &&
+		git cat-file blob $o >f-unix-blob &&
+		test_cmp "$cli"/f-unix-orig f-unix-blob &&
+
+		o=$(git ls-tree p4/master -- f-win | cut -f1 | cut -d\  -f3) &&
+		git cat-file blob $o >f-win-blob &&
+		test_cmp "$cli"/f-win-as-lf f-win-blob &&
+
+		rm f-unix-blob f-win-blob
+	)
+'
+
+test_expect_success 'gitattributes setting eol=lf produces lf newlines' '
+	test_when_finished cleanup_git &&
+	(
+		# checkout the files and make sure core.eol works as planned
+		cd "$git" &&
+		git init &&
+		echo "* eol=lf" >.gitattributes &&
+		git p4 sync //depot@all &&
+		git checkout master &&
+		test_cmp "$cli"/f-unix-orig f-unix &&
+		test_cmp "$cli"/f-win-as-lf f-win
+	)
+'
+
+test_expect_success 'gitattributes setting eol=crlf produces crlf newlines' '
+	test_when_finished cleanup_git &&
+	(
+		# checkout the files and make sure core.eol works as planned
+		cd "$git" &&
+		git init &&
+		echo "* eol=crlf" >.gitattributes &&
+		git p4 sync //depot@all &&
+		git checkout master &&
+		test_cmp "$cli"/f-unix-as-crlf f-unix &&
+		test_cmp "$cli"/f-win-orig f-win
+	)
+'
+
+test_expect_success 'crlf cleanup' '
+	(
+		cd "$cli" &&
+		rm f-unix-orig f-unix-as-crlf &&
+		rm f-win-orig f-win-as-lf &&
+		p4 client -o | sed "/LineEnd/s/:.*/:unix/" | p4 client -i &&
+		p4 sync -f
+	)
+'
+
 test_expect_success 'utf-16 file create' '
 	(
 		cd "$cli" &&
-- 
1.8.1.1.460.g6fa8886

  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 ` [PATCHv2 10/21] git p4: scrub crlf for utf16 files on windows Pete Wyckoff
2013-01-27  3:11 ` Pete Wyckoff [this message]
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-12-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).