tests/test-diff-antipatience.t
author Valentin Gatien-Baron <vgatien-baron@janestreet.com>
Thu, 03 Jan 2019 19:02:46 -0500
changeset 41282 4fab8a7d2d72
parent 38469 9ef9884e5d50
permissions -rw-r--r--
match: support rooted globs in hgignore In a .hgignore, "glob:foo" always means "**/foo". This cannot be avoided because there is no syntax like "^" in regexes to say you don't want the implied "**/" (of course one can use regexes, but glob syntax is nice). When you have a long list of fairly specific globs like path/to/some/thing, this has two consequences: 1. unintended files may be ignored (not too common though) 2. matching performance can suffer significantly Here is vanilla hg status timing on a private repository: Using syntax:glob everywhere real 0m2.199s user 0m1.545s sys 0m0.619s When rooting the appropriate globs real 0m1.434s user 0m0.847s sys 0m0.565s (tangentially, none of this shows up in --profile's output. It seems that C code doesn't play well with profiling) The code already supports this but there is no syntax to make use of it, so it seems reasonable to create such syntax. I create a new hgignore syntax "rootglob". Differential Revision: https://phab.mercurial-scm.org/D5493

#testcases bdiff xdiff

#if xdiff
#require xdiff
  $ cat >> $HGRCPATH <<EOF
  > [experimental]
  > xdiff = true
  > EOF
#endif

Test case that makes use of the weakness of patience diff algorithm

  $ hg init
  >>> open('a', 'wb').write(('\n'.join(list('a' + 'x' * 10 + 'u' + 'x' * 30 + 'a\n'))).encode('ascii')) and None
  $ hg commit -m 1 -A a
  >>> open('a', 'wb').write(('\n'.join(list('b' + 'x' * 30 + 'u' + 'x' * 10 + 'b\n'))).encode('ascii')) and None
#if xdiff
  $ hg diff
  diff -r f0aeecb49805 a
  --- a/a	Thu Jan 01 00:00:00 1970 +0000
  +++ b/a	Thu Jan 01 00:00:00 1970 +0000
  @@ -1,4 +1,4 @@
  -a
  +b
   x
   x
   x
  @@ -9,7 +9,6 @@
   x
   x
   x
  -u
   x
   x
   x
  @@ -30,6 +29,7 @@
   x
   x
   x
  +u
   x
   x
   x
  @@ -40,5 +40,5 @@
   x
   x
   x
  -a
  +b
   
#else
  $ hg diff
  diff -r f0aeecb49805 a
  --- a/a	Thu Jan 01 00:00:00 1970 +0000
  +++ b/a	Thu Jan 01 00:00:00 1970 +0000
  @@ -1,15 +1,4 @@
  -a
  -x
  -x
  -x
  -x
  -x
  -x
  -x
  -x
  -x
  -x
  -u
  +b
   x
   x
   x
  @@ -40,5 +29,16 @@
   x
   x
   x
  -a
  +u
  +x
  +x
  +x
  +x
  +x
  +x
  +x
  +x
  +x
  +x
  +b
   
#endif