comparison mercurial/localrepo.py @ 3432:028fff46a4ac

Add branchtags function with cache - cache stores tipmost node and rev and node,label pairs - if cache is out of date, scan new changesets - write new cache out after scan
author Matt Mackall <mpm@selenic.com>
date Tue, 17 Oct 2006 18:31:18 -0500
parents 9fe62e2db71d
children 5436c8fe0ff5
comparison
equal deleted inserted replaced
3431:145a8fde69e6 3432:028fff46a4ac
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: