mercurial/wireprotov2server.py
changeset 39813 c30faea8d02d
parent 39812 8e7e822e85ec
child 39814 d059cb669632
--- 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',