tests/test-resolve.t
author Bryan O'Sullivan <bryano@fb.com>
Tue, 18 Sep 2012 15:42:19 -0700
changeset 17616 9535a0dc41f2
parent 16913 f2719b387380
child 21263 f3e37409ecd3
permissions -rw-r--r--
store: implement fncache basic path encoding in C (This is not yet enabled; it will be turned on in a followup patch.) The path encoding performed by fncache is complex and (perhaps surprisingly) slow enough to negatively affect the overall performance of Mercurial. For a short path (< 120 bytes), the Python code can be reduced to a fairly tractable state machine that either determines that nothing needs to be done in a single pass, or performs the encoding in a second pass. For longer paths, we avoid the more complicated hashed encoding scheme for now, and fall back to Python. Raw performance: I measured in a repo containing 150,000 files in its tip manifest, with a median path name length of 57 bytes, and 95th percentile of 96 bytes. In this repo, the Python code takes 3.1 seconds to encode all path names, while the hybrid C-and-Python code (called from Python) takes 0.21 seconds, for a speedup of about 14. Across several other large repositories, I've measured the speedup from the C code at between 26x and 40x. For path names above 120 bytes where we must fall back to Python for hashed encoding, the speedup is about 1.7x. Thus absolute performance will depend strongly on the characteristics of a particular repository.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
12117
a40372c1c731 tests: unify test-resolve
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11451
diff changeset
     1
test that a commit clears the merge state.
7734
9f73bddb9d0b reset mergestate after commit
Martin Geisler <mg@daimi.au.dk>
parents:
diff changeset
     2
12117
a40372c1c731 tests: unify test-resolve
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11451
diff changeset
     3
  $ hg init repo
a40372c1c731 tests: unify test-resolve
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11451
diff changeset
     4
  $ cd repo
a40372c1c731 tests: unify test-resolve
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11451
diff changeset
     5
a40372c1c731 tests: unify test-resolve
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11451
diff changeset
     6
  $ echo foo > file
a40372c1c731 tests: unify test-resolve
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11451
diff changeset
     7
  $ hg commit -Am 'add file'
a40372c1c731 tests: unify test-resolve
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11451
diff changeset
     8
  adding file
7734
9f73bddb9d0b reset mergestate after commit
Martin Geisler <mg@daimi.au.dk>
parents:
diff changeset
     9
12117
a40372c1c731 tests: unify test-resolve
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11451
diff changeset
    10
  $ echo bar >> file
a40372c1c731 tests: unify test-resolve
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11451
diff changeset
    11
  $ hg commit -Am 'append bar'
a40372c1c731 tests: unify test-resolve
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11451
diff changeset
    12
a40372c1c731 tests: unify test-resolve
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11451
diff changeset
    13
a40372c1c731 tests: unify test-resolve
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11451
diff changeset
    14
create a second head
7734
9f73bddb9d0b reset mergestate after commit
Martin Geisler <mg@daimi.au.dk>
parents:
diff changeset
    15
12117
a40372c1c731 tests: unify test-resolve
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11451
diff changeset
    16
  $ hg up -C 0
a40372c1c731 tests: unify test-resolve
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11451
diff changeset
    17
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
a40372c1c731 tests: unify test-resolve
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11451
diff changeset
    18
  $ echo baz >> file
a40372c1c731 tests: unify test-resolve
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11451
diff changeset
    19
  $ hg commit -Am 'append baz'
a40372c1c731 tests: unify test-resolve
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11451
diff changeset
    20
  created new head
7734
9f73bddb9d0b reset mergestate after commit
Martin Geisler <mg@daimi.au.dk>
parents:
diff changeset
    21
12117
a40372c1c731 tests: unify test-resolve
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11451
diff changeset
    22
failing merge
7734
9f73bddb9d0b reset mergestate after commit
Martin Geisler <mg@daimi.au.dk>
parents:
diff changeset
    23
12788
de793925862e merge: implement --tool arguments using new ui.forcemerge configurable
Steve Borho <steve@borho.org>
parents: 12316
diff changeset
    24
  $ hg merge --tool=internal:fail
12117
a40372c1c731 tests: unify test-resolve
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11451
diff changeset
    25
  0 files updated, 0 files merged, 0 files removed, 1 files unresolved
12314
f2daa6ab514a merge: suggest 'hg up -C .' for discarding changes, not 'hg up -C'
Brodie Rao <brodie@bitheap.org>
parents: 12117
diff changeset
    26
  use 'hg resolve' to retry unresolved file merges or 'hg update -C .' to abandon
12316
4134686b83e1 tests: add exit codes to unified tests
Matt Mackall <mpm@selenic.com>
parents: 12314
diff changeset
    27
  [1]
12117
a40372c1c731 tests: unify test-resolve
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11451
diff changeset
    28
a40372c1c731 tests: unify test-resolve
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11451
diff changeset
    29
  $ echo resolved > file
a40372c1c731 tests: unify test-resolve
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11451
diff changeset
    30
  $ hg resolve -m file
a40372c1c731 tests: unify test-resolve
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11451
diff changeset
    31
  $ hg commit -m 'resolved'
7734
9f73bddb9d0b reset mergestate after commit
Martin Geisler <mg@daimi.au.dk>
parents:
diff changeset
    32
12117
a40372c1c731 tests: unify test-resolve
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11451
diff changeset
    33
resolve -l, should be empty
a40372c1c731 tests: unify test-resolve
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11451
diff changeset
    34
a40372c1c731 tests: unify test-resolve
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11451
diff changeset
    35
  $ hg resolve -l
a40372c1c731 tests: unify test-resolve
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11451
diff changeset
    36
a40372c1c731 tests: unify test-resolve
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11451
diff changeset
    37
test crashed merge with empty mergestate
7734
9f73bddb9d0b reset mergestate after commit
Martin Geisler <mg@daimi.au.dk>
parents:
diff changeset
    38
12117
a40372c1c731 tests: unify test-resolve
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11451
diff changeset
    39
  $ mkdir .hg/merge
a40372c1c731 tests: unify test-resolve
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11451
diff changeset
    40
  $ touch .hg/merge/state
11451
51021f4c80b5 resolve: do not crash on empty mergestate
Martin Geisler <mg@lazybytes.net>
parents: 8167
diff changeset
    41
12117
a40372c1c731 tests: unify test-resolve
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11451
diff changeset
    42
resolve -l, should be empty
a40372c1c731 tests: unify test-resolve
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11451
diff changeset
    43
a40372c1c731 tests: unify test-resolve
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 11451
diff changeset
    44
  $ hg resolve -l
16913
f2719b387380 tests: add missing trailing 'cd ..'
Mads Kiilerich <mads@kiilerich.com>
parents: 12788
diff changeset
    45
f2719b387380 tests: add missing trailing 'cd ..'
Mads Kiilerich <mads@kiilerich.com>
parents: 12788
diff changeset
    46
  $ cd ..