##// END OF EJS Templates
revlog: calculate base revisions iteratively...
Sune Foldager -
r14252:19067884 default
parent child Browse files
Show More
@@ -1564,13 +1564,13 b' def debugindex(ui, repo, file_, **opts):'
1564 except:
1564 except:
1565 pp = [nullid, nullid]
1565 pp = [nullid, nullid]
1566 ui.write("% 6d % 9d % 7d % 6d % 7d %s %s %s\n" % (
1566 ui.write("% 6d % 9d % 7d % 6d % 7d %s %s %s\n" % (
1567 i, r.start(i), r.length(i), r.base(i), r.linkrev(i),
1567 i, r.start(i), r.length(i), r.chainbase(i), r.linkrev(i),
1568 short(node), short(pp[0]), short(pp[1])))
1568 short(node), short(pp[0]), short(pp[1])))
1569 elif format == 1:
1569 elif format == 1:
1570 pr = r.parentrevs(i)
1570 pr = r.parentrevs(i)
1571 ui.write("% 6d %04x % 8d % 8d % 8d % 6d % 6d % 6d % 6d %s\n" % (
1571 ui.write("% 6d %04x % 8d % 8d % 8d % 6d % 6d % 6d % 6d %s\n" % (
1572 i, r.flags(i), r.start(i), r.length(i), r.rawsize(i),
1572 i, r.flags(i), r.start(i), r.length(i), r.rawsize(i),
1573 r.base(i), r.linkrev(i), pr[0], pr[1], short(node)))
1573 r.chainbase(i), r.linkrev(i), pr[0], pr[1], short(node)))
1574
1574
1575 def debugindexdot(ui, repo, file_):
1575 def debugindexdot(ui, repo, file_):
1576 """dump an index DAG as a graphviz dot file"""
1576 """dump an index DAG as a graphviz dot file"""
@@ -217,6 +217,7 b' class revlog(object):'
217 self.datafile = indexfile[:-2] + ".d"
217 self.datafile = indexfile[:-2] + ".d"
218 self.opener = opener
218 self.opener = opener
219 self._cache = None
219 self._cache = None
220 self._basecache = None
220 self._chunkcache = (0, '')
221 self._chunkcache = (0, '')
221 self.index = []
222 self.index = []
222 self._pcache = {}
223 self._pcache = {}
@@ -313,8 +314,13 b' class revlog(object):'
313 return self.start(rev) + self.length(rev)
314 return self.start(rev) + self.length(rev)
314 def length(self, rev):
315 def length(self, rev):
315 return self.index[rev][1]
316 return self.index[rev][1]
316 def base(self, rev):
317 def chainbase(self, rev):
317 return self.index[rev][3]
318 index = self.index
319 base = index[rev][3]
320 while base != rev:
321 rev = base
322 base = index[rev][3]
323 return base
318 def flags(self, rev):
324 def flags(self, rev):
319 return self.index[rev][0] & 0xFFFF
325 return self.index[rev][0] & 0xFFFF
320 def rawsize(self, rev):
326 def rawsize(self, rev):
@@ -850,7 +856,6 b' class revlog(object):'
850 # look up what we need to read
856 # look up what we need to read
851 text = None
857 text = None
852 rev = self.rev(node)
858 rev = self.rev(node)
853 base = self.base(rev)
854
859
855 # check rev flags
860 # check rev flags
856 if self.flags(rev) & ~REVIDX_KNOWN_FLAGS:
861 if self.flags(rev) & ~REVIDX_KNOWN_FLAGS:
@@ -859,10 +864,13 b' class revlog(object):'
859
864
860 # build delta chain
865 # build delta chain
861 chain = []
866 chain = []
867 index = self.index # for performance
862 iterrev = rev
868 iterrev = rev
863 while iterrev != base and iterrev != cachedrev:
869 e = index[iterrev]
870 while iterrev != e[3] and iterrev != cachedrev:
864 chain.append(iterrev)
871 chain.append(iterrev)
865 iterrev -= 1
872 iterrev -= 1
873 e = index[iterrev]
866 chain.reverse()
874 chain.reverse()
867 base = iterrev
875 base = iterrev
868
876
@@ -984,7 +992,11 b' class revlog(object):'
984 delta = mdiff.textdiff(ptext, t)
992 delta = mdiff.textdiff(ptext, t)
985 data = compress(delta)
993 data = compress(delta)
986 l = len(data[1]) + len(data[0])
994 l = len(data[1]) + len(data[0])
987 base = self.base(rev)
995 basecache = self._basecache
996 if basecache and basecache[0] == rev:
997 base = basecache[1]
998 else:
999 base = self.chainbase(rev)
988 dist = l + offset - self.start(base)
1000 dist = l + offset - self.start(base)
989 return dist, l, data, base
1001 return dist, l, data, base
990
1002
@@ -1038,6 +1050,7 b' class revlog(object):'
1038
1050
1039 if type(text) == str: # only accept immutable objects
1051 if type(text) == str: # only accept immutable objects
1040 self._cache = (node, curr, text)
1052 self._cache = (node, curr, text)
1053 self._basecache = (curr, base)
1041 return node
1054 return node
1042
1055
1043 def group(self, nodelist, bundler):
1056 def group(self, nodelist, bundler):
General Comments 0
You need to be logged in to leave comments. Login now