--- a/mercurial/wireprotov2server.py Mon Sep 17 10:15:27 2018 -0700
+++ b/mercurial/wireprotov2server.py Mon Sep 17 11:54:00 2018 -0700
@@ -433,8 +433,6 @@
'pathfilterprefixes': set(narrowspec.VALID_PREFIXES),
}
- # TODO expose available changesetdata fields.
-
for command, entry in COMMANDS.items():
args = {}
@@ -449,6 +447,9 @@
if not meta['required']:
args[arg][b'default'] = meta['default']()
+ if meta['validvalues']:
+ args[arg][b'validvalues'] = meta['validvalues']
+
caps['commands'][command] = {
'args': args,
'permissions': [entry.permission],
@@ -563,6 +564,9 @@
``example``
An example value for this argument.
+ ``validvalues``
+ Set of recognized values for this argument.
+
``permission`` defines the permission type needed to run this command.
Can be ``push`` or ``pull``. These roughly map to read-write and read-only,
respectively. Default is to assume command requires ``push`` permissions
@@ -619,6 +623,7 @@
meta.setdefault('default', lambda: None)
meta.setdefault('required', False)
+ meta.setdefault('validvalues', None)
def register(func):
if name in COMMANDS:
@@ -656,11 +661,13 @@
'type': 'set',
'default': set,
'example': {b'parents', b'revision'},
+ 'validvalues': {b'bookmarks', b'parents', b'phase', b'revision'},
},
},
permission='pull')
def changesetdata(repo, proto, noderange, nodes, fields):
# TODO look for unknown fields and abort when they can't be serviced.
+ # This could probably be validated by dispatcher using validvalues.
if noderange is None and nodes is None:
raise error.WireprotoCommandError(
@@ -808,6 +815,7 @@
'type': 'set',
'default': set,
'example': {b'parents', b'revision'},
+ 'validvalues': {b'parents', b'revision'},
},
'path': {
'type': 'bytes',
@@ -966,6 +974,7 @@
'type': 'set',
'default': set,
'example': {b'parents', b'revision'},
+ 'validvalues': {b'parents', b'revision'},
},
'tree': {
'type': 'bytes',