Skip to content

Commit

Permalink
Merge pull request #975 from projectsyn/feat/deduplicate-component-ne…
Browse files Browse the repository at this point in the history
…w-update-options

Deduplicate options for `component new` and `component update`
  • Loading branch information
simu authored Jun 5, 2024
2 parents 3d8f6a2 + d2587d9 commit 5e537a8
Showing 1 changed file with 76 additions and 88 deletions.
164 changes: 76 additions & 88 deletions commodore/cli/component.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,75 @@
import commodore.cli.options as options


def new_update_options(new_cmd: bool):
"""Shared command options for component new and component update.
Options will appear in `--help` in reverse order of the click.option() calls in this
function.
If flag `new_cmd` is set, default values will be set for options that are left
unchanged by default by `component update`.
"""

def decorator(cmd):
if new_cmd:
test_case_help = (
"Additional test cases to generate in the new component. "
+ "Can be repeated. Test case `defaults` will always be generated. "
+ "Commodore will deduplicate test cases by name."
)
else:
test_case_help = (
"Additional test cases to add to the component. Can be repeated. "
+ "Commodore will deduplicate test cases by name."
)
click.option(
"--additional-test-case",
"-t",
metavar="CASE",
default=[],
show_default=True,
multiple=True,
help=test_case_help,
)(cmd)
add_text = "Add" if new_cmd else "Add or remove"
click.option(
"--matrix-tests/--no-matrix-tests",
default=True if new_cmd else None,
show_default=True,
help=f"{add_text} test matrix for compile/golden tests.",
)(cmd)
click.option(
"--golden-tests/--no-golden-tests",
default=True if new_cmd else None,
show_default=True,
help=f"{add_text} golden tests.",
)(cmd)
click.option(
"--pp/--no-pp",
default=False if new_cmd else None,
show_default=True,
help=f"{add_text} postprocessing filter configuration.",
)(cmd)
click.option(
"--lib/--no-lib",
default=False if new_cmd else None,
show_default=True,
help=f"{add_text} the component library template.",
)(cmd)
click.option(
"--copyright",
"copyright_holder",
default="VSHN AG <[email protected]>" if new_cmd else "",
show_default=True,
help="The copyright holder added to the license file.",
)(cmd)

return cmd

return decorator


@click.group(
name="component",
short_help="Interact with components.",
Expand All @@ -35,49 +104,18 @@ def component_group(config: Config, verbose):
help="The component's name as it will be written in the documentation. Defaults to the slug.",
)
@click.option(
"--lib/--no-lib",
default=False,
show_default=True,
help="Add a component library template.",
)
@click.option(
"--pp/--no-pp",
default=False,
"--output-dir",
default="",
show_default=True,
help="Add a component postprocessing template.",
type=click.Path(file_okay=False, dir_okay=True),
help="The directory in which to place the new component.",
)
@click.option(
"--owner",
default="projectsyn",
show_default=True,
help="The GitHub user or project name where the component will be hosted.",
)
@click.option(
"--copyright",
"copyright_holder",
default="VSHN AG <[email protected]>",
show_default=True,
help="The copyright holder added to the license file.",
)
@click.option(
"--golden-tests/--no-golden-tests",
default=True,
show_default=True,
help="Add golden tests to the component.",
)
@click.option(
"--matrix-tests/--no-matrix-tests",
default=True,
show_default=True,
help="Enable test matrix for compile/golden tests.",
)
@click.option(
"--output-dir",
default="",
show_default=True,
type=click.Path(file_okay=False, dir_okay=True),
help="The directory in which to place the new component.",
)
@click.option(
"--template-url",
default="https://github.com/projectsyn/commodore-component-template.git",
Expand All @@ -90,17 +128,7 @@ def component_group(config: Config, verbose):
show_default=True,
help="The component template version (Git tree-ish) to use.",
)
@click.option(
"--additional-test-case",
"-t",
metavar="CASE",
default=[],
show_default=True,
multiple=True,
help="Additional test cases to generate in the new component. Can be repeated. "
+ "Test case `defaults` will always be generated."
+ "Commodore will deduplicate test cases by name.",
)
@new_update_options(new_cmd=True)
@options.verbosity
@options.pass_config
# pylint: disable=too-many-arguments
Expand Down Expand Up @@ -140,59 +168,20 @@ def component_new(
@click.argument(
"component_path", type=click.Path(exists=True, dir_okay=True, file_okay=False)
)
@click.option(
"--copyright",
"copyright_holder",
show_default=True,
help="Update the copyright holder in the license file.",
)
@click.option(
"--update-copyright-year/--no-update-copyright-year",
default=False,
show_default=True,
help="Update year in copyright notice.",
)
@click.option(
"--golden-tests/--no-golden-tests",
default=None,
show_default=True,
help="Add or remove golden tests.",
)
@click.option(
"--matrix-tests/--no-matrix-tests",
default=None,
show_default=True,
help="Add or remove matrix tests.",
)
@click.option(
"--lib/--no-lib",
default=None,
show_default=True,
help="Add or remove the component library.",
)
@click.option(
"--pp/--no-pp",
default=None,
show_default=True,
help="Add or remove the postprocessing filter configuration.",
)
@click.option(
"--additional-test-case",
"-t",
metavar="CASE",
default=[],
show_default=True,
multiple=True,
help="Additional test cases to add to the component. Can be repeated. "
+ "Commodore will deduplicate test cases by name.",
)
@new_update_options(new_cmd=False)
@click.option(
"--remove-test-case",
metavar="CASE",
default=[],
show_default=True,
multiple=True,
help="Test cases to remove from the package. Can be repeated.",
help="Test cases to remove from the component. Can be repeated.",
)
@click.option(
"--commit / --no-commit",
Expand Down Expand Up @@ -259,7 +248,6 @@ def component_update(
)
@options.verbosity
@options.pass_config
# pylint: disable=too-many-arguments
def component_delete(config: Config, slug, force, verbose):
config.update_verbosity(verbose)
config.force = force
Expand Down

0 comments on commit 5e537a8

Please sign in to comment.