From: "René Scharfe" <rene.scharfe@lsrfire.ath.cx>
To: kusmabite@gmail.com
Cc: Git Mailing List <git@vger.kernel.org>,
msysGit <msysgit@googlegroups.com>,
eyvind.bernhardsen@gmail.com
Subject: Re: git-archive and core.eol
Date: Sat, 08 Jan 2011 14:35:55 +0100 [thread overview]
Message-ID: <4D28683B.4020400@lsrfire.ath.cx> (raw)
In-Reply-To: <AANLkTi=kfE88F7dY5F_xtbEuh9DyUcN+ymeXqLMWztGQ@mail.gmail.com>
Am 15.12.2010 23:32, schrieb Erik Faye-Lund:
> I recently tried the following on Windows:
>
> $ git init
> Initialized empty Git repository in c:/Users/kusma/test/.git/
> $ echo "foo
> bar" > test.txt
> $ git -c core.autocrlf=true add test.txt
> warning: LF will be replaced by CRLF in test.txt.
> The file will have its original line endings in your working directory.
> $ git commit -m.
> 1 files changed, 2 insertions(+), 0 deletions(-)
> create mode 100644 test.txt
> $ git -c core.autocrlf=true -c core.eol=lf archive --format=tar HEAD > test.tar
> $ tar xvf test.tar
> $ od -c test.txt
> 0000000 f o o \r \n b a r \r \n
> 0000012
>
> Just to be sure, I checked this:
>
> $ git show HEAD:test.txt | od -c
> 0000000 f o o \n b a r \n
> 0000010
>
> Yep, the file has LF in the repo, as expected... the warning from
> git-add is a bit confusing, but OK.
>
> Hmm, so git-archive writes CRLF even if I said I wanted LF. But then I
> tried this on Linux:
>
> $ git init
> Initialized empty Git repository in /home/kusma/src/test/.git/
> $ echo "foo
> bar" > test.txt
> $ git add test.txt
> $ git commit -m.
> [master (root-commit) c6f195e] .
> 1 files changed, 2 insertions(+), 0 deletions(-)
> create mode 100644 test.txt
> $ git -c core.autocrlf=true -c core.eol=crlf archive --format=tar HEAD
>> test.tar
> $ tar xvf test.tar
> test.txt
> $ od -c test.txt
> 0000000 f o o \r \n b a r \r \n
> 0000012
>
> This leaves me a bit puzzled. On Linux, I can override the default
> new-line style CRLF for git-archive, but I can't override it to LF on
> Windows?
>
> I expected it to work because sha1_file_to_archive calls
> convert_to_working_tree. I've tried stepping through the code, but I
> don't quite understand where it goes wrong. Or even how the code is
> supposed to work :P
>
> Does anyone have any clue what's going on? I'm running with the
> current master, git version 1.7.3.3.585.g74f6e.
I can't seem to replicate this (1.7.4-rc1); see below for the test script
I tried to come up with. It should test all combinations of the relevant
config variables and the text attribute. I cheated by simply setting the
expectations to match the results on Linux; I didn't check if these are
indeed the correct results. The test passes for me on MinGW, too, though.
Did I miss a variable or are some of the expectations wrong?
Thanks,
René
t/t5002-archive-eol.sh | 86 ++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 86 insertions(+), 0 deletions(-)
diff --git a/t/t5002-archive-eol.sh b/t/t5002-archive-eol.sh
new file mode 100755
index 0000000..50f80f7
--- /dev/null
+++ b/t/t5002-archive-eol.sh
@@ -0,0 +1,86 @@
+#!/bin/sh
+
+test_description='git archive EOL tests'
+
+. ./test-lib.sh
+
+prepare() {
+ tfile="autocrlf_$1-eol_$2.tar"
+ dir="autocrlf_$1-eol_$2.d"
+ test_expect_success "archive with autocrlf=$1 eol=$2" "
+ git -c core.autocrlf=$1 -c core.eol=$2 archive HEAD >$tfile &&
+ (mkdir $dir && cd $dir && \"$TAR\" xf -) <$tfile
+ "
+}
+
+expect_success() {
+ file="autocrlf_$2-eol_$3.d/autocrlf_$1/$4"
+ desc="add autocrlf=$1, archive autocrlf=$2 eol=$3"
+ test_expect_success "$desc: $4 => $5" "test_cmp $5 $file"
+}
+
+test_expect_success 'setup' '
+ printf "1\\n2\\n" >lf &&
+ printf "1\\r\\n2\\r\\n" >crlf &&
+
+ echo "*.txt text" >.gitattributes &&
+ git add .gitattributes &&
+
+ mkdir autocrlf_false &&
+ cp lf crlf autocrlf_false/ &&
+ cp lf autocrlf_false/lf.txt &&
+ cp crlf autocrlf_false/crlf.txt &&
+ git -c core.autocrlf=false add autocrlf_false/ &&
+
+ mkdir autocrlf_true &&
+ cp lf crlf autocrlf_true/ &&
+ cp lf autocrlf_true/lf.txt &&
+ cp crlf autocrlf_true/crlf.txt &&
+ git -c core.autocrlf=true add autocrlf_true/ &&
+
+ git commit -m.
+'
+
+# core.autocrlf core.eol
+prepare false crlf
+prepare true crlf
+prepare false lf
+prepare true lf
+
+# core.autocrlf core.eol original expect
+# (add) (archive)
+expect_success false false crlf crlf crlf
+expect_success false false crlf lf lf
+expect_success false false lf crlf crlf
+expect_success false false lf lf lf
+expect_success false true crlf crlf crlf
+expect_success false true crlf lf crlf
+expect_success false true lf crlf crlf
+expect_success false true lf lf crlf
+expect_success true false crlf crlf lf
+expect_success true false crlf lf lf
+expect_success true false lf crlf lf
+expect_success true false lf lf lf
+expect_success true true crlf crlf crlf
+expect_success true true crlf lf crlf
+expect_success true true lf crlf crlf
+expect_success true true lf lf crlf
+
+expect_success false false crlf crlf.txt crlf
+expect_success false false crlf lf.txt crlf
+expect_success false false lf crlf.txt lf
+expect_success false false lf lf.txt lf
+expect_success false true crlf crlf.txt crlf
+expect_success false true crlf lf.txt crlf
+expect_success false true lf crlf.txt crlf
+expect_success false true lf lf.txt crlf
+expect_success true false crlf crlf.txt crlf
+expect_success true false crlf lf.txt crlf
+expect_success true false lf crlf.txt lf
+expect_success true false lf lf.txt lf
+expect_success true true crlf crlf.txt crlf
+expect_success true true crlf lf.txt crlf
+expect_success true true lf crlf.txt crlf
+expect_success true true lf lf.txt crlf
+
+test_done
next prev parent reply other threads:[~2011-01-08 13:36 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-12-15 22:32 git-archive and core.eol Erik Faye-Lund
2011-01-08 13:35 ` René Scharfe [this message]
2011-01-08 17:28 ` Erik Faye-Lund
2011-01-09 12:52 ` René Scharfe
2011-01-10 12:11 ` Erik Faye-Lund
2011-01-10 13:00 ` Erik Faye-Lund
2011-01-11 19:24 ` René Scharfe
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=4D28683B.4020400@lsrfire.ath.cx \
--to=rene.scharfe@lsrfire.ath.cx \
--cc=eyvind.bernhardsen@gmail.com \
--cc=git@vger.kernel.org \
--cc=kusmabite@gmail.com \
--cc=msysgit@googlegroups.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.