Mercurial > hg
view tests/test-rebase-interruptions.t @ 29494:3b5389ef5cfe
perf: define util.safehasattr forcibly for Mercurial earlier than 1.9.3
Before this patch, using util.safehasattr() prevents perf.py from
being loaded by Mercurial earlier than 1.9.3 (or 94b200a11cf7),
because util.safehasattr() isn't available in such Mercurial, even
though there are some code paths for Mercurial earlier than 1.9.3.
For example, setting "_prereadsize" attribute in perfindex() and
perfnodelookup() is effective only with Mercurial earlier than 1.8 (or
61c9bc3da402).
This patch is a preparation for using util.safehasattr() safely in
subsequent patches.
This patch defines util.safehasattr() forcibly without examining
whether it is available or not, because:
- examining existence of "safehasattr" safely itself needs similar logic
- safehasattr() is small enough to define locally
author | FUJIWARA Katsunori <foozy@lares.dti.ne.jp> |
---|---|
date | Tue, 05 Jul 2016 07:25:51 +0900 |
parents | 157675d0f600 |
children | 27e67cfea27f 918e7dcf8820 |
line wrap: on
line source
$ cat >> $HGRCPATH <<EOF > [extensions] > rebase= > > [phases] > publish=False > > [alias] > tglog = log -G --template "{rev}: '{desc}' {branches}\n" > tglogp = log -G --template "{rev}:{phase} '{desc}' {branches}\n" > EOF $ hg init a $ cd a $ echo A > A $ hg ci -Am A adding A $ echo B > B $ hg ci -Am B adding B $ echo C >> A $ hg ci -m C $ hg up -q -C 0 $ echo D >> A $ hg ci -m D created new head $ echo E > E $ hg ci -Am E adding E $ cd .. Changes during an interruption - continue: $ hg clone -q -u . a a1 $ cd a1 $ hg tglog @ 4: 'E' | o 3: 'D' | | o 2: 'C' | | | o 1: 'B' |/ o 0: 'A' Rebasing B onto E: $ hg rebase -s 1 -d 4 rebasing 1:27547f69f254 "B" rebasing 2:965c486023db "C" merging A warning: conflicts while merging A! (edit, then use 'hg resolve --mark') unresolved conflicts (see hg resolve, then hg rebase --continue) [1] Force a commit on C during the interruption: $ hg up -q -C 2 --config 'extensions.rebase=!' $ echo 'Extra' > Extra $ hg add Extra $ hg ci -m 'Extra' --config 'extensions.rebase=!' Force this commit onto secret phase $ hg phase --force --secret 6 $ hg tglogp @ 6:secret 'Extra' | | o 5:draft 'B' | | | o 4:draft 'E' | | | o 3:draft 'D' | | o | 2:draft 'C' | | o | 1:draft 'B' |/ o 0:draft 'A' Resume the rebasing: $ hg rebase --continue already rebased 1:27547f69f254 "B" as 45396c49d53b rebasing 2:965c486023db "C" merging A warning: conflicts while merging A! (edit, then use 'hg resolve --mark') unresolved conflicts (see hg resolve, then hg rebase --continue) [1] Solve the conflict and go on: $ echo 'conflict solved' > A $ rm A.orig $ hg resolve -m A (no more unresolved files) continue: hg rebase --continue $ hg rebase --continue already rebased 1:27547f69f254 "B" as 45396c49d53b rebasing 2:965c486023db "C" warning: new changesets detected on source branch, not stripping $ hg tglogp o 7:draft 'C' | | o 6:secret 'Extra' | | o | 5:draft 'B' | | @ | 4:draft 'E' | | o | 3:draft 'D' | | | o 2:draft 'C' | | | o 1:draft 'B' |/ o 0:draft 'A' $ cd .. Changes during an interruption - abort: $ hg clone -q -u . a a2 $ cd a2 $ hg tglog @ 4: 'E' | o 3: 'D' | | o 2: 'C' | | | o 1: 'B' |/ o 0: 'A' Rebasing B onto E: $ hg rebase -s 1 -d 4 rebasing 1:27547f69f254 "B" rebasing 2:965c486023db "C" merging A warning: conflicts while merging A! (edit, then use 'hg resolve --mark') unresolved conflicts (see hg resolve, then hg rebase --continue) [1] Force a commit on B' during the interruption: $ hg up -q -C 5 --config 'extensions.rebase=!' $ echo 'Extra' > Extra $ hg add Extra $ hg ci -m 'Extra' --config 'extensions.rebase=!' $ hg tglog @ 6: 'Extra' | o 5: 'B' | o 4: 'E' | o 3: 'D' | | o 2: 'C' | | | o 1: 'B' |/ o 0: 'A' Abort the rebasing: $ hg rebase --abort warning: new changesets detected on target branch, can't strip rebase aborted $ hg tglog @ 6: 'Extra' | o 5: 'B' | o 4: 'E' | o 3: 'D' | | o 2: 'C' | | | o 1: 'B' |/ o 0: 'A' $ cd .. Changes during an interruption - abort (again): $ hg clone -q -u . a a3 $ cd a3 $ hg tglogp @ 4:draft 'E' | o 3:draft 'D' | | o 2:draft 'C' | | | o 1:draft 'B' |/ o 0:draft 'A' Rebasing B onto E: $ hg rebase -s 1 -d 4 rebasing 1:27547f69f254 "B" rebasing 2:965c486023db "C" merging A warning: conflicts while merging A! (edit, then use 'hg resolve --mark') unresolved conflicts (see hg resolve, then hg rebase --continue) [1] Change phase on B and B' $ hg up -q -C 5 --config 'extensions.rebase=!' $ hg phase --public 1 $ hg phase --public 5 $ hg phase --secret -f 2 $ hg tglogp @ 5:public 'B' | o 4:public 'E' | o 3:public 'D' | | o 2:secret 'C' | | | o 1:public 'B' |/ o 0:public 'A' Abort the rebasing: $ hg rebase --abort warning: can't clean up public changesets 45396c49d53b rebase aborted $ hg tglogp @ 5:public 'B' | o 4:public 'E' | o 3:public 'D' | | o 2:secret 'C' | | | o 1:public 'B' |/ o 0:public 'A' $ cd ..