diff --git a/src/ahriman/application/ahriman.py b/src/ahriman/application/ahriman.py index f401dd0e..7f18807f 100644 --- a/src/ahriman/application/ahriman.py +++ b/src/ahriman/application/ahriman.py @@ -266,6 +266,8 @@ def _set_package_add_parser(root: SubParserAction) -> argparse.ArgumentParser: "5) and finally you can add package from AUR.", formatter_class=_formatter) parser.add_argument("package", help="package source (base name, path to local files, remote URL)", nargs="+") + parser.add_argument("--changes", help="calculate changes from the latest known commit if available", + action=argparse.BooleanOptionalAction, default=True) parser.add_argument("--dependencies", help="process missing package dependencies", action=argparse.BooleanOptionalAction, default=True) parser.add_argument("-e", "--exit-code", help="return non-zero exit status if result is empty", action="store_true") @@ -534,8 +536,7 @@ def _set_repo_check_parser(root: SubParserAction) -> argparse.ArgumentParser: description="check for packages updates. Same as repo-update --dry-run --no-manual", formatter_class=_formatter) parser.add_argument("package", help="filter check by package base", nargs="*") - parser.add_argument("--changes", help="calculate changes from the latest known commit if available. " - "Only applicable in dry run mode", + parser.add_argument("--changes", help="calculate changes from the latest known commit if available", action=argparse.BooleanOptionalAction, default=True) parser.add_argument("--check-files", help="enable or disable checking of broken dependencies " "(e.g. dynamically linked libraries or modules directories)", diff --git a/src/ahriman/application/handlers/add.py b/src/ahriman/application/handlers/add.py index e567c4aa..1fde5410 100644 --- a/src/ahriman/application/handlers/add.py +++ b/src/ahriman/application/handlers/add.py @@ -57,6 +57,9 @@ class Add(Handler): return packages = application.updates(args.package, aur=False, local=False, manual=True, vcs=False, check_files=False) + if args.changes: # generate changes if requested + application.changes(packages) + packages = application.with_dependencies(packages, process_dependencies=args.dependencies) packagers = Packagers(args.username, {package.base: package.packager for package in packages}) diff --git a/tests/ahriman/application/handlers/test_handler_add.py b/tests/ahriman/application/handlers/test_handler_add.py index 5f381dd0..5929fbdb 100644 --- a/tests/ahriman/application/handlers/test_handler_add.py +++ b/tests/ahriman/application/handlers/test_handler_add.py @@ -24,6 +24,7 @@ def _default_args(args: argparse.Namespace) -> argparse.Namespace: argparse.Namespace: generated arguments for these test cases """ args.package = ["ahriman"] + args.changes = True args.exit_code = False args.increment = True args.now = False @@ -82,6 +83,7 @@ def test_run_with_updates(args: argparse.Namespace, configuration: Configuration mocker.patch("ahriman.core.repository.Repository.load", return_value=repository) application_mock = mocker.patch("ahriman.application.application.Application.update", return_value=result) check_mock = mocker.patch("ahriman.application.handlers.Handler.check_if_empty") + changes_mock = mocker.patch("ahriman.application.application.Application.changes") updates_mock = mocker.patch("ahriman.application.application.Application.updates", return_value=[package_ahriman]) dependencies_mock = mocker.patch("ahriman.application.application.Application.with_dependencies", return_value=[package_ahriman]) @@ -91,6 +93,7 @@ def test_run_with_updates(args: argparse.Namespace, configuration: Configuration Add.run(args, repository_id, configuration, report=False) updates_mock.assert_called_once_with(args.package, aur=False, local=False, manual=True, vcs=False, check_files=False) + changes_mock.assert_called_once_with([package_ahriman]) application_mock.assert_called_once_with([package_ahriman], Packagers(args.username, {package_ahriman.base: "packager"}), bump_pkgrel=args.increment) @@ -99,6 +102,28 @@ def test_run_with_updates(args: argparse.Namespace, configuration: Configuration print_mock.assert_called_once_with([package_ahriman], log_fn=pytest.helpers.anyvar(int)) +def test_run_no_changes(args: argparse.Namespace, configuration: Configuration, repository: Repository, + mocker: MockerFixture) -> None: + """ + must skip changes calculation during package addition + """ + args = _default_args(args) + args.now = True + args.changes = False + mocker.patch("ahriman.application.application.Application.add") + mocker.patch("ahriman.core.repository.Repository.load", return_value=repository) + mocker.patch("ahriman.application.application.Application.update") + mocker.patch("ahriman.application.handlers.Handler.check_if_empty") + mocker.patch("ahriman.application.application.Application.updates") + mocker.patch("ahriman.application.application.Application.with_dependencies") + mocker.patch("ahriman.application.application.Application.print_updates") + changes_mock = mocker.patch("ahriman.application.application.Application.changes") + + _, repository_id = configuration.check_loaded() + Add.run(args, repository_id, configuration, report=False) + changes_mock.assert_not_called() + + def test_run_empty_exception(args: argparse.Namespace, configuration: Configuration, repository: Repository, mocker: MockerFixture) -> None: """