diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py --- a/mercurial/cmdutil.py +++ b/mercurial/cmdutil.py @@ -3208,8 +3208,16 @@ def checkunfinished(repo, commit=False): if found. It's probably good to check this right before bailifchanged(). ''' + # Check for non-clearable states first, so things like rebase will take + # precedence over update. for f, clearable, allowcommit, msg, hint in unfinishedstates: - if commit and allowcommit: + if clearable or (commit and allowcommit): + continue + if repo.vfs.exists(f): + raise error.Abort(msg, hint=hint) + + for f, clearable, allowcommit, msg, hint in unfinishedstates: + if not clearable or (commit and allowcommit): continue if repo.vfs.exists(f): raise error.Abort(msg, hint=hint) diff --git a/tests/test-rebase-abort.t b/tests/test-rebase-abort.t --- a/tests/test-rebase-abort.t +++ b/tests/test-rebase-abort.t @@ -387,10 +387,9 @@ New operations are blocked with the corr .hg/undo.dirstate .hg/updatestate -XXX: This should complain about needing to abort/continue rebase $ hg rebase -s 3 -d tip - abort: last update was interrupted - (use 'hg update' to get a consistent checkout) + abort: rebase in progress + (use 'hg rebase --continue' or 'hg rebase --abort') [255] $ hg up . abort: rebase in progress @@ -401,10 +400,9 @@ XXX: This should complain about needing (use 'hg rebase --continue' or 'hg rebase --abort') [255] -XXX: This should complain about needing to abort/continue rebase $ hg graft 3 - abort: last update was interrupted - (use 'hg update' to get a consistent checkout) + abort: rebase in progress + (use 'hg rebase --continue' or 'hg rebase --abort') [255] $ hg rebase --abort