*** For illustrative purposes only and not meant for upstream *** - Adds a stand-alone test that loops through A-side B-side with and without new-lines from 0 to 3 spaces per side. This is a draft test meant to expose the issue with xutils.c handling of incomplete lines and trailing-spaces. Signed-off-by: Thell Fowler <git@xxxxxxxxxxxxx> --- t/t4015-diff-trailing-whitespace.sh | 95 +++++++++++++++++++++++++++++++++++ 1 files changed, 95 insertions(+), 0 deletions(-) create mode 100755 t/t4015-diff-trailing-whitespace.sh diff --git a/t/t4015-diff-trailing-whitespace.sh b/t/t4015-diff-trailing-whitespace.sh new file mode 100755 index 0000000000000000000000000000000000000000..c4937c1b457c24b35565b09e7b262443a05f9795 --- /dev/null +++ b/t/t4015-diff-trailing-whitespace.sh @@ -0,0 +1,95 @@ +#!/bin/sh + +test_description='Test trailing whitespace in diff engine. + +' +. ./test-lib.sh +. "$TEST_DIRECTORY"/diff-lib.sh + +# Trailing-space testing with and without newlines. +prepare_diff_file () { + printf "%s%$2s" foo "" >"$1" + if [ $3 = "+nl" ] + then + printf "\n" >>"$1" + fi +} + +diff_trailing () { + foo="foo___" + prepare_diff_file "left" "$2" "$3" + lfoo=$( expr substr $foo 1 $((3+$2)) ) + lfoo=${lfoo}"$3" + + prepare_diff_file "right" "$4" "$5" + rfoo=$( expr substr $foo 1 $((3+$4)) ) + rfoo=${rfoo}"$5" + + label="-$1 $lfoo $rfoo ($6)" + + if [ "$6" != "should_diff" ] + then + negate='!' + else + negate='' + fi + + if [ -z "$7" ] + then + test_expect_success "$label" \ + "$negate git diff --no-index -$1 -- left right | grep -q foo" + else + test_expect_failure "$label" \ + "$negate git diff --no-index -$1 -- left right | grep -q foo" + fi + + test_debug "git diff --no-index -$1 -- left right | grep foo" +} + +touch diffout +for arg in -ignore-all-space -ignore-space-at-eol -ignore-space-change +do + for i1 in 0 1 2 3 + do + for i2 in 0 1 2 3 + do + diff_trailing $arg $i1 +nl $i2 -nl should_not_diff >> diffout + diff_trailing $arg $i1 -nl $i2 +nl should_not_diff >> diffout + + if [ $i1 -ne $i2 ] + then + diff_trailing $arg $i1 +nl $i2 +nl should_not_diff >> diffout + diff_trailing $arg $i1 -nl $i2 -nl should_not_diff >> diffout + fi + done + done +done + +test_debug 'grep "FAIL" diffout' + +for arg in all eol change +do + grep "FAIL" diffout | \ + grep "$arg" | \ + cut -d " " -f 4- | \ + + ## Playing with filtering to isolate core issue. + #sort -k 2,2 -k 3,3 | \ + #awk '{ forward = $2 " " $3; reverse = $3 " " $2} + # !seen[forward]++ && !seen[reverse]++' | \ + #sort -k 2,2 | \ + + ## Playing with filtering to isolate core issue. + ## This seems like the most illustrative output... + awk '{ key=$3 ; gsub(/-/, "+", key) ; key=$2 ":" key ; if ( hash[key]++ == 0 ) print ; }' + + ## Playing with filtering to isolate core issue. + #awk '{ if ( $3 ~ /.*\-/ ) + # print $0 + # else + # print $1 " " $3 " " $2 " " $4 + # ; }' | \ + #sort -k 2,2 -k 3,3 +done + +test_done -- 1.6.4.172.g5c0d0.dirty -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html