mdiff: fix diff -b/B/w on mixed whitespace hunks (issue127)
Previous code was computing hunks then checking if these hunks could be ignored
when taking whitespace/blank-lines options in accounts. This approach is simple
but fails with hunks containing both whitespace and non-whitespace changes, the
whole hunk is emitted while it can be mostly made of whitespace. The new
version normalize the whitespaces before hunk generation, and test for
blank-lines afterwards.
#!/bin/sh
hg init repo
cd repo
cat > a <<EOF
c
c
a
a
b
a
a
c
c
EOF
hg ci -Am adda
cat > a <<EOF
c
c
a
a
dd
a
a
c
c
EOF
echo '% default context'
hg diff --nodates
echo '% invalid --unified'
hg diff --nodates -U foo
echo '% --unified=2'
hg diff --nodates -U 2
echo '% diff.unified=2'
hg --config diff.unified=2 diff --nodates
echo '% diff.unified=2 --unified=1'
hg diff --nodates -U 1
echo '% invalid diff.unified'
hg --config diff.unified=foo diff --nodates
echo % test off-by-one error with diff -p
hg init diffp
cd diffp
echo a > a
hg ci -Ama
rm a
echo b > a
echo a >> a
echo c >> a
hg diff -U0 -p --nodates
exit 0