##// END OF EJS Templates
revlog: teach revlog to construct a revision from parentdeltas
Pradeepkumar Gayam -
r11930:12547ced default
parent child Browse files
Show More
@@ -1040,7 +1040,7 b' class revlog(object):'
1040
1040
1041 def revdiff(self, rev1, rev2):
1041 def revdiff(self, rev1, rev2):
1042 """return or calculate a delta between two revisions"""
1042 """return or calculate a delta between two revisions"""
1043 if rev1 + 1 == rev2 and self.base(rev1) == self.base(rev2):
1043 if rev1 != nullrev and self.deltaparent(rev2) == rev1:
1044 return self._chunk(rev2)
1044 return self._chunk(rev2)
1045
1045
1046 return mdiff.textdiff(self.revision(self.node(rev1)),
1046 return mdiff.textdiff(self.revision(self.node(rev1)),
@@ -1048,15 +1048,18 b' class revlog(object):'
1048
1048
1049 def revision(self, node):
1049 def revision(self, node):
1050 """return an uncompressed revision of a given node"""
1050 """return an uncompressed revision of a given node"""
1051 cache = nullrev
1051 if node == nullid:
1052 if node == nullid:
1052 return ""
1053 return ""
1053 if self._cache and self._cache[0] == node:
1054 if self._cache:
1054 return self._cache[2]
1055 cache = self._cache[1]
1056 if self._cache[0] == node:
1057 return self._cache[2]
1055
1058
1056 # look up what we need to read
1059 # look up what we need to read
1057 text = None
1060 text = None
1058 rev = self.rev(node)
1061 rev = self.rev(node)
1059 base = self.base(rev)
1062 cache, base, chain = self.deltachain(rev, cache)
1060
1063
1061 # check rev flags
1064 # check rev flags
1062 if self.flags(rev) & ~REVIDX_KNOWN_FLAGS:
1065 if self.flags(rev) & ~REVIDX_KNOWN_FLAGS:
@@ -1064,8 +1067,7 b' class revlog(object):'
1064 (self.flags(rev) & ~REVIDX_KNOWN_FLAGS))
1067 (self.flags(rev) & ~REVIDX_KNOWN_FLAGS))
1065
1068
1066 # do we have useful data cached?
1069 # do we have useful data cached?
1067 if self._cache and self._cache[1] >= base and self._cache[1] < rev:
1070 if cache and self._cache:
1068 base = self._cache[1]
1069 text = self._cache[2]
1071 text = self._cache[2]
1070
1072
1071 # drop cache to save memory
1073 # drop cache to save memory
@@ -1076,7 +1078,7 b' class revlog(object):'
1076 if text is None:
1078 if text is None:
1077 text = self._chunk(base)
1079 text = self._chunk(base)
1078
1080
1079 bins = [self._chunk(r) for r in xrange(base + 1, rev + 1)]
1081 bins = [self._chunk(r) for r in chain]
1080 text = mdiff.patches(text, bins)
1082 text = mdiff.patches(text, bins)
1081 p1, p2 = self.parents(node)
1083 p1, p2 = self.parents(node)
1082 if (node != hash(text, p1, p2) and
1084 if (node != hash(text, p1, p2) and
General Comments 0
You need to be logged in to leave comments. Login now