Mercurial > public > mercurial-scm > hg
diff mercurial/revlogutils/rewrite.py @ 51267:ceeb8fa23cc8
censor: accept multiple revision in a single call
This is useful when dealing with corruption, as all the corrupted revision can
be dealt with in one go.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Fri, 01 Dec 2023 22:56:08 +0100 |
parents | 3e2a878fb96f |
children | 493034cc3265 |
line wrap: on
line diff
--- a/mercurial/revlogutils/rewrite.py Fri Dec 01 22:46:46 2023 +0100 +++ b/mercurial/revlogutils/rewrite.py Fri Dec 01 22:56:08 2023 +0100 @@ -51,14 +51,14 @@ ) -def v1_censor(rl, tr, censornode, tombstone=b''): +def v1_censor(rl, tr, censor_nodes, tombstone=b''): """censors a revision in a "version 1" revlog""" assert rl._format_version == constants.REVLOGV1, rl._format_version # avoid cycle from .. import revlog - censorrev = rl.rev(censornode) + censor_revs = set(rl.rev(node) for node in censor_nodes) tombstone = storageutil.packmeta({b'censored': tombstone}, b'') # Rewriting the revlog in place is hard. Our strategy for censoring is @@ -87,14 +87,14 @@ node = rl.node(rev) p1, p2 = rl.parents(node) - if rev == censorrev: + if rev in censor_revs: newrl.addrawrevision( tombstone, tr, - rl.linkrev(censorrev), + rl.linkrev(rev), p1, p2, - censornode, + node, constants.REVIDX_ISCENSORED, ) @@ -138,12 +138,12 @@ rl._load_inner(chunk_cache) -def v2_censor(revlog, tr, censornode, tombstone=b''): +def v2_censor(revlog, tr, censor_nodes, tombstone=b''): """censors a revision in a "version 2" revlog""" assert revlog._format_version != REVLOGV0, revlog._format_version assert revlog._format_version != REVLOGV1, revlog._format_version - censor_revs = {revlog.rev(censornode)} + censor_revs = {revlog.rev(node) for node in censor_nodes} _rewrite_v2(revlog, tr, censor_revs, tombstone)