From patchwork Fri Jan 31 19:00:10 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: D8057: rebase: abort if the user tries to rebase the working copy From: phabricator X-Patchwork-Id: 44828 Message-Id: To: Phabricator Cc: mercurial-devel@mercurial-scm.org Date: Fri, 31 Jan 2020 19:00:10 +0000 martinvonz created this revision. Herald added a subscriber: mercurial-devel. Herald added a reviewer: hg-reviewers. REVISION SUMMARY I think it's more correct to treat `hg rebase -r 'wdirrev()' -d foo` as `hg co -m foo`, but I'm instead making it error out. That's partly because it's probably what the user wanted (in the case I heard from a user, they had done `hg rebase -s f` where `f` resolved to `wdir()`) and partly because I don't want to think about more complicated cases where the user specifies the working copy together with other commits. REPOSITORY rHG Mercurial BRANCH default REVISION DETAIL https://phab.mercurial-scm.org/D8057 AFFECTED FILES hgext/rebase.py tests/test-rebase-parameters.t CHANGE DETAILS To: martinvonz, #hg-reviewers Cc: mercurial-devel diff --git a/tests/test-rebase-parameters.t b/tests/test-rebase-parameters.t --- a/tests/test-rebase-parameters.t +++ b/tests/test-rebase-parameters.t @@ -93,11 +93,12 @@ [1] $ hg rebase --rev 'wdir()' --dest 6 - abort: working directory revision cannot be specified + abort: cannot rebase the working copy [255] - $ hg rebase --source 'wdir()' --dest 6 2>&1 | grep assert - assert rebaseset + $ hg rebase --source 'wdir()' --dest 6 + nothing to rebase - empty destination + [1] $ hg rebase --source '1 & !1' --dest 8 empty "source" revision set - nothing to rebase diff --git a/hgext/rebase.py b/hgext/rebase.py --- a/hgext/rebase.py +++ b/hgext/rebase.py @@ -37,6 +37,7 @@ hg, merge as mergemod, mergeutil, + node as nodemod, obsolete, obsutil, patch, @@ -1266,7 +1267,6 @@ ui.status(_(b'empty "source" revision set - nothing to rebase\n')) return None rebaseset = repo.revs(b'(%ld)::', src) - assert rebaseset else: base = scmutil.revrange(repo, [basef or b'.']) if not base: @@ -1341,6 +1341,8 @@ ) return None + if nodemod.wdirrev in rebaseset: + raise error.Abort(_(b'cannot rebase the working copy')) rebasingwcp = repo[b'.'].rev() in rebaseset ui.log( b"rebase",