[PATCH 8 of 8] copies: make _checkcopies handle divergences in rotated DAG (issue4028)

Gábor STEFANIK Gabor.STEFANIK at nng.com
Tue Oct 4 10:22:47 EDT 2016


Please disregard, incomplete patchset.

>


--------------------------------------------------------------------------
This message, including its attachments, is confidential. For more information please read NNG's email policy here:
http://www.nng.com/emailpolicy/
By responding to this email you accept the email policy.


-----Original Message-----
> From: Mercurial-devel [mailto:mercurial-devel-bounces at mercurial-scm.org]
> On Behalf Of Gábor Stefanik
> Sent: Tuesday, October 4, 2016 4:06 PM
> To: mercurial-devel at mercurial-scm.org
> Subject: [PATCH 8 of 8] copies: make _checkcopies handle divergences in
> rotated DAG (issue4028)
>
> # HG changeset patch
> # User Gábor Stefanik <gabor.stefanik at nng.com> # Date 1475588323 -7200
> #      Tue Oct 04 15:38:43 2016 +0200
> # Node ID 4a94e40ad88ff1939c3c099903560f4d17251746
> # Parent  54afc2a4b419b0f972e75e53df4336ed2a5b32b6
> copies: make _checkcopies handle divergences in rotated DAG (issue4028)
>
> diff --git a/mercurial/copies.py b/mercurial/copies.py
> --- a/mercurial/copies.py
> +++ b/mercurial/copies.py
> @@ -347,11 +347,11 @@
>
>      for f in u1u:
>          _checkcopies(c1, f, m1, m2, ca, ca, False, limit, diverge, copy1,
> -                     fullcopy1)
> +                     fullcopy1, incomplete1, incompletediverge)
>
>      for f in u2u:
>          _checkcopies(c2, f, m2, m1, ca, ca, False, limit, diverge, copy2,
> -                     fullcopy2)
> +                     fullcopy2, incomplete2, incompletediverge)
>
>      copy = dict(copy1.items() + copy2.items())
>      movewithdir = dict(movewithdir1.items() + movewithdir2.items()) @@ -
> 380,9 +380,9 @@
>      incomplete1, incomplete2, incompletediverge = {}, {}, {}
>      for f in bothnew:
>          _checkcopies(c1, f, m1, m2, ca, ca, False, limit, bothdiverge, _copy,
> -                     _fullcopy)
> +                     _fullcopy, incomplete1, incompletediverge)
>          _checkcopies(c2, f, m2, m1, ca, ca, False, limit, bothdiverge, _copy,
> -                     _fullcopy)
> +                     _fullcopy, incomplete2, incompletediverge)
>      for of, fl in bothdiverge.items():
>          if len(fl) == 2 and fl[0] == fl[1]:
>              copy[fl[0]] = of # not actually divergent, just matching renames @@ -
> 463,7 +463,7 @@
>      return copy, movewithdir, diverge, renamedelete
>
>  def _checkcopies(ctx, f, m1, m2, ca, tca, remoteca, limit, diverge, copy,
> -                 fullcopy):
> +                 fullcopy, incomplete, incompletediverge):
>      """
>      check possible copies of f from m1 to m2
>
> @@ -478,6 +478,8 @@
>      diverge = record all diverges in this dict
>      copy = record all non-divergent copies in this dict
>      fullcopy = record all copies in this dict
> +    incomplete = record non-divergent partial copies here
> +    incompletediverge = record divergent partial copies here
>
>      note: limit is only an optimization, and there is no guarantee that
>      irrelevant revisions will not be limited @@ -553,10 +555,25 @@
>                  copy[of] = f
>                  del fullcopy[f]
>                  fullcopy[of] = f
> +            else: # divergence w.r.t. graft CA on one side of topological CA
> +                for sf in seen:
> +                    if sf in ma:
> +                        assert sf not in diverge
> +                        diverge[sf] = [f, of]
> +                        break
>              return
>
> -    if of in ma:
> -        diverge.setdefault(of, []).append(f)
> +    if of in mta:
> +        if backwards or remoteca:
> +            incomplete[of] = f
> +        else:
> +            for sf in seen:
> +                if sf in ma:
> +                    if tca == ca:
> +                        diverge.setdefault(sf, []).append(f)
> +                    else:
> +                        incompletediverge[sf] = [of, f]
> +                    return
>
>  def duplicatecopies(repo, rev, fromrev, skiprev=None):
>      '''reproduce copies from fromrev to rev in the dirstate
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


More information about the Mercurial-devel mailing list