test-compat: merge stable into mercurial-4.9 mercurial-4.9
authorPierre-Yves David <pierre-yves.david@octobus.net>
Tue, 23 Apr 2019 12:29:42 +0200
branchmercurial-4.9
changeset 4555 e914abb05c6a
parent 4554 093df66127ec (diff)
parent 4547 bdcea921d28b (current diff)
child 4557 381c53838225
child 4566 1e31e225942c
test-compat: merge stable into mercurial-4.9
--- a/CHANGELOG	Sat Apr 20 03:55:04 2019 +0200
+++ b/CHANGELOG	Tue Apr 23 12:29:42 2019 +0200
@@ -5,6 +5,8 @@
 -------------------
 
   * evolve: make sure we use upstream merge code with 5.0,
+  * evolve: restore compatibility with 4.4
+            (This regress the narrow compatibility)
   * topic: compatibility with mercurial-5.0,
   * topic: improve extensions isolation (issue6121).
 
--- a/hgext3rd/evolve/evolvecmd.py	Sat Apr 20 03:55:04 2019 +0200
+++ b/hgext3rd/evolve/evolvecmd.py	Tue Apr 23 12:29:42 2019 +0200
@@ -276,22 +276,43 @@
     newid = None
     replacementnode = None
 
-    # Create the new commit context. This is done by applying the changes from
-    # the precursor to the bumped node onto the precursor. This is effectively
-    # like reverting to the bumped node.
-    wctx = context.overlayworkingctx(repo)
-    wctx.setbase(prec)
-    merge.update(repo, bumped.node(), ancestor=prec, mergeancestor=True,
-                 branchmerge=True, force=False, wc=wctx)
-    if not wctx.isempty():
+    # Create the new commit context
+    files = set()
+    copied = copies.pathcopies(prec, bumped)
+    precmanifest = prec.manifest().copy()
+    # 3.3.2 needs a list.
+    # future 3.4 don't detect the size change during iteration
+    # this is fishy
+    for key, val in list(bumped.manifest().iteritems()):
+        precvalue = precmanifest.get(key, None)
+        if precvalue is not None:
+            del precmanifest[key]
+        if precvalue != val:
+            files.add(key)
+    files.update(precmanifest)  # add missing files
+
+    # commit it
+    if files: # something to commit!
+        def filectxfn(repo, ctx, path):
+            if path in bumped:
+                fctx = bumped[path]
+                flags = fctx.flags()
+                mctx = compat.memfilectx(repo, ctx, fctx, flags, copied, path)
+                return mctx
+            return None
         text = '%s update to %s:\n\n' % (TROUBLES['PHASEDIVERGENT'], prec)
         text += bumped.description()
-        memctx = wctx.tomemctx(text,
-                               parents=(prec.node(), nodemod.nullid),
-                               date=bumped.date(),
-                               extra=bumped.extra(),
-                               user=bumped.user())
-        newid = repo.commitctx(memctx)
+
+        new = context.memctx(repo,
+                             parents=[prec.node(), nodemod.nullid],
+                             text=text,
+                             files=files,
+                             filectxfn=filectxfn,
+                             user=bumped.user(),
+                             date=bumped.date(),
+                             extra=bumped.extra())
+
+        newid = repo.commitctx(new)
         replacementnode = newid
     if newid is None:
         repo.ui.status(_('no changes to commit\n'))