# HG changeset patch # User Matt Mackall # Date 1185241448 18000 # Node ID 4205f626dc055151084f3d0bae315d64f5095edf # Parent 0a676643687b88bb9c564340017de33c2046bc87 lazyindex: speed up __getitem__ This function is fairly performance sensitive, so we make a couple ugly tweaks: - keep all entries packed so we needn't test entry types - fold index lookup/load into unpack call to eliminate local variable setting diff --git a/mercurial/revlog.py b/mercurial/revlog.py --- a/mercurial/revlog.py +++ b/mercurial/revlog.py @@ -236,18 +236,16 @@ class lazyindex(object): self.p.loadindex(pos) return self.p.index[pos] def __getitem__(self, pos): - ret = self.p.index[pos] or self.load(pos) - if isinstance(ret, str): - ret = struct.unpack(indexformatng, ret) - return ret + return struct.unpack(indexformatng, + self.p.index[pos] or self.load(pos)) def __setitem__(self, pos, item): - self.p.index[pos] = item + self.p.index[pos] = struct.pack(indexformatng, *item) def __delitem__(self, pos): del self.p.index[pos] def insert(self, pos, e): - self.p.index.insert(pos, e) + self.p.index.insert(pos, struct.pack(indexformatng, *e)) def append(self, e): - self.p.index.append(e) + self.p.index.append(struct.pack(indexformatng, *e)) class lazymap(object): """a lazy version of the node map"""