diff --git a/mercurial/thirdparty/xdiff.c b/mercurial/thirdparty/xdiff.c --- a/mercurial/thirdparty/xdiff.c +++ b/mercurial/thirdparty/xdiff.c @@ -38,9 +38,9 @@ return PyErr_NoMemory(); xpparam_t xpp = { - 0, /* flags */ - NULL, /* anchors */ - 0, /* anchors_nr */ + XDF_INDENT_HEURISTIC, /* flags */ + NULL, /* anchors */ + 0, /* anchors_nr */ }; xdemitconf_t xecfg = { 0, /* ctxlen */ diff --git a/tests/test-diff-indent-heuristic.t b/tests/test-diff-indent-heuristic.t new file mode 100644 --- /dev/null +++ b/tests/test-diff-indent-heuristic.t @@ -0,0 +1,227 @@ +#require xdiff + +Test cases are most from git t/t4061-diff-indent.sh, and commit messages. + + $ hg init + + $ cat > a.c <<'EOF' + > int a() + > { + > return 1; + > } + > + > int c() + > { + > return 3; + > } + > EOF + + $ cat > partial.pl <<'EOF' + > } + > + > if (!$smtp_server) { + > foreach (qw( /usr/sbin/sendmail /usr/lib/sendmail )) { + > if (-x $_) { + > $smtp_server = $_; + > EOF + + $ cat > c.rb <<'EOF' + > ["foo", "bar", "baz"].map do |i| + > i.upcase + > end + > EOF + + $ cat > d.rb <<'EOF' + > def foo + > do_foo_stuff() + > + > common_ending() + > end + > EOF + + $ cat > spaces.txt <<'EOF' + > 1 + > 2 + > a + > + > b + > 3 + > 4 + > EOF + + $ cat > functions.c <<'EOF' + > 1 + > 2 + > /* function */ + > foo() { + > foo + > } + > + > 3 + > 4 + > EOF + + $ hg commit -m 1 -A . -q + + $ cat > a.c <<'EOF' + > int a() + > { + > return 1; + > } + > + > int b() + > { + > return 2; + > } + > + > int c() + > { + > return 3; + > } + > EOF + + $ cat > partial.pl <<'EOF' + > } + > + > if (!$smtp_server) { + > $smtp_server = $repo->config('sendemail.smtpserver'); + > } + > if (!$smtp_server) { + > foreach (qw( /usr/sbin/sendmail /usr/lib/sendmail )) { + > if (-x $_) { + > $smtp_server = $_; + > EOF + + $ cat > c.rb <<'EOF' + > ["foo", "bar", "baz"].map do |i| + > i + > end + > + > ["foo", "bar", "baz"].map do |i| + > i.upcase + > end + > EOF + + $ cat > d.rb <<'EOF' + > def foo + > do_foo_stuff() + > + > common_ending() + > end + > + > def bar + > do_bar_stuff() + > + > common_ending() + > end + > EOF + + $ cat > spaces.txt <<'EOF' + > 1 + > 2 + > a + > + > b + > a + > + > b + > 3 + > 4 + > EOF + + $ cat > functions.c <<'EOF' + > 1 + > 2 + > /* function */ + > bar() { + > foo + > } + > + > /* function */ + > foo() { + > foo + > } + > + > 3 + > 4 + > EOF + + $ hg diff --git + diff --git a/a.c b/a.c + --- a/a.c + +++ b/a.c + @@ -3,6 +3,11 @@ + return 1; + } + + +int b() + +{ + + return 2; + +} + + + int c() + { + return 3; + diff --git a/c.rb b/c.rb + --- a/c.rb + +++ b/c.rb + @@ -1,3 +1,7 @@ + +["foo", "bar", "baz"].map do |i| + + i + +end + + + ["foo", "bar", "baz"].map do |i| + i.upcase + end + diff --git a/d.rb b/d.rb + --- a/d.rb + +++ b/d.rb + @@ -3,3 +3,9 @@ + + common_ending() + end + + + +def bar + + do_bar_stuff() + + + + common_ending() + +end + diff --git a/functions.c b/functions.c + --- a/functions.c + +++ b/functions.c + @@ -1,5 +1,10 @@ + 1 + 2 + +/* function */ + +bar() { + + foo + +} + + + /* function */ + foo() { + foo + diff --git a/partial.pl b/partial.pl + --- a/partial.pl + +++ b/partial.pl + @@ -1,5 +1,8 @@ + } + + +if (!$smtp_server) { + + $smtp_server = $repo->config('sendemail.smtpserver'); + +} + if (!$smtp_server) { + foreach (qw( /usr/sbin/sendmail /usr/lib/sendmail )) { + if (-x $_) { + diff --git a/spaces.txt b/spaces.txt + --- a/spaces.txt + +++ b/spaces.txt + @@ -2,6 +2,9 @@ + 2 + a + + +b + +a + + + b + 3 + 4