hgext/evolve.py
changeset 1108 87d60434b434
parent 1107 1c227ecb744d
child 1111 6328e005b6c8
equal deleted inserted replaced
1107:1c227ecb744d 1108:87d60434b434
  2252     topic = 'obsmarkers exchange'
  2252     topic = 'obsmarkers exchange'
  2253     if ui.configbool('experimental', 'verbose-obsolescence-exchange', False):
  2253     if ui.configbool('experimental', 'verbose-obsolescence-exchange', False):
  2254         topic = 'OBSEXC'
  2254         topic = 'OBSEXC'
  2255     ui.progress(topic, *args, **kwargs)
  2255     ui.progress(topic, *args, **kwargs)
  2256 
  2256 
  2257 @eh.wrapfunction(exchange, '_pushdiscoveryobsmarkers')
  2257 if getattr(exchange, '_pushdiscoveryobsmarkers', None) is not None:
  2258 def _pushdiscoveryobsmarkers(orig, pushop):
  2258     @eh.wrapfunction(exchange, '_pushdiscoveryobsmarkers')
  2259     if (obsolete._enabled
  2259     def _pushdiscoveryobsmarkers(orig, pushop):
  2260         and pushop.repo.obsstore
  2260         if (obsolete._enabled
  2261         and 'obsolete' in pushop.remote.listkeys('namespaces')):
  2261             and pushop.repo.obsstore
  2262         repo = pushop.repo
  2262             and 'obsolete' in pushop.remote.listkeys('namespaces')):
  2263         obsexcmsg(repo.ui, "computing relevant nodes\n")
  2263             repo = pushop.repo
  2264         revs = list(repo.revs('::%ln', pushop.futureheads))
  2264             obsexcmsg(repo.ui, "computing relevant nodes\n")
  2265         unfi = repo.unfiltered()
  2265             revs = list(repo.revs('::%ln', pushop.futureheads))
  2266         cl = unfi.changelog
  2266             unfi = repo.unfiltered()
  2267         if not pushop.remote.capable('_evoext_obshash_0'):
  2267             cl = unfi.changelog
  2268             # do not trust core yet
  2268             if not pushop.remote.capable('_evoext_obshash_0'):
  2269             # return orig(pushop)
  2269                 # do not trust core yet
       
  2270                 # return orig(pushop)
       
  2271                 nodes = [cl.node(r) for r in revs]
       
  2272                 if nodes:
       
  2273                     obsexcmsg(repo.ui, "computing markers relevant to %i nodes\n"
       
  2274                                        % len(nodes))
       
  2275                     pushop.outobsmarkers = repo.obsstore.relevantmarkers(nodes)
       
  2276                 else:
       
  2277                     obsexcmsg(repo.ui, "markers already in sync\n")
       
  2278                     pushop.outobsmarkers = []
       
  2279                     pushop.outobsmarkers = repo.obsstore.relevantmarkers(nodes)
       
  2280                 return
       
  2281 
       
  2282             common = []
       
  2283             obsexcmsg(repo.ui, "looking for common markers in %i nodes\n"
       
  2284                                % len(revs))
       
  2285             commonrevs = list(unfi.revs('::%ln', pushop.outgoing.commonheads))
       
  2286             common = findcommonobsmarkers(pushop.ui, unfi, pushop.remote, commonrevs)
       
  2287 
       
  2288             revs = list(unfi.revs('%ld - (::%ln)', revs, common))
  2270             nodes = [cl.node(r) for r in revs]
  2289             nodes = [cl.node(r) for r in revs]
  2271             if nodes:
  2290             if nodes:
  2272                 obsexcmsg(repo.ui, "computing markers relevant to %i nodes\n"
  2291                 obsexcmsg(repo.ui, "computing markers relevant to %i nodes\n"
  2273                                    % len(nodes))
  2292                                    % len(nodes))
  2274                 pushop.outobsmarkers = repo.obsstore.relevantmarkers(nodes)
  2293                 pushop.outobsmarkers = repo.obsstore.relevantmarkers(nodes)
  2275             else:
  2294             else:
  2276                 obsexcmsg(repo.ui, "markers already in sync\n")
  2295                 obsexcmsg(repo.ui, "markers already in sync\n")
  2277                 pushop.outobsmarkers = []
  2296                 pushop.outobsmarkers = []
  2278                 pushop.outobsmarkers = repo.obsstore.relevantmarkers(nodes)
       
  2279             return
       
  2280 
       
  2281         common = []
       
  2282         obsexcmsg(repo.ui, "looking for common markers in %i nodes\n"
       
  2283                            % len(revs))
       
  2284         commonrevs = list(unfi.revs('::%ln', pushop.outgoing.commonheads))
       
  2285         common = findcommonobsmarkers(pushop.ui, unfi, pushop.remote, commonrevs)
       
  2286 
       
  2287         revs = list(unfi.revs('%ld - (::%ln)', revs, common))
       
  2288         nodes = [cl.node(r) for r in revs]
       
  2289         if nodes:
       
  2290             obsexcmsg(repo.ui, "computing markers relevant to %i nodes\n"
       
  2291                                % len(nodes))
       
  2292             pushop.outobsmarkers = repo.obsstore.relevantmarkers(nodes)
       
  2293         else:
       
  2294             obsexcmsg(repo.ui, "markers already in sync\n")
       
  2295             pushop.outobsmarkers = []
       
  2296 
  2297 
  2297 @eh.wrapfunction(wireproto, 'capabilities')
  2298 @eh.wrapfunction(wireproto, 'capabilities')
  2298 def discocapabilities(orig, repo, proto):
  2299 def discocapabilities(orig, repo, proto):
  2299     """wrapper to advertise new capability"""
  2300     """wrapper to advertise new capability"""
  2300     caps = orig(repo, proto)
  2301     caps = orig(repo, proto)
  2309     oldcap, args = wireproto.commands['capabilities']
  2310     oldcap, args = wireproto.commands['capabilities']
  2310     def newcap(repo, proto):
  2311     def newcap(repo, proto):
  2311         return discocapabilities(oldcap, repo, proto)
  2312         return discocapabilities(oldcap, repo, proto)
  2312     wireproto.commands['capabilities'] = (newcap, args)
  2313     wireproto.commands['capabilities'] = (newcap, args)
  2313     wireproto.commands['evoext_obshash'] = (srv_obshash, 'nodes')
  2314     wireproto.commands['evoext_obshash'] = (srv_obshash, 'nodes')
  2314     olddisco = exchange.pushdiscoverymapping['obsmarker']
  2315     if getattr(exchange, '_pushdiscoveryobsmarkers', None) is None:
  2315     def newdisco(pushop):
  2316         ui.warn('evolve: your mercurial version is too old\n'
  2316         _pushdiscoveryobsmarkers(olddisco, pushop)
  2317                 'evolve: (running in degraded mode, push will includes all markers)\n')
  2317     exchange.pushdiscoverymapping['obsmarker'] = newdisco
  2318     else:
       
  2319         olddisco = exchange.pushdiscoverymapping['obsmarker']
       
  2320         def newdisco(pushop):
       
  2321             _pushdiscoveryobsmarkers(olddisco, pushop)
       
  2322         exchange.pushdiscoverymapping['obsmarker'] = newdisco
  2318 
  2323 
  2319 ### Set discovery START
  2324 ### Set discovery START
  2320 
  2325 
  2321 from mercurial import dagutil
  2326 from mercurial import dagutil
  2322 from mercurial import setdiscovery
  2327 from mercurial import setdiscovery
  2556         common = boundaries['common']
  2561         common = boundaries['common']
  2557         if common != [nullid]:
  2562         if common != [nullid]:
  2558             kwargs['evo_obscommon'] = common
  2563             kwargs['evo_obscommon'] = common
  2559     return ret
  2564     return ret
  2560 
  2565 
  2561 @eh.wrapfunction(exchange, '_getbundleobsmarkerpart')
  2566 if getattr(exchange, '_getbundleobsmarkerpart', None) is not None:
  2562 def _getbundleobsmarkerpart(orig, bundler, repo, source, heads=None, common=None,
  2567     @eh.wrapfunction(exchange, '_getbundleobsmarkerpart')
  2563                             bundlecaps=None, **kwargs):
  2568     def _getbundleobsmarkerpart(orig, bundler, repo, source, heads=None, common=None,
  2564     if 'evo_obscommon' not in kwargs:
  2569                                 bundlecaps=None, **kwargs):
  2565         return orig(bundler, repo, source, heads, common, bundlecaps, **kwargs)
  2570         if 'evo_obscommon' not in kwargs:
  2566 
  2571             return orig(bundler, repo, source, heads, common, bundlecaps, **kwargs)
  2567     if kwargs.get('obsmarkers', False):
  2572 
  2568         if heads is None:
  2573         if kwargs.get('obsmarkers', False):
  2569             heads = repo.heads()
  2574             if heads is None:
  2570         obscommon = kwargs.get('evo_obscommon', ())
  2575                 heads = repo.heads()
  2571         obsset = repo.set('::%ln - ::%ln', heads, obscommon)
  2576             obscommon = kwargs.get('evo_obscommon', ())
  2572         subset = [c.node() for c in obsset]
  2577             obsset = repo.set('::%ln - ::%ln', heads, obscommon)
  2573         markers = repo.obsstore.relevantmarkers(subset)
  2578             subset = [c.node() for c in obsset]
  2574         exchange.buildobsmarkerspart(bundler, markers)
  2579             markers = repo.obsstore.relevantmarkers(subset)
       
  2580             exchange.buildobsmarkerspart(bundler, markers)
  2575 
  2581 
  2576 
  2582 
  2577 @eh.wrapfunction(exchange, '_pullobsolete')
  2583 @eh.wrapfunction(exchange, '_pullobsolete')
  2578 def _pullobsolete(orig, pullop):
  2584 def _pullobsolete(orig, pullop):
  2579     if not obsolete._enabled:
  2585     if not obsolete._enabled: