diff --git a/hgext/rebase.py b/hgext/rebase.py --- a/hgext/rebase.py +++ b/hgext/rebase.py @@ -312,7 +312,7 @@ def rebase(ui, repo, **opts): collapsedas = None if collapsef: collapsedas = newrev - clearrebased(ui, repo, state, collapsedas) + clearrebased(ui, repo, state, skipped, collapsedas) if currentbookmarks: updatebookmarks(repo, nstate, currentbookmarks, **opts) @@ -660,7 +660,7 @@ def buildstate(repo, dest, rebaseset, co state[r] = nullmerge return repo['.'].rev(), dest.rev(), state -def clearrebased(ui, repo, state, collapsedas=None): +def clearrebased(ui, repo, state, skipped, collapsedas=None): """dispose of rebased revision at the end of the rebase If `collapsedas` is not None, the rebase was a collapse whose result if the @@ -669,9 +669,13 @@ def clearrebased(ui, repo, state, collap markers = [] for rev, newrev in sorted(state.items()): if newrev >= 0: - if collapsedas is not None: - newrev = collapsedas - markers.append((repo[rev], (repo[newrev],))) + if rev in skipped: + succs = () + elif collapsedas is not None: + succs = (repo[collapsedas],) + else: + succs = (repo[newrev],) + markers.append((repo[rev], succs)) if markers: obsolete.createmarkers(repo, markers) else: diff --git a/tests/test-rebase-obsolete.t b/tests/test-rebase-obsolete.t --- a/tests/test-rebase-obsolete.t +++ b/tests/test-rebase-obsolete.t @@ -166,10 +166,65 @@ set. o 0:cd010b8cd998 A $ hg debugobsolete - 42ccdea3bb16d28e1848c95fe2e44c000f3f21b1 08483444fef91d6224f6655ee586a65d263ad34c 0 {'date': '*', 'user': 'test'} (glob) + 42ccdea3bb16d28e1848c95fe2e44c000f3f21b1 0 {'date': '*', 'user': 'test'} (glob) + 5fddd98957c8a54a4d436dfe1da9d87f21a1b97b 5ae4c968c6aca831df823664e706c9d4aa34473d 0 {'date': '*', 'user': 'test'} (glob) + 32af7686d403cf45b5d95f2d70cebea587ac806a 0 {'date': '*', 'user': 'test'} (glob) + + +More complex case were part of the rebase set were already rebased + + $ hg rebase --rev 'desc(D)' --dest 'desc(H)' + $ hg debugobsolete + 42ccdea3bb16d28e1848c95fe2e44c000f3f21b1 0 {'date': '*', 'user': 'test'} (glob) 5fddd98957c8a54a4d436dfe1da9d87f21a1b97b 5ae4c968c6aca831df823664e706c9d4aa34473d 0 {'date': '*', 'user': 'test'} (glob) - 32af7686d403cf45b5d95f2d70cebea587ac806a 5ae4c968c6aca831df823664e706c9d4aa34473d 0 {'date': '*', 'user': 'test'} (glob) - + 32af7686d403cf45b5d95f2d70cebea587ac806a 0 {'date': '*', 'user': 'test'} (glob) + 08483444fef91d6224f6655ee586a65d263ad34c cbc07f26687521cecfc9a141bf5ecfc0fd2b8531 0 {'date': '* *', 'user': 'test'} (glob) + $ hg log -G + @ 11:cbc07f266875 D + | + | o 10:5ae4c968c6ac C + | | + | x 9:08483444fef9 D + | | + | o 8:8877864f1edb B + | | + o | 7:02de42196ebe H + | | + | o 6:eea13746799a G + |/| + o | 5:24b6387c8c8c F + | | + | o 4:9520eea781bc E + |/ + o 0:cd010b8cd998 A + + $ hg rebase --source 'desc(B)' --dest 'tip' + $ hg debugobsolete + 42ccdea3bb16d28e1848c95fe2e44c000f3f21b1 0 {'date': '* *', 'user': 'test'} (glob) + 5fddd98957c8a54a4d436dfe1da9d87f21a1b97b 5ae4c968c6aca831df823664e706c9d4aa34473d 0 {'date': '* *', 'user': 'test'} (glob) + 32af7686d403cf45b5d95f2d70cebea587ac806a 0 {'date': '* *', 'user': 'test'} (glob) + 08483444fef91d6224f6655ee586a65d263ad34c cbc07f26687521cecfc9a141bf5ecfc0fd2b8531 0 {'date': '* *', 'user': 'test'} (glob) + 8877864f1edb05d0e07dc4ba77b67a80a7b86672 b1861c79d66ec3aa1b607ac3c9fb819e38b12238 0 {'date': '* *', 'user': 'test'} (glob) + 08483444fef91d6224f6655ee586a65d263ad34c 0 {'date': '* *', 'user': 'test'} (glob) + 5ae4c968c6aca831df823664e706c9d4aa34473d dd4be135457a404ce5541de427ae1d98a28f4acd 0 {'date': '* *', 'user': 'test'} (glob) + $ hg log --rev 'divergent()' + $ hg log -G + @ 13:dd4be135457a C + | + o 12:b1861c79d66e B + | + o 11:cbc07f266875 D + | + o 7:02de42196ebe H + | + | o 6:eea13746799a G + |/| + o | 5:24b6387c8c8c F + | | + | o 4:9520eea781bc E + |/ + o 0:cd010b8cd998 A + $ cd .. @@ -329,3 +384,4 @@ Test multiple root handling |/ o 0:cd010b8cd998 A + $ cd ..