mercurial/revlog.py
changeset 39878 3e896b51aa5d
parent 39877 f8eb71f9e3bd
child 39879 d269ddbf54f0
equal deleted inserted replaced
39877:f8eb71f9e3bd 39878:3e896b51aa5d
    15 
    15 
    16 import collections
    16 import collections
    17 import contextlib
    17 import contextlib
    18 import errno
    18 import errno
    19 import os
    19 import os
    20 import re
       
    21 import struct
    20 import struct
    22 import zlib
    21 import zlib
    23 
    22 
    24 # import stuff from node for others to import from revlog
    23 # import stuff from node for others to import from revlog
    25 from .node import (
    24 from .node import (
   125     ellipsisreadprocessor,
   124     ellipsisreadprocessor,
   126     ellipsiswriteprocessor,
   125     ellipsiswriteprocessor,
   127     ellipsisrawprocessor,
   126     ellipsisrawprocessor,
   128 )
   127 )
   129 
   128 
   130 _mdre = re.compile('\1\n')
       
   131 def parsemeta(text):
       
   132     """return (metadatadict, metadatasize)"""
       
   133     # text can be buffer, so we can't use .startswith or .index
       
   134     if text[:2] != '\1\n':
       
   135         return None, None
       
   136     s = _mdre.search(text, 2).start()
       
   137     mtext = text[2:s]
       
   138     meta = {}
       
   139     for l in mtext.splitlines():
       
   140         k, v = l.split(": ", 1)
       
   141         meta[k] = v
       
   142     return meta, (s + 2)
       
   143 
       
   144 def packmeta(meta, text):
       
   145     keys = sorted(meta)
       
   146     metatext = "".join("%s: %s\n" % (k, meta[k]) for k in keys)
       
   147     return "\1\n%s\1\n%s" % (metatext, text)
       
   148 
       
   149 def _censoredtext(text):
   129 def _censoredtext(text):
   150     m, offs = parsemeta(text)
   130     m, offs = storageutil.parsemeta(text)
   151     return m and "censored" in m
   131     return m and "censored" in m
   152 
   132 
   153 def addflagprocessor(flag, processor):
   133 def addflagprocessor(flag, processor):
   154     """Register a flag processor on a revision data flag.
   134     """Register a flag processor on a revision data flag.
   155 
   135 
  2514         if (self.version & 0xFFFF) == REVLOGV0:
  2494         if (self.version & 0xFFFF) == REVLOGV0:
  2515             raise error.RevlogError(_('cannot censor with version %d revlogs') %
  2495             raise error.RevlogError(_('cannot censor with version %d revlogs') %
  2516                                     self.version)
  2496                                     self.version)
  2517 
  2497 
  2518         rev = self.rev(node)
  2498         rev = self.rev(node)
  2519         tombstone = packmeta({b'censored': tombstone}, b'')
  2499         tombstone = storageutil.packmeta({b'censored': tombstone}, b'')
  2520 
  2500 
  2521         if len(tombstone) > self.rawsize(rev):
  2501         if len(tombstone) > self.rawsize(rev):
  2522             raise error.Abort(_('censor tombstone must be no longer than '
  2502             raise error.Abort(_('censor tombstone must be no longer than '
  2523                                 'censored data'))
  2503                                 'censored data'))
  2524 
  2504