Patchwork D2578: xdiff: enable indent heuristic unconditionally

login
register
mail settings
Submitter phabricator
Date March 3, 2018, 12:25 a.m.
Message ID <differential-rev-PHID-DREV-e6pw2p77rikbq44qvrp3-req@phab.mercurial-scm.org>
Download mbox | patch
Permalink /patch/28759/
State Superseded
Headers show

Comments

phabricator - March 3, 2018, 12:25 a.m.
ryanmce created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  Enable the indent heuristic feature unconditionally, since it provides nice
  visual improvements. See the added test, and [1].
  
  [1]: https://github.com/git/git/commit/433860f3d0beb0c6f205290bd16cda413148f098

TEST PLAN
  Added a test case.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D2578

AFFECTED FILES
  mercurial/thirdparty/xdiff.c
  tests/test-diff-indent-heuristic.t

CHANGE DETAILS




To: ryanmce, #hg-reviewers
Cc: mercurial-devel
phabricator - March 3, 2018, 8:11 p.m.
quark abandoned this revision.
quark added a comment.


  Folded into https://phab.mercurial-scm.org/D2602.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D2578

To: quark, #hg-reviewers, ryanmce
Cc: mercurial-devel

Patch

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
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 */