equal
deleted
inserted
replaced
153 def __init__(self, opener, ui): |
153 def __init__(self, opener, ui): |
154 self.opener = opener |
154 self.opener = opener |
155 self.dirty = 0 |
155 self.dirty = 0 |
156 self.ui = ui |
156 self.ui = ui |
157 self.map = None |
157 self.map = None |
|
158 self.pl = None |
158 |
159 |
159 def __del__(self): |
160 def __del__(self): |
160 if self.dirty: |
161 if self.dirty: |
161 self.write() |
162 self.write() |
162 |
163 |
169 |
170 |
170 def __contains__(self, key): |
171 def __contains__(self, key): |
171 if not self.map: self.read() |
172 if not self.map: self.read() |
172 return key in self.map |
173 return key in self.map |
173 |
174 |
|
175 def parents(self): |
|
176 if not self.pl: |
|
177 self.read() |
|
178 return self.pl |
|
179 |
|
180 def setparents(self, p1, p2 = nullid): |
|
181 self.dirty = 1 |
|
182 self.pl = p1, p2 |
|
183 |
174 def state(self, key): |
184 def state(self, key): |
175 try: |
185 try: |
176 return self[key][0] |
186 return self[key][0] |
177 except KeyError: |
187 except KeyError: |
178 return "?" |
188 return "?" |
179 |
189 |
180 def read(self): |
190 def read(self): |
181 if self.map is not None: return self.map |
191 if self.map is not None: return self.map |
182 |
192 |
183 self.map = {} |
193 self.map = {} |
|
194 self.pl = [nullid, nullid] |
184 try: |
195 try: |
185 st = self.opener("dirstate").read() |
196 st = self.opener("dirstate").read() |
186 except: return |
197 except: return |
187 |
198 |
188 pos = 0 |
199 self.pl = [st[:20], st[20: 40]] |
|
200 |
|
201 pos = 40 |
189 while pos < len(st): |
202 while pos < len(st): |
190 e = struct.unpack(">cllll", st[pos:pos+17]) |
203 e = struct.unpack(">cllll", st[pos:pos+17]) |
191 l = e[4] |
204 l = e[4] |
192 pos += 17 |
205 pos += 17 |
193 f = st[pos:pos + l] |
206 f = st[pos:pos + l] |
230 self.map = {} |
243 self.map = {} |
231 self.dirty = 1 |
244 self.dirty = 1 |
232 |
245 |
233 def write(self): |
246 def write(self): |
234 st = self.opener("dirstate", "w") |
247 st = self.opener("dirstate", "w") |
|
248 st.write("".join(self.pl)) |
235 for f, e in self.map.items(): |
249 for f, e in self.map.items(): |
236 e = struct.pack(">cllll", e[0], e[1], e[2], e[3], len(f)) |
250 e = struct.pack(">cllll", e[0], e[1], e[2], e[3], len(f)) |
237 st.write(e + f) |
251 st.write(e + f) |
238 self.dirty = 0 |
252 self.dirty = 0 |
239 |
253 |
295 self.ignorelist = None |
309 self.ignorelist = None |
296 self.tags = None |
310 self.tags = None |
297 |
311 |
298 if not self.remote: |
312 if not self.remote: |
299 self.dirstate = dirstate(self.opener, ui) |
313 self.dirstate = dirstate(self.opener, ui) |
300 try: |
314 |
301 self.current = bin(self.opener("current").read()) |
|
302 except IOError: |
|
303 self.current = None |
|
304 |
|
305 def setcurrent(self, node): |
|
306 self.current = node |
|
307 self.opener("current", "w").write(hex(node)) |
|
308 |
|
309 def ignore(self, f): |
315 def ignore(self, f): |
310 if self.ignorelist is None: |
316 if self.ignorelist is None: |
311 self.ignorelist = [] |
317 self.ignorelist = [] |
312 try: |
318 try: |
313 l = open(os.path.join(self.root, ".hgignore")) |
319 l = open(os.path.join(self.root, ".hgignore")) |
364 |
370 |
365 self.ui.status("discarding dirstate\n") |
371 self.ui.status("discarding dirstate\n") |
366 node = self.changelog.tip() |
372 node = self.changelog.tip() |
367 f.sort() |
373 f.sort() |
368 |
374 |
369 self.setcurrent(node) |
375 self.dirstate.setparents(node) |
370 self.dirstate.update(f, 'i') |
376 self.dirstate.update(f, 'i') |
371 |
377 |
372 else: |
378 else: |
373 self.ui.warn("no undo information available\n") |
379 self.ui.warn("no undo information available\n") |
374 |
380 |
484 file(f, "w").write(t) |
490 file(f, "w").write(t) |
485 except IOError: |
491 except IOError: |
486 os.makedirs(os.path.dirname(f)) |
492 os.makedirs(os.path.dirname(f)) |
487 file(f, "w").write(t) |
493 file(f, "w").write(t) |
488 |
494 |
489 self.setcurrent(node) |
495 self.dirstate.setparents(node) |
490 self.dirstate.clear() |
496 self.dirstate.clear() |
491 self.dirstate.update([f for f,n in l], "n") |
497 self.dirstate.update([f for f,n in l], "n") |
492 |
498 |
493 def diffdir(self, path, changeset): |
499 def diffdir(self, path, changeset): |
494 changed = [] |
500 changed = [] |