5 kx # Copyright (C) 2009, 2011-2012 Free Software Foundation, Inc.
5 kx #
5 kx # Copying and distribution of this file, with or without modification,
5 kx # in any medium, are permitted without royalty provided the copyright
5 kx # notice and this notice are preserved.
5 kx
5 kx # LF vs. CRLF line endings
5 kx
5 kx . $srcdir/test-lib.sh
5 kx
5 kx require gnu_diff
5 kx require sed
5 kx use_local_patch
5 kx use_tmpdir
5 kx
5 kx lf2crlf() {
5 kx while read l; do echo -e "$l\r"; done
5 kx }
5 kx
5 kx echo 1 > a
5 kx echo 1b > b
5 kx
5 kx diff a b | lf2crlf > ab.diff
5 kx echo 1 > c
5 kx check 'patch c < ab.diff' <<EOF
5 kx (Stripping trailing CRs from patch; use --binary to disable.)
5 kx patching file c
5 kx EOF
5 kx
5 kx diff -c a b | lf2crlf > ab.diff
5 kx echo 1 > c
5 kx check 'patch c < ab.diff' <<EOF
5 kx (Stripping trailing CRs from patch; use --binary to disable.)
5 kx patching file c
5 kx EOF
5 kx
5 kx diff -u a b | lf2crlf > ab.diff
5 kx echo 1 > c
5 kx check 'patch c < ab.diff' <<EOF
5 kx (Stripping trailing CRs from patch; use --binary to disable.)
5 kx patching file c
5 kx EOF
5 kx
5 kx if ! have_ed ; then
5 kx echo "The ed utility is not available; skipping ed related tests"
5 kx else
5 kx diff -e a b > ab.ed | lf2crlf > ab.ed
5 kx echo 1 > c
5 kx ncheck 'patch -f c < ab.ed'
5 kx fi
5 kx
5 kx # ==============================================================
5 kx
5 kx echo 1 | lf2crlf > a
5 kx echo 1b | lf2crlf > b
5 kx
5 kx diff a b > ab.diff
5 kx cp a c
5 kx check 'patch c < ab.diff' <<EOF
5 kx patching file c
5 kx EOF
5 kx
5 kx check 'cat -ve c' <<EOF
5 kx 1b^M$
5 kx EOF
5 kx
5 kx # --------------------------------------------------------------
5 kx
5 kx diff -u a b > ab.diff
5 kx cp a c
5 kx check 'patch c < ab.diff' <<EOF
5 kx patching file c
5 kx EOF
5 kx
5 kx check 'cat -ve c' <<EOF
5 kx 1b^M$
5 kx EOF
5 kx
5 kx # --------------------------------------------------------------
5 kx
5 kx diff -c a b > ab.diff
5 kx cp a c
5 kx check 'patch c < ab.diff' <<EOF
5 kx patching file c
5 kx EOF
5 kx
5 kx check 'cat -ve c' <<EOF
5 kx 1b^M$
5 kx EOF
5 kx
5 kx # --------------------------------------------------------------
5 kx
5 kx if ! have_ed ; then
5 kx echo "The ed utility is not available; skipping ed related tests"
5 kx else
5 kx diff -e a b > ab.diff
5 kx cp a c
5 kx ncheck 'patch -f c < ab.diff'
5 kx fi
5 kx
5 kx check 'cat -ve c' <<EOF
5 kx 1b^M$
5 kx EOF
5 kx
5 kx # ==============================================================
5 kx
5 kx echo 1 > a
5 kx echo 1b > b
5 kx
5 kx diff a b | lf2crlf > ab.diff
5 kx cp a c
5 kx
5 kx check 'patch --binary c < ab.diff || echo status: $?' <<EOF
5 kx patching file c
5 kx Hunk #1 FAILED at 1 (different line endings).
5 kx 1 out of 1 hunk FAILED -- saving rejects to file c.rej
5 kx status: 1
5 kx EOF
5 kx
5 kx check 'patch c < ab.diff' <<EOF
5 kx (Stripping trailing CRs from patch; use --binary to disable.)
5 kx patching file c
5 kx EOF
5 kx
5 kx check 'cat -ve c' <<EOF
5 kx 1b$
5 kx EOF
5 kx
5 kx lf2crlf < a > c
5 kx check 'patch --binary c < ab.diff' <<EOF
5 kx patching file c
5 kx EOF
5 kx
5 kx check 'cat -ve c' <<EOF
5 kx 1b^M$
5 kx EOF
5 kx
5 kx # --------------------------------------------------------------
5 kx
5 kx diff -u a b | lf2crlf > ab.diff
5 kx cp a c
5 kx check 'patch c < ab.diff' <<EOF
5 kx (Stripping trailing CRs from patch; use --binary to disable.)
5 kx patching file c
5 kx EOF
5 kx
5 kx check 'cat -ve c' <<EOF
5 kx 1b$
5 kx EOF
5 kx
5 kx lf2crlf < a > c
5 kx check 'patch --binary c < ab.diff' <<EOF
5 kx patching file c
5 kx EOF
5 kx
5 kx check 'cat -ve c' <<EOF
5 kx 1b^M$
5 kx EOF
5 kx
5 kx # --------------------------------------------------------------
5 kx
5 kx diff -c a b | lf2crlf > ab.diff
5 kx cp a c
5 kx check 'patch c < ab.diff' <<EOF
5 kx (Stripping trailing CRs from patch; use --binary to disable.)
5 kx patching file c
5 kx EOF
5 kx
5 kx check 'cat -ve c' <<EOF
5 kx 1b$
5 kx EOF
5 kx
5 kx lf2crlf < a > c
5 kx check 'patch --binary c < ab.diff' <<EOF
5 kx patching file c
5 kx EOF
5 kx
5 kx check 'cat -ve c' <<EOF
5 kx 1b^M$
5 kx EOF
5 kx
5 kx # --------------------------------------------------------------
5 kx
5 kx # NOTE: ed does not fix up CRLF mangled input, so mangled ed-style
5 kx # patches will break. (We could fix up things in patch and pipe
5 kx # the result to ed, but this is not what we do so far.)
5 kx
5 kx # ==============================================================
5 kx
5 kx # Line endings of @@ lines are not used for guessing if a patch needs CR
5 kx # stripping: if the -p / --show-c-function option of GNU diff is used, these
5 kx # lines can have different line endings than the rest of the patch.
5 kx
5 kx echo 1 > a
5 kx echo 2 > b
5 kx diff -u a b | sed -e 's,@@$,@@ context\r,' > ab.diff
5 kx
5 kx echo 1 > c
5 kx check 'patch c < ab.diff' <<EOF
5 kx patching file c
5 kx EOF
5 kx
5 kx check 'cat -ve c' <<EOF
5 kx 2$
5 kx EOF