git/t/t4135/make-patches
Jonathan Nieder c51c0da222 tests: exercise "git apply" with weird filenames
Check that "git apply" can cope with strange filenames, particularly
filenames with spaces.

Not all platforms have a sane enough diff -u and expand to
reliably create the such patches and maybe future versions of GNU
diff will handle funny characters differently, so this uses
pre-generated patches.  The script used to generate them is in
t/t4135/make-patches.

Filenames with tabs are not usable on NTFS; use something like the
FUNNYNAMES prerequisite from v1.3.0-rc1~67 (2006-03-03) to skip the
relevant tests when appropriate.  The detection is not shared in
test-lib.sh to avoid wasting time while running other test scripts.

Backslash is the path separator on Windows, so do not used it in
file names there (v1.6.3-rc0~93^2~6, 2009-03-13).

Finally, filenames starting with a quotation mark do not behave well
in msys (see v1.7.0-rc0~94^2, t4030, t4031: work around bogus MSYS
bash path conversion, 2010-01-01), so skip those tests on Windows,
too.

Helped-by: Andreas Schwab <schwab@linux-m68k.org>
Helped-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2010-08-21 23:04:25 -07:00

46 lines
965 B
Bash
Executable file

#!/bin/sh
do_filename() {
desc=$1
postimage=$2
rm -fr file-creation &&
git init file-creation &&
(
cd file-creation &&
git commit --allow-empty -m init &&
echo postimage >"$postimage" &&
git add -N "$postimage" &&
git diff HEAD >"../git-$desc.diff"
) &&
rm -fr trad-modification &&
mkdir trad-modification &&
(
cd trad-modification &&
echo preimage >"$postimage.orig" &&
echo postimage >"$postimage" &&
! diff -u "$postimage.orig" "$postimage" >"../diff-$desc.diff"
) &&
rm -fr trad-creation &&
mkdir trad-creation &&
(
cd trad-creation &&
mkdir a b &&
echo postimage >"b/$postimage" &&
! diff -pruN a b >"../add-$desc.diff"
)
}
do_filename plain postimage.txt &&
do_filename 'with spaces' 'post image.txt' &&
do_filename 'with tab' 'post image.txt' &&
do_filename 'with backslash' 'post\image.txt' &&
do_filename 'with quote' '"postimage".txt' &&
expand add-plain.diff >damaged.diff ||
{
echo >&2 Failed. &&
exit 1
}