# HG changeset patch # User Pierre-Yves David # Date 1556015385 -7200 # Node ID c67a6998b8bafd57f2d1b66d0197e85f3707a7f6 # Parent 381c5383822591c47efa783b31246dbb684c4029# Parent dcaf340841efc737b1038ca166c852238d7213a8 test-compat: merge mercurial-4.8 into mercurial-4.7 diff -r dcaf340841ef -r c67a6998b8ba CHANGELOG --- a/CHANGELOG Sat Apr 20 03:55:07 2019 +0200 +++ b/CHANGELOG Tue Apr 23 12:29:45 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). diff -r dcaf340841ef -r c67a6998b8ba hgext3rd/evolve/evolvecmd.py --- a/hgext3rd/evolve/evolvecmd.py Sat Apr 20 03:55:07 2019 +0200 +++ b/hgext3rd/evolve/evolvecmd.py Tue Apr 23 12:29:45 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'))