comparison mercurial/revlog.py @ 11995:ff84cd2bdfaf

revlog.revision(): minor cleanup Rename some variables, making the name more obvious (in particular "cache" was actually two different variable. Move code around, moving the index preloading before the deltachain computation, without that index preloading was useless (everything was read in deltachain).
author Benoit Boissinot <benoit.boissinot@ens-lyon.org>
date Fri, 20 Aug 2010 00:17:50 +0200
parents 7c3aa579d98a
children 3195cf01dfb9
comparison
equal deleted inserted replaced
11993:9bce7ed50c9a 11995:ff84cd2bdfaf
1054 return mdiff.textdiff(self.revision(self.node(rev1)), 1054 return mdiff.textdiff(self.revision(self.node(rev1)),
1055 self.revision(self.node(rev2))) 1055 self.revision(self.node(rev2)))
1056 1056
1057 def revision(self, node): 1057 def revision(self, node):
1058 """return an uncompressed revision of a given node""" 1058 """return an uncompressed revision of a given node"""
1059 cache = nullrev 1059 cachedrev = nullrev
1060 if node == nullid: 1060 if node == nullid:
1061 return "" 1061 return ""
1062 if self._cache: 1062 if self._cache:
1063 cache = self._cache[1]
1064 if self._cache[0] == node: 1063 if self._cache[0] == node:
1065 return self._cache[2] 1064 return self._cache[2]
1065 cachedrev = self._cache[1]
1066 1066
1067 # look up what we need to read 1067 # look up what we need to read
1068 text = None 1068 text = None
1069 rev = self.rev(node) 1069 rev = self.rev(node)
1070 cache, base, chain = self.deltachain(rev, cache) 1070 base = self.base(rev)
1071 1071
1072 # check rev flags 1072 # check rev flags
1073 if self.flags(rev) & ~REVIDX_KNOWN_FLAGS: 1073 if self.flags(rev) & ~REVIDX_KNOWN_FLAGS:
1074 raise RevlogError(_('incompatible revision flag %x') % 1074 raise RevlogError(_('incompatible revision flag %x') %
1075 (self.flags(rev) & ~REVIDX_KNOWN_FLAGS)) 1075 (self.flags(rev) & ~REVIDX_KNOWN_FLAGS))
1076 1076
1077 # build delta chain
1078 self._loadindex(base, rev + 1)
1079 cachehit, base, chain = self.deltachain(rev, cachedrev)
1080
1077 # do we have useful data cached? 1081 # do we have useful data cached?
1078 if cache and self._cache: 1082 if cachehit and self._cache:
1079 global _cached 1083 global _cached
1080 _cached += 1 1084 _cached += 1
1081 text = self._cache[2] 1085 text = self._cache[2]
1082 else: 1086 else:
1083 global _uncached 1087 global _uncached
1085 1089
1086 1090
1087 # drop cache to save memory 1091 # drop cache to save memory
1088 self._cache = None 1092 self._cache = None
1089 1093
1090 self._loadindex(base, rev + 1)
1091 self._chunkraw(base, rev) 1094 self._chunkraw(base, rev)
1092 if text is None: 1095 if text is None:
1093 text = self._chunk(base) 1096 text = self._chunk(base)
1094 1097
1095 bins = [self._chunk(r) for r in chain] 1098 bins = [self._chunk(r) for r in chain]