wireproto: show unknown id and flags in repr(frame)
authorYuya Nishihara <yuya@tcha.org>
Sun, 08 Apr 2018 11:21:58 +0900
changeset 37473 7c2c7c749411
parent 37472 2f81926c7f89
child 37474 d33997123ea5
wireproto: show unknown id and flags in repr(frame) Perhaps we'll want it for debugging.
mercurial/wireprotoframing.py
--- a/mercurial/wireprotoframing.py	Sun Apr 08 11:14:47 2018 +0900
+++ b/mercurial/wireprotoframing.py	Sun Apr 08 11:21:58 2018 +0900
@@ -110,10 +110,13 @@
 
 def humanflags(mapping, value):
     """Convert a numeric flags value to a human value, using a mapping table."""
+    namemap = {v: k for k, v in mapping.iteritems()}
     flags = []
-    for val, name in sorted({v: k for k, v in mapping.iteritems()}.iteritems()):
+    val = 1
+    while value >= val:
         if value & val:
-            flags.append(name)
+            flags.append(namemap.get(val, '<unknown 0x%02x>' % val))
+        val <<= 1
 
     return b'|'.join(flags)
 
@@ -140,7 +143,7 @@
     payload = attr.ib()
 
     def __repr__(self):
-        typename = '<unknown>'
+        typename = '<unknown 0x%02x>' % self.typeid
         for name, value in FRAME_TYPES.iteritems():
             if value == self.typeid:
                 typename = name