Merge branches 'lt/crlf' and 'jc/apply-config'
* lt/crlf: Teach core.autocrlf to 'git apply' t0020: add test for auto-crlf Make AutoCRLF ternary variable. Lazy man's auto-CRLF * jc/apply-config: t4119: test autocomputing -p<n> for traditional diff input. git-apply: guess correct -p<n> value for non-git patches. git-apply: notice "diff --git" patch again Fix botched "leak fix" t4119: add test for traditional patch and different p_value apply: fix memory leak in prefix_one() git-apply: require -p<n> when working in a subdirectory. git-apply: do not lose cwd when run from a subdirectory. Teach 'git apply' to look at $HOME/.gitconfig even outside of a repository Teach 'git apply' to look at $GIT_DIR/config
This commit is contained in:
217
t/t0020-crlf.sh
Executable file
217
t/t0020-crlf.sh
Executable file
@ -0,0 +1,217 @@
|
||||
#!/bin/sh
|
||||
|
||||
test_description='CRLF conversion'
|
||||
|
||||
. ./test-lib.sh
|
||||
|
||||
append_cr () {
|
||||
sed -e 's/$/Q/' | tr Q '\015'
|
||||
}
|
||||
|
||||
remove_cr () {
|
||||
tr '\015' Q <"$1" | grep Q >/dev/null &&
|
||||
tr '\015' Q <"$1" | sed -ne 's/Q$//p'
|
||||
}
|
||||
|
||||
test_expect_success setup '
|
||||
|
||||
git repo-config core.autocrlf false &&
|
||||
|
||||
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 &&
|
||||
git add . &&
|
||||
|
||||
git commit -m initial &&
|
||||
|
||||
one=`git rev-parse HEAD:one` &&
|
||||
dir=`git rev-parse HEAD:dir` &&
|
||||
two=`git rev-parse HEAD:dir/two` &&
|
||||
|
||||
for w in Some extra lines here; do echo $w; done >>one &&
|
||||
git diff >patch.file &&
|
||||
patched=`git hash-object --stdin <one` &&
|
||||
git read-tree --reset -u HEAD &&
|
||||
|
||||
echo happy.
|
||||
'
|
||||
|
||||
test_expect_success 'update with autocrlf=input' '
|
||||
|
||||
rm -f tmp one dir/two &&
|
||||
git read-tree --reset -u HEAD &&
|
||||
git repo-config core.autocrlf input &&
|
||||
|
||||
for f in one dir/two
|
||||
do
|
||||
append_cr <$f >tmp && mv -f tmp $f &&
|
||||
git update-index -- $f || {
|
||||
echo Oops
|
||||
false
|
||||
break
|
||||
}
|
||||
done &&
|
||||
|
||||
differs=`git diff-index --cached HEAD` &&
|
||||
test -z "$differs" || {
|
||||
echo Oops "$differs"
|
||||
false
|
||||
}
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'update with autocrlf=true' '
|
||||
|
||||
rm -f tmp one dir/two &&
|
||||
git read-tree --reset -u HEAD &&
|
||||
git repo-config core.autocrlf true &&
|
||||
|
||||
for f in one dir/two
|
||||
do
|
||||
append_cr <$f >tmp && mv -f tmp $f &&
|
||||
git update-index -- $f || {
|
||||
echo "Oops $f"
|
||||
false
|
||||
break
|
||||
}
|
||||
done &&
|
||||
|
||||
differs=`git diff-index --cached HEAD` &&
|
||||
test -z "$differs" || {
|
||||
echo Oops "$differs"
|
||||
false
|
||||
}
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 'checkout with autocrlf=true' '
|
||||
|
||||
rm -f tmp one dir/two &&
|
||||
git repo-config core.autocrlf true &&
|
||||
git read-tree --reset -u HEAD &&
|
||||
|
||||
for f in one dir/two
|
||||
do
|
||||
remove_cr "$f" >tmp && mv -f tmp $f &&
|
||||
git update-index -- $f || {
|
||||
echo "Eh? $f"
|
||||
false
|
||||
break
|
||||
}
|
||||
done &&
|
||||
test "$one" = `git hash-object --stdin <one` &&
|
||||
test "$two" = `git hash-object --stdin <dir/two` &&
|
||||
differs=`git diff-index --cached HEAD` &&
|
||||
test -z "$differs" || {
|
||||
echo Oops "$differs"
|
||||
false
|
||||
}
|
||||
'
|
||||
|
||||
test_expect_success 'checkout with autocrlf=input' '
|
||||
|
||||
rm -f tmp one dir/two &&
|
||||
git repo-config core.autocrlf input &&
|
||||
git read-tree --reset -u HEAD &&
|
||||
|
||||
for f in one dir/two
|
||||
do
|
||||
if remove_cr "$f" >/dev/null
|
||||
then
|
||||
echo "Eh? $f"
|
||||
false
|
||||
break
|
||||
else
|
||||
git update-index -- $f
|
||||
fi
|
||||
done &&
|
||||
test "$one" = `git hash-object --stdin <one` &&
|
||||
test "$two" = `git hash-object --stdin <dir/two` &&
|
||||
differs=`git diff-index --cached HEAD` &&
|
||||
test -z "$differs" || {
|
||||
echo Oops "$differs"
|
||||
false
|
||||
}
|
||||
'
|
||||
|
||||
test_expect_success 'apply patch (autocrlf=input)' '
|
||||
|
||||
rm -f tmp one dir/two &&
|
||||
git repo-config core.autocrlf input &&
|
||||
git read-tree --reset -u HEAD &&
|
||||
|
||||
git apply patch.file &&
|
||||
test "$patched" = "`git hash-object --stdin <one`" || {
|
||||
echo "Eh? apply without index"
|
||||
false
|
||||
}
|
||||
'
|
||||
|
||||
test_expect_success 'apply patch --cached (autocrlf=input)' '
|
||||
|
||||
rm -f tmp one dir/two &&
|
||||
git repo-config core.autocrlf input &&
|
||||
git read-tree --reset -u HEAD &&
|
||||
|
||||
git apply --cached patch.file &&
|
||||
test "$patched" = `git rev-parse :one` || {
|
||||
echo "Eh? apply with --cached"
|
||||
false
|
||||
}
|
||||
'
|
||||
|
||||
test_expect_success 'apply patch --index (autocrlf=input)' '
|
||||
|
||||
rm -f tmp one dir/two &&
|
||||
git repo-config core.autocrlf input &&
|
||||
git read-tree --reset -u HEAD &&
|
||||
|
||||
git apply --index patch.file &&
|
||||
test "$patched" = `git rev-parse :one` &&
|
||||
test "$patched" = `git hash-object --stdin <one` || {
|
||||
echo "Eh? apply with --index"
|
||||
false
|
||||
}
|
||||
'
|
||||
|
||||
test_expect_success 'apply patch (autocrlf=true)' '
|
||||
|
||||
rm -f tmp one dir/two &&
|
||||
git repo-config core.autocrlf true &&
|
||||
git read-tree --reset -u HEAD &&
|
||||
|
||||
git apply patch.file &&
|
||||
test "$patched" = "`remove_cr one | git hash-object --stdin`" || {
|
||||
echo "Eh? apply without index"
|
||||
false
|
||||
}
|
||||
'
|
||||
|
||||
test_expect_success 'apply patch --cached (autocrlf=true)' '
|
||||
|
||||
rm -f tmp one dir/two &&
|
||||
git repo-config core.autocrlf true &&
|
||||
git read-tree --reset -u HEAD &&
|
||||
|
||||
git apply --cached patch.file &&
|
||||
test "$patched" = `git rev-parse :one` || {
|
||||
echo "Eh? apply without index"
|
||||
false
|
||||
}
|
||||
'
|
||||
|
||||
test_expect_success 'apply patch --index (autocrlf=true)' '
|
||||
|
||||
rm -f tmp one dir/two &&
|
||||
git repo-config core.autocrlf true &&
|
||||
git read-tree --reset -u HEAD &&
|
||||
|
||||
git apply --index patch.file &&
|
||||
test "$patched" = `git rev-parse :one` &&
|
||||
test "$patched" = "`remove_cr one | git hash-object --stdin`" || {
|
||||
echo "Eh? apply with --index"
|
||||
false
|
||||
}
|
||||
'
|
||||
|
||||
test_done
|
162
t/t4119-apply-config.sh
Executable file
162
t/t4119-apply-config.sh
Executable file
@ -0,0 +1,162 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2007 Junio C Hamano
|
||||
#
|
||||
|
||||
test_description='git-apply --whitespace=strip and configuration file.
|
||||
|
||||
'
|
||||
|
||||
. ./test-lib.sh
|
||||
|
||||
test_expect_success setup '
|
||||
mkdir sub &&
|
||||
echo A >sub/file1 &&
|
||||
cp sub/file1 saved &&
|
||||
git add sub/file1 &&
|
||||
echo "B " >sub/file1 &&
|
||||
git diff >patch.file
|
||||
'
|
||||
|
||||
# Also handcraft GNU diff output; note this has trailing whitespace.
|
||||
cat >gpatch.file <<\EOF &&
|
||||
--- file1 2007-02-21 01:04:24.000000000 -0800
|
||||
+++ file1+ 2007-02-21 01:07:44.000000000 -0800
|
||||
@@ -1 +1 @@
|
||||
-A
|
||||
+B
|
||||
EOF
|
||||
|
||||
sed -e 's|file1|sub/&|' gpatch.file >gpatch-sub.file &&
|
||||
sed -e '
|
||||
/^--- /s|file1|a/sub/&|
|
||||
/^+++ /s|file1|b/sub/&|
|
||||
' gpatch.file >gpatch-ab-sub.file &&
|
||||
|
||||
check_result () {
|
||||
if grep " " "$1"
|
||||
then
|
||||
echo "Eh?"
|
||||
false
|
||||
elif grep B "$1"
|
||||
then
|
||||
echo Happy
|
||||
else
|
||||
echo "Huh?"
|
||||
false
|
||||
fi
|
||||
}
|
||||
|
||||
test_expect_success 'apply --whitespace=strip' '
|
||||
|
||||
rm -f sub/file1 &&
|
||||
cp saved sub/file1 &&
|
||||
git update-index --refresh &&
|
||||
|
||||
git apply --whitespace=strip patch.file &&
|
||||
check_result sub/file1
|
||||
'
|
||||
|
||||
test_expect_success 'apply --whitespace=strip from config' '
|
||||
|
||||
rm -f sub/file1 &&
|
||||
cp saved sub/file1 &&
|
||||
git update-index --refresh &&
|
||||
|
||||
git config apply.whitespace strip &&
|
||||
git apply patch.file &&
|
||||
check_result sub/file1
|
||||
'
|
||||
|
||||
D=`pwd`
|
||||
|
||||
test_expect_success 'apply --whitespace=strip in subdir' '
|
||||
|
||||
cd "$D" &&
|
||||
git config --unset-all apply.whitespace
|
||||
rm -f sub/file1 &&
|
||||
cp saved sub/file1 &&
|
||||
git update-index --refresh &&
|
||||
|
||||
cd sub &&
|
||||
git apply --whitespace=strip ../patch.file &&
|
||||
check_result file1
|
||||
'
|
||||
|
||||
test_expect_success 'apply --whitespace=strip from config in subdir' '
|
||||
|
||||
cd "$D" &&
|
||||
git config apply.whitespace strip &&
|
||||
rm -f sub/file1 &&
|
||||
cp saved sub/file1 &&
|
||||
git update-index --refresh &&
|
||||
|
||||
cd sub &&
|
||||
git apply ../patch.file &&
|
||||
check_result file1
|
||||
'
|
||||
|
||||
test_expect_success 'same in subdir but with traditional patch input' '
|
||||
|
||||
cd "$D" &&
|
||||
git config apply.whitespace strip &&
|
||||
rm -f sub/file1 &&
|
||||
cp saved sub/file1 &&
|
||||
git update-index --refresh &&
|
||||
|
||||
cd sub &&
|
||||
git apply ../gpatch.file &&
|
||||
check_result file1
|
||||
'
|
||||
|
||||
test_expect_success 'same but with traditional patch input of depth 1' '
|
||||
|
||||
cd "$D" &&
|
||||
git config apply.whitespace strip &&
|
||||
rm -f sub/file1 &&
|
||||
cp saved sub/file1 &&
|
||||
git update-index --refresh &&
|
||||
|
||||
cd sub &&
|
||||
git apply ../gpatch-sub.file &&
|
||||
check_result file1
|
||||
'
|
||||
|
||||
test_expect_success 'same but with traditional patch input of depth 2' '
|
||||
|
||||
cd "$D" &&
|
||||
git config apply.whitespace strip &&
|
||||
rm -f sub/file1 &&
|
||||
cp saved sub/file1 &&
|
||||
git update-index --refresh &&
|
||||
|
||||
cd sub &&
|
||||
git apply ../gpatch-ab-sub.file &&
|
||||
check_result file1
|
||||
'
|
||||
|
||||
test_expect_success 'same but with traditional patch input of depth 1' '
|
||||
|
||||
cd "$D" &&
|
||||
git config apply.whitespace strip &&
|
||||
rm -f sub/file1 &&
|
||||
cp saved sub/file1 &&
|
||||
git update-index --refresh &&
|
||||
|
||||
git apply -p0 gpatch-sub.file &&
|
||||
check_result sub/file1
|
||||
'
|
||||
|
||||
test_expect_success 'same but with traditional patch input of depth 2' '
|
||||
|
||||
cd "$D" &&
|
||||
git config apply.whitespace strip &&
|
||||
rm -f sub/file1 &&
|
||||
cp saved sub/file1 &&
|
||||
git update-index --refresh &&
|
||||
|
||||
git apply gpatch-ab-sub.file &&
|
||||
check_result sub/file1
|
||||
'
|
||||
|
||||
test_done
|
Reference in New Issue
Block a user