manifest: use the same logic for handling flags in _parse as elsewhere
authorJoerg Sonnenberger <joerg@bec.de>
Mon, 06 Jul 2020 14:49:19 +0200
changeset 45119 19748c73c208
parent 45118 d0ef8c1dddd4
child 45120 44d5233e66a9
manifest: use the same logic for handling flags in _parse as elsewhere Differential Revision: https://phab.mercurial-scm.org/D8684
mercurial/manifest.py
--- a/mercurial/manifest.py	Mon Jul 06 03:43:32 2020 +0200
+++ b/mercurial/manifest.py	Mon Jul 06 14:49:19 2020 +0200
@@ -58,14 +58,16 @@
         prev = l
         f, n = l.split(b'\0')
         nl = len(n)
-        if 64 < nl:
-            # modern hash, full width
-            yield f, bin(n[:64]), n[64:]
-        elif 40 < nl < 45:
-            # legacy hash, always sha1
-            yield f, bin(n[:40]), n[40:]
+        flags = n[-1:]
+        if flags in _manifestflags:
+            n = n[:-1]
+            nl -= 1
         else:
-            yield f, bin(n), b''
+            flags = b''
+        if nl not in (40, 64):
+            raise ValueError(b'Invalid manifest line')
+
+        yield f, bin(n), flags
 
 
 def _text(it):