On Sat, Aug 18, 2018 at 2:27 AM Boris Feld <boris.f...@octobus.net> wrote:

> # HG changeset patch
> # User Boris Feld <boris.f...@octobus.net>
> # Date 1534570054 -7200
> #      Sat Aug 18 07:27:34 2018 +0200
> # Node ID 8e08a733133d84db3587e2d780acbb654ade7371
> # Parent  23aa0ae26db3a1f912e4f32ffb1f72758d4462f0
> # EXP-Topic sparse-snapshot
> # Available At https://bitbucket.org/octobus/mercurial-devel/
> #              hg pull https://bitbucket.org/octobus/mercurial-devel/ -r
> 8e08a733133d
> revlogdeltas: extract _getcandidaterevs in a function
>
> The logic barely uses the object it is attached to. This is an important
> function that we will clean up in the coming changesets. Moving it at the
> top
> level helps us with that cleanup.
>
> diff --git a/mercurial/revlogutils/deltas.py
> b/mercurial/revlogutils/deltas.py
> --- a/mercurial/revlogutils/deltas.py
> +++ b/mercurial/revlogutils/deltas.py
> @@ -568,57 +568,57 @@ def isgooddeltainfo(revlog, deltainfo, r
>
>      return True
>
> +def _candidate_groups(revlog, p1, p2, cachedelta):
>

This doesn't conform with our naming conventions.


> +    """
> +    Provides revisions that present an interest to be diffed against,
> +    grouped by level of easiness.
> +    """
> +    gdelta = revlog._generaldelta
> +    curr = len(revlog)
> +    prev = curr - 1
> +    p1r, p2r = revlog.rev(p1), revlog.rev(p2)
> +
> +    # should we try to build a delta?
> +    if prev != nullrev and revlog.storedeltachains:
> +        tested = set()
> +        # This condition is true most of the time when processing
> +        # changegroup data into a generaldelta repo. The only time it
> +        # isn't true is if this is the first revision in a delta chain
> +        # or if ``format.generaldelta=true`` disabled ``lazydeltabase``.
> +        if cachedelta and gdelta and revlog._lazydeltabase:
> +            # Assume what we received from the server is a good choice
> +            # build delta will reuse the cache
> +            yield (cachedelta[0],)
> +            tested.add(cachedelta[0])
> +
> +        if gdelta:
> +            # exclude already lazy tested base if any
> +            parents = [p for p in (p1r, p2r)
> +                       if p != nullrev and p not in tested]
> +
> +            if not revlog._deltabothparents and len(parents) == 2:
> +                parents.sort()
> +                # To minimize the chance of having to build a fulltext,
> +                # pick first whichever parent is closest to us (max rev)
> +                yield (parents[1],)
> +                # then the other one (min rev) if the first did not fit
> +                yield (parents[0],)
> +                tested.update(parents)
> +            elif len(parents) > 0:
> +                # Test all parents (1 or 2), and keep the best candidate
> +                yield parents
> +                tested.update(parents)
> +
> +        if prev not in tested:
> +            # other approach failed try against prev to hopefully save us
> a
> +            # fulltext.
> +            yield (prev,)
> +            tested.add(prev)
> +
>  class deltacomputer(object):
>      def __init__(self, revlog):
>          self.revlog = revlog
>
> -    def _getcandidaterevs(self, p1, p2, cachedelta):
> -        """
> -        Provides revisions that present an interest to be diffed against,
> -        grouped by level of easiness.
> -        """
> -        revlog = self.revlog
> -        gdelta = revlog._generaldelta
> -        curr = len(revlog)
> -        prev = curr - 1
> -        p1r, p2r = revlog.rev(p1), revlog.rev(p2)
> -
> -        # should we try to build a delta?
> -        if prev != nullrev and revlog.storedeltachains:
> -            tested = set()
> -            # This condition is true most of the time when processing
> -            # changegroup data into a generaldelta repo. The only time it
> -            # isn't true is if this is the first revision in a delta chain
> -            # or if ``format.generaldelta=true`` disabled
> ``lazydeltabase``.
> -            if cachedelta and gdelta and revlog._lazydeltabase:
> -                # Assume what we received from the server is a good choice
> -                # build delta will reuse the cache
> -                yield (cachedelta[0],)
> -                tested.add(cachedelta[0])
> -
> -            if gdelta:
> -                # exclude already lazy tested base if any
> -                parents = [p for p in (p1r, p2r)
> -                           if p != nullrev and p not in tested]
> -
> -                if not revlog._deltabothparents and len(parents) == 2:
> -                    parents.sort()
> -                    # To minimize the chance of having to build a
> fulltext,
> -                    # pick first whichever parent is closest to us (max
> rev)
> -                    yield (parents[1],)
> -                    # then the other one (min rev) if the first did not
> fit
> -                    yield (parents[0],)
> -                    tested.update(parents)
> -                elif len(parents) > 0:
> -                    # Test all parents (1 or 2), and keep the best
> candidate
> -                    yield parents
> -                    tested.update(parents)
> -
> -            if prev not in tested:
> -                # other approach failed try against prev to hopefully
> save us a
> -                # fulltext.
> -                yield (prev,)
> -                tested.add(prev)
>
>      def buildtext(self, revinfo, fh):
>          """Builds a fulltext version of a revision
> @@ -712,7 +712,7 @@ class deltacomputer(object):
>                   depending on whether it is inlined or not
>
>          Returns the first acceptable candidate revision, as ordered by
> -        _getcandidaterevs
> +        _candidate_groups
>
>          If no suitable deltabase is found, we return delta info for a full
>          snapshot.
> @@ -736,7 +736,8 @@ class deltacomputer(object):
>
>          deltainfo = None
>          deltas_limit = revinfo.textlen * LIMIT_DELTA2TEXT
> -        for candidaterevs in self._getcandidaterevs(p1, p2, cachedelta):
> +        candidate_groups = _candidate_groups(self.revlog, p1, p2,
> cachedelta)
>

Same.


> +        for candidaterevs in candidate_groups:
>              # filter out delta base that will never produce good delta
>              candidaterevs = [r for r in candidaterevs
>                               if self.revlog.length(r) <= deltas_limit]
>
_______________________________________________
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Reply via email to