##// END OF EJS Templates
branchmap: move branch cache code out of streamclone.py...
Gregory Szorc -
r26460:79ef8675 default
parent child Browse files
Show More
@@ -116,6 +116,38 b' def updatecache(repo):'
116 assert partial.validfor(repo), filtername
116 assert partial.validfor(repo), filtername
117 repo._branchcaches[repo.filtername] = partial
117 repo._branchcaches[repo.filtername] = partial
118
118
119 def replacecache(repo, bm):
120 """Replace the branchmap cache for a repo with a branch mapping.
121
122 This is likely only called during clone with a branch map from a remote.
123 """
124 rbheads = []
125 closed = []
126 for bheads in bm.itervalues():
127 rbheads.extend(bheads)
128 for h in bheads:
129 r = repo.changelog.rev(h)
130 b, c = repo.changelog.branchinfo(r)
131 if c:
132 closed.append(h)
133
134 if rbheads:
135 rtiprev = max((int(repo.changelog.rev(node))
136 for node in rbheads))
137 cache = branchcache(bm,
138 repo[rtiprev].node(),
139 rtiprev,
140 closednodes=closed)
141
142 # Try to stick it as low as possible
143 # filter above served are unlikely to be fetch from a clone
144 for candidate in ('base', 'immutable', 'served'):
145 rview = repo.filtered(candidate)
146 if cache.validfor(rview):
147 repo._branchcaches[candidate] = cache
148 cache.write(rview)
149 break
150
119 class branchcache(dict):
151 class branchcache(dict):
120 """A dict like object that hold branches heads cache.
152 """A dict like object that hold branches heads cache.
121
153
@@ -253,31 +253,8 b' def applyremotedata(repo, remotereqs, re'
253 repo._writerequirements()
253 repo._writerequirements()
254
254
255 if remotebranchmap:
255 if remotebranchmap:
256 rbheads = []
256 branchmap.replacecache(repo, remotebranchmap)
257 closed = []
258 for bheads in remotebranchmap.itervalues():
259 rbheads.extend(bheads)
260 for h in bheads:
261 r = repo.changelog.rev(h)
262 b, c = repo.changelog.branchinfo(r)
263 if c:
264 closed.append(h)
265
257
266 if rbheads:
267 rtiprev = max((int(repo.changelog.rev(node))
268 for node in rbheads))
269 cache = branchmap.branchcache(remotebranchmap,
270 repo[rtiprev].node(),
271 rtiprev,
272 closednodes=closed)
273 # Try to stick it as low as possible
274 # filter above served are unlikely to be fetch from a clone
275 for candidate in ('base', 'immutable', 'served'):
276 rview = repo.filtered(candidate)
277 if cache.validfor(rview):
278 repo._branchcaches[candidate] = cache
279 cache.write(rview)
280 break
281 repo.invalidate()
258 repo.invalidate()
282 finally:
259 finally:
283 lock.release()
260 lock.release()
General Comments 0
You need to be logged in to leave comments. Login now