mercurial/changelog.py
changeset 42142 5382d8f8530b
parent 42141 0e41f40b01cc
child 42300 278dcb24e535
--- a/mercurial/changelog.py	Wed Dec 27 19:49:36 2017 -0800
+++ b/mercurial/changelog.py	Wed Dec 27 22:05:20 2017 -0800
@@ -87,6 +87,18 @@
     ]
     return "\n".join(items)
 
+def decodecopies(data):
+    try:
+        copies = {}
+        for l in data.split('\n'):
+            k, v = l.split('\0')
+            copies[k] = v
+        return copies
+    except ValueError:
+        # Perhaps someone had chosen the same key name (e.g. "p1copies") and
+        # used different syntax for the value.
+        return None
+
 def stripdesc(desc):
     """strip trailing whitespace and leading and trailing empty lines"""
     return '\n'.join([l.rstrip() for l in desc.splitlines()]).strip('\n')
@@ -286,6 +298,16 @@
         return self._text[off[2] + 1:off[3]].split('\n')
 
     @property
+    def p1copies(self):
+        rawcopies = self.extra.get('p1copies')
+        return rawcopies and decodecopies(rawcopies)
+
+    @property
+    def p2copies(self):
+        rawcopies = self.extra.get('p2copies')
+        return rawcopies and decodecopies(rawcopies)
+
+    @property
     def description(self):
         return encoding.tolocal(self._text[self._offsets[3] + 2:])