Show More
@@ -71,6 +71,9 b' class lazyparser:' | |||
|
71 | 71 | self.all = 0 |
|
72 | 72 | self.revlog = revlog |
|
73 | 73 | |
|
74 | def trunc(self, pos): | |
|
75 | self.l = pos/self.s | |
|
76 | ||
|
74 | 77 | def load(self, pos=None): |
|
75 | 78 | if self.all: return |
|
76 | 79 | if pos is not None: |
@@ -104,8 +107,12 b' class lazyindex:' | |||
|
104 | 107 | return self.p.index[pos] |
|
105 | 108 | def __getitem__(self, pos): |
|
106 | 109 | return self.p.index[pos] or self.load(pos) |
|
110 | def __delitem__(self, pos): | |
|
111 | del self.p.index[pos] | |
|
107 | 112 | def append(self, e): |
|
108 | 113 | self.p.index.append(e) |
|
114 | def trunc(self, pos): | |
|
115 | self.p.trunc(pos) | |
|
109 | 116 | |
|
110 | 117 | class lazymap: |
|
111 | 118 | """a lazy version of the node map""" |
@@ -140,6 +147,8 b' class lazymap:' | |||
|
140 | 147 | raise KeyError("node " + hex(key)) |
|
141 | 148 | def __setitem__(self, key, val): |
|
142 | 149 | self.p.map[key] = val |
|
150 | def __delitem__(self, key): | |
|
151 | del self.p.map[key] | |
|
143 | 152 | |
|
144 | 153 | class RevlogError(Exception): pass |
|
145 | 154 | |
@@ -834,6 +843,36 b' class revlog:' | |||
|
834 | 843 | ifh.close() |
|
835 | 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 | 876 | def checksize(self): |
|
838 | 877 | expected = 0 |
|
839 | 878 | if self.count(): |
General Comments 0
You need to be logged in to leave comments.
Login now