topics: add a config to reject draft changeset without topic on a server
This patch adds a new config option experimental.topic-mode.server which if
sets to True, the server won't accept any draft changeset without topic on it.
In case both `experimental.topic-mode.server` and
`experimental.topic.publish-bare-branch` are set to True, the enforce-topic one
is respected.
Tests are added for it. The CHANGELOG file is also updated mentioning about the
config option.
====================================Testingheadcheckingcode:CaseA-8====================================Mercurialchecksfortheintroductionofnewheadsonpush.Evolutioncomesintoplaytodetectifexistingbranchesontheserverarebeingreplacedbysomeofthenewonewepush.Thiscaseispartofaseriesoftestscheckingthisbehavior.CategoryA:simplecaseinvolvingabranchbeingsuperceededbyanother.TestCase8:single-changesetbranchindirectrewrite..old-state:....*1-changesetbranch....new-state:....*1-changesetbranchsucceedingtoA,throughanotherunpushedchangesets....expected-result:....*pushallowed....graph-summary:....A'.. A ø⇠ø⇠◔ A''.. |/ /.. | /.. |/.. ● $ . $TESTDIR/testlib/push-checkheads-util.shTest setup---------- $ mkdir A8 $ cd A8 $ setuprepos creating basic server and client repo updating to branch default 2 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cd client $ hg up 0 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ mkcommit A1 created new head $ hg up 0 0 files updated, 0 files merged, 1 files removed, 0 files unresolved $ mkcommit A2 created new head $ hg debugobsolete `getid "desc(A0)" ` `getid "desc(A1)"` obsoleted 1 changesets $ hg debugobsolete `getid "desc(A1)" ` `getid "desc(A2)"` obsoleted 1 changesets $ hg log -G --hidden @ c1f8d089020f (draft): A2 | | x f6082bc4ffef (draft): A1 |/ | x 8aaa48160adc (draft): A0 |/ o 1e4be0697311 (public): rootActual testing-------------- $ hg push pushing to $TESTTMP/A8/server (glob) searching for changes adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files (+1 heads) 2 new obsolescence markers obsoleted 1 changesets $ cd ../..