Mercurial > evolve
changeset 5937:6cdea542b6ea mercurial-5.7
test-compat: merge stable into mercurial-5.7
author | Anton Shestakov <av6@dwimlabs.net> |
---|---|
date | Thu, 27 May 2021 22:44:18 +0800 |
parents | b13cb2d500ae (current diff) 72c97e825530 (diff) |
children | 23fc429683ce |
files | tests/test-discovery-obshashrange.t tests/test-prev-next.t |
diffstat | 17 files changed, 301 insertions(+), 30 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgtags Sat Apr 24 19:54:14 2021 +0800 +++ b/.hgtags Thu May 27 22:44:18 2021 +0800 @@ -93,3 +93,4 @@ 35b883a4ff5a97973eb9e6f00014e71f14cebe70 10.2.0 eadc1d09f2f567fdae7280aefc8cf4cdc4d78cbc 10.2.0.post1 c0ed8e57463875414d1c06f0428d550c4480d289 10.3.0 +93dc3cb6884259f91d739a1cfe993a01820c729c 10.3.1
--- a/CHANGELOG Sat Apr 24 19:54:14 2021 +0800 +++ b/CHANGELOG Thu May 27 22:44:18 2021 +0800 @@ -1,20 +1,38 @@ Changelog ========= -10.3.1 - in progress +10.3.2 - in progress +-------------------- + + * next: remove duplicated targets when updating from an unstable changeset + * evolve: use "served" repo filter to guess what the server will publish + +topic (0.22.2) + + * topic: don't lose any file changes when changing topic of a merge commit + * topic: announce ext-topics-publish capability in case of SSH and HTTP too + +10.3.1 -- 2021-04-25 -------------------- * cache: fix corruption issue when mixing 32-bit and 64-bit environments + * next: unstable changesets with a different topic are no longer targets for hg next as long as it's invoked without --no-topic flag * next: when some potential targets are unstable, ask user which changeset they want to update to (only mixing stable and unstable when --evolve flag is given, which is the default) + * packaging: default to using Python 3 in Makefile + +topic (0.22.1) + + * compatibility with Mercurial 5.8 + 10.3.0 -- 2021-03-11 -------------------- - * doc: document stack as a substitue for MQ's qseries + * doc: document stack as a substitute for MQ's qseries * doc: document revsets provided by evolve extension * evolve: add a experimental.evolution.in-memory config for running evolve @@ -28,7 +46,7 @@ and `hg status` respectively * rewind: detect and abort on cases when we rewind to changesets that are - precessors / successors of each other + predecessors / successors of each other * rewind: when user gives only some parts of a fold, include the other parts as well, or abort if they are missing from local repo
--- a/debian/changelog Sat Apr 24 19:54:14 2021 +0800 +++ b/debian/changelog Thu May 27 22:44:18 2021 +0800 @@ -1,3 +1,9 @@ +mercurial-evolve (10.3.1-1) unstable; urgency=medium + + * new upstream release + + -- Anton Shestakov <av6@dwimlabs.net> Sun, 25 Apr 2021 14:13:18 +0800 + mercurial-evolve (10.3.0-1) unstable; urgency=medium * new upstream release
--- a/hgext3rd/evolve/__init__.py Sat Apr 24 19:54:14 2021 +0800 +++ b/hgext3rd/evolve/__init__.py Thu May 27 22:44:18 2021 +0800 @@ -861,6 +861,11 @@ if repo[rev].topic() != topic) aspchildren = [rev for rev in aspchildren if rev not in filtered] + # Let's make sure we don't have any duplicates between children and + # aspiring children + filtered.update(ctx.rev() for ctx in children) + aspchildren = [rev for rev in aspchildren if rev not in filtered] + # To catch and prevent the case when `next` would get confused by split, # lets filter those aspiring children which can be stablized on one of # the aspiring children itself. @@ -877,8 +882,7 @@ if needevolve and opts['evolve']: hint = _(b'use `hg amend`, `hg revert` or `hg shelve`') cmdutil.bailifchanged(repo, hint=hint) - - if not (opts['merge'] or (needevolve and opts['evolve'])): + elif not opts['merge']: # we only skip the check if noconflict is set if ui.config(b'commands', b'update.check') == b'noconflict': pass
--- a/hgext3rd/evolve/metadata.py Sat Apr 24 19:54:14 2021 +0800 +++ b/hgext3rd/evolve/metadata.py Thu May 27 22:44:18 2021 +0800 @@ -5,7 +5,7 @@ # This software may be used and distributed according to the terms of the # GNU General Public License version 2 or any later version. -__version__ = b'10.3.1.dev' -testedwith = b'4.6.2 4.7 4.8 4.9 5.0 5.1 5.2 5.3 5.4 5.5 5.6 5.7' +__version__ = b'10.3.2.dev' +testedwith = b'4.6.2 4.7 4.8 4.9 5.0 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8' minimumhgversion = b'4.6' buglink = b'https://bz.mercurial-scm.org/'
--- a/hgext3rd/evolve/safeguard.py Sat Apr 24 19:54:14 2021 +0800 +++ b/hgext3rd/evolve/safeguard.py Thu May 27 22:44:18 2021 +0800 @@ -38,6 +38,10 @@ published = repo.filtered(b'served').revs(b"not public()") else: published = repo.revs(b"::%ln - public()", pushop.revs) + # we want to use pushop.revs in the revset even if they + # themselves are secret, but we don't want to have anything + # that the server won't see in the result of this expression + published &= repo.filtered(b'served') if published: if behavior == b'warn': ui.warn(_(b'%i changesets about to be published\n')
--- a/hgext3rd/topic/__init__.py Sat Apr 24 19:54:14 2021 +0800 +++ b/hgext3rd/topic/__init__.py Thu May 27 22:44:18 2021 +0800 @@ -232,9 +232,9 @@ b'topic.active': b'green', } -__version__ = b'0.22.1.dev' +__version__ = b'0.22.2.dev' -testedwith = b'4.6.2 4.7 4.8 4.9 5.0 5.1 5.2 5.3 5.4 5.5 5.6 5.7' +testedwith = b'4.6.2 4.7 4.8 4.9 5.0 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8' minimumhgversion = b'4.6' buglink = b'https://bz.mercurial-scm.org/' @@ -590,7 +590,9 @@ topicmodeserver = self.ui.config(b'experimental', b'topic-mode.server', b'ignore') - ispush = (desc.startswith(b'push') or desc.startswith(b'serve')) + publishbare = self.ui.configbool(b'experimental', + b'topic.publish-bare-branch') + ispush = desc.startswith((b'push', b'serve')) if (topicmodeserver != b'ignore' and ispush): if util.safehasattr(tr, 'validator'): # hg <= 4.7 (ebbba3ba3f66) origvalidator = tr.validator @@ -616,10 +618,7 @@ else: tr.addvalidator(b'000-reject-untopiced', _validate) - elif (self.ui.configbool(b'experimental', b'topic.publish-bare-branch') - and (desc.startswith(b'push') - or desc.startswith(b'serve')) - ): + elif publishbare and ispush: origclose = tr.close trref = weakref.ref(tr) @@ -1059,6 +1058,14 @@ for r in revs: c = repo[r] + if len(c.parents()) > 1: + # ctx.files() isn't reliable for merges, so fall back to the + # slower repo.status() method + st = c.p1().status(c) + files = set(st.modified) | set(st.added) | set(st.removed) + else: + files = set(c.files()) + def filectxfn(repo, ctx, path): try: return c[path] @@ -1097,7 +1104,7 @@ mc = context.memctx(repo, (p1, p2), c.description(), - c.files(), + files, filectxfn, user=c.user(), date=c.date(),
--- a/hgext3rd/topic/flow.py Sat Apr 24 19:54:14 2021 +0800 +++ b/hgext3rd/topic/flow.py Thu May 27 22:44:18 2021 +0800 @@ -152,6 +152,11 @@ published = repo.filtered(b'served').revs(b'not public()') else: published = repo.revs(b'::%ln - public()', pushop.revs) + # we want to use pushop.revs in the revset even if they themselves are + # secret, but we don't want to have anything that the server won't see + # in the result of this expression + published &= repo.filtered(b'served') + if mode == b'auto': published = repo.revs(b'%ld::(%ld - topic())', published, published) if published:
--- a/hgext3rd/topic/server.py Sat Apr 24 19:54:14 2021 +0800 +++ b/hgext3rd/topic/server.py Thu May 27 22:44:18 2021 +0800 @@ -71,6 +71,13 @@ caps = orig(repo, proto) if common.hastopicext(repo) and repo.peer().capable(b'topics'): caps.append(b'_exttopics_heads') + if repo.ui.configbool(b'phases', b'publish'): + mode = b'all' + elif repo.ui.configbool(b'experimental', b'topic.publish-bare-branch'): + mode = b'auto' + else: + mode = b'none' + caps.append(b'ext-topics-publish=%s' % mode) return caps def setupserver(ui):
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-amend-merge.t Thu May 27 22:44:18 2021 +0800 @@ -0,0 +1,98 @@ +This test amends a merge commit using various commands, including topics + + $ . $TESTDIR/testlib/common.sh + + $ cat >> $HGRCPATH << EOF + > [extensions] + > evolve = + > topic = + > EOF + + $ hg init amending-a-merge + $ cd amending-a-merge + + $ mkcommit root + $ mkcommit apple + $ hg up 'desc("root")' + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ mkcommit banana + created new head + (consider using topic for lightweight branches. See 'hg help topic') + $ hg up 'desc("apple")' + 1 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ hg merge 'desc("banana")' + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + (branch merge, don't forget to commit) + + $ hg ci -m merge + $ hg diff -r 'p1(.)' -r '.' + diff -r 88a060ab6523 -r c20705a6a8c4 banana + --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + +++ b/banana Thu Jan 01 00:00:00 1970 +0000 + @@ -0,0 +1,1 @@ + +banana + $ hg diff -r 'p2(.)' -r '.' + diff -r d8c7baf0ca58 -r c20705a6a8c4 apple + --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + +++ b/apple Thu Jan 01 00:00:00 1970 +0000 + @@ -0,0 +1,1 @@ + +apple + +amend + + $ hg amend -m 'merge, amend' + $ hg diff -r 'p1(.)' -r '.' + diff -r 88a060ab6523 -r 456753fae3cd banana + --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + +++ b/banana Thu Jan 01 00:00:00 1970 +0000 + @@ -0,0 +1,1 @@ + +banana + $ hg diff -r 'p2(.)' -r '.' + diff -r d8c7baf0ca58 -r 456753fae3cd apple + --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + +++ b/apple Thu Jan 01 00:00:00 1970 +0000 + @@ -0,0 +1,1 @@ + +apple + +metaedit + + $ hg metaedit -m 'merge, metaedit' + 0 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg diff -r 'p1(.)' -r '.' + diff -r 88a060ab6523 -r 1528d42f3e83 banana + --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + +++ b/banana Thu Jan 01 00:00:00 1970 +0000 + @@ -0,0 +1,1 @@ + +banana + $ hg diff -r 'p2(.)' -r '.' + diff -r d8c7baf0ca58 -r 1528d42f3e83 apple + --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + +++ b/apple Thu Jan 01 00:00:00 1970 +0000 + @@ -0,0 +1,1 @@ + +apple + +topics + + $ hg topics -r . foo + switching to topic foo + changed topic on 1 changesets to "foo" + $ hg diff -r 'p1(.)' -r '.' + diff -r 88a060ab6523 -r 52150b9639f7 banana + --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + +++ b/banana Thu Jan 01 00:00:00 1970 +0000 + @@ -0,0 +1,1 @@ + +banana + $ hg diff -r 'p2(.)' -r '.' + diff -r d8c7baf0ca58 -r 52150b9639f7 apple + --- /dev/null Thu Jan 01 00:00:00 1970 +0000 + +++ b/apple Thu Jan 01 00:00:00 1970 +0000 + @@ -0,0 +1,1 @@ + +apple + + $ hg files + apple + banana + root + $ hg cat apple banana + apple + banana
--- a/tests/test-check-sdist.t Sat Apr 24 19:54:14 2021 +0800 +++ b/tests/test-check-sdist.t Thu May 27 22:44:18 2021 +0800 @@ -35,7 +35,7 @@ $ tar -tzf hg-evolve-*.tar.gz | sed 's|^hg-evolve-[^/]*/||' | sort > files $ wc -l files - 349 files + 350 files $ fgrep debian files tests/test-check-debian.t $ fgrep __init__.py files
--- a/tests/test-discovery-obshashrange.t Sat Apr 24 19:54:14 2021 +0800 +++ b/tests/test-discovery-obshashrange.t Thu May 27 22:44:18 2021 +0800 @@ -150,7 +150,6 @@ cccccccccccccccccccccccccccccccccccccccc bebd167eb94d257ace0e814aeb98e6972ed2970d 0 (Thu Jan 01 00:00:00 1970 +0000) {'user': 'test'} $ rm ../server/.hg/blackbox.log $ hg blackbox - * @0000000000000000000000000000000000000000 (*)> 0/0 cache hits/lookups in *.???? seconds (glob) * @0000000000000000000000000000000000000000 (*)> clone *ssh://user@dummy/server* client exited 0 after *.?? seconds (glob) * @0000000000000000000000000000000000000000 (*)> pull --rev 4 (glob) * @0000000000000000000000000000000000000000 (*)> updated evo-ext-obscache in *.???? seconds (5r, 3o) (glob)
--- a/tests/test-extension-isolation.t Sat Apr 24 19:54:14 2021 +0800 +++ b/tests/test-extension-isolation.t Thu May 27 22:44:18 2021 +0800 @@ -132,6 +132,7 @@ [1] $ hg debugcapabilities http://$LOCALIP:$HGPORT/repo-topic | egrep 'topics|evoext' _exttopics_heads + ext-topics-publish=all topics $ hg debugcapabilities http://$LOCALIP:$HGPORT/repo-no-ext | egrep 'topics|evoext' [1] @@ -145,12 +146,14 @@ _evoext_getbundle_obscommon _evoext_obshashrange_v1 _exttopics_heads + ext-topics-publish=all topics $ hg debugcapabilities http://$LOCALIP:$HGPORT/repo-evo | egrep 'topics|evoext' _evoext_getbundle_obscommon _evoext_obshashrange_v1 $ hg debugcapabilities http://$LOCALIP:$HGPORT/repo-topic | egrep 'topics|evoext' _exttopics_heads + ext-topics-publish=all topics $ hg debugcapabilities http://$LOCALIP:$HGPORT/repo-evo | egrep 'topics|evoext' _evoext_getbundle_obscommon
--- a/tests/test-obsolete-push.t Sat Apr 24 19:54:14 2021 +0800 +++ b/tests/test-obsolete-push.t Thu May 27 22:44:18 2021 +0800 @@ -60,7 +60,7 @@ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cd strict-publish-client $ echo c > c - $ hg ci -qAm C c + $ hg ci -qAm C c --secret abort behavior @@ -70,6 +70,17 @@ > eof $ hg push -r . pushing to $TESTTMP/source + searching for changes + no changes found (ignored 1 secret changesets) + [1] + $ hg push + pushing to $TESTTMP/source + searching for changes + no changes found (ignored 1 secret changesets) + [1] + $ hg phase --draft + $ hg push -r . + pushing to $TESTTMP/source abort: push would publish 1 changesets (* 'experimental.auto-publish' config) (glob) [255]
--- a/tests/test-prev-next.t Sat Apr 24 19:54:14 2021 +0800 +++ b/tests/test-prev-next.t Thu May 27 22:44:18 2021 +0800 @@ -608,3 +608,58 @@ move:[4] B atop:[5] B modified working directory is now at 1b434459c7e7 + + $ cd .. + +Testing --merge and --evolve flags: 1 child, 1 aspchild, dirty working copy + + $ hg init next-dirty-evolve + $ cd next-dirty-evolve + + $ echo apple > a + $ hg ci -qAm apple + $ echo banana > b + $ hg ci -qAm banana + $ echo coconut > c + $ hg ci -qAm coconut + + $ hg prev + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + [1] banana + $ echo blueberry > b + $ hg ci --amend -m blueberry + 1 new orphan changesets + + $ echo durian > d + $ hg ci -qAm durian + $ hg log -GT "{rev} {desc}\n" + @ 4 durian + | + o 3 blueberry + | + | * 2 coconut + | | + | x 1 banana + |/ + o 0 apple + + + $ hg up 'desc("blueberry")' + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ echo avocado > a + + $ hg next --no-merge --evolve --dry-run + abort: uncommitted changes + (use `hg amend`, `hg revert` or `hg shelve`) + [20] + $ hg next --no-merge --no-evolve --dry-run + abort: uncommitted changes + (do you want --merge?) + [20] + $ hg next --merge --no-evolve --dry-run + hg update db0dc1f00682; + [4] durian + $ hg next --merge --evolve --dry-run + abort: uncommitted changes + (use `hg amend`, `hg revert` or `hg shelve`) + [20]
--- a/tests/test-topic-flow-publish-bare.t Sat Apr 24 19:54:14 2021 +0800 +++ b/tests/test-topic-flow-publish-bare.t Thu May 27 22:44:18 2021 +0800 @@ -5,6 +5,17 @@ $ . "$TESTDIR/testlib/topic_setup.sh" $ . "$TESTDIR/testlib/common.sh" +Also testing auto-publish config option with this publishing mode + + $ cat << EOF >> "$HGRCPATH" + > [ui] + > ssh = "$PYTHON" "$RUNTESTDIR/dummyssh" + > [experimental] + > auto-publish = warn + > [alias] + > tgl = log --rev 'sort(\$1, "topo")' -GT '{rev}:{node|short} {desc} {phase} {branch} {topics}' + > EOF + Publishing of bare branch ========================= @@ -32,12 +43,13 @@ $ mkcommit c_dB0 $ hg push pushing to $TESTTMP/bare-branch-server + 1 changesets about to be published searching for changes adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files - $ hg log --rev 'sort(all(), "topo")' -GT '{rev}:{node|short} {desc} {phase} {branch} {topics}' + $ hg tgl 'all()' @ 2:286d02a6e2a2 c_dB0 public default | o 1:134bc3852ad2 c_dA0 public default @@ -60,12 +72,13 @@ (consider using topic for lightweight branches. See 'hg help topic') $ hg push -f pushing to $TESTTMP/bare-branch-server + 2 changesets about to be published searching for changes adding changesets adding manifests adding file changes added 2 changesets with 2 changes to 2 files (+2 heads) - $ hg log --rev 'sort(all(), "topo")' -GT '{rev}:{node|short} {desc} {phase} {branch} {topics}' + $ hg tgl 'all()' @ 4:9bf953aa81f6 c_dD0 public default | | o 3:9d5b8e1f08a4 c_dC0 public default @@ -88,12 +101,13 @@ $ mkcommit c_aE0 $ hg push --new-branch pushing to $TESTTMP/bare-branch-server + 1 changesets about to be published searching for changes adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) - $ hg log --rev 'sort(all(), "topo")' -GT '{rev}:{node|short} {desc} {phase} {branch} {topics}' + $ hg tgl 'all()' @ 5:0db08e758601 c_aE0 public branchA | | o 4:9bf953aa81f6 c_dD0 public default @@ -124,7 +138,7 @@ adding manifests adding file changes added 1 changesets with 1 changes to 1 files - $ hg log --rev 'sort(all(), "topo")' -GT '{rev}:{node|short} {desc} {phase} {branch} {topics}' + $ hg tgl 'all()' @ 6:0867c4471796 c_dF0 draft default foo | o 4:9bf953aa81f6 c_dD0 public default @@ -153,12 +167,13 @@ (see 'hg help topics' for more information) $ hg push pushing to $TESTTMP/bare-branch-server + 1 changesets about to be published searching for changes adding changesets adding manifests adding file changes added 2 changesets with 2 changes to 2 files - $ hg log --rev 'sort(all(), "topo")' -GT '{rev}:{node|short} {desc} {phase} {branch} {topics}' + $ hg tgl 'all()' @ 8:858be9a8daaf c_dH0 draft default bar | o 7:0e4041d324d0 c_dG0 public default @@ -193,12 +208,13 @@ $ mkcommit c_aK0 $ hg push pushing to $TESTTMP/bare-branch-server + 2 changesets about to be published searching for changes adding changesets adding manifests adding file changes added 3 changesets with 3 changes to 3 files - $ hg log --rev 'sort(all(), "topo")' -GT '{rev}:{node|short} {desc} {phase} {branch} {topics}' + $ hg tgl 'all()' @ 11:b0a00ebdfd24 c_aK0 public branchA | o 5:0db08e758601 c_aE0 public branchA @@ -235,12 +251,13 @@ $ hg ci -m 'c_dL0' $ hg push pushing to $TESTTMP/bare-branch-server + 2 changesets about to be published searching for changes adding changesets adding manifests adding file changes added 1 changesets with 0 changes to 0 files (-1 heads) - $ hg log --rev 'sort(all(), "topo")' -GT '{rev}:{node|short} {desc} {phase} {branch} {topics}' + $ hg tgl 'all()' @ 12:a6f9f8c6c6cc c_dL0 public default |\ | o 9:4b5570d89f0f c_dI0 public default @@ -267,7 +284,7 @@ |/ o 0:ea207398892e ROOT public default - $ hg log -R ../bare-branch-server --rev 'sort(all(), "topo")' -GT '{rev}:{node|short} {desc} {phase} {branch} {topics}' + $ hg tgl 'all()' -R ../bare-branch-server o 12:a6f9f8c6c6cc c_dL0 public default |\ | o 9:4b5570d89f0f c_dI0 public default @@ -328,12 +345,33 @@ $ hg up branchA 2 files updated, 0 files merged, 5 files removed, 0 files unresolved +Making sure the topic-publishing mode is announced as a capability + + $ hg debugcapabilities $TESTTMP/bare-branch-server | grep topics + ext-topics-publish=auto + topics + $ hg debugcapabilities ssh://user@dummy/bare-branch-server | grep topics + _exttopics_heads + ext-topics-publish=auto + topics + $ hg serve -R ../bare-branch-server -p $HGPORT -d --pid-file hg.pid + $ cat hg.pid >> $DAEMON_PIDS + $ hg debugcapabilities http://localhost:$HGPORT | grep topics + _exttopics_heads + ext-topics-publish=auto + topics + $ killdaemons.py + Trying to push changeset without topic (would publish them) $ mkcommit c_aM0 - $ hg debugcapabilities $TESTTMP/bare-branch-server | grep topics - ext-topics-publish=auto - topics + $ hg phase --secret --force + $ hg push --config experimental.auto-publish=abort -r . + pushing to $TESTTMP/bare-branch-server + searching for changes + no changes found (ignored 1 secret changesets) + [1] + $ hg phase --draft $ hg push --config experimental.auto-publish=abort -r . pushing to $TESTTMP/bare-branch-server abort: push would publish 1 changesets @@ -351,7 +389,7 @@ $ hg topic test-push-protection marked working directory as topic: test-push-protection - $ mkcommit c_aL0 + $ mkcommit c_aN0 active topic 'test-push-protection' grew its first changeset (see 'hg help topics' for more information) $ hg push --config experimental.auto-publish=abort -r .
--- a/tests/test-topic-prev-next.t Sat Apr 24 19:54:14 2021 +0800 +++ b/tests/test-topic-prev-next.t Thu May 27 22:44:18 2021 +0800 @@ -133,8 +133,23 @@ o 0 [] root +Simply walking on unstable changesets should work as expected + + $ hg up 'desc("B2")' + switching to topic B + 3 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg prev + 0 files updated, 0 files merged, 1 files removed, 0 files unresolved + [s1] B1 + $ hg next + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + [s2] B2 + B1 shouldn't be considered a target, orphan or not + $ hg up 'desc("A2")' + switching to topic A + 1 files updated, 0 files merged, 2 files removed, 0 files unresolved $ hg next move:[s3] A3 atop:[s2] A2