# HG changeset patch # User Joerg Sonnenberger # Date 1549994897 -3600 # Node ID d6569f1e9b37ab7d782371e107846f18db2ac2f4 # Parent 38de3300414fb7412418ba7e7be62320d30a6524 server: allow customizing the default repo filter hgweb has the (undocument) configuration option web.view that allows restricting visible revisions to immutable. This is useful for serving the same storage as publishing and non-publishing repo. Add the new server.view option to serve the same purpose by changing the default behavior of `getdispatchrepo`. Drop the hard-coded 'served' filter in the batch handler of v1 of the wire proto, this is a left-over from the days before `getdispatchrepo` existed. Differential Revision: https://phab.mercurial-scm.org/D5946 diff -r 38de3300414f -r d6569f1e9b37 mercurial/configitems.py --- a/mercurial/configitems.py Sat Mar 02 05:24:35 2019 +0530 +++ b/mercurial/configitems.py Tue Feb 12 19:08:17 2019 +0100 @@ -1041,6 +1041,9 @@ coreconfigitem('server', 'uncompressedallowsecret', default=False, ) +coreconfigitem('server', 'view', + default='served', +) coreconfigitem('server', 'validate', default=False, ) diff -r 38de3300414f -r d6569f1e9b37 mercurial/help/config.txt --- a/mercurial/help/config.txt Sat Mar 02 05:24:35 2019 +0530 +++ b/mercurial/help/config.txt Tue Feb 12 19:08:17 2019 +0100 @@ -2028,6 +2028,12 @@ See also ``server.zliblevel``. +``view`` + Repository filter used when exchanging revisions with the peer. + + The default view (``served``) excludes secret and hidden changesets. + Another useful value is ``immutable`` (no draft, secret or hidden changesets). + ``smtp`` -------- diff -r 38de3300414f -r d6569f1e9b37 mercurial/wireprotov1server.py --- a/mercurial/wireprotov1server.py Sat Mar 02 05:24:35 2019 +0530 +++ b/mercurial/wireprotov1server.py Tue Feb 12 19:08:17 2019 +0100 @@ -64,7 +64,8 @@ extensions that need commands to operate on different repo views under specialized circumstances. """ - return repo.filtered('served') + viewconfig = repo.ui.config('server', 'view') + return repo.filtered(viewconfig) def dispatch(repo, proto, command): repo = getdispatchrepo(repo, proto, command) @@ -166,7 +167,6 @@ @wireprotocommand('batch', 'cmds *', permission='pull') def batch(repo, proto, cmds, others): unescapearg = wireprototypes.unescapebatcharg - repo = repo.filtered("served") res = [] for pair in cmds.split(';'): op, args = pair.split(' ', 1) diff -r 38de3300414f -r d6569f1e9b37 mercurial/wireprotov2server.py --- a/mercurial/wireprotov2server.py Sat Mar 02 05:24:35 2019 +0530 +++ b/mercurial/wireprotov2server.py Tue Feb 12 19:08:17 2019 +0100 @@ -342,7 +342,8 @@ action) def getdispatchrepo(repo, proto, command): - return repo.filtered('served') + viewconfig = repo.ui.config('server', 'view') + return repo.filtered(viewconfig) def dispatch(repo, proto, command, redirect): """Run a wire protocol command. diff -r 38de3300414f -r d6569f1e9b37 tests/test-server-view.t --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-server-view.t Tue Feb 12 19:08:17 2019 +0100 @@ -0,0 +1,38 @@ + $ hg init test + $ cd test + $ hg debugbuilddag '+2' + $ hg phase --public 0 + + $ hg serve -p $HGPORT -d --pid-file=hg.pid -E errors.log + $ cat hg.pid >> $DAEMON_PIDS + $ cd .. + $ hg init test2 + $ cd test2 + $ hg incoming http://foo:xyzzy@localhost:$HGPORT/ + comparing with http://foo:***@localhost:$HGPORT/ + changeset: 0:1ea73414a91b + user: debugbuilddag + date: Thu Jan 01 00:00:00 1970 +0000 + summary: r0 + + changeset: 1:66f7d451a68b + tag: tip + user: debugbuilddag + date: Thu Jan 01 00:00:01 1970 +0000 + summary: r1 + + $ killdaemons.py + + $ cd ../test + $ hg --config server.view=immutable serve -p $HGPORT -d --pid-file=hg.pid -E errors.log + $ cat hg.pid >> $DAEMON_PIDS + $ cd ../test2 + $ hg incoming http://foo:xyzzy@localhost:$HGPORT/ + comparing with http://foo:***@localhost:$HGPORT/ + changeset: 0:1ea73414a91b + tag: tip + user: debugbuilddag + date: Thu Jan 01 00:00:00 1970 +0000 + summary: r0 + + $ killdaemons.py diff -r 38de3300414f -r d6569f1e9b37 tests/test-wireproto.py --- a/tests/test-wireproto.py Sat Mar 02 05:24:35 2019 +0530 +++ b/tests/test-wireproto.py Tue Feb 12 19:08:17 2019 +0100 @@ -78,6 +78,9 @@ yield unmangle(f.value) class serverrepo(object): + def __init__(self, ui): + self.ui = ui + def greet(self, name): return b"Hello, " + name @@ -94,7 +97,7 @@ wireprotov1server.commands[b'greet'] = (greet, b'name') -srv = serverrepo() +srv = serverrepo(uimod.ui()) clt = clientpeer(srv, uimod.ui()) def printb(data, end=b'\n'):