--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-topic-server.t Wed Feb 19 01:35:23 2020 +0100
@@ -0,0 +1,179 @@
+ $ . "$TESTDIR/testlib/topic_setup.sh"
+
+ $ cat << EOF >> $HGRCPATH
+ > [experimental]
+ > evolution = all
+ > topic.publish-bare-branch = yes
+ > topic.server-gate-topic-changesets = yes
+ >
+ > [extensions]
+ > evolve =
+ >
+ > [phases]
+ > publish = no
+ >
+ > [ui]
+ > ssh = "$PYTHON" "$RUNTESTDIR/dummyssh"
+ > EOF
+
+ $ hg init server
+ $ cd server
+
+ $ echo a > a
+ $ hg commit -qAm root
+ $ hg phase --public -r 'all()'
+
+ $ cd ..
+
+ $ hg clone ssh://user@dummy/server client-topic1
+ requesting all changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files
+ new changesets 6569b5a81c7e
+ updating to branch default
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg clone ssh://user@dummy/server client-topic2
+ requesting all changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files
+ new changesets 6569b5a81c7e
+ updating to branch default
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ hg version -v -R client-topic1
+ warning: --repository ignored
+ Mercurial Distributed SCM (*) (glob)
+ (see https://mercurial-scm.org for more information)
+
+ Copyright (C) 2005-* Matt Mackall and others (glob)
+ This is free software; see the source for copying conditions. There is NO
+ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ Enabled extensions:
+
+ rebase internal
+ topic external * (glob)
+ evolve external * (glob)
+ $ hg clone ssh://user@dummy/server client-plain
+ requesting all changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files
+ new changesets 6569b5a81c7e
+ updating to branch default
+ 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ $ cat << EOF >> client-plain/.hg/hgrc
+ > [extensions]
+ > topic = !
+ > EOF
+ $ hg version -v -R client-plain
+ warning: --repository ignored
+ Mercurial Distributed SCM (*) (glob)
+ (see https://mercurial-scm.org for more information)
+
+ Copyright (C) 2005-* Matt Mackall and others (glob)
+ This is free software; see the source for copying conditions. There is NO
+ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+ Enabled extensions:
+
+ rebase internal
+ evolve external * (glob)
+
+Make two commits, with and without a topic, and push them to the server
+
+ $ cd client-topic1
+ $ echo b > b
+ $ hg topic some-work
+ marked working directory as topic: some-work
+ $ hg commit -Am 'adding b (topic)'
+ adding b
+ active topic 'some-work' grew its first changeset
+ (see 'hg help topics' for more information)
+ $ hg up 0
+ 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+ $ echo c > c
+ $ hg commit -Am 'adding c (no topic)'
+ adding c
+ $ hg log -r 'all() - 0'
+ changeset: 1:2a2e8b3520f2
+ topic: some-work
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: adding b (topic)
+
+ changeset: 2:b46feb4d24f9
+ tag: tip
+ parent: 0:6569b5a81c7e
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: adding c (no topic)
+
+
+(disable the bare publishing to put a bare draft on the server)
+
+ $ cat << EOF >> ../server/.hg/hgrc
+ > [experimental]
+ > topic.publish-bare-branch = no
+ > EOF
+ $ hg push
+ pushing to ssh://user@dummy/server
+ searching for changes
+ remote: adding changesets
+ remote: adding manifests
+ remote: adding file changes
+ remote: added 2 changesets with 2 changes to 2 files (+1 heads)
+ $ cd ..
+ $ hg --cwd server phase -r 'tip'
+ 2: draft
+
+Clients with topic can exchange draft changesets both with and without a topic through the server
+
+ $ hg --cwd client-topic2 pull
+ pulling from ssh://user@dummy/server
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 2 changesets with 2 changes to 2 files (+1 heads)
+ new changesets 2a2e8b3520f2:b46feb4d24f9 (2 drafts)
+ (run 'hg heads' to see heads)
+ $ hg --cwd client-topic2 log -r 'all() - 0'
+ changeset: 1:2a2e8b3520f2
+ topic: some-work
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: adding b (topic)
+
+ changeset: 2:b46feb4d24f9
+ tag: tip
+ parent: 0:6569b5a81c7e
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: adding c (no topic)
+
+
+Client without topic only sees draft changesets if they don't have a topic
+
+ $ hg --cwd client-plain pull
+ pulling from ssh://user@dummy/server
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files
+ new changesets b46feb4d24f9 (1 drafts)
+ (run 'hg update' to get a working copy)
+ $ hg --cwd client-plain phase -r 'all() - 0'
+ 1: draft
+ $ hg --cwd client-plain log -r 'all() - 0'
+ changeset: 1:b46feb4d24f9
+ tag: tip
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: adding c (no topic)
+