[PATCH 5 of 5] computeoutgoing: move the function from 'changegroup' to 'exchange'

Pierre-Yves David pierre-yves.david at ens-lyon.org
Tue Aug 16 20:35:26 EDT 2016



On 08/14/2016 05:57 PM, Gregory Szorc wrote:
> On Thu, Aug 11, 2016 at 1:06 PM, Pierre-Yves David
> <pierre-yves.david at ens-lyon.org <mailto:pierre-yves.david at ens-lyon.org>>
> wrote:
>
>     # HG changeset patch
>     # User Pierre-Yves David <pierre-yves.david at ens-lyon.org
>     <mailto:pierre-yves.david at ens-lyon.org>>
>     # Date 1470755195 -7200
>     #      Tue Aug 09 17:06:35 2016 +0200
>     # Node ID c60098bda68be8901e564445fe157888f317bf5a
>     # Parent  0a35b949b92ac83e66ddaa706deb8c0f228a045b
>     # EXP-Topic outgoing
>     computeoutgoing: move the function from 'changegroup' to 'exchange'
>
>     Now that all users are in exchange, we can safely move the code in the
>     'exchange' module. This function is really about processing the
>     argument of a
>     'getbundle' call, so it even makes senses to do so.
>
>     diff -r 0a35b949b92a -r c60098bda68b mercurial/changegroup.py
>     --- a/mercurial/changegroup.py  Tue Aug 09 17:00:38 2016 +0200
>     +++ b/mercurial/changegroup.py  Tue Aug 09 17:06:35 2016 +0200
>     @@ -15,7 +15,6 @@ import weakref
>      from .i18n import _
>      from .node import (
>          hex,
>     -    nullid,
>          nullrev,
>          short,
>      )
>     @@ -969,25 +968,6 @@ def getlocalchangegroup(repo, source, ou
>          bundler = getbundler(version, repo, bundlecaps)
>          return getsubset(repo, outgoing, bundler, source)
>
>     -def computeoutgoing(repo, heads, common):
>     -    """Computes which revs are outgoing given a set of common
>     -    and a set of heads.
>     -
>     -    This is a separate function so extensions can have access to
>     -    the logic.
>     -
>     -    Returns a discovery.outgoing object.
>     -    """
>     -    cl = repo.changelog
>     -    if common:
>     -        hasnode = cl.hasnode
>     -        common = [n for n in common if hasnode(n)]
>     -    else:
>     -        common = [nullid]
>     -    if not heads:
>     -        heads = cl.heads()
>     -    return discovery.outgoing(repo, common, heads)
>     -
>      def getchangegroup(repo, source, outgoing, bundlecaps=None,
>                         version='01'):
>          """Like changegroupsubset, but returns the set difference
>     between the
>     diff -r 0a35b949b92a -r c60098bda68b mercurial/exchange.py
>     --- a/mercurial/exchange.py     Tue Aug 09 17:00:38 2016 +0200
>     +++ b/mercurial/exchange.py     Tue Aug 09 17:06:35 2016 +0200
>     @@ -257,6 +257,25 @@ def buildobsmarkerspart(bundler, markers
>              return bundler.newpart('obsmarkers', data=stream)
>          return None
>
>     +def _computeoutgoing(repo, heads, common):
>     +    """Computes which revs are outgoing given a set of common
>     +    and a set of heads.
>     +
>     +    This is a separate function so extensions can have access to
>     +    the logic.
>     +
>     +    Returns a discovery.outgoing object.
>     +    """
>     +    cl = repo.changelog
>     +    if common:
>     +        hasnode = cl.hasnode
>     +        common = [n for n in common if hasnode(n)]
>     +    else:
>     +        common = [nullid]
>     +    if not heads:
>     +        heads = cl.heads()
>     +    return discovery.outgoing(repo, common, heads)
>     +
>      def _forcebundle1(op):
>          """return true if a pull/push must use bundle1
>
>     @@ -1535,7 +1554,7 @@ def getbundle(repo, source, heads=None,
>              if kwargs:
>                  raise ValueError(_('unsupported getbundle arguments: %s')
>                                   % ', '.join(sorted(kwargs.keys())))
>     -        outgoing = changegroup.computeoutgoing(repo, heads, common)
>     +        outgoing = _computeoutgoing(repo, heads, common)
>              return changegroup.getchangegroup(repo, source, outgoing,
>                                                bundlecaps=bundlecaps)
>
>     @@ -1572,7 +1591,7 @@ def _getbundlechangegrouppart(bundler, r
>                  if not cgversions:
>                      raise ValueError(_('no common changegroup version'))
>                  version = max(cgversions)
>     -        outgoing = changegroup.computeoutgoing(repo, heads, common)
>     +        outgoing = _computeoutgoing(repo, heads, common)
>              cg = changegroup.getlocalchangegroupraw(repo, source, outgoing,
>                                                      bundlecaps=bundlecaps,
>                                                      version=version)
>     @@ -1625,7 +1644,7 @@ def _getbundletagsfnodes(bundler, repo,
>          if not (kwargs.get('cg', True) and 'hgtagsfnodes' in b2caps):
>              return
>
>     -    outgoing = changegroup.computeoutgoing(repo, heads, common)
>     +    outgoing = _computeoutgoing(repo, heads, common)
>
>          if not outgoing.missingheads:
>              return
>
>
> I have a slight preference for this code living in discovery.py since
> discovery.py seems to be the place where we figure out the difference in
> changesets between peers. But there is overlap between discovery.py and
> exchange.py, so it isn't a strong preference.

This live in exchange because what is actually does is processing 
argument from a getbundle call. This is highlighted by the fact the only 
users are in exchange.py. I think it belong exchange.py

-- 
Pierre-Yves David


More information about the Mercurial-devel mailing list