##// END OF EJS Templates
revlog: support reading generaldelta revlogs...
Sune Foldager -
r14253:c28d5200 default
parent child Browse files
Show More
@@ -27,10 +27,11 b' import struct, zlib, errno'
27 27 REVLOGV0 = 0
28 28 REVLOGNG = 1
29 29 REVLOGNGINLINEDATA = (1 << 16)
30 REVLOGGENERALDELTA = (1 << 17)
30 31 REVLOG_DEFAULT_FLAGS = REVLOGNGINLINEDATA
31 32 REVLOG_DEFAULT_FORMAT = REVLOGNG
32 33 REVLOG_DEFAULT_VERSION = REVLOG_DEFAULT_FORMAT | REVLOG_DEFAULT_FLAGS
33 REVLOGNG_FLAGS = REVLOGNGINLINEDATA
34 REVLOGNG_FLAGS = REVLOGNGINLINEDATA | REVLOGGENERALDELTA
34 35
35 36 # revlog index flags
36 37 REVIDX_KNOWN_FLAGS = 0
@@ -243,6 +244,7 b' class revlog(object):'
243 244
244 245 self.version = v
245 246 self._inline = v & REVLOGNGINLINEDATA
247 self._generaldelta = v & REVLOGGENERALDELTA
246 248 flags = v & ~0xFFFF
247 249 fmt = v & 0xFFFF
248 250 if fmt == REVLOGV0 and flags:
@@ -830,8 +832,11 b' class revlog(object):'
830 832
831 833 def deltaparent(self, rev):
832 834 """return deltaparent of the given revision"""
833 if self.index[rev][3] == rev:
835 base = self.index[rev][3]
836 if base == rev:
834 837 return nullrev
838 elif self._generaldelta:
839 return base
835 840 else:
836 841 return rev - 1
837 842
@@ -865,11 +870,15 b' class revlog(object):'
865 870 # build delta chain
866 871 chain = []
867 872 index = self.index # for performance
873 generaldelta = self._generaldelta
868 874 iterrev = rev
869 875 e = index[iterrev]
870 876 while iterrev != e[3] and iterrev != cachedrev:
871 877 chain.append(iterrev)
872 iterrev -= 1
878 if generaldelta:
879 iterrev = e[3]
880 else:
881 iterrev -= 1
873 882 e = index[iterrev]
874 883 chain.reverse()
875 884 base = iterrev
General Comments 0
You need to be logged in to leave comments. Login now