##// END OF EJS Templates
revlog: move censor logic out of censor extension...
revlog: move censor logic out of censor extension The censor extension is doing very low-level things with revlogs. It is fundamentally impossible for this logic to remain in the censor extension while support multiple storage backends: we need each storage backend to implement censor in its own storage-specific way. This commit effectively moves the revlog-specific censoring code to be a method of revlogs themselves. We've defined a new API on the file storage interface for censoring an individual node. Even though the current censoring code doesn't use it, the API requires a transaction instance because it logically makes sense for storage backends to require an active transaction (which implies a held write lock) in order to rewrite storage. After this commit, the censor extension has been reduced to boilerplate precondition checking before invoking the generic storage API. I tried to keep the code as similar as possible. But some minor changes were made: * We use self._io instead of instantiating a new revlogio instance. * We compare self.version against REVLOGV0 instead of != REVLOGV1 because presumably all future revlog versions will support censoring. * We use self.opener instead of going through repo.svfs (we don't have a handle on the repo instance from a revlog). * "revlog" dropped * Replace "flog" with "self". Differential Revision: https://phab.mercurial-scm.org/D4656

File last commit:

r39231:1e7a462c default
r39814:a6b3c4c1 default
Show More
node.py
47 lines | 1.5 KiB | text/x-python | PythonLexer
Martin Geisler
put license and copyright info into comment blocks
r8226 # node.py - basic nodeid manipulation for mercurial
#
# Copyright 2005, 2006 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
Matt Mackall
Update license to GPLv2+
r10263 # GNU General Public License version 2 or any later version.
mpm@selenic.com
Break apart hg.py...
r1089
Gregory Szorc
node: use absolute_import
r25962 from __future__ import absolute_import
Matt Mackall
Replace demandload with new demandimport
r3877 import binascii
mpm@selenic.com
Break apart hg.py...
r1089
Siddharth Agarwal
node: add 'nullhex', hex-encoded nullid...
r26980 # This ugly style has a noticeable effect in manifest parsing
hex = binascii.hexlify
Augie Fackler
node: make bin() be a wrapper instead of just an alias...
r36256 # Adapt to Python 3 API changes. If this ends up showing up in
# profiles, we can use this version only on Python 3, and forward
# binascii.unhexlify like we used to on Python 2.
def bin(s):
try:
return binascii.unhexlify(s)
except binascii.Error as e:
raise TypeError(e)
Siddharth Agarwal
node: add 'nullhex', hex-encoded nullid...
r26980
Thomas Arendsen Hein
Define and use nullrev (revision of nullid) instead of -1.
r3578 nullrev = -1
Kyle Lippincott
nodes: expand/comment the magic nodes so they are more easily searchable...
r39178 # In hex, this is '0000000000000000000000000000000000000000'
Gregory Szorc
node: use byte literals to construct nullid and wdirid...
r28585 nullid = b"\0" * 20
Siddharth Agarwal
node: add 'nullhex', hex-encoded nullid...
r26980 nullhex = hex(nullid)
mpm@selenic.com
Break apart hg.py...
r1089
Durham Goode
dirstate: change placeholder hash length to 20 bytes...
r30360 # Phony node value to stand-in for new files in some uses of
# manifests.
Kyle Lippincott
nodes: expand/comment the magic nodes so they are more easily searchable...
r39178 # In hex, this is '2121212121212121212121212121212121212121'
newnodeid = '!!!!!!!!!!!!!!!!!!!!'
Yuya Nishihara
node: correct hex representation of pseudo node ids
r39231 # In hex, this is '3030303030303030303030303030306164646564'
Kyle Lippincott
nodes: expand/comment the magic nodes so they are more easily searchable...
r39178 addednodeid = '000000000000000added'
Yuya Nishihara
node: correct hex representation of pseudo node ids
r39231 # In hex, this is '3030303030303030303030306d6f646966696564'
Kyle Lippincott
nodes: expand/comment the magic nodes so they are more easily searchable...
r39178 modifiednodeid = '000000000000modified'
Durham Goode
dirstate: change placeholder hash length to 20 bytes...
r30360
Yuya Nishihara
node: rename wdirnodes to clarify they are for manifest/filelogs...
r37466 wdirfilenodeids = {newnodeid, addednodeid, modifiednodeid}
Durham Goode
dirstate: change placeholder hash length to 20 bytes...
r30360
Yuya Nishihara
node: define experimental identifiers for working directory...
r25737 # pseudo identifiers for working directory
# (they are experimental, so don't add too many dependencies on them)
wdirrev = 0x7fffffff
Kyle Lippincott
nodes: expand/comment the magic nodes so they are more easily searchable...
r39178 # In hex, this is 'ffffffffffffffffffffffffffffffffffffffff'
Gregory Szorc
node: use byte literals to construct nullid and wdirid...
r28585 wdirid = b"\xff" * 20
Yuya Nishihara
revlog: add support for partial matching of wdir node id...
r32684 wdirhex = hex(wdirid)
Yuya Nishihara
node: define experimental identifiers for working directory...
r25737
mpm@selenic.com
Break apart hg.py...
r1089 def short(node):
return hex(node[:6])