# HG changeset patch
# User Boris Feld <boris.feld@octobus.net>
# Date 1509379769 -3600
#      Mon Oct 30 17:09:29 2017 +0100
# Node ID 762ea8a1f5e78c53cdbecb5f108d787e082fef3a
# Parent  7ee2d859f7206a1cf83b3960b627f22b4e846f03
debug: print parsed bundle2 capabilities with debugcapabilities

The bundle2 capabilities are hard to read in their encoded form. We parse and
print them in a human friendly way.

diff --git a/mercurial/debugcommands.py b/mercurial/debugcommands.py
--- a/mercurial/debugcommands.py
+++ b/mercurial/debugcommands.py
@@ -370,6 +370,14 @@
     ui.write(('Main capabilities:\n'))
     for c in sorted(caps):
         ui.write(('  %s\n') % c)
+    b2caps = bundle2.bundle2caps(peer)
+    if b2caps:
+        ui.write(('Bundle2 capabilities:\n'))
+        for key, values in sorted(b2caps.iteritems()):
+            ui.write(('  %s\n') % key)
+            for v in values:
+                ui.write(('    %s\n') % v)
+
 @command('debugcheckstate', [], '')
 def debugcheckstate(ui, repo):
     """validate the correctness of the current dirstate"""
diff --git a/tests/test-debugcommands.t b/tests/test-debugcommands.t
--- a/tests/test-debugcommands.t
+++ b/tests/test-debugcommands.t
@@ -168,3 +168,25 @@
     lookup
     pushkey
     unbundle
+  Bundle2 capabilities:
+    HG20
+    changegroup
+      01
+      02
+    digests
+      md5
+      sha1
+      sha512
+    error
+      abort
+      unsupportedcontent
+      pushraced
+      pushkey
+    hgtagsfnodes
+    listkeys
+    phases
+      heads
+    pushkey
+    remote-changegroup
+      http
+      https