[PATCH 02 of 12] Add overlay index and map for use with overlay
revlogs
Alexis S. L. Carvalho
alexis at cecm.usp.br
Wed Jan 3 16:24:46 CST 2007
Thus spake Brendan Cully:
> diff --git a/mercurial/revlog.py b/mercurial/revlog.py
> --- a/mercurial/revlog.py
> +++ b/mercurial/revlog.py
> @@ -244,6 +244,35 @@ class lazyindex(object):
> def append(self, e):
> self.p.index.append(e)
>
> +class overlayindex(object):
> + "partial index with a parent"
> + def __init__(self, index, parent, start):
> + self.index = index
> + self.parent = parent
> + self.start = start
> + def __len__(self):
> + return self.start + len(self.index)
> + def __getitem__(self, i):
> + if i < self.start:
> + return self.parent[i]
> + return self.index[self._offset(i)]
> + def __setitem__(self, i, val):
> + if i < self.start:
> + self.parent[i] = val
> + else:
> + self.index[self._offset(i)] = val
> + def __delitem__(self, i):
> + if i < self.start:
> + del self.parent[i]
> + else:
> + del self.index[self._offset(i)]
> + def _offset(self, i):
> + if isinstance(i, slice):
> + return slice(i.start - self.start, i.step, i.stop)
> + return i - self.start
Do we use slices anywhere right now? If so, things are probably buggy,
since comparing an int and a slice is not very meaningful:
>>> 0 < slice(3, 4)
True
>>> 42 < slice(3, 4)
True
Alexis
More information about the Mercurial-devel
mailing list