# HG changeset patch # User Anton Shestakov # Date 1562753798 -28800 # Node ID b69497b23d31fd6e2960c0708b74ef92301e018e # Parent d48b689ea78ada606d970ef38bb01dc85eca349a touch: make sure merge commits include files from p1 and p2 Otherwise touching a merge commit makes it lose all changes. This fix populates `updates` argument of rewriteutil.rewrite() with parent changesets. That argument is normally used for folding multiple changesets, but in this case it's simply used to include files from p1 and p2. Usually, rewrite() works fine using ctx.files(), but that function can return an empty list when ctx is a merge commit. diff -r d48b689ea78a -r b69497b23d31 hgext3rd/evolve/cmdrewrite.py --- a/hgext3rd/evolve/cmdrewrite.py Tue Jul 09 10:56:42 2019 -0700 +++ b/hgext3rd/evolve/cmdrewrite.py Wed Jul 10 18:16:38 2019 +0800 @@ -1397,8 +1397,11 @@ else: duplicate = True + updates = [] + if len(ctx.parents()) > 1: + updates = ctx.parents() extradict = {'extra': extra} - new, unusedvariable = rewriteutil.rewrite(repo, ctx, [], ctx, + new, unusedvariable = rewriteutil.rewrite(repo, ctx, updates, ctx, [p1, p2], commitopts=extradict) # store touched version to help potential children diff -r d48b689ea78a -r b69497b23d31 tests/test-touch.t --- a/tests/test-touch.t Tue Jul 09 10:56:42 2019 -0700 +++ b/tests/test-touch.t Wed Jul 10 18:16:38 2019 +0800 @@ -181,6 +181,9 @@ 2 files updated, 0 files merged, 0 files removed, 0 files unresolved (branch merge, don't forget to commit) $ hg ci -m merge + $ hg st --change . + A a + A b $ hg prune -r . 0 files updated, 0 files merged, 2 files removed, 0 files unresolved working directory is now at * (glob) @@ -194,3 +197,6 @@ @ 12: move | ~ + $ hg st --change 17 + A a + A b