--- a/CHANGELOG Sat Apr 20 03:55:06 2019 +0200
+++ b/CHANGELOG Tue Apr 23 12:29:44 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:06 2019 +0200
+++ b/hgext3rd/evolve/evolvecmd.py Tue Apr 23 12:29:44 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'))