Show More
@@ -71,6 +71,9 b' class lazyparser:' | |||||
71 | self.all = 0 |
|
71 | self.all = 0 | |
72 | self.revlog = revlog |
|
72 | self.revlog = revlog | |
73 |
|
73 | |||
|
74 | def trunc(self, pos): | |||
|
75 | self.l = pos/self.s | |||
|
76 | ||||
74 | def load(self, pos=None): |
|
77 | def load(self, pos=None): | |
75 | if self.all: return |
|
78 | if self.all: return | |
76 | if pos is not None: |
|
79 | if pos is not None: | |
@@ -104,8 +107,12 b' class lazyindex:' | |||||
104 | return self.p.index[pos] |
|
107 | return self.p.index[pos] | |
105 | def __getitem__(self, pos): |
|
108 | def __getitem__(self, pos): | |
106 | return self.p.index[pos] or self.load(pos) |
|
109 | return self.p.index[pos] or self.load(pos) | |
|
110 | def __delitem__(self, pos): | |||
|
111 | del self.p.index[pos] | |||
107 | def append(self, e): |
|
112 | def append(self, e): | |
108 | self.p.index.append(e) |
|
113 | self.p.index.append(e) | |
|
114 | def trunc(self, pos): | |||
|
115 | self.p.trunc(pos) | |||
109 |
|
116 | |||
110 | class lazymap: |
|
117 | class lazymap: | |
111 | """a lazy version of the node map""" |
|
118 | """a lazy version of the node map""" | |
@@ -140,6 +147,8 b' class lazymap:' | |||||
140 | raise KeyError("node " + hex(key)) |
|
147 | raise KeyError("node " + hex(key)) | |
141 | def __setitem__(self, key, val): |
|
148 | def __setitem__(self, key, val): | |
142 | self.p.map[key] = val |
|
149 | self.p.map[key] = val | |
|
150 | def __delitem__(self, key): | |||
|
151 | del self.p.map[key] | |||
143 |
|
152 | |||
144 | class RevlogError(Exception): pass |
|
153 | class RevlogError(Exception): pass | |
145 |
|
154 | |||
@@ -834,6 +843,36 b' class revlog:' | |||||
834 | ifh.close() |
|
843 | ifh.close() | |
835 | return node |
|
844 | return node | |
836 |
|
845 | |||
|
846 | def strip(self, rev, minlink): | |||
|
847 | if self.count() == 0 or rev >= self.count(): | |||
|
848 | return | |||
|
849 | ||||
|
850 | # When stripping away a revision, we need to make sure it | |||
|
851 | # does not actually belong to an older changeset. | |||
|
852 | # The minlink parameter defines the oldest revision | |||
|
853 | # we're allowed to strip away. | |||
|
854 | while minlink > self.index[rev][3]: | |||
|
855 | rev += 1 | |||
|
856 | if rev >= self.count(): | |||
|
857 | return | |||
|
858 | ||||
|
859 | # first truncate the files on disk | |||
|
860 | end = self.start(rev) | |||
|
861 | self.opener(self.datafile, "a").truncate(end) | |||
|
862 | end = rev * struct.calcsize(indexformat) | |||
|
863 | self.opener(self.indexfile, "a").truncate(end) | |||
|
864 | ||||
|
865 | # then reset internal state in memory to forget those revisions | |||
|
866 | self.cache = None | |||
|
867 | for p in self.index[rev:]: | |||
|
868 | del self.nodemap[p[6]] | |||
|
869 | del self.index[rev:] | |||
|
870 | ||||
|
871 | # truncating the lazyindex also truncates the lazymap. | |||
|
872 | if isinstance(self.index, lazyindex): | |||
|
873 | self.index.trunc(end) | |||
|
874 | ||||
|
875 | ||||
837 | def checksize(self): |
|
876 | def checksize(self): | |
838 | expected = 0 |
|
877 | expected = 0 | |
839 | if self.count(): |
|
878 | if self.count(): |
General Comments 0
You need to be logged in to leave comments.
Login now