# HG changeset patch # User Martin von Zweigbergk # Date 2019-03-14 20:53:20 # Node ID dd1ab72be9832584993955dfeb98d46c79602935 # Parent b74ef67573e58294771487c5e39f003a9512d11a test: demonstrate crash with in-memory rebase and copies In the added test case, there is a merge commit that has one obsolete parent with a rename. Since the rename is not in the other parent, pathcopies() from that other parent will include the copy. Then when we try to rebase this merge commit onto another commit that has the same content changes, but no tracking of the rename (because it was done with "hg remove; hg add" instead of "hg mv"), we try to propagate the copy information. That fails because overlayworkingctx expects a file to be modified if it's going to have copy information. Differential Revision: https://phab.mercurial-scm.org/D6132 diff --git a/tests/test-rebase-inmemory.t b/tests/test-rebase-inmemory.t --- a/tests/test-rebase-inmemory.t +++ b/tests/test-rebase-inmemory.t @@ -718,3 +718,43 @@ issue5960: this was raising an Attribute diff --git a/foo.txt b/foo.txt old mode 100644 new mode 100755 + +Test rebasing a commit with copy information, but no content changes + + $ cd .. + $ hg clone -q repo1 merge-and-rename + $ cd merge-and-rename + $ cat << EOF >> .hg/hgrc + > [experimental] + > evolution.createmarkers=True + > evolution.allowunstable=True + > EOF + $ hg co -q 1 + $ hg mv d e + $ hg ci -qm 'rename d to e' + $ hg co -q 3 + $ hg merge -q 4 + $ hg ci -m 'merge' + $ hg co -q 2 + $ mv d e + $ hg addremove -qs 0 + $ hg ci -qm 'untracked rename of d to e' + $ hg debugobsolete -q `hg log -T '{node}' -r 4` `hg log -T '{node}' -r .` + 1 new orphan changesets + $ hg tglog + @ 6: 676538af172d 'untracked rename of d to e' + | + | * 5: 71cb43376053 'merge' + | |\ + | | x 4: 2c8b5dad7956 'rename d to e' + | | | + | o | 3: ca58782ad1e4 'b' + |/ / + o / 2: 814f6bd05178 'c' + |/ + o 1: 02952614a83d 'd' + | + o 0: b173517d0057 'a' + + $ hg rebase -b 5 -d tip 2>&1 | grep '** ProgrammingError' + ** ProgrammingError: markcopied() called on clean context