77 if v == self.revlogversion: |
77 if v == self.revlogversion: |
78 v |= flags |
78 v |= flags |
79 self.revlogversion = v |
79 self.revlogversion = v |
80 |
80 |
81 self.tagscache = None |
81 self.tagscache = None |
|
82 self.branchcache = None |
82 self.nodetagscache = None |
83 self.nodetagscache = None |
83 self.encodepats = None |
84 self.encodepats = None |
84 self.decodepats = None |
85 self.decodepats = None |
85 self.transhandle = None |
86 self.transhandle = None |
86 |
87 |
285 if not self.nodetagscache: |
286 if not self.nodetagscache: |
286 self.nodetagscache = {} |
287 self.nodetagscache = {} |
287 for t, n in self.tags().items(): |
288 for t, n in self.tags().items(): |
288 self.nodetagscache.setdefault(n, []).append(t) |
289 self.nodetagscache.setdefault(n, []).append(t) |
289 return self.nodetagscache.get(node, []) |
290 return self.nodetagscache.get(node, []) |
|
291 |
|
292 def branchtags(self): |
|
293 if self.branchcache != None: |
|
294 return self.branchcache |
|
295 |
|
296 self.branchcache = {} |
|
297 |
|
298 try: |
|
299 f = self.opener("branches.cache") |
|
300 last, lrev = f.readline().rstrip().split(" ", 1) |
|
301 last, lrev = bin(last), int(lrev) |
|
302 if self.changelog.node(lrev) == last: # sanity check |
|
303 for l in f: |
|
304 node, label = l.rstrip().split(" ", 1) |
|
305 self.branchcache[label] = bin(node) |
|
306 f.close() |
|
307 except IOError: |
|
308 last, lrev = nullid, -1 |
|
309 lrev = self.changelog.rev(last) |
|
310 |
|
311 tip = self.changelog.count() - 1 |
|
312 if lrev != tip: |
|
313 for r in range(lrev + 1, tip + 1): |
|
314 n = self.changelog.node(r) |
|
315 c = self.changelog.read(n) |
|
316 b = c[5].get("branch") |
|
317 if b: |
|
318 self.branchcache[b] = n |
|
319 self._writebranchcache() |
|
320 |
|
321 return self.branchcache |
|
322 |
|
323 def _writebranchcache(self): |
|
324 f = self.opener("branches.cache", "w") |
|
325 t = self.changelog.tip() |
|
326 f.write("%s %s\n" % (hex(t), self.changelog.count() - 1)) |
|
327 for label, node in self.branchcache.iteritems(): |
|
328 f.write("%s %s\n" % (hex(node), label)) |
290 |
329 |
291 def lookup(self, key): |
330 def lookup(self, key): |
292 try: |
331 try: |
293 return self.tags()[key] |
332 return self.tags()[key] |
294 except KeyError: |
333 except KeyError: |