##// END OF EJS Templates
Add revlog.strip to truncate away revisions....
mason@suse.com -
r1535:7ae0ce7a default
parent child Browse files
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