mercurial/wireprotov2server.py
changeset 39820 d3d333ab167a
parent 39819 d059cb669632
child 39833 3ed53b071041
--- a/mercurial/wireprotov2server.py	Thu Sep 20 12:57:23 2018 -0700
+++ b/mercurial/wireprotov2server.py	Mon Sep 17 11:50:59 2018 -0700
@@ -657,6 +657,10 @@
             'type': 'list',
             'example': [b'0123456...'],
         },
+        'nodesdepth': {
+            'type': 'int',
+            'example': 10,
+        },
         'fields': {
             'type': 'set',
             'default': set,
@@ -665,7 +669,7 @@
         },
     },
     permission='pull')
-def changesetdata(repo, proto, noderange, nodes, fields):
+def changesetdata(repo, proto, noderange, nodes, nodesdepth, fields):
     # TODO look for unknown fields and abort when they can't be serviced.
     # This could probably be validated by dispatcher using validvalues.
 
@@ -673,6 +677,10 @@
         raise error.WireprotoCommandError(
             'noderange or nodes must be defined')
 
+    if nodesdepth is not None and nodes is None:
+        raise error.WireprotoCommandError(
+            'nodesdepth requires the nodes argument')
+
     if noderange is not None:
         if len(noderange) != 2:
             raise error.WireprotoCommandError(
@@ -689,7 +697,13 @@
     outgoing = []
 
     if nodes is not None:
-        outgoing.extend(n for n in nodes if hasnode(n))
+        outgoing = [n for n in nodes if hasnode(n)]
+
+        if nodesdepth:
+            outgoing = [cl.node(r) for r in
+                        repo.revs(b'ancestors(%ln, %d)', outgoing,
+                                  nodesdepth - 1)]
+
         seen |= set(outgoing)
 
     if noderange is not None: