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 |