comparison mercurial/revlog.py @ 16375:d7d64b89a65c

revlog: allow retrieving contents by revision number
author Matt Mackall <mpm@selenic.com>
date Sun, 08 Apr 2012 12:38:02 -0500
parents 29c2ff719715
children e8d37b78acfb
comparison
equal deleted inserted replaced
16374:29c2ff719715 16375:d7d64b89a65c
856 return self._chunk(rev2) 856 return self._chunk(rev2)
857 857
858 return mdiff.textdiff(self.revision(self.node(rev1)), 858 return mdiff.textdiff(self.revision(self.node(rev1)),
859 self.revision(self.node(rev2))) 859 self.revision(self.node(rev2)))
860 860
861 def revision(self, node): 861 def revision(self, nodeorrev):
862 """return an uncompressed revision of a given node""" 862 """return an uncompressed revision of a given node or"""
863 if isinstance(nodeorrev, int):
864 rev = nodeorrev
865 node = self.node(rev)
866 else:
867 node = nodeorrev
868 rev = None
869
863 cachedrev = None 870 cachedrev = None
864 if node == nullid: 871 if node == nullid:
865 return "" 872 return ""
866 if self._cache: 873 if self._cache:
867 if self._cache[0] == node: 874 if self._cache[0] == node:
868 return self._cache[2] 875 return self._cache[2]
869 cachedrev = self._cache[1] 876 cachedrev = self._cache[1]
870 877
871 # look up what we need to read 878 # look up what we need to read
872 text = None 879 text = None
873 rev = self.rev(node) 880 if rev is None:
881 rev = self.rev(node)
874 882
875 # check rev flags 883 # check rev flags
876 if self.flags(rev) & ~REVIDX_KNOWN_FLAGS: 884 if self.flags(rev) & ~REVIDX_KNOWN_FLAGS:
877 raise RevlogError(_('incompatible revision flag %x') % 885 raise RevlogError(_('incompatible revision flag %x') %
878 (self.flags(rev) & ~REVIDX_KNOWN_FLAGS)) 886 (self.flags(rev) & ~REVIDX_KNOWN_FLAGS))