summaryrefslogtreecommitdiff
path: root/t/t0020-crlf.sh
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2007-04-19 22:37:19 -0700
committerJunio C Hamano <junkio@cox.net>2007-04-19 22:37:44 -0700
commit163b95919428cd7d782af91296e0b886683f2daa (patch)
tree7f11f2139d89e006edb4d4c806da3ec7ffd9554b /t/t0020-crlf.sh
parent4392da4d5d7585a9defa6869517cb354f7460f35 (diff)
downloadgit-163b95919428cd7d782af91296e0b886683f2daa.tar.gz
Update 'crlf' attribute semantics.
This updates the semantics of 'crlf' so that .gitattributes file can say "this is text, even though it may look funny". Setting the `crlf` attribute on a path is meant to mark the path as a "text" file. 'core.autocrlf' conversion takes place without guessing the content type by inspection. Unsetting the `crlf` attribute on a path is meant to mark the path as a "binary" file. The path never goes through line endings conversion upon checkin/checkout. Unspecified `crlf` attribute tells git to apply the `core.autocrlf` conversion when the file content looks like text. Setting the `crlf` attribut to string value "input" is similar to setting the attribute to `true`, but also forces git to act as if `core.autocrlf` is set to `input` for the path. Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 't/t0020-crlf.sh')
-rwxr-xr-xt/t0020-crlf.sh74
1 files changed, 63 insertions, 11 deletions
diff --git a/t/t0020-crlf.sh b/t/t0020-crlf.sh
index cf84f0a1ab..fe1dfd08a0 100755
--- a/t/t0020-crlf.sh
+++ b/t/t0020-crlf.sh
@@ -4,6 +4,10 @@ test_description='CRLF conversion'
. ./test-lib.sh
+q_to_nul () {
+ tr Q '\0'
+}
+
append_cr () {
sed -e 's/$/Q/' | tr Q '\015'
}
@@ -20,6 +24,7 @@ test_expect_success setup '
for w in Hello world how are you; do echo $w; done >one &&
mkdir dir &&
for w in I am very very fine thank you; do echo $w; done >dir/two &&
+ for w in Oh here is NULQin text here; do echo $w; done | q_to_nul >three &&
git add . &&
git commit -m initial &&
@@ -27,6 +32,7 @@ test_expect_success setup '
one=`git rev-parse HEAD:one` &&
dir=`git rev-parse HEAD:dir` &&
two=`git rev-parse HEAD:dir/two` &&
+ three=`git rev-parse HEAD:three` &&
for w in Some extra lines here; do echo $w; done >>one &&
git diff >patch.file &&
@@ -38,7 +44,7 @@ test_expect_success setup '
test_expect_success 'update with autocrlf=input' '
- rm -f tmp one dir/two &&
+ rm -f tmp one dir/two three &&
git read-tree --reset -u HEAD &&
git repo-config core.autocrlf input &&
@@ -62,7 +68,7 @@ test_expect_success 'update with autocrlf=input' '
test_expect_success 'update with autocrlf=true' '
- rm -f tmp one dir/two &&
+ rm -f tmp one dir/two three &&
git read-tree --reset -u HEAD &&
git repo-config core.autocrlf true &&
@@ -86,7 +92,7 @@ test_expect_success 'update with autocrlf=true' '
test_expect_success 'checkout with autocrlf=true' '
- rm -f tmp one dir/two &&
+ rm -f tmp one dir/two three &&
git repo-config core.autocrlf true &&
git read-tree --reset -u HEAD &&
@@ -110,7 +116,7 @@ test_expect_success 'checkout with autocrlf=true' '
test_expect_success 'checkout with autocrlf=input' '
- rm -f tmp one dir/two &&
+ rm -f tmp one dir/two three &&
git repo-config core.autocrlf input &&
git read-tree --reset -u HEAD &&
@@ -136,7 +142,7 @@ test_expect_success 'checkout with autocrlf=input' '
test_expect_success 'apply patch (autocrlf=input)' '
- rm -f tmp one dir/two &&
+ rm -f tmp one dir/two three &&
git repo-config core.autocrlf input &&
git read-tree --reset -u HEAD &&
@@ -149,7 +155,7 @@ test_expect_success 'apply patch (autocrlf=input)' '
test_expect_success 'apply patch --cached (autocrlf=input)' '
- rm -f tmp one dir/two &&
+ rm -f tmp one dir/two three &&
git repo-config core.autocrlf input &&
git read-tree --reset -u HEAD &&
@@ -162,7 +168,7 @@ test_expect_success 'apply patch --cached (autocrlf=input)' '
test_expect_success 'apply patch --index (autocrlf=input)' '
- rm -f tmp one dir/two &&
+ rm -f tmp one dir/two three &&
git repo-config core.autocrlf input &&
git read-tree --reset -u HEAD &&
@@ -176,7 +182,7 @@ test_expect_success 'apply patch --index (autocrlf=input)' '
test_expect_success 'apply patch (autocrlf=true)' '
- rm -f tmp one dir/two &&
+ rm -f tmp one dir/two three &&
git repo-config core.autocrlf true &&
git read-tree --reset -u HEAD &&
@@ -189,7 +195,7 @@ test_expect_success 'apply patch (autocrlf=true)' '
test_expect_success 'apply patch --cached (autocrlf=true)' '
- rm -f tmp one dir/two &&
+ rm -f tmp one dir/two three &&
git repo-config core.autocrlf true &&
git read-tree --reset -u HEAD &&
@@ -202,7 +208,7 @@ test_expect_success 'apply patch --cached (autocrlf=true)' '
test_expect_success 'apply patch --index (autocrlf=true)' '
- rm -f tmp one dir/two &&
+ rm -f tmp one dir/two three &&
git repo-config core.autocrlf true &&
git read-tree --reset -u HEAD &&
@@ -216,8 +222,8 @@ test_expect_success 'apply patch --index (autocrlf=true)' '
test_expect_success '.gitattributes says two is binary' '
+ rm -f tmp one dir/two three &&
echo "two -crlf" >.gitattributes &&
- rm -f tmp one dir/two &&
git repo-config core.autocrlf true &&
git read-tree --reset -u HEAD &&
@@ -235,6 +241,52 @@ test_expect_success '.gitattributes says two is binary' '
else
echo "Huh?"
false
+ fi &&
+
+ if remove_cr three >/dev/null
+ then
+ echo "Huh?"
+ false
+ else
+ : happy
+ fi
+'
+
+test_expect_success '.gitattributes says two is input' '
+
+ rm -f tmp one dir/two three &&
+ echo "two crlf=input" >.gitattributes &&
+ git read-tree --reset -u HEAD &&
+
+ if remove_cr dir/two >/dev/null
+ then
+ echo "Huh?"
+ false
+ else
+ : happy
+ fi
+'
+
+test_expect_success '.gitattributes says two and three are text' '
+
+ rm -f tmp one dir/two three &&
+ echo "t* crlf" >.gitattributes &&
+ git read-tree --reset -u HEAD &&
+
+ if remove_cr dir/two >/dev/null
+ then
+ : happy
+ else
+ echo "Huh?"
+ false
+ fi &&
+
+ if remove_cr three >/dev/null
+ then
+ : happy
+ else
+ echo "Huh?"
+ false
fi
'