Mercurial > hg
view tests/test-rebase-abort.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 | b1dfca74e3d0 |
children | 42b620fc89e2 |
line wrap: on
line source
$ cat >> $HGRCPATH <<EOF > [extensions] > graphlog= > rebase= > > [phases] > publish=False > > [alias] > tglog = log -G --template "{rev}:{phase} '{desc}' {branches}\n" > EOF $ hg init a $ cd a $ echo c1 > common $ hg add common $ hg ci -m C1 $ echo c2 >> common $ hg ci -m C2 $ echo c3 >> common $ hg ci -m C3 $ hg up -q -C 1 $ echo l1 >> extra $ hg add extra $ hg ci -m L1 created new head $ sed -e 's/c2/l2/' common > common.new $ mv common.new common $ hg ci -m L2 $ hg phase --force --secret 2 $ hg tglog @ 4:draft 'L2' | o 3:draft 'L1' | | o 2:secret 'C3' |/ o 1:draft 'C2' | o 0:draft 'C1' Conflicting rebase: $ hg rebase -s 3 -d 2 merging common warning: conflicts during merge. merging common incomplete! (edit conflicts, then use 'hg resolve --mark') abort: unresolved conflicts (see hg resolve, then hg rebase --continue) [255] Abort: $ hg rebase --abort saved backup bundle to $TESTTMP/a/.hg/strip-backup/*-backup.hg (glob) rebase aborted $ hg tglog @ 4:draft 'L2' | o 3:draft 'L1' | | o 2:secret 'C3' |/ o 1:draft 'C2' | o 0:draft 'C1' $ cd .. Construct new repo: $ hg init b $ cd b $ echo a > a $ hg ci -Am A adding a $ echo b > b $ hg ci -Am B adding b $ echo c > c $ hg ci -Am C adding c $ hg up -q 0 $ echo b > b $ hg ci -Am 'B bis' adding b created new head $ echo c1 > c $ hg ci -Am C1 adding c $ hg phase --force --secret 1 $ hg phase --public 1 Rebase and abort without generating new changesets: $ hg tglog @ 4:draft 'C1' | o 3:draft 'B bis' | | o 2:secret 'C' | | | o 1:public 'B' |/ o 0:public 'A' $ hg rebase -b 4 -d 2 merging c warning: conflicts during merge. merging c incomplete! (edit conflicts, then use 'hg resolve --mark') abort: unresolved conflicts (see hg resolve, then hg rebase --continue) [255] $ hg tglog @ 4:draft 'C1' | o 3:draft 'B bis' | | @ 2:secret 'C' | | | o 1:public 'B' |/ o 0:public 'A' $ hg rebase -a rebase aborted $ hg tglog @ 4:draft 'C1' | o 3:draft 'B bis' | | o 2:secret 'C' | | | o 1:public 'B' |/ o 0:public 'A' $ cd ..