# HG changeset patch # User Matt Mackall <mpm@selenic.com> # Date 1332456420 18000 # Thu Mar 22 17:47:00 2012 -0500 # Branch stable # Node ID 0806823370d8baf6788bf771880a61193dcc6caf # Parent 900eee0778d164292dd0045401e14243464cdf29 rebase: properly calculate descendant set when aborting (issue3332) Checking for descendants of target being public was also wrong. diff --git a/hgext/rebase.py b/hgext/rebase.py --- a/hgext/rebase.py +++ b/hgext/rebase.py @@ -557,15 +557,18 @@ def abort(repo, originalwd, target, state): 'Restore the repository to its original state' - descendants = repo.changelog.descendants - ispublic = lambda r: repo._phaserev[r] == phases.public - if filter(ispublic, descendants(target)): + dstates = [s for s in state.values() if s != nullrev] + if [d for d in dstates if not repo[d].mutable()]: repo.ui.warn(_("warning: immutable rebased changeset detected, " "can't abort\n")) return -1 - elif set(descendants(target)) - set(state.values()): + + descendants = set() + if dstates: + descendants = set(repo.changelog.descendants(*dstates)) + if descendants - set(dstates): repo.ui.warn(_("warning: new changesets detected on target branch, " - "can't abort\n")) + "can't abort\n")) return -1 else: # Strip from the first rebased revision