troubadix 25.3.3__tar.gz → 25.3.5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {troubadix-25.3.3 → troubadix-25.3.5}/PKG-INFO +1 -1
- {troubadix-25.3.3 → troubadix-25.3.5}/pyproject.toml +1 -1
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/standalone_plugins/test_dependency_graph.py +36 -28
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/test_runner.py +12 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/__version__.py +1 -1
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/__init__.py +11 -23
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/standalone_plugins/dependency_graph/checks.py +20 -23
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/standalone_plugins/dependency_graph/cli.py +7 -14
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/standalone_plugins/dependency_graph/dependency_graph.py +13 -37
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/standalone_plugins/dependency_graph/models.py +15 -9
- {troubadix-25.3.3 → troubadix-25.3.5}/LICENSE +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/README.md +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/__init__.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/helper/__init__.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/helper/test_linguistic_exception_handler.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/helper/test_patterns.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/__init__.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/fail.nasl +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/fail2.nasl +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test.nasl +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_badwords.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_copyright_text.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_copyright_year.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_creation_date.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_cve_format.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_cvss_format.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_dependencies.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_dependency_category_order.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_deprecated_dependency.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_deprecated_functions.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_double_end_points.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_duplicate_oid.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_duplicated_script_tags.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_encoding.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_files/fail_bad_new_line.nasl +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_files/fail_badwords.nasl +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_files/fail_name_and_copyright_newline.nasl +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_files/fail_name_newline.nasl +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_files/fail_permissions.nasl +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_files/fail_spelling.nasl +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_files/nasl/21.04/fail.nasl +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_files/nasl/21.04/fail_badwords.nasl +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_files/nasl/21.04/fail_name_and_copyright_newline.nasl +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_files/nasl/21.04/fail_name_newline.nasl +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_files/nasl/21.04/fail_solution_template.nasl +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_files/nasl/21.04/runner/fail.nasl +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_files/nasl/21.04/runner/fail2.nasl +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_files/nasl/21.04/runner/test.nasl +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_files/nasl/21.04/runner/test_valid_oid.nasl +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_files/nasl/21.04/test.inc +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_files/nasl/21.04/test.nasl +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_files/nasl/warning.nasl +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_files/ok_permissions.nasl +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_files/test_oid.nasl +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_forking_nasl_functions.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_get_kb_on_services.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_grammar.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_http_links_in_tags.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_illegal_characters.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_log_messages.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_malformed_dependencies.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_misplaced_compare_in_if.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_missing_desc_exit.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_missing_tag_solution.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_multiple_re_parameters.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_newlines.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_overlong_description_lines.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_overlong_script_tags.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_prod_svc_detect_in_vulnvt.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_qod.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_reporting_consistency.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_script_add_preference_type.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_script_calls_empty_values.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_script_calls_recommended.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_script_category.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_script_copyright.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_script_family.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_script_tag_form.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_script_tag_whitespaces.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_script_tags_mandatory.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_script_version_and_last_modification_tags.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_script_xref_form.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_script_xref_url.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_security_messages.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_set_get_kb_calls.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_solution_text.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_solution_type.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_spaces_before_dots.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_spaces_in_filename.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_spelling.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_tabs.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_todo_tbd.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_trailing_spaces_tabs.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_using_display.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_valid_oid.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_valid_script_tag_names.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_variable_redefinition_in_foreach.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_vt_file_permissions.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_vt_placement.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/standalone_plugins/__init__.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/standalone_plugins/changed_packages/__init__.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/standalone_plugins/changed_packages/markers/__init__.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/standalone_plugins/changed_packages/markers/test_added_epoch.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/standalone_plugins/changed_packages/markers/test_added_release.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/standalone_plugins/changed_packages/markers/test_added_udeb.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/standalone_plugins/changed_packages/markers/test_changed_update.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/standalone_plugins/changed_packages/markers/test_dropped_architecture.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/standalone_plugins/changed_packages/test_changed_packages.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/standalone_plugins/changed_packages/test_package.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/standalone_plugins/nasl/21.04/21_script.nasl +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/standalone_plugins/nasl/22.04/22_script.nasl +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/standalone_plugins/nasl/common/bar.nasl +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/standalone_plugins/nasl/common/foo.nasl +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/standalone_plugins/nasl/common/foobar.nasl +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/standalone_plugins/nasl/common/gsf/enterprise_script.nasl +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/standalone_plugins/test_changed_cves.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/standalone_plugins/test_changed_oid.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/standalone_plugins/test_deprecate_vts.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/standalone_plugins/test_file_extensions.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/standalone_plugins/test_last_modification.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/standalone_plugins/test_no_solution.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/standalone_plugins/test_version_updated.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/test_argparser.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/test_helper.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/test_naslinter.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/test_reporter.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/tests/test_results.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/__init__.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/argparser.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/codespell/codespell.additions +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/codespell/codespell.exclude +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/codespell/codespell.ignore +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/helper/__init__.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/helper/helper.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/helper/linguistic_exception_handler.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/helper/patterns.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugin.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/badwords.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/copyright_text.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/copyright_year.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/creation_date.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/cve_format.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/cvss_format.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/dependencies.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/dependency_category_order.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/deprecated_dependency.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/deprecated_functions.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/double_end_points.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/duplicate_oid.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/duplicated_script_tags.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/encoding.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/forking_nasl_functions.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/get_kb_on_services.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/grammar.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/http_links_in_tags.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/illegal_characters.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/log_messages.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/malformed_dependencies.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/misplaced_compare_in_if.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/missing_desc_exit.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/missing_tag_solution.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/multiple_re_parameters.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/newlines.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/overlong_description_lines.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/overlong_script_tags.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/prod_svc_detect_in_vulnvt.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/qod.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/reporting_consistency.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/script_add_preference_type.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/script_calls_empty_values.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/script_calls_recommended.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/script_category.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/script_copyright.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/script_family.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/script_tag_form.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/script_tag_whitespaces.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/script_tags_mandatory.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/script_version_and_last_modification_tags.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/script_xref_form.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/script_xref_url.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/security_messages.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/set_get_kb_calls.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/solution_text.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/solution_type.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/spaces_before_dots.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/spaces_in_filename.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/spelling.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/tabs.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/todo_tbd.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/trailing_spaces_tabs.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/using_display.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/valid_oid.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/valid_script_tag_names.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/variable_assigned_in_if.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/variable_redefinition_in_foreach.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/vt_file_permissions.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/plugins/vt_placement.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/reporter.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/results.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/runner.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/standalone_plugins/__init__.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/standalone_plugins/allowed_rev_diff.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/standalone_plugins/changed_cves.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/standalone_plugins/changed_oid.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/standalone_plugins/changed_packages/changed_packages.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/standalone_plugins/changed_packages/marker/__init__.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/standalone_plugins/changed_packages/marker/added_epoch.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/standalone_plugins/changed_packages/marker/added_release.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/standalone_plugins/changed_packages/marker/added_udeb.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/standalone_plugins/changed_packages/marker/changed_update.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/standalone_plugins/changed_packages/marker/dropped_architecture.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/standalone_plugins/changed_packages/marker/marker.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/standalone_plugins/changed_packages/package.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/standalone_plugins/common.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/standalone_plugins/dependency_graph/__init__.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/standalone_plugins/deprecate_vts.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/standalone_plugins/file_extensions.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/standalone_plugins/last_modification.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/standalone_plugins/no_solution.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/standalone_plugins/version_updated.py +0 -0
- {troubadix-25.3.3 → troubadix-25.3.5}/troubadix/troubadix.py +0 -0
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
2
2
|
# SPDX-FileCopyrightText: 2024 Greenbone AG
|
|
3
|
+
import logging
|
|
3
4
|
import os
|
|
4
5
|
import unittest
|
|
5
6
|
from io import StringIO
|
|
@@ -30,20 +31,27 @@ class TestReporter(unittest.TestCase):
|
|
|
30
31
|
def setUp(self):
|
|
31
32
|
self.result = Result(
|
|
32
33
|
name="TestScript",
|
|
34
|
+
infos=["cross-feed"],
|
|
33
35
|
warnings=["duplicate dependencies"],
|
|
34
36
|
errors=["missing dependencies"],
|
|
35
37
|
)
|
|
36
38
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
39
|
+
def test_output_formatting(self):
|
|
40
|
+
stream = StringIO()
|
|
41
|
+
|
|
42
|
+
handler = logging.StreamHandler(stream)
|
|
43
|
+
handler.setFormatter(logging.Formatter("%(levelname)s: %(message)s"))
|
|
41
44
|
|
|
42
|
-
|
|
45
|
+
reporter = Reporter()
|
|
46
|
+
reporter.logger.handlers = [handler]
|
|
47
|
+
reporter.logger.setLevel(logging.INFO)
|
|
48
|
+
|
|
49
|
+
reporter.report([self.result])
|
|
43
50
|
|
|
44
|
-
|
|
45
|
-
self.assertIn("
|
|
46
|
-
self.assertIn("
|
|
51
|
+
output = stream.getvalue()
|
|
52
|
+
self.assertIn("INFO: TestScript: cross-feed", output)
|
|
53
|
+
self.assertIn("WARNING: TestScript: duplicate dependencies", output)
|
|
54
|
+
self.assertIn("ERROR: TestScript: missing dependencies", output)
|
|
47
55
|
|
|
48
56
|
|
|
49
57
|
class TestCLIArgs(unittest.TestCase):
|
|
@@ -54,7 +62,7 @@ class TestCLIArgs(unittest.TestCase):
|
|
|
54
62
|
"--root",
|
|
55
63
|
"tests/standalone_plugins/nasl",
|
|
56
64
|
"--feed",
|
|
57
|
-
"
|
|
65
|
+
"22.04",
|
|
58
66
|
"--log",
|
|
59
67
|
"info",
|
|
60
68
|
],
|
|
@@ -62,8 +70,8 @@ class TestCLIArgs(unittest.TestCase):
|
|
|
62
70
|
def test_parse_args_ok(self):
|
|
63
71
|
args = parse_args()
|
|
64
72
|
self.assertEqual(args.root, Path("tests/standalone_plugins/nasl"))
|
|
65
|
-
self.assertEqual(args.feed,
|
|
66
|
-
self.assertEqual(args.log, "
|
|
73
|
+
self.assertEqual(args.feed, Feed.FEED_22_04)
|
|
74
|
+
self.assertEqual(args.log, "INFO")
|
|
67
75
|
|
|
68
76
|
@patch("sys.stderr", new_callable=StringIO)
|
|
69
77
|
@patch("sys.argv", ["prog", "--root", "not_real_dir"])
|
|
@@ -72,7 +80,7 @@ class TestCLIArgs(unittest.TestCase):
|
|
|
72
80
|
parse_args()
|
|
73
81
|
self.assertRegex(mock_stderr.getvalue(), "invalid directory_type")
|
|
74
82
|
|
|
75
|
-
@patch("sys.stderr", new_callable=StringIO)
|
|
83
|
+
# @patch("sys.stderr", new_callable=StringIO)
|
|
76
84
|
@patch(
|
|
77
85
|
"sys.argv",
|
|
78
86
|
[
|
|
@@ -83,10 +91,9 @@ class TestCLIArgs(unittest.TestCase):
|
|
|
83
91
|
"invalid_feed",
|
|
84
92
|
],
|
|
85
93
|
)
|
|
86
|
-
def test_parse_args_invalid_feed(self
|
|
94
|
+
def test_parse_args_invalid_feed(self):
|
|
87
95
|
with self.assertRaises(SystemExit):
|
|
88
96
|
parse_args()
|
|
89
|
-
self.assertRegex(mock_stderr.getvalue(), "Invalid Feed value")
|
|
90
97
|
|
|
91
98
|
@patch.dict(os.environ, {"VTDIR": "/mock/env/path"})
|
|
92
99
|
@patch("sys.argv", ["prog"])
|
|
@@ -98,7 +105,7 @@ class TestCLIArgs(unittest.TestCase):
|
|
|
98
105
|
def test_parse_args_defaults(self):
|
|
99
106
|
args = parse_args()
|
|
100
107
|
self.assertEqual(args.log, "WARNING")
|
|
101
|
-
self.assertEqual(args.feed,
|
|
108
|
+
self.assertEqual(args.feed, Feed.COMMON)
|
|
102
109
|
|
|
103
110
|
|
|
104
111
|
class TestDependencyGraph(unittest.TestCase):
|
|
@@ -119,9 +126,9 @@ if(description)
|
|
|
119
126
|
"""
|
|
120
127
|
|
|
121
128
|
def test_get_feed(self):
|
|
122
|
-
feed =
|
|
129
|
+
feed = Feed.FEED_22_04
|
|
123
130
|
scripts = get_feed(Path(self.local_root), feed)
|
|
124
|
-
self.assertEqual(len(scripts),
|
|
131
|
+
self.assertEqual(len(scripts), 5)
|
|
125
132
|
|
|
126
133
|
@patch("pathlib.Path.read_text")
|
|
127
134
|
def test_get_scripts(self, mock_read_text):
|
|
@@ -166,35 +173,36 @@ if(description)
|
|
|
166
173
|
@patch("sys.stdout", new_callable=StringIO) # mock_stdout (second argument)
|
|
167
174
|
@patch("sys.stderr", new_callable=StringIO) # mock_stderr (first argument)
|
|
168
175
|
@patch(
|
|
169
|
-
"sys.argv",
|
|
176
|
+
"sys.argv",
|
|
177
|
+
["prog", "--root", "tests/standalone_plugins/nasl", "--log", "info"],
|
|
170
178
|
) # no argument
|
|
171
179
|
def test_full_run(self, mock_stderr, mock_stdout):
|
|
172
180
|
return_code = main()
|
|
173
|
-
output =
|
|
181
|
+
output = mock_stderr.getvalue()
|
|
174
182
|
|
|
175
|
-
self.assertIn("
|
|
183
|
+
self.assertIn("ERROR: missing dependency: missing.nasl:", output)
|
|
176
184
|
self.assertIn(
|
|
177
|
-
"
|
|
185
|
+
"ERROR: cyclic dependency: ", # order is random so can't match the output
|
|
178
186
|
output,
|
|
179
187
|
)
|
|
180
188
|
self.assertIn(
|
|
181
|
-
"
|
|
182
|
-
" gsf/enterprise_script.nasl(enterprise feed),
|
|
183
|
-
" current feed is not properly checked",
|
|
189
|
+
"ERROR: cross-feed dependency: incorrect feed check in foo.nasl(community feed)"
|
|
190
|
+
" which depends on gsf/enterprise_script.nasl(enterprise feed)",
|
|
184
191
|
output,
|
|
185
192
|
)
|
|
186
193
|
self.assertIn(
|
|
187
|
-
"
|
|
194
|
+
"ERROR: category order: bar.nasl depends on foo.nasl which has a lower category order",
|
|
188
195
|
output,
|
|
189
196
|
)
|
|
190
197
|
self.assertIn(
|
|
191
|
-
"
|
|
198
|
+
"ERROR: deprecated dependency: foo.nasl depends on deprecated script foobar.nasl",
|
|
199
|
+
output,
|
|
192
200
|
)
|
|
193
201
|
self.assertIn(
|
|
194
|
-
"
|
|
202
|
+
"WARNING: duplicate dependency: in bar.nasl: foo.nasl", output
|
|
195
203
|
)
|
|
196
204
|
self.assertIn(
|
|
197
|
-
"
|
|
205
|
+
"INFO: cross-feed dependency: bar.nasl(community feed)"
|
|
198
206
|
" depends on gsf/enterprise_script.nasl(enterprise feed)",
|
|
199
207
|
output,
|
|
200
208
|
)
|
|
@@ -351,6 +351,18 @@ class TestRunner(unittest.TestCase):
|
|
|
351
351
|
root=self.root,
|
|
352
352
|
)
|
|
353
353
|
|
|
354
|
+
def test_unknown_plugins_with_suggestion(self):
|
|
355
|
+
with self.assertRaisesRegex(
|
|
356
|
+
ValueError,
|
|
357
|
+
r"Unknown plugins: 'check_badwards' \(Did you mean 'check_badwords'\?\)",
|
|
358
|
+
):
|
|
359
|
+
Runner(
|
|
360
|
+
n_jobs=1,
|
|
361
|
+
reporter=self._reporter,
|
|
362
|
+
included_plugins=["check_badwards"],
|
|
363
|
+
root=self.root,
|
|
364
|
+
)
|
|
365
|
+
|
|
354
366
|
def test_runner_log_file(self):
|
|
355
367
|
included_plugins = [
|
|
356
368
|
CheckDuplicateOID.name,
|
|
@@ -178,9 +178,7 @@ class StandardPlugins(Plugins):
|
|
|
178
178
|
files_plugins = _FILES_PLUGINS
|
|
179
179
|
|
|
180
180
|
if excluded_plugins:
|
|
181
|
-
self._check_unknown_plugins(
|
|
182
|
-
_FILE_PLUGINS + _FILES_PLUGINS, excluded_plugins
|
|
183
|
-
)
|
|
181
|
+
self._check_unknown_plugins(excluded_plugins)
|
|
184
182
|
|
|
185
183
|
file_plugins = self._exclude_plugins(excluded_plugins, file_plugins)
|
|
186
184
|
files_plugins = self._exclude_plugins(
|
|
@@ -188,9 +186,7 @@ class StandardPlugins(Plugins):
|
|
|
188
186
|
)
|
|
189
187
|
|
|
190
188
|
if included_plugins:
|
|
191
|
-
self._check_unknown_plugins(
|
|
192
|
-
_FILE_PLUGINS + _FILES_PLUGINS, included_plugins
|
|
193
|
-
)
|
|
189
|
+
self._check_unknown_plugins(included_plugins)
|
|
194
190
|
|
|
195
191
|
file_plugins = self._include_plugins(included_plugins, file_plugins)
|
|
196
192
|
files_plugins = self._include_plugins(
|
|
@@ -220,33 +216,25 @@ class StandardPlugins(Plugins):
|
|
|
220
216
|
]
|
|
221
217
|
|
|
222
218
|
@staticmethod
|
|
223
|
-
def _check_unknown_plugins(
|
|
224
|
-
if len(found_plugins) == len(selected_plugins):
|
|
225
|
-
return
|
|
226
|
-
|
|
219
|
+
def _check_unknown_plugins(selected_plugins: list[str]):
|
|
227
220
|
all_plugin_names = {
|
|
228
221
|
name
|
|
229
222
|
for plugin in _FILE_PLUGINS + _FILES_PLUGINS
|
|
230
223
|
for name in (plugin.name, plugin.__name__)
|
|
231
224
|
}
|
|
232
|
-
found_plugin_names = {
|
|
233
|
-
name
|
|
234
|
-
for plugin in found_plugins
|
|
235
|
-
for name in (plugin.name, plugin.__name__)
|
|
236
|
-
}
|
|
237
225
|
|
|
238
|
-
unknown_plugins = set(selected_plugins).difference(
|
|
226
|
+
unknown_plugins = set(selected_plugins).difference(all_plugin_names)
|
|
239
227
|
|
|
240
228
|
if not unknown_plugins:
|
|
241
229
|
return
|
|
242
230
|
|
|
243
|
-
|
|
244
|
-
for plugin in sorted(unknown_plugins):
|
|
245
|
-
message = f"'{plugin}'"
|
|
231
|
+
def build_message(plugin: str):
|
|
246
232
|
match = difflib.get_close_matches(plugin, all_plugin_names, n=1)
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
233
|
+
return (
|
|
234
|
+
f"'{plugin}' (Did you mean '{match[0]}'?)"
|
|
235
|
+
if match
|
|
236
|
+
else f"'{plugin}'"
|
|
237
|
+
)
|
|
251
238
|
|
|
239
|
+
messages = [build_message(plugin) for plugin in sorted(unknown_plugins)]
|
|
252
240
|
raise ValueError(f"Unknown plugins: {', '.join(messages)}")
|
{troubadix-25.3.3 → troubadix-25.3.5}/troubadix/standalone_plugins/dependency_graph/checks.py
RENAMED
|
@@ -17,12 +17,10 @@ def check_duplicates(scripts: list[Script]) -> Result:
|
|
|
17
17
|
for script in scripts:
|
|
18
18
|
counter = Counter(dep.name for dep in script.dependencies)
|
|
19
19
|
duplicates = [dep for dep, count in counter.items() if count > 1]
|
|
20
|
-
|
|
21
20
|
if duplicates:
|
|
22
|
-
|
|
23
|
-
warnings.append(msg)
|
|
21
|
+
warnings.append(f"in {script.name}: {', '.join(duplicates)}")
|
|
24
22
|
|
|
25
|
-
return Result(name="
|
|
23
|
+
return Result(name="duplicate dependency", warnings=warnings)
|
|
26
24
|
|
|
27
25
|
|
|
28
26
|
def check_missing_dependencies(
|
|
@@ -34,20 +32,22 @@ def check_missing_dependencies(
|
|
|
34
32
|
logs the scripts dependending on the missing script
|
|
35
33
|
"""
|
|
36
34
|
errors = []
|
|
37
|
-
|
|
35
|
+
dependency_names = {
|
|
38
36
|
dep.name for script in scripts for dep in script.dependencies
|
|
39
37
|
}
|
|
40
38
|
script_names = {script.name for script in scripts}
|
|
41
|
-
missing_dependencies =
|
|
39
|
+
missing_dependencies = dependency_names - script_names
|
|
42
40
|
|
|
43
41
|
for missing in missing_dependencies:
|
|
44
42
|
depending_scripts = graph.predecessors(missing)
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
43
|
+
errors.append(
|
|
44
|
+
f"{missing}:"
|
|
45
|
+
+ "".join(
|
|
46
|
+
f"\n - used by: {script}" for script in depending_scripts
|
|
47
|
+
)
|
|
48
|
+
)
|
|
49
49
|
|
|
50
|
-
return Result(name="
|
|
50
|
+
return Result(name="missing dependency", errors=errors)
|
|
51
51
|
|
|
52
52
|
|
|
53
53
|
def check_cycles(graph) -> Result:
|
|
@@ -59,8 +59,8 @@ def check_cycles(graph) -> Result:
|
|
|
59
59
|
|
|
60
60
|
cycles = nx.simple_cycles(graph)
|
|
61
61
|
|
|
62
|
-
errors = [
|
|
63
|
-
return Result(name="
|
|
62
|
+
errors = [str(cycle) for cycle in cycles]
|
|
63
|
+
return Result(name="cyclic dependency", errors=errors)
|
|
64
64
|
|
|
65
65
|
|
|
66
66
|
def cross_feed_dependencies(
|
|
@@ -86,22 +86,19 @@ def check_cross_feed_dependencies(graph) -> Result:
|
|
|
86
86
|
and if they are correctly contained within a is_enterprise_feed check.
|
|
87
87
|
"""
|
|
88
88
|
gated_cfd = cross_feed_dependencies(graph, is_enterprise_checked=True)
|
|
89
|
-
|
|
90
|
-
f"
|
|
91
|
-
f"depends on {dependency}(enterprise feed)"
|
|
89
|
+
infos = [
|
|
90
|
+
f"{dependent}(community feed) depends on {dependency}(enterprise feed)"
|
|
92
91
|
for dependent, dependency in gated_cfd
|
|
93
92
|
]
|
|
94
93
|
|
|
95
94
|
ungated_cfd = cross_feed_dependencies(graph, is_enterprise_checked=False)
|
|
96
95
|
errors = [
|
|
97
|
-
f"
|
|
98
|
-
f"depends on {dependency}(enterprise feed)
|
|
96
|
+
f"incorrect feed check in {dependent}(community feed) "
|
|
97
|
+
f"which depends on {dependency}(enterprise feed)"
|
|
99
98
|
for dependent, dependency in ungated_cfd
|
|
100
99
|
]
|
|
101
100
|
|
|
102
|
-
return Result(
|
|
103
|
-
name="check_cross_feed_dependencies", warnings=warnings, errors=errors
|
|
104
|
-
)
|
|
101
|
+
return Result(name="cross-feed dependency", infos=infos, errors=errors)
|
|
105
102
|
|
|
106
103
|
|
|
107
104
|
def check_category_order(graph) -> Result:
|
|
@@ -116,7 +113,7 @@ def check_category_order(graph) -> Result:
|
|
|
116
113
|
f"{dependent} depends on {dependency} which has a lower category order"
|
|
117
114
|
for dependent, dependency in problematic_edges
|
|
118
115
|
]
|
|
119
|
-
return Result(name="
|
|
116
|
+
return Result(name="category order", errors=errors)
|
|
120
117
|
|
|
121
118
|
|
|
122
119
|
def check_deprecated_dependencies(graph) -> Result:
|
|
@@ -125,4 +122,4 @@ def check_deprecated_dependencies(graph) -> Result:
|
|
|
125
122
|
for dependent, dependency in graph.edges()
|
|
126
123
|
if graph.nodes[dependency].get("deprecated", False)
|
|
127
124
|
]
|
|
128
|
-
return Result(name="
|
|
125
|
+
return Result(name="deprecated dependency", errors=errors)
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
import os
|
|
6
|
-
from argparse import ArgumentParser,
|
|
6
|
+
from argparse import ArgumentParser, Namespace
|
|
7
7
|
from pathlib import Path
|
|
8
8
|
|
|
9
9
|
from troubadix.argparser import directory_type_existing
|
|
@@ -11,13 +11,6 @@ from troubadix.argparser import directory_type_existing
|
|
|
11
11
|
from .models import Feed
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
def feed_type(value: str) -> Feed:
|
|
15
|
-
try:
|
|
16
|
-
return Feed[value.upper()]
|
|
17
|
-
except KeyError:
|
|
18
|
-
raise ArgumentTypeError(f"Invalid Feed value: '{value}'")
|
|
19
|
-
|
|
20
|
-
|
|
21
14
|
def parse_args() -> Namespace:
|
|
22
15
|
parser = ArgumentParser(
|
|
23
16
|
description="Tool for analysing the dependencies in the NASL repository.",
|
|
@@ -31,18 +24,18 @@ def parse_args() -> Namespace:
|
|
|
31
24
|
parser.add_argument(
|
|
32
25
|
"-f",
|
|
33
26
|
"--feed",
|
|
34
|
-
type=
|
|
27
|
+
type=Feed,
|
|
35
28
|
choices=Feed,
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
help="feed",
|
|
29
|
+
default=Feed.COMMON,
|
|
30
|
+
help="Feed selection",
|
|
39
31
|
)
|
|
40
32
|
parser.add_argument(
|
|
41
33
|
"--log",
|
|
34
|
+
type=str.upper,
|
|
42
35
|
default="WARNING",
|
|
43
|
-
|
|
36
|
+
choices=["INFO", "WARNING", "ERROR"],
|
|
37
|
+
help="Set the logging level (default: WARNING)",
|
|
44
38
|
)
|
|
45
|
-
parser.add_argument("-v", "--verbose", action="count", default=0)
|
|
46
39
|
|
|
47
40
|
args = parser.parse_args()
|
|
48
41
|
|
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
import logging
|
|
6
6
|
import re
|
|
7
7
|
import sys
|
|
8
|
-
from functools import reduce
|
|
9
8
|
from pathlib import Path
|
|
10
9
|
|
|
11
10
|
import networkx as nx
|
|
@@ -47,46 +46,23 @@ ENTERPRISE_FEED_CHECK_PATTERN = re.compile(
|
|
|
47
46
|
|
|
48
47
|
|
|
49
48
|
class Reporter:
|
|
50
|
-
def __init__(self
|
|
51
|
-
self.
|
|
49
|
+
def __init__(self) -> None:
|
|
50
|
+
self.logger = logging.getLogger(__name__)
|
|
52
51
|
|
|
53
52
|
def report(self, results: list[Result]):
|
|
54
53
|
for result in results:
|
|
55
|
-
|
|
56
|
-
self.
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
if self.verbosity >= 2:
|
|
62
|
-
self.print_divider("=")
|
|
63
|
-
|
|
64
|
-
def print_divider(self, char="-", length=40):
|
|
65
|
-
print(char * length)
|
|
66
|
-
|
|
67
|
-
def print_statistic(self, result: Result):
|
|
68
|
-
print(
|
|
69
|
-
f"{result.name} - warnings: {len(result.warnings)}, errors: {len(result.errors)}"
|
|
70
|
-
)
|
|
71
|
-
|
|
72
|
-
def print_warnings(self, result: Result):
|
|
73
|
-
for warning in result.warnings:
|
|
74
|
-
print(f"warning: {warning}")
|
|
54
|
+
for error in result.errors:
|
|
55
|
+
self.logger.error(f"{result.name}: {error}")
|
|
56
|
+
for warning in result.warnings:
|
|
57
|
+
self.logger.warning(f"{result.name}: {warning}")
|
|
58
|
+
for info in result.infos:
|
|
59
|
+
self.logger.info(f"{result.name}: {info}")
|
|
75
60
|
|
|
76
|
-
def print_errors(self, result: Result):
|
|
77
|
-
for error in result.errors:
|
|
78
|
-
print(f"error: {error}")
|
|
79
61
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
feed
|
|
83
|
-
|
|
84
|
-
if feed & Feed.COMMON:
|
|
85
|
-
scripts.extend(get_scripts(root / "common"))
|
|
86
|
-
if feed & Feed.FEED_21_04:
|
|
87
|
-
scripts.extend(get_scripts(root / "21.04"))
|
|
88
|
-
if feed & Feed.FEED_22_04:
|
|
89
|
-
scripts.extend(get_scripts(root / "22.04"))
|
|
62
|
+
def get_feed(root: Path, feed: Feed) -> list[Script]:
|
|
63
|
+
scripts = get_scripts(root / "common") # Always include common
|
|
64
|
+
if feed != Feed.COMMON: # Add version-specific scripts if not just common
|
|
65
|
+
scripts.extend(get_scripts(root / feed.value))
|
|
90
66
|
|
|
91
67
|
return scripts
|
|
92
68
|
|
|
@@ -197,7 +173,7 @@ def main():
|
|
|
197
173
|
check_category_order(graph),
|
|
198
174
|
check_deprecated_dependencies(graph),
|
|
199
175
|
]
|
|
200
|
-
reporter = Reporter(
|
|
176
|
+
reporter = Reporter()
|
|
201
177
|
reporter.report(results)
|
|
202
178
|
|
|
203
179
|
if any(result.errors for result in results):
|
{troubadix-25.3.3 → troubadix-25.3.5}/troubadix/standalone_plugins/dependency_graph/models.py
RENAMED
|
@@ -2,18 +2,19 @@
|
|
|
2
2
|
# SPDX-FileCopyrightText: 2025 Greenbone AG
|
|
3
3
|
|
|
4
4
|
from dataclasses import dataclass, field
|
|
5
|
-
from enum import
|
|
5
|
+
from enum import Enum
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
class Feed(
|
|
9
|
-
COMMON =
|
|
10
|
-
FEED_21_04 =
|
|
11
|
-
FEED_22_04 =
|
|
12
|
-
FULL = COMMON | FEED_21_04 | FEED_22_04
|
|
8
|
+
class Feed(str, Enum):
|
|
9
|
+
COMMON = "common"
|
|
10
|
+
FEED_21_04 = "21.04"
|
|
11
|
+
FEED_22_04 = "22.04"
|
|
13
12
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
|
|
14
|
+
class OutputLevel(Enum):
|
|
15
|
+
ERROR = 1
|
|
16
|
+
WARNING = 2
|
|
17
|
+
INFO = 3
|
|
17
18
|
|
|
18
19
|
|
|
19
20
|
@dataclass
|
|
@@ -35,6 +36,11 @@ class Script:
|
|
|
35
36
|
|
|
36
37
|
@dataclass
|
|
37
38
|
class Result:
|
|
39
|
+
"""Holds the results of a single check.
|
|
40
|
+
A check can report a combination of errors, warnings and infos
|
|
41
|
+
"""
|
|
42
|
+
|
|
38
43
|
name: str
|
|
39
44
|
warnings: list[str] = field(default_factory=list)
|
|
40
45
|
errors: list[str] = field(default_factory=list)
|
|
46
|
+
infos: list[str] = field(default_factory=list)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_files/fail_name_and_copyright_newline.nasl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_files/nasl/21.04/fail_badwords.nasl
RENAMED
|
File without changes
|
|
File without changes
|
{troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_files/nasl/21.04/fail_name_newline.nasl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{troubadix-25.3.3 → troubadix-25.3.5}/tests/plugins/test_files/nasl/21.04/runner/test_valid_oid.nasl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|