From 72126c8dca704aae74e6e93282761c9f90b952da Mon Sep 17 00:00:00 2001 From: Andrew Cassidy Date: Mon, 15 Apr 2024 23:45:24 -0700 Subject: [PATCH] Add -s, -n, and -y options to `release` --- CHANGELOG.md | 9 +++++++++ tests/test_cli.py | 11 +++++++++++ yaclog/cli/__main__.py | 21 +++++++++++++++------ 3 files changed, 35 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4a095c1..85eff00 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,15 @@ All notable changes to this project will be documented in this file +## Unreleased + +### Added + +- added the `-s` option to `yaclog release` to increment arbitrary version segments +- added the `-n` option to `yaclog release` to create a new release instead of releasing a new one +- added the `-y` option to `yaclog release` to answer "yes" to all confirmation dialogs. Use with caution! + + ## Version 1.1.2 - 2022-12-29 ### Changed diff --git a/tests/test_cli.py b/tests/test_cli.py index 1886741..12169cc 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -153,6 +153,11 @@ class TestRelease(unittest.TestCase): self.assertEqual(yaclog.read(location).versions[0].name, '1.0.1') self.assertIn('1.0.1', result.output) + result = runner.invoke(cli, ['release', '-y', '-s', 2]) + check_result(self, result) + self.assertEqual(yaclog.read(location).versions[0].name, '1.0.2') + self.assertIn('1.0.2', result.output) + runner.invoke(cli, ['entry', '-b', 'entry number 3']) result = runner.invoke(cli, ['release', '-m']) @@ -194,6 +199,12 @@ class TestRelease(unittest.TestCase): self.assertEqual(yaclog.read(location).versions[0].name, '3.0.0') self.assertIn('3.0.0', result.output) + result = runner.invoke(cli, ['release', '-p', '-n']) + check_result(self, result) + self.assertEqual(yaclog.read(location).versions[0].name, '3.0.1') + self.assertEqual(yaclog.read(location).versions[1].name, '3.0.0') + self.assertIn('3.0.1', result.output) + def test_commit(self): """Test committing and tagging releases""" runner = CliRunner() diff --git a/yaclog/cli/__main__.py b/yaclog/cli/__main__.py index 057e659..6f4aa55 100644 --- a/yaclog/cli/__main__.py +++ b/yaclog/cli/__main__.py @@ -187,6 +187,8 @@ def entry(obj: Changelog, bullets, paragraphs, section_name, version_name): help='Increment minor version number.') @click.option('-p', '--patch', 'rel_seg', flag_value=2, type=int, help='Increment patch number.') +@click.option('-s', '--segment', 'rel_seg', type=int, + help='Increment nth segment of the version. For example, `--segment 2` is equivalent to `--patch`') @click.option('-a', '--alpha', 'pre_seg', flag_value='a', type=str, default=None, help='Increment alpha version number.') @click.option('-b', '--beta', 'pre_seg', flag_value='b', type=str, @@ -200,9 +202,13 @@ def entry(obj: Changelog, bullets, paragraphs, section_name, version_name): 'If there are no changes to commit, the current commit will be tagged instead.') @click.option('-C', '--cargo', '-🦀', is_flag=True, help='Update the version in a Rust cargo.toml manifest file.') +@click.option('-y', '--yes', is_flag=True, + help='Answer "yes" to all confirmation dialogs') +@click.option('-n', '--new', is_flag=True, + help = 'Create a new version instead of renaming an existing one') @click.argument('version_name', metavar='VERSION', type=str, default=None, required=False) @click.pass_obj -def release(obj: Changelog, version_name, rel_seg, pre_seg, commit, cargo): +def release(obj: Changelog, version_name, rel_seg, pre_seg, commit, cargo, yes, new): """ Release VERSION, or a version incremented from the last release. @@ -218,7 +224,10 @@ def release(obj: Changelog, version_name, rel_seg, pre_seg, commit, cargo): click.echo('Nothing to release!') raise click.Abort - cur_version = obj.current_version() + if new: + cur_version = obj.add_version() + else: + cur_version = obj.current_version() old_name = cur_version.name if version_name: @@ -235,11 +244,11 @@ def release(obj: Changelog, version_name, rel_seg, pre_seg, commit, cargo): new_name = yaclog.version.increment_version(new_name, rel_seg, pre_seg) if new_name != old_name: - if yaclog.version.is_release(old_name): + if yaclog.version.is_release(old_name) and not yes: click.confirm( - f"Rename release version {click.style(old_name, fg='blue')} " - f"to {click.style(new_name, fg='blue')}?", - abort=True) + f"Rename release version {click.style(old_name, fg='blue')} " + f"to {click.style(new_name, fg='blue')}?", + abort=True) cur_version.name = new_name cur_version.date = datetime.datetime.utcnow().date()