Mercurial > hg
view tests/test-issue672.t @ 18063:34a1a639d835
revset.children: ignore rev numbers that are too low
This replaces unnecessary parentrevs() calls with calculating min(parentset).
Even though the min operation is O(size of parentset), since parentrevs is
relatively expensive, this tradeoff almost always works in our favour. In a
repository with over 400,000 changesets, hg perfrevset "children(X)" takes:
Set X Before After
-1 0.51s 0.06s
-1000: 0.55s 0.08s
-10000: 0.56s 0.10s
-100000: 0.60s 0.25s
-100000:-99000 0.55s 0.19s
0:100000 0.60s 0.61s
all() 0.72s 0.74s
The relative performance is similar for Mercurial's own repository -- several
times faster in most cases, slightly slower for revisions close to 0 and
all().
author | Siddharth Agarwal <sid0@fb.com> |
---|---|
date | Fri, 07 Dec 2012 10:37:43 -0800 |
parents | e9ae770eff1c |
children | a6fe1b9cc68f |
line wrap: on
line source
http://mercurial.selenic.com/bts/issue672 # 0-2-4 # \ \ \ # 1-3-5 # # rename in #1, content change in #4. $ hg init $ touch 1 $ touch 2 $ hg commit -Am init # 0 adding 1 adding 2 $ hg rename 1 1a $ hg commit -m rename # 1 $ hg co -C 0 1 files updated, 0 files merged, 1 files removed, 0 files unresolved $ echo unrelated >> 2 $ hg ci -m unrelated1 # 2 created new head $ hg merge --debug 1 searching for copies back to rev 1 unmatched files in other: 1a all copies found (* = to merge, ! = divergent, % = renamed and deleted): 1a -> 1 checking for directory renames resolving manifests overwrite: False, partial: False ancestor: 81f4b099af3d, local: c64f439569a9+, remote: c12dcd37c90a 1: other deleted -> r 1a: remote created -> g updating: 1 1/2 files (50.00%) removing 1 updating: 1a 2/2 files (100.00%) getting 1a 1 files updated, 0 files merged, 1 files removed, 0 files unresolved (branch merge, don't forget to commit) $ hg ci -m merge1 # 3 $ hg co -C 2 1 files updated, 0 files merged, 1 files removed, 0 files unresolved $ echo hello >> 1 $ hg ci -m unrelated2 # 4 created new head $ hg co -C 3 1 files updated, 0 files merged, 1 files removed, 0 files unresolved $ hg merge -y --debug 4 searching for copies back to rev 1 unmatched files in local: 1a all copies found (* = to merge, ! = divergent, % = renamed and deleted): 1a -> 1 * checking for directory renames resolving manifests overwrite: False, partial: False ancestor: c64f439569a9, local: e327dca35ac8+, remote: 746e9549ea96 1a: local copied/moved to 1 -> m preserving 1a for resolve of 1a updating: 1a 1/1 files (100.00%) picked tool 'internal:merge' for 1a (binary False symlink False) merging 1a and 1 to 1a my 1a@e327dca35ac8+ other 1@746e9549ea96 ancestor 1@81f4b099af3d premerge successful 0 files updated, 1 files merged, 0 files removed, 0 files unresolved (branch merge, don't forget to commit) $ hg co -C 4 1 files updated, 0 files merged, 1 files removed, 0 files unresolved $ hg merge -y --debug 3 searching for copies back to rev 1 unmatched files in other: 1a all copies found (* = to merge, ! = divergent, % = renamed and deleted): 1a -> 1 * checking for directory renames resolving manifests overwrite: False, partial: False ancestor: c64f439569a9, local: 746e9549ea96+, remote: e327dca35ac8 1: remote moved to 1a -> m preserving 1 for resolve of 1a removing 1 updating: 1 1/1 files (100.00%) picked tool 'internal:merge' for 1a (binary False symlink False) merging 1 and 1a to 1a my 1a@746e9549ea96+ other 1a@e327dca35ac8 ancestor 1@81f4b099af3d premerge successful 0 files updated, 1 files merged, 0 files removed, 0 files unresolved (branch merge, don't forget to commit)