equal
deleted
inserted
replaced
68 self.l = len(data)/self.s |
68 self.l = len(data)/self.s |
69 self.index = [None] * self.l |
69 self.index = [None] * self.l |
70 self.map = {nullid: -1} |
70 self.map = {nullid: -1} |
71 self.all = 0 |
71 self.all = 0 |
72 self.revlog = revlog |
72 self.revlog = revlog |
|
73 |
|
74 def trunc(self, pos): |
|
75 self.l = pos/self.s |
73 |
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: |
77 block = pos / 1000 |
80 block = pos / 1000 |
102 pos += len(self.p.index) |
105 pos += len(self.p.index) |
103 self.p.load(pos) |
106 self.p.load(pos) |
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""" |
112 def __init__(self, parser): |
119 def __init__(self, parser): |
113 self.p = parser |
120 self.p = parser |
138 return self.p.map[key] |
145 return self.p.map[key] |
139 except KeyError: |
146 except KeyError: |
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 |
146 class revlog: |
155 class revlog: |
147 """ |
156 """ |
832 |
841 |
833 dfh.close() |
842 dfh.close() |
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(): |
840 expected = self.end(self.count() - 1) |
879 expected = self.end(self.count() - 1) |
841 try: |
880 try: |