diff --git a/git_review/cmd.py b/git_review/cmd.py index d28f315..701f29f 100755 --- a/git_review/cmd.py +++ b/git_review/cmd.py @@ -1074,12 +1074,14 @@ def main(): help="Regenerate Change-id before submitting") parser.add_argument("-r", "--remote", dest="remote", help="git remote to use for gerrit") - parser.add_argument("-R", "--no-rebase", dest="rebase", - action="store_false", - help="Don't rebase changes before submitting.") - parser.add_argument("-F", "--force-rebase", dest="force_rebase", - action="store_true", - help="Force rebase even when not needed.") + + rebase_group = parser.add_mutually_exclusive_group() + rebase_group.add_argument("-R", "--no-rebase", dest="rebase", + action="store_false", + help="Don't rebase changes before submitting.") + rebase_group.add_argument("-F", "--force-rebase", dest="force_rebase", + action="store_true", + help="Force rebase even when not needed.") fetch = parser.add_mutually_exclusive_group() fetch.set_defaults(download=False, compare=False, cherrypickcommit=False, @@ -1216,7 +1218,7 @@ def main(): finish_branch(branch) return - if options.rebase: + if options.rebase or options.force_rebase: if not rebase_changes(branch, remote): sys.exit(1) if not options.force_rebase and not undo_rebase(): diff --git a/git_review/tests/test_git_review.py b/git_review/tests/test_git_review.py index 6f538b6..5260cdb 100644 --- a/git_review/tests/test_git_review.py +++ b/git_review/tests/test_git_review.py @@ -260,6 +260,33 @@ class GitReviewTestCase(tests.BaseGitReviewTestCase): self.assertNotIn('project: change3, abandoned', result) self.assertNotIn('project2:', result) + def _test_git_review_F(self, rebase): + self._run_git_review('-s') + + # Populate repo + self._simple_change('create file', 'test commit message') + change1 = self._run_git('rev-parse', 'HEAD') + self._run_git_review() + self._run_gerrit_cli('review', change1, '--code-review=+2', '--submit') + self._run_git('reset', '--hard', 'HEAD^') + + # Review with force_rebase + self._run_git('config', 'gitreview.rebase', rebase) + self._simple_change('create file2', 'test commit message 2', + self._dir('test', 'test_file2.txt')) + self._run_git_review('-F') + head_1 = self._run_git('rev-parse', 'HEAD^') + self.assertEqual(change1, head_1) + + def test_git_review_F(self): + self._test_git_review_F('1') + + def test_git_review_F_norebase(self): + self._test_git_review_F('0') + + def test_git_review_F_R(self): + self.assertRaises(Exception, self._run_git_review, '-F', '-R') + class HttpGitReviewTestCase(tests.HttpMixin, GitReviewTestCase): """Class for the git-review tests over HTTP(S)."""