##// END OF EJS Templates
Add branchtags function with cache...
Matt Mackall -
r3417:028fff46 default
parent child Browse files
Show More
@@ -79,6 +79,7 b' class localrepository(repo.repository):'
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
@@ -288,6 +289,44 b' class localrepository(repo.repository):'
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, [])
290
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))
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]
General Comments 0
You need to be logged in to leave comments. Login now