D6132: test: demonstrate crash with in-memory rebase and copies
martinvonz (Martin von Zweigbergk)
phabricator at mercurial-scm.org
Thu Mar 14 21:50:59 UTC 2019
martinvonz created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
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.
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D6132
AFFECTED FILES
tests/test-rebase-inmemory.t
CHANGE DETAILS
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 @@
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
To: martinvonz, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list