diff -r 4bae3c117b57 -r 3b7cb3d17137 hgext/rebase.py --- a/hgext/rebase.py Mon Jun 26 13:13:51 2017 -0700 +++ b/hgext/rebase.py Fri Jul 07 18:51:46 2017 -0700 @@ -139,7 +139,6 @@ # dict will be what contains most of the rebase progress state. self.state = {} self.activebookmark = None - self.currentbookmarks = None self.dest = None self.skipped = set() self.destancestors = set() @@ -364,8 +363,7 @@ self.destancestors = repo.changelog.ancestors([self.dest], inclusive=True) - # Keep track of the current bookmarks in order to reset them later - self.currentbookmarks = repo._bookmarks.copy() + # Keep track of the active bookmarks in order to reset them later self.activebookmark = self.activebookmark or repo._activebookmark if self.activebookmark: bookmarks.deactivate(repo) @@ -498,19 +496,6 @@ if 'qtip' in repo.tags(): updatemq(repo, self.state, self.skipped, **opts) - if self.currentbookmarks: - # Nodeids are needed to reset bookmarks - nstate = {} - for k, v in self.state.iteritems(): - if v > nullmerge and v != k: - nstate[repo[k].node()] = repo[v].node() - elif v == revprecursor: - succ = self.obsoletenotrebased[k] - nstate[repo[k].node()] = repo[succ].node() - # XXX this is the same as dest.node() for the non-continue path -- - # this should probably be cleaned up - destnode = repo[self.dest].node() - # restore original working directory # (we do this before stripping) newwd = self.state.get(self.originalwd, self.originalwd) @@ -523,14 +508,6 @@ ui.note(_("update back to initial working directory parent\n")) hg.updaterepo(repo, newwd, False) - if self.currentbookmarks: - with repo.transaction('bookmark') as tr: - updatebookmarks(repo, destnode, nstate, - self.currentbookmarks, tr) - if self.activebookmark not in repo._bookmarks: - # active bookmark was divergent one and has been deleted - self.activebookmark = None - if not self.keepf: collapsedas = None if self.collapsef: @@ -546,7 +523,7 @@ skippedlen = len(self.skipped) ui.note(_("%d revisions have been skipped\n") % skippedlen) - if (self.activebookmark and + if (self.activebookmark and self.activebookmark in repo._bookmarks and repo['.'].node() == repo._bookmarks[self.activebookmark]): bookmarks.activate(repo, self.activebookmark) @@ -1089,16 +1066,6 @@ mq.seriesdirty = True mq.savedirty() -def updatebookmarks(repo, destnode, nstate, originalbookmarks, tr): - 'Move bookmarks to their correct changesets, and delete divergent ones' - marks = repo._bookmarks - for k, v in originalbookmarks.iteritems(): - if v in nstate: - # update the bookmarks for revs that have moved - marks[k] = nstate[v] - bookmarks.deletedivergent(repo, [destnode], k) - marks.recordchange(tr) - def storecollapsemsg(repo, collapsemsg): 'Store the collapse message to allow recovery' collapsemsg = collapsemsg or '' @@ -1325,34 +1292,19 @@ If `collapsedas` is not None, the rebase was a collapse whose result if the `collapsedas` node.""" - if obsolete.isenabled(repo, obsolete.createmarkersopt): - markers = [] + tonode = repo.changelog.node + mapping = {} + if True: for rev, newrev in sorted(state.items()): if newrev >= 0 and newrev != rev: if rev in skipped: succs = () elif collapsedas is not None: - succs = (repo[collapsedas],) + succs = (collapsedas,) else: - succs = (repo[newrev],) - markers.append((repo[rev], succs)) - if markers: - obsolete.createmarkers(repo, markers, operation='rebase') - else: - rebased = [rev for rev in state - if state[rev] > nullmerge and state[rev] != rev] - if rebased: - stripped = [] - for root in repo.set('roots(%ld)', rebased): - if set(repo.changelog.descendants([root.rev()])) - set(state): - ui.warn(_("warning: new changesets detected " - "on source branch, not stripping\n")) - else: - stripped.append(root.node()) - if stripped: - # backup the old csets by default - repair.strip(ui, repo, stripped, "all") - + succs = (tonode(newrev),) + mapping[tonode(rev)] = succs + scmutil.cleanupnodes(repo, mapping, 'rebase') def pullrebase(orig, ui, repo, *args, **opts): 'Call rebase after pull if the latter has been invoked with --rebase'