diff --git a/hgext/rebase.py b/hgext/rebase.py --- a/hgext/rebase.py +++ b/hgext/rebase.py @@ -515,6 +515,21 @@ class rebaseruntime(object): ctx = repo[rev] if commitmsg is None: commitmsg = ctx.description() + + # Skip replacement if collapsing, as that degenerates to p1 for all + # nodes. + if not self.collapsef: + cl = repo.changelog + commitmsg = rewriteutil.update_hash_refs( + repo, + commitmsg, + { + cl.node(oldrev): [cl.node(newrev)] + for oldrev, newrev in self.state.items() + if newrev != revtodo + }, + ) + date = self.date if date is None: date = ctx.date() diff --git a/tests/test-rebase-rename.t b/tests/test-rebase-rename.t --- a/tests/test-rebase-rename.t +++ b/tests/test-rebase-rename.t @@ -312,14 +312,14 @@ Verify that copies get preserved (issue4 $ hg commit --message "File b created as copy of a and modified" $ hg copy b c $ echo c > c - $ hg commit --message "File c created as copy of b and modified" + $ hg commit --message "File c created as copy of b and modified" ## $ hg copy c d $ echo d > d - $ hg commit --message "File d created as copy of c and modified" + $ hg commit --message "File d created as copy of c and modified (child of 327f772bc074)" Note that there are four entries in the log for d $ hg tglog --follow d - @ 3: 421b7e82bb85 'File d created as copy of c and modified' + @ 3: 6be224292cfa 'File d created as copy of c and modified (child of 327f772bc074)' | o 2: 327f772bc074 'File c created as copy of b and modified' | @@ -342,14 +342,14 @@ Rebase the copies on top of the unrelate $ hg rebase --source 1 --dest 4 rebasing 1:79d255d24ad2 "File b created as copy of a and modified" rebasing 2:327f772bc074 "File c created as copy of b and modified" - rebasing 3:421b7e82bb85 "File d created as copy of c and modified" - saved backup bundle to $TESTTMP/copy-gets-preserved/.hg/strip-backup/79d255d24ad2-a2265555-rebase.hg + rebasing 3:6be224292cfa "File d created as copy of c and modified (child of 327f772bc074)" + saved backup bundle to $TESTTMP/copy-gets-preserved/.hg/strip-backup/79d255d24ad2-a3e674e3-rebase.hg $ hg update 4 3 files updated, 0 files merged, 0 files removed, 0 files unresolved There should still be four entries in the log for d $ hg tglog --follow d - @ 4: dbb9ba033561 'File d created as copy of c and modified' + @ 4: afbdde3a60d5 'File d created as copy of c and modified (child of af74b229bc02)' | o 3: af74b229bc02 'File c created as copy of b and modified' | @@ -368,9 +368,9 @@ copy records collapse correctly. rebasing 2:68bf06433839 "File b created as copy of a and modified" rebasing 3:af74b229bc02 "File c created as copy of b and modified" merging b and c to c - rebasing 4:dbb9ba033561 "File d created as copy of c and modified" + rebasing 4:afbdde3a60d5 "File d created as copy of c and modified (child of af74b229bc02)" merging c and d to d - saved backup bundle to $TESTTMP/copy-gets-preserved/.hg/strip-backup/68bf06433839-dde37595-rebase.hg + saved backup bundle to $TESTTMP/copy-gets-preserved/.hg/strip-backup/68bf06433839-29d5057f-rebase.hg $ hg co tip 3 files updated, 0 files merged, 0 files removed, 0 files unresolved @@ -378,11 +378,24 @@ This should show both revision 3 and 0 s copy of 'a'. $ hg tglog --follow d - @ 3: 5a46b94210e5 'Collapsed revision + @ 3: 75708a266e56 'Collapsed revision : * File b created as copy of a and modified : * File c created as copy of b and modified - : * File d created as copy of c and modified' + : * File d created as copy of c and modified (child of af74b229bc02)' o 0: b220cd6d2326 'File a created' + $ hg log -G -Tcompact + @ 3[tip] 75708a266e56 1970-01-01 00:00 +0000 test + | Collapsed revision + | + o 2 15258cf0cf10 1970-01-01 00:00 +0000 test + | unrelated commit is unrelated + | + o 1 1d689898494b 1970-01-01 00:00 +0000 test + | Unrelated file created + | + o 0 b220cd6d2326 1970-01-01 00:00 +0000 test + File a created + $ cd ..