Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 20 additions & 24 deletions commitizen/commands/bump.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
BumpTagFailedError,
DryRunExit,
ExpectedExit,
GetNextExit,
InvalidManualVersion,
NoCommitsFoundError,
NoneIncrementExit,
Expand Down Expand Up @@ -47,7 +46,7 @@ class BumpArgs(Settings, total=False):
dry_run: bool
file_name: str
files_only: bool | None
get_next: bool
get_next: bool # TODO: maybe rename to `next_version_to_stdout`
git_output_to_stderr: bool
increment_mode: str
increment: Increment | None
Expand Down Expand Up @@ -94,7 +93,6 @@ def __init__(self, config: BaseConfig, arguments: BumpArgs) -> None:
)
self.cz = factory.committer_factory(self.config)
self.changelog_flag = arguments["changelog"]
self.changelog_config = self.config.settings.get("update_changelog_on_bump")
self.changelog_to_stdout = arguments["changelog_to_stdout"]
self.git_output_to_stderr = arguments["git_output_to_stderr"]
self.no_verify = arguments["no_verify"]
Expand Down Expand Up @@ -169,7 +167,9 @@ def __call__(self) -> None:
is_local_version = self.arguments["local_version"]
manual_version = self.arguments["manual_version"]
build_metadata = self.arguments["build_metadata"]
get_next = self.arguments["get_next"]
next_version_to_stdout = self.arguments[
"get_next"
] # TODO: maybe rename to `next_version_to_stdout`
allow_no_commit = self.arguments["allow_no_commit"]
major_version_zero = self.arguments["major_version_zero"]

Expand All @@ -181,7 +181,6 @@ def __call__(self) -> None:
(is_local_version, "--local-version"),
(build_metadata, "--build-metadata"),
(major_version_zero, "--major-version-zero"),
(get_next, "--get-next"),
):
if val:
raise NotAllowed(f"{option} cannot be combined with MANUAL_VERSION")
Expand All @@ -194,24 +193,23 @@ def __call__(self) -> None:
if build_metadata and is_local_version:
raise NotAllowed("--local-version cannot be combined with --build-metadata")

if get_next:
if next_version_to_stdout:
for value, option in (
(self.changelog_flag, "--changelog"),
(self.changelog_to_stdout, "--changelog-to-stdout"),
):
if value:
raise NotAllowed(f"{option} cannot be combined with --get-next")

# --get-next is a special case, taking precedence over config for 'update_changelog_on_bump'
self.changelog_config = False
# Setting dry_run to prevent any unwanted changes to the repo or files
self.dry_run = True
else:
# If user specified changelog_to_stdout, they probably want the
# changelog to be generated as well, this is the most intuitive solution
self.changelog_flag = any(
(self.changelog_flag, self.changelog_to_stdout, self.changelog_config)
warnings.warn(f"{option} has no effect when used with --get-next")

# If user specified changelog_to_stdout, they probably want the
# changelog to be generated as well, this is the most intuitive solution
self.changelog_flag = any(
(
self.changelog_flag,
self.changelog_to_stdout,
self.config.settings.get("update_changelog_on_bump"),
)
)

rules = TagRules.from_settings(cast(Settings, self.bump_settings))
current_tag = rules.find_tag_for(git.get_tags(), current_version)
Expand Down Expand Up @@ -270,20 +268,18 @@ def __call__(self) -> None:
)

new_tag_version = rules.normalize_tag(new_version)
message = bump.create_commit_message(
current_version, new_version, self.bump_settings["bump_message"]
)

if get_next:
if next_version_to_stdout:
if increment is None and new_tag_version == current_tag_version:
raise NoneIncrementExit(
"[NO_COMMITS_TO_BUMP]\n"
"The commits found are not eligible to be bumped"
)

out.write(str(new_version))
raise GetNextExit()
raise DryRunExit()

message = bump.create_commit_message(
current_version, new_version, self.bump_settings["bump_message"]
)
# Report found information
information = f"{message}\ntag to create: {new_tag_version}\n"
if increment:
Expand Down
4 changes: 0 additions & 4 deletions commitizen/exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,10 +75,6 @@ class DryRunExit(ExpectedExit):
pass


class GetNextExit(ExpectedExit):
pass


class NoneIncrementExit(CommitizenException):
exit_code = ExitCode.NO_INCREMENT

Expand Down
38 changes: 2 additions & 36 deletions tests/commands/test_bump_command.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
DryRunExit,
ExitCode,
ExpectedExit,
GetNextExit,
InvalidManualVersion,
NoCommitsFoundError,
NoneIncrementExit,
Expand Down Expand Up @@ -1456,7 +1455,7 @@ def test_bump_get_next(mocker: MockFixture, capsys):

testargs = ["cz", "bump", "--yes", "--get-next"]
mocker.patch.object(sys, "argv", testargs)
with pytest.raises(GetNextExit):
with pytest.raises(DryRunExit):
cli.main()

out, _ = capsys.readouterr()
Expand All @@ -1476,7 +1475,7 @@ def test_bump_get_next_update_changelog_on_bump(

testargs = ["cz", "bump", "--yes", "--get-next"]
mocker.patch.object(sys, "argv", testargs)
with pytest.raises(GetNextExit):
with pytest.raises(DryRunExit):
cli.main()

out, _ = capsys.readouterr()
Expand All @@ -1486,39 +1485,6 @@ def test_bump_get_next_update_changelog_on_bump(
assert tag_exists is False


@pytest.mark.usefixtures("tmp_commitizen_project")
def test_bump_get_next__changelog_is_not_allowed(mocker: MockFixture):
create_file_and_commit("feat: new file")

testargs = ["cz", "bump", "--yes", "--get-next", "--changelog"]
mocker.patch.object(sys, "argv", testargs)

with pytest.raises(NotAllowed):
cli.main()


@pytest.mark.usefixtures("tmp_commitizen_project")
def test_bump_get_next__changelog_to_stdout_is_not_allowed(mocker: MockFixture):
create_file_and_commit("feat: new file")

testargs = ["cz", "bump", "--yes", "--get-next", "--changelog-to-stdout"]
mocker.patch.object(sys, "argv", testargs)

with pytest.raises(NotAllowed):
cli.main()


@pytest.mark.usefixtures("tmp_commitizen_project")
def test_bump_get_next__manual_version_is_not_allowed(mocker: MockFixture):
create_file_and_commit("feat: new file")

testargs = ["cz", "bump", "--yes", "--get-next", "0.2.1"]
mocker.patch.object(sys, "argv", testargs)

with pytest.raises(NotAllowed):
cli.main()


@pytest.mark.usefixtures("tmp_commitizen_project")
def test_bump_get_next__no_eligible_commits_raises(mocker: MockFixture):
create_file_and_commit("chore: new commit")
Expand Down