equal
deleted
inserted
replaced
17 import contextlib |
17 import contextlib |
18 import errno |
18 import errno |
19 import hashlib |
19 import hashlib |
20 import heapq |
20 import heapq |
21 import os |
21 import os |
|
22 import re |
22 import struct |
23 import struct |
23 import zlib |
24 import zlib |
24 |
25 |
25 # import stuff from node for others to import from revlog |
26 # import stuff from node for others to import from revlog |
26 from .node import ( |
27 from .node import ( |
94 |
95 |
95 # Store flag processors (cf. 'addflagprocessor()' to register) |
96 # Store flag processors (cf. 'addflagprocessor()' to register) |
96 _flagprocessors = { |
97 _flagprocessors = { |
97 REVIDX_ISCENSORED: None, |
98 REVIDX_ISCENSORED: None, |
98 } |
99 } |
|
100 |
|
101 _mdre = re.compile('\1\n') |
|
102 def parsemeta(text): |
|
103 """return (metadatadict, metadatasize)""" |
|
104 # text can be buffer, so we can't use .startswith or .index |
|
105 if text[:2] != '\1\n': |
|
106 return None, None |
|
107 s = _mdre.search(text, 2).start() |
|
108 mtext = text[2:s] |
|
109 meta = {} |
|
110 for l in mtext.splitlines(): |
|
111 k, v = l.split(": ", 1) |
|
112 meta[k] = v |
|
113 return meta, (s + 2) |
|
114 |
|
115 def packmeta(meta, text): |
|
116 keys = sorted(meta) |
|
117 metatext = "".join("%s: %s\n" % (k, meta[k]) for k in keys) |
|
118 return "\1\n%s\1\n%s" % (metatext, text) |
99 |
119 |
100 def addflagprocessor(flag, processor): |
120 def addflagprocessor(flag, processor): |
101 """Register a flag processor on a revision data flag. |
121 """Register a flag processor on a revision data flag. |
102 |
122 |
103 Invariant: |
123 Invariant: |