diff --git a/backend/src/hatchling/cli/version/__init__.py b/backend/src/hatchling/cli/version/__init__.py index 20cae309e..4766ce2c2 100644 --- a/backend/src/hatchling/cli/version/__init__.py +++ b/backend/src/hatchling/cli/version/__init__.py @@ -23,7 +23,7 @@ def version_impl( if 'version' in metadata.config.get('project', {}): if desired_version: - app.abort('Cannot set version when it is statically defined by the `project.version` field') + app.abort('Use `hatch version ...` to update version when it is statically defined by the `project.version` field') else: app.display(metadata.core.version) return diff --git a/src/hatch/cli/version/__init__.py b/src/hatch/cli/version/__init__.py index b89bfc3ec..26e269da7 100644 --- a/src/hatch/cli/version/__init__.py +++ b/src/hatch/cli/version/__init__.py @@ -26,11 +26,21 @@ def version(app: Application, *, desired_version: str | None, force: bool): app.abort(f'Project {app.project.chosen_name} (not a project)') if 'version' in app.project.metadata.config.get('project', {}): + version = app.project.metadata.config['project']['version'] if desired_version: - app.abort('Cannot set version when it is statically defined by the `project.version` field') + from hatchling.version.scheme.standard import StandardScheme + + updated_version = StandardScheme(str(app.project.location), {}).update( + desired_version, version, {} + ) + app.project.metadata.config['project']['version'] = updated_version + app.project.save_config(app.project.raw_config) + + app.display_info(f'Old: {version}') + app.display_info(f'New: {updated_version}') else: - app.display(app.project.metadata.config['project']['version']) - return + app.display(version) + return from hatch.config.constants import VersionEnvVars from hatch.project.constants import BUILD_BACKEND diff --git a/tests/cli/version/test_version.py b/tests/cli/version/test_version.py index d4eb0c419..6c92cb2dc 100644 --- a/tests/cli/version/test_version.py +++ b/tests/cli/version/test_version.py @@ -361,9 +361,12 @@ def test_set_static(hatch, helpers, temp_dir): with path.as_cwd(env_vars={ConfigEnvVars.DATA: str(data_path)}): result = hatch('version', 'minor,rc') - assert result.exit_code == 1, result.output + assert result.exit_code == 0, result.output assert result.output == helpers.dedent( """ - Cannot set version when it is statically defined by the `project.version` field + Old: 1.2.3 + New: 1.3.0rc0 """ ) + project = Project(path) + assert project.raw_config['project']['version'] == '1.3.0rc0', 'should update static version'