comparison mercurial/branchmap.py @ 18128:f0d56efaa35a

branchmap: make write a method on the branchmap object
author Pierre-Yves David <pierre-yves.david@logilab.fr>
date Thu, 20 Dec 2012 16:28:43 +0100
parents dcd43ac7572d
children 3264d3ce53a0
comparison
equal deleted inserted replaced
18127:dcd43ac7572d 18128:f0d56efaa35a
39 except Exception, inst: 39 except Exception, inst:
40 if repo.ui.debugflag: 40 if repo.ui.debugflag:
41 repo.ui.warn(str(inst), '\n') 41 repo.ui.warn(str(inst), '\n')
42 partial = branchcache() 42 partial = branchcache()
43 return partial 43 return partial
44
45 def write(repo, cache):
46 try:
47 f = repo.opener("cache/branchheads", "w", atomictemp=True)
48 f.write("%s %s\n" % (hex(cache.tipnode), cache.tiprev))
49 for label, nodes in cache.iteritems():
50 for node in nodes:
51 f.write("%s %s\n" % (hex(node), encoding.fromlocal(label)))
52 f.close()
53 except (IOError, OSError):
54 pass
55 44
56 def update(repo, partial, ctxgen): 45 def update(repo, partial, ctxgen):
57 """Given a branchhead cache, partial, that may have extra nodes or be 46 """Given a branchhead cache, partial, that may have extra nodes or be
58 missing heads, and a generator of nodes that are at least a superset of 47 missing heads, and a generator of nodes that are at least a superset of
59 heads missing, this function updates partial to be correct. 48 heads missing, this function updates partial to be correct.
131 if partial.tiprev < catip: 120 if partial.tiprev < catip:
132 ctxgen = (repo[r] for r in cl.revs(partial.tiprev + 1, catip)) 121 ctxgen = (repo[r] for r in cl.revs(partial.tiprev + 1, catip))
133 update(repo, partial, ctxgen) 122 update(repo, partial, ctxgen)
134 partial.tipnode = cl.node(catip) 123 partial.tipnode = cl.node(catip)
135 partial.tiprev = catip 124 partial.tiprev = catip
136 write(repo, partial) 125 partial.write(repo)
137 # If cacheable tip were lower than actual tip, we need to update the 126 # If cacheable tip were lower than actual tip, we need to update the
138 # cache up to tip. This update (from cacheable to actual tip) is not 127 # cache up to tip. This update (from cacheable to actual tip) is not
139 # written to disk since it's not cacheable. 128 # written to disk since it's not cacheable.
140 tiprev = len(repo) - 1 129 tiprev = len(repo) - 1
141 if partial.tiprev < tiprev: 130 if partial.tiprev < tiprev:
150 139
151 def __init__(self, entries=(), tipnode=nullid, tiprev=nullrev): 140 def __init__(self, entries=(), tipnode=nullid, tiprev=nullrev):
152 super(branchcache, self).__init__(entries) 141 super(branchcache, self).__init__(entries)
153 self.tipnode = tipnode 142 self.tipnode = tipnode
154 self.tiprev = tiprev 143 self.tiprev = tiprev
144
145 def write(self, repo):
146 try:
147 f = repo.opener("cache/branchheads", "w", atomictemp=True)
148 f.write("%s %s\n" % (hex(self.tipnode), self.tiprev))
149 for label, nodes in self.iteritems():
150 for node in nodes:
151 f.write("%s %s\n" % (hex(node), encoding.fromlocal(label)))
152 f.close()
153 except (IOError, OSError):
154 pass