Patchwork [2,of,2] merge: make 'cd' and 'dc' actions store the same arguments as 'm'

login
register
mail settings
Submitter Siddharth Agarwal
Date Nov. 13, 2015, 10:27 p.m.
Message ID <2a584d6ca31922c5f89d.1447453630@dev666.prn1.facebook.com>
Download mbox | patch
Permalink /patch/11398/
State Superseded
Headers show

Comments

Siddharth Agarwal - Nov. 13, 2015, 10:27 p.m.
# HG changeset patch
# User Siddharth Agarwal <sid0@fb.com>
# Date 1447441617 28800
#      Fri Nov 13 11:06:57 2015 -0800
# Node ID 2a584d6ca31922c5f89ddfbe10ee88f705e8d406
# Parent  88a697eb28dfa94038ac89543cd40ee65b5ca00b
merge: make 'cd' and 'dc' actions store the same arguments as 'm'

We're going to treat these conflicts similarly to merge conflicts, and this
change to the way we store things in memory makes future code a lot simpler.
Siddharth Agarwal - Nov. 14, 2015, 6:42 a.m.
On 11/13/15 14:27, Siddharth Agarwal wrote:
> # HG changeset patch
> # User Siddharth Agarwal <sid0@fb.com>
> # Date 1447441617 28800
> #      Fri Nov 13 11:06:57 2015 -0800
> # Node ID 2a584d6ca31922c5f89ddfbe10ee88f705e8d406
> # Parent  88a697eb28dfa94038ac89543cd40ee65b5ca00b
> merge: make 'cd' and 'dc' actions store the same arguments as 'm'

Spotted an issue with this series -- I'm going to resend shortly.

>
> We're going to treat these conflicts similarly to merge conflicts, and this
> change to the way we store things in memory makes future code a lot simpler.
>
> diff --git a/hgext/largefiles/overrides.py b/hgext/largefiles/overrides.py
> --- a/hgext/largefiles/overrides.py
> +++ b/hgext/largefiles/overrides.py
> @@ -481,6 +481,9 @@ def overridecalculateupdates(origfn, rep
>           (lm, largs, lmsg) = actions.get(lfile, (None, None, None))
>           (sm, sargs, smsg) = actions.get(standin, (None, None, None))
>           if sm in ('g', 'dc') and lm != 'r':
> +            if sm == 'dc':
> +                f1, f2, fa, move, anc = sargs
> +                sargs = (p2[f2].flags(),)
>               # Case 1: normal file in the working copy, largefile in
>               # the second parent
>               usermsg = _('remote turned local normal file %s into a largefile\n'
> @@ -496,6 +499,9 @@ def overridecalculateupdates(origfn, rep
>                   else:
>                       actions[standin] = ('r', None, 'replaced by non-standin')
>           elif lm in ('g', 'dc') and sm != 'r':
> +            if lm == 'dc':
> +                f1, f2, fa, move, anc = largs
> +                largs = (p2[f2].flags(),)
>               # Case 2: largefile in the working copy, normal file in
>               # the second parent
>               usermsg = _('remote turned local largefile %s into a normal file\n'
> diff --git a/mercurial/merge.py b/mercurial/merge.py
> --- a/mercurial/merge.py
> +++ b/mercurial/merge.py
> @@ -623,7 +623,8 @@ def manifestmerge(repo, wctx, p2, pa, br
>                       if acceptremote:
>                           actions[f] = ('r', None, "remote delete")
>                       else:
> -                        actions[f] = ('cd', None,  "prompt changed/deleted")
> +                        actions[f] = ('cd', (f, f, f, False, pa.node()),
> +                                      "prompt changed/deleted")
>                   elif n1[20:] == 'a':
>                       # This extra 'a' is added by working copy manifest to mark
>                       # the file as locally added. We should forget it instead of
> @@ -673,7 +674,8 @@ def manifestmerge(repo, wctx, p2, pa, br
>                   if acceptremote:
>                       actions[f] = ('c', (fl2,), "remote recreating")
>                   else:
> -                    actions[f] = ('dc', (fl2,), "prompt deleted/changed")
> +                    actions[f] = ('dc', (f, f, f, False, pa.node()),
> +                                  "prompt deleted/changed")
>   
>       return actions, diverge, renamedelete
>   
> @@ -1264,7 +1266,8 @@ def update(repo, node, branchmerge, forc
>                   actions['a'].append((f, None, "prompt keep"))
>   
>           for f, args, msg in sorted(actions['dc']):
> -            flags, = args
> +            f1, f2, fa, move, anc = args
> +            flags = p2[f2].flags()
>               if repo.ui.promptchoice(
>                   _("remote changed %s which local deleted\n"
>                     "use (c)hanged version or leave (d)eleted?"
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel@selenic.com
> https://selenic.com/mailman/listinfo/mercurial-devel

Patch

diff --git a/hgext/largefiles/overrides.py b/hgext/largefiles/overrides.py
--- a/hgext/largefiles/overrides.py
+++ b/hgext/largefiles/overrides.py
@@ -481,6 +481,9 @@  def overridecalculateupdates(origfn, rep
         (lm, largs, lmsg) = actions.get(lfile, (None, None, None))
         (sm, sargs, smsg) = actions.get(standin, (None, None, None))
         if sm in ('g', 'dc') and lm != 'r':
+            if sm == 'dc':
+                f1, f2, fa, move, anc = sargs
+                sargs = (p2[f2].flags(),)
             # Case 1: normal file in the working copy, largefile in
             # the second parent
             usermsg = _('remote turned local normal file %s into a largefile\n'
@@ -496,6 +499,9 @@  def overridecalculateupdates(origfn, rep
                 else:
                     actions[standin] = ('r', None, 'replaced by non-standin')
         elif lm in ('g', 'dc') and sm != 'r':
+            if lm == 'dc':
+                f1, f2, fa, move, anc = largs
+                largs = (p2[f2].flags(),)
             # Case 2: largefile in the working copy, normal file in
             # the second parent
             usermsg = _('remote turned local largefile %s into a normal file\n'
diff --git a/mercurial/merge.py b/mercurial/merge.py
--- a/mercurial/merge.py
+++ b/mercurial/merge.py
@@ -623,7 +623,8 @@  def manifestmerge(repo, wctx, p2, pa, br
                     if acceptremote:
                         actions[f] = ('r', None, "remote delete")
                     else:
-                        actions[f] = ('cd', None,  "prompt changed/deleted")
+                        actions[f] = ('cd', (f, f, f, False, pa.node()),
+                                      "prompt changed/deleted")
                 elif n1[20:] == 'a':
                     # This extra 'a' is added by working copy manifest to mark
                     # the file as locally added. We should forget it instead of
@@ -673,7 +674,8 @@  def manifestmerge(repo, wctx, p2, pa, br
                 if acceptremote:
                     actions[f] = ('c', (fl2,), "remote recreating")
                 else:
-                    actions[f] = ('dc', (fl2,), "prompt deleted/changed")
+                    actions[f] = ('dc', (f, f, f, False, pa.node()),
+                                  "prompt deleted/changed")
 
     return actions, diverge, renamedelete
 
@@ -1264,7 +1266,8 @@  def update(repo, node, branchmerge, forc
                 actions['a'].append((f, None, "prompt keep"))
 
         for f, args, msg in sorted(actions['dc']):
-            flags, = args
+            f1, f2, fa, move, anc = args
+            flags = p2[f2].flags()
             if repo.ui.promptchoice(
                 _("remote changed %s which local deleted\n"
                   "use (c)hanged version or leave (d)eleted?"