2224 topic = 'obsmarkers exchange' |
2224 topic = 'obsmarkers exchange' |
2225 if ui.configbool('experimental', 'verbose-obsolescence-exchange', False): |
2225 if ui.configbool('experimental', 'verbose-obsolescence-exchange', False): |
2226 topic = 'OBSEXC' |
2226 topic = 'OBSEXC' |
2227 ui.progress(topic, *args, **kwargs) |
2227 ui.progress(topic, *args, **kwargs) |
2228 |
2228 |
|
2229 @eh.wrapfunction(exchange, '_pushdiscoveryobsmarkers') |
|
2230 def _pushdiscoveryobsmarkers(orig, pushop): |
|
2231 if (obsolete._enabled |
|
2232 and pushop.repo.obsstore |
|
2233 and 'obsolete' in pushop.remote.listkeys('namespaces')): |
|
2234 repo = pushop.repo |
|
2235 revs = list(repo.revs('::%ln', pushop.futureheads)) |
|
2236 unfi = repo.unfiltered() |
|
2237 cl = unfi.changelog |
|
2238 if not pushop.remote.capable('_evoext_obshash_0'): |
|
2239 # do not trust core yet |
|
2240 # return orig(pushop) |
|
2241 nodes = [cl.node(r) for r in revs] |
|
2242 pushop.outobsmarkers = repo.obsstore.relevantmarkers(nodes) |
|
2243 return |
|
2244 |
|
2245 common = [] |
|
2246 obsexcmsg(repo.ui, "looking for common markers in %i nodes\n" |
|
2247 % len(revs)) |
|
2248 commonrevs = list(unfi.revs('::%ln', pushop.outgoing.commonheads)) |
|
2249 common = findcommonobsmarkers(pushop.ui, unfi, pushop.remote, commonrevs) |
|
2250 |
|
2251 revs = list(unfi.revs('%ld - (::%ln)', revs, common)) |
|
2252 nodes = [cl.node(r) for r in revs] |
|
2253 pushop.outobsmarkers = repo.obsstore.relevantmarkers(nodes) |
2229 |
2254 |
2230 @eh.wrapfunction(wireproto, 'capabilities') |
2255 @eh.wrapfunction(wireproto, 'capabilities') |
2231 def discocapabilities(orig, repo, proto): |
2256 def discocapabilities(orig, repo, proto): |
2232 """wrapper to advertise new capability""" |
2257 """wrapper to advertise new capability""" |
2233 caps = orig(repo, proto) |
2258 caps = orig(repo, proto) |
2242 oldcap, args = wireproto.commands['capabilities'] |
2267 oldcap, args = wireproto.commands['capabilities'] |
2243 def newcap(repo, proto): |
2268 def newcap(repo, proto): |
2244 return discocapabilities(oldcap, repo, proto) |
2269 return discocapabilities(oldcap, repo, proto) |
2245 wireproto.commands['capabilities'] = (newcap, args) |
2270 wireproto.commands['capabilities'] = (newcap, args) |
2246 wireproto.commands['evoext_obshash'] = (srv_obshash, 'nodes') |
2271 wireproto.commands['evoext_obshash'] = (srv_obshash, 'nodes') |
|
2272 olddisco = exchange.pushdiscoverymapping['obsmarker'] |
|
2273 def newdisco(pushop): |
|
2274 _pushdiscoveryobsmarkers(olddisco, pushop) |
|
2275 exchange.pushdiscoverymapping['obsmarker'] = newdisco |
2247 |
2276 |
2248 ### Set discovery START |
2277 ### Set discovery START |
2249 |
2278 |
2250 from mercurial import dagutil |
2279 from mercurial import dagutil |
2251 from mercurial import setdiscovery |
2280 from mercurial import setdiscovery |