diff -r a3202fa83aff -r 0596d27457c6 mercurial/revlog.py --- a/mercurial/revlog.py Thu Apr 05 15:18:23 2018 -0700 +++ b/mercurial/revlog.py Thu Apr 05 18:22:35 2018 -0700 @@ -19,6 +19,7 @@ import hashlib import heapq import os +import re import struct import zlib @@ -97,6 +98,25 @@ REVIDX_ISCENSORED: None, } +_mdre = re.compile('\1\n') +def parsemeta(text): + """return (metadatadict, metadatasize)""" + # text can be buffer, so we can't use .startswith or .index + if text[:2] != '\1\n': + return None, None + s = _mdre.search(text, 2).start() + mtext = text[2:s] + meta = {} + for l in mtext.splitlines(): + k, v = l.split(": ", 1) + meta[k] = v + return meta, (s + 2) + +def packmeta(meta, text): + keys = sorted(meta) + metatext = "".join("%s: %s\n" % (k, meta[k]) for k in keys) + return "\1\n%s\1\n%s" % (metatext, text) + def addflagprocessor(flag, processor): """Register a flag processor on a revision data flag.