tests/test-merge10.t
author Siddharth Agarwal <sid0@fb.com>
Mon, 25 Mar 2013 17:41:06 -0700
changeset 18822 381c0ef72a56
parent 16913 f2719b387380
child 34661 eb586ed5d8ce
permissions -rw-r--r--
manifestmerge: use dicthelpers.diff and join This patch improves manifestmerge performance significantly. In a repository with 170,000 files, the following results were observed on a clean working directory. Revision '.' adds one file. hg perfmergecalculate -r . - before: 0.41 seconds - after: 0.13 seconds hg perfmergecalculate -r .^ - before: 0.53 seconds - after: 0.24 seconds Comparing against '.' is much faster than comparing against '.^' because with '.', the wctx and p2 manifest strings have the same identity, so comparisons are simply pointer equality. With '.^', the strings have different identities so we need to perform memcmps. Any operation that uses manifestmerge benefits. - hg update . goes from 2.04 seconds to 1.75 - hg update .^ goes from 2.52 seconds to 2.25 - hg rebase -r . -d .~6 (involves 4 merges) goes from 11.8 seconds to 10.8

Test for changeset 9fe267f77f56ff127cf7e65dc15dd9de71ce8ceb
(merge correctly when all the files in a directory are moved
but then local changes are added in the same directory)

  $ hg init a
  $ cd a
  $ mkdir -p testdir
  $ echo a > testdir/a
  $ hg add testdir/a
  $ hg commit -m a
  $ cd ..

  $ hg clone a b
  updating to branch default
  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ cd a
  $ echo alpha > testdir/a
  $ hg commit -m remote-change
  $ cd ..

  $ cd b
  $ mkdir testdir/subdir
  $ hg mv testdir/a testdir/subdir/a
  $ hg commit -m move
  $ mkdir newdir
  $ echo beta > newdir/beta
  $ hg add newdir/beta
  $ hg commit -m local-addition
  $ hg pull ../a
  pulling from ../a
  searching for changes
  adding changesets
  adding manifests
  adding file changes
  added 1 changesets with 1 changes to 1 files (+1 heads)
  (run 'hg heads' to see heads, 'hg merge' to merge)
  $ hg up -C 2
  0 files updated, 0 files merged, 0 files removed, 0 files unresolved
  $ hg merge
  merging testdir/subdir/a and testdir/a to testdir/subdir/a
  0 files updated, 1 files merged, 0 files removed, 0 files unresolved
  (branch merge, don't forget to commit)
  $ hg stat
  M testdir/subdir/a
  $ hg diff --nodates
  diff -r bc21c9773bfa testdir/subdir/a
  --- a/testdir/subdir/a
  +++ b/testdir/subdir/a
  @@ -1,1 +1,1 @@
  -a
  +alpha

  $ cd ..