tests/test-issue672.t
author Brodie Rao <brodie@bitheap.org>
Mon, 19 Sep 2011 15:58:03 -0700
changeset 15141 16dc9a32ca04
parent 12328 b63f6422d2a7
child 15625 efdcce3fd2d5
permissions -rw-r--r--
mdiff: speed up showfunc for large diffs This addresses the following issues with showfunc: - Silly usage of regular expressions. - Doing str.rstrip() needlessly in an inner loop. - Doing catastrophic backtracking when trying to find a function line. Finding function text is now at worst O(n lines in the old file), and at best close to O(n hunks). Given a diff like this[1]: src/main/antlr3/uk/ac/cam/ch/wwmm/pregenerated/ChemicalChunker.g | 4 +- src/main/java/uk/ac/cam/ch/wwmm/pregenerated/ChemicalChunkerLexer.java | 2 +- src/main/java/uk/ac/cam/ch/wwmm/pregenerated/ChemicalChunkerParser.java | 29189 +++++---- 3 files changed, 14741 insertions(+), 14454 deletions(-) [1]: https://bitbucket.org/wwmm/chemicaltagger/changeset/d2bfbaecd4fc/raw Without this change, hg log --stat --config diff.showfunc=1 takes an absurdly long time to complete: CallCount Recursive Total(ms) Inline(ms) module:lineno(function) 32813 0 80.3546 40.6086 mercurial.mdiff:160(yieldhunk) +65062746 0 25.7227 25.7227 +<method 'match' of '_sre.SRE_Pattern' objects> +65062746 0 14.0221 14.0221 +<method 'rstrip' of 'str' objects> +1809 0 0.0009 0.0009 +mercurial.mdiff:148(contextend) +1809 0 0.0003 0.0003 +<len> 65062746 0 25.7227 25.7227 <method 'match' of '_sre.SRE_Pattern' objects> 65062763 0 14.0221 14.0221 <method 'rstrip' of 'str' objects> 543 0 0.1631 0.1631 <zlib.decompress> 3 0 0.0505 0.0505 <mercurial.bdiff.blocks> 31007 0 80.4564 0.0477 mercurial.mdiff:147(_unidiff) +32813 0 80.3546 40.6086 +mercurial.mdiff:160(yieldhunk) +3 0 0.0505 0.0505 +<mercurial.bdiff.blocks> +3618 0 0.0022 0.0022 +mercurial.mdiff:154(contextstart) +5427 0 0.0013 0.0013 +<len> +3 0 0.0001 0.0000 +re:188(compile) 1 0 80.8381 0.0322 mercurial.patch:1777(diffstatdata) +107499 0 0.0235 0.0235 +<method 'startswith' of 'str' objects> +31014 0 80.7820 0.0071 +mercurial.util:1284(iterlines) +3 0 0.0000 0.0000 +<method 'search' of '_sre.SRE_Pattern' objects> +4 0 0.0000 0.0000 +mercurial.patch:1783(addresult) +3 0 0.0000 0.0000 +<method 'group' of '_sre.SRE_Match' objects> 6 0 0.0444 0.0283 mercurial.mdiff:12(splitnewlines) +6 0 0.0160 0.0160 +<method 'split' of 'str' objects> 32 0 0.0246 0.0246 <method 'update' of '_hashlib.HASH' objects> 11 0 0.0236 0.0236 <method 'read' of 'file' objects> Time: real 80.880 secs (user 80.200+0.000 sys 0.380+0.000) With this change, it's almost as fast as not using showfunc at all: CallCount Recursive Total(ms) Inline(ms) module:lineno(function) 543 0 0.1699 0.1699 <zlib.decompress> 3 0 0.0501 0.0501 <mercurial.bdiff.blocks> 32813 0 0.0415 0.0348 mercurial.mdiff:161(yieldhunk) +70837 0 0.0058 0.0058 +<method 'isalnum' of 'str' objects> +1809 0 0.0006 0.0006 +mercurial.mdiff:148(contextend) +1809 0 0.0002 0.0002 +<len> 1 0 0.4879 0.0310 mercurial.patch:1777(diffstatdata) +107499 0 0.0230 0.0230 +<method 'startswith' of 'str' objects> +31014 0 0.4335 0.0065 +mercurial.util:1284(iterlines) +3 0 0.0000 0.0000 +<method 'search' of '_sre.SRE_Pattern' objects> +4 0 0.0000 0.0000 +mercurial.patch:1783(addresult) +1 0 0.0004 0.0000 +re:188(compile) 32 0 0.0293 0.0293 <method 'update' of '_hashlib.HASH' objects> 6 0 0.0427 0.0279 mercurial.mdiff:12(splitnewlines) +6 0 0.0147 0.0147 +<method 'split' of 'str' objects> 31007 0 0.1169 0.0235 mercurial.mdiff:147(_unidiff) +3 0 0.0501 0.0501 +<mercurial.bdiff.blocks> +32813 0 0.0415 0.0348 +mercurial.mdiff:161(yieldhunk) +3618 0 0.0012 0.0012 +mercurial.mdiff:154(contextstart) +5427 0 0.0006 0.0006 +<len> 107597 0 0.0230 0.0230 <method 'startswith' of 'str' objects> 16 0 0.0213 0.0213 <mercurial.mpatch.patches> 194 0 0.0149 0.0149 <method 'split' of 'str' objects> Time: real 0.530 secs (user 0.450+0.000 sys 0.070+0.000)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12328
b63f6422d2a7 tests: fix a bunch of pointless #s in unified tests
Matt Mackall <mpm@selenic.com>
parents: 12195
diff changeset
     1
http://mercurial.selenic.com/bts/issue672
5096
ad6b97132b81 merge: fix a copy detection bug (issue672)
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
     2
ad6b97132b81 merge: fix a copy detection bug (issue672)
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
     3
# 0-2-4
ad6b97132b81 merge: fix a copy detection bug (issue672)
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
     4
#  \ \ \
ad6b97132b81 merge: fix a copy detection bug (issue672)
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
     5
#   1-3-5
ad6b97132b81 merge: fix a copy detection bug (issue672)
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
     6
#
ad6b97132b81 merge: fix a copy detection bug (issue672)
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
     7
# rename in #1, content change in #4.
ad6b97132b81 merge: fix a copy detection bug (issue672)
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
     8
12195
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
     9
  $ hg init
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    10
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    11
  $ touch 1
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    12
  $ touch 2
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    13
  $ hg commit -Am init  # 0
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    14
  adding 1
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    15
  adding 2
5096
ad6b97132b81 merge: fix a copy detection bug (issue672)
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    16
12195
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    17
  $ hg rename 1 1a
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    18
  $ hg commit -m rename # 1
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    19
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    20
  $ hg co -C 0
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    21
  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    22
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    23
  $ echo unrelated >> 2
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    24
  $ hg ci -m unrelated1 # 2
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    25
  created new head
5096
ad6b97132b81 merge: fix a copy detection bug (issue672)
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    26
12195
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    27
  $ hg merge --debug 1
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    28
    searching for copies back to rev 1
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    29
    unmatched files in other:
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    30
     1a
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    31
    all copies found (* = to merge, ! = divergent):
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    32
     1a -> 1 
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    33
    checking for directory renames
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    34
  resolving manifests
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    35
   overwrite None partial False
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    36
   ancestor 81f4b099af3d local c64f439569a9+ remote c12dcd37c90a
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    37
   1: other deleted -> r
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    38
   1a: remote created -> g
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    39
  updating: 1 1/2 files (50.00%)
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    40
  removing 1
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    41
  updating: 1a 2/2 files (100.00%)
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    42
  getting 1a
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    43
  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    44
  (branch merge, don't forget to commit)
5096
ad6b97132b81 merge: fix a copy detection bug (issue672)
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    45
12195
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    46
  $ hg ci -m merge1 # 3
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    47
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    48
  $ hg co -C 2
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    49
  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    50
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    51
  $ echo hello >> 1
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    52
  $ hg ci -m unrelated2 # 4
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    53
  created new head
5096
ad6b97132b81 merge: fix a copy detection bug (issue672)
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    54
12195
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    55
  $ hg co -C 3
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    56
  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
5096
ad6b97132b81 merge: fix a copy detection bug (issue672)
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    57
12195
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    58
  $ hg merge -y --debug 4
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    59
    searching for copies back to rev 1
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    60
    unmatched files in local:
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    61
     1a
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    62
    all copies found (* = to merge, ! = divergent):
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    63
     1a -> 1 *
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    64
    checking for directory renames
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    65
  resolving manifests
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    66
   overwrite None partial False
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    67
   ancestor c64f439569a9 local e327dca35ac8+ remote 746e9549ea96
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    68
   1a: local copied/moved to 1 -> m
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    69
  preserving 1a for resolve of 1a
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    70
  updating: 1a 1/1 files (100.00%)
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    71
  picked tool 'internal:merge' for 1a (binary False symlink False)
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    72
  merging 1a and 1 to 1a
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    73
  my 1a@e327dca35ac8+ other 1@746e9549ea96 ancestor 1@81f4b099af3d
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    74
   premerge successful
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    75
  0 files updated, 1 files merged, 0 files removed, 0 files unresolved
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    76
  (branch merge, don't forget to commit)
5096
ad6b97132b81 merge: fix a copy detection bug (issue672)
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    77
12195
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    78
  $ hg co -C 4
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    79
  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
5096
ad6b97132b81 merge: fix a copy detection bug (issue672)
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
    80
12195
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    81
  $ hg merge -y --debug 3
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    82
    searching for copies back to rev 1
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    83
    unmatched files in other:
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    84
     1a
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    85
    all copies found (* = to merge, ! = divergent):
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    86
     1a -> 1 *
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    87
    checking for directory renames
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    88
  resolving manifests
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    89
   overwrite None partial False
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    90
   ancestor c64f439569a9 local 746e9549ea96+ remote e327dca35ac8
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    91
   1: remote moved to 1a -> m
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    92
  preserving 1 for resolve of 1a
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    93
  removing 1
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    94
  updating: 1 1/1 files (100.00%)
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    95
  picked tool 'internal:merge' for 1a (binary False symlink False)
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    96
  merging 1 and 1a to 1a
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    97
  my 1a@746e9549ea96+ other 1a@e327dca35ac8 ancestor 1@81f4b099af3d
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    98
   premerge successful
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
    99
  0 files updated, 1 files merged, 0 files removed, 0 files unresolved
ee41be2bbf5a tests: unify test-issue*
Adrian Buehlmann <adrian@cadifra.com>
parents: 8167
diff changeset
   100
  (branch merge, don't forget to commit)
5096
ad6b97132b81 merge: fix a copy detection bug (issue672)
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
diff changeset
   101