conan 2.19.0__tar.gz → 2.20.0__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.
- {conan-2.19.0/conan.egg-info → conan-2.20.0}/PKG-INFO +7 -3
- {conan-2.19.0 → conan-2.20.0}/conan/__init__.py +1 -1
- {conan-2.19.0 → conan-2.20.0}/conan/api/conan_api.py +54 -27
- {conan-2.19.0 → conan-2.20.0}/conan/api/model/list.py +47 -5
- {conan-2.19.0 → conan-2.20.0}/conan/api/model/refs.py +24 -10
- {conan-2.19.0 → conan-2.20.0}/conan/api/model/remote.py +5 -0
- {conan-2.19.0 → conan-2.20.0}/conan/api/output.py +88 -20
- {conan-2.19.0 → conan-2.20.0}/conan/api/subapi/audit.py +3 -3
- {conan-2.19.0 → conan-2.20.0}/conan/api/subapi/cache.py +20 -19
- {conan-2.19.0 → conan-2.20.0}/conan/api/subapi/command.py +2 -2
- conan-2.20.0/conan/api/subapi/config.py +152 -0
- {conan-2.19.0 → conan-2.20.0}/conan/api/subapi/download.py +7 -6
- {conan-2.19.0 → conan-2.20.0}/conan/api/subapi/export.py +4 -4
- {conan-2.19.0 → conan-2.20.0}/conan/api/subapi/graph.py +8 -8
- {conan-2.19.0 → conan-2.20.0}/conan/api/subapi/install.py +10 -10
- {conan-2.19.0 → conan-2.20.0}/conan/api/subapi/list.py +56 -23
- {conan-2.19.0 → conan-2.20.0}/conan/api/subapi/lockfile.py +1 -1
- {conan-2.19.0 → conan-2.20.0}/conan/api/subapi/new.py +2 -2
- {conan-2.19.0 → conan-2.20.0}/conan/api/subapi/profiles.py +9 -8
- {conan-2.19.0 → conan-2.20.0}/conan/api/subapi/remotes.py +5 -4
- {conan-2.19.0 → conan-2.20.0}/conan/api/subapi/remove.py +4 -4
- {conan-2.19.0 → conan-2.20.0}/conan/api/subapi/report.py +7 -7
- {conan-2.19.0 → conan-2.20.0}/conan/api/subapi/upload.py +75 -35
- {conan-2.19.0 → conan-2.20.0}/conan/api/subapi/workspace.py +43 -3
- {conan-2.19.0 → conan-2.20.0}/conan/cli/cli.py +0 -12
- {conan-2.19.0 → conan-2.20.0}/conan/cli/command.py +3 -2
- {conan-2.19.0 → conan-2.20.0}/conan/cli/commands/config.py +9 -9
- {conan-2.19.0 → conan-2.20.0}/conan/cli/commands/lock.py +1 -2
- {conan-2.19.0 → conan-2.20.0}/conan/cli/commands/workspace.py +5 -6
- conan-2.20.0/conan/internal/api/migrations.py +69 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/new/workspace.py +27 -11
- {conan-2.19.0 → conan-2.20.0}/conan/internal/conan_app.py +11 -8
- {conan-2.19.0 → conan-2.20.0}/conan/internal/default_settings.py +12 -12
- {conan-2.19.0 → conan-2.20.0}/conan/internal/deploy.py +7 -2
- {conan-2.19.0 → conan-2.20.0}/conan/internal/graph/graph.py +7 -7
- {conan-2.19.0 → conan-2.20.0}/conan/internal/graph/proxy.py +2 -2
- {conan-2.19.0 → conan-2.20.0}/conan/internal/methods.py +3 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/model/conan_file.py +20 -1
- {conan-2.19.0 → conan-2.20.0}/conan/internal/model/conf.py +38 -2
- {conan-2.19.0 → conan-2.20.0}/conan/internal/model/settings.py +46 -1
- {conan-2.19.0 → conan-2.20.0}/conan/internal/model/workspace.py +9 -2
- {conan-2.19.0 → conan-2.20.0}/conan/test/utils/tools.py +3 -3
- {conan-2.19.0 → conan-2.20.0}/conan/tools/build/__init__.py +1 -0
- conan-2.20.0/conan/tools/build/compiler.py +44 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/cmake/cmakedeps2/cmakedeps.py +2 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/cmake/layout.py +6 -1
- {conan-2.19.0 → conan-2.20.0}/conan/tools/cmake/toolchain/blocks.py +7 -3
- {conan-2.19.0 → conan-2.20.0}/conan/tools/files/files.py +20 -7
- {conan-2.19.0 → conan-2.20.0}/conan/tools/gnu/autotools.py +7 -2
- {conan-2.19.0 → conan-2.20.0}/conan/tools/intel/intel_cc.py +4 -2
- {conan-2.19.0 → conan-2.20.0}/conan/tools/meson/helpers.py +0 -2
- {conan-2.19.0 → conan-2.20.0}/conan/tools/meson/toolchain.py +22 -16
- {conan-2.19.0 → conan-2.20.0}/conan/tools/microsoft/visual.py +2 -1
- {conan-2.19.0 → conan-2.20.0}/conan/tools/system/package_manager.py +65 -11
- {conan-2.19.0 → conan-2.20.0/conan.egg-info}/PKG-INFO +7 -3
- {conan-2.19.0 → conan-2.20.0}/conan.egg-info/SOURCES.txt +1 -1
- {conan-2.19.0 → conan-2.20.0}/conan.egg-info/requires.txt +1 -1
- {conan-2.19.0 → conan-2.20.0}/conans/requirements.txt +1 -1
- {conan-2.19.0 → conan-2.20.0}/setup.py +7 -3
- conan-2.19.0/conan/api/subapi/config.py +0 -237
- conan-2.19.0/conan/api/subapi/search.py +0 -24
- conan-2.19.0/conan/internal/api/migrations.py +0 -140
- {conan-2.19.0 → conan-2.20.0}/LICENSE.md +0 -0
- {conan-2.19.0 → conan-2.20.0}/MANIFEST.in +0 -0
- {conan-2.19.0 → conan-2.20.0}/README.md +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/api/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/api/input.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/api/model/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/api/subapi/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/api/subapi/local.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/args.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/commands/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/commands/audit.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/commands/build.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/commands/cache.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/commands/create.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/commands/download.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/commands/editable.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/commands/export.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/commands/export_pkg.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/commands/graph.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/commands/inspect.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/commands/install.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/commands/list.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/commands/new.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/commands/pkglist.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/commands/profile.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/commands/remote.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/commands/remove.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/commands/report.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/commands/search.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/commands/source.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/commands/test.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/commands/upload.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/commands/version.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/exit_codes.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/formatters/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/formatters/audit/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/formatters/audit/vulnerabilities.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/formatters/graph/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/formatters/graph/build_order_html.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/formatters/graph/graph.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/formatters/graph/graph_info_text.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/formatters/graph/info_graph_dot.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/formatters/graph/info_graph_html.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/formatters/list/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/formatters/list/list.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/formatters/list/search_table_html.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/formatters/report/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/formatters/report/diff.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/formatters/report/diff_html.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/printers/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cli/printers/graph.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cps/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/cps/cps.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/errors.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/audit/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/audit/providers.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/config/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/config/config_installer.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/detect/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/detect/detect_api.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/detect/detect_vs.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/export.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/install/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/install/generators.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/list/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/list/query_parse.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/local/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/local/editable.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/new/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/new/alias_new.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/new/autoools_exe.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/new/autotools_lib.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/new/basic.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/new/bazel_7_exe.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/new/bazel_7_lib.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/new/bazel_exe.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/new/bazel_lib.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/new/cmake_exe.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/new/cmake_lib.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/new/header_lib.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/new/local_recipes_index.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/new/meson_exe.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/new/meson_lib.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/new/msbuild_exe.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/new/msbuild_lib.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/new/premake_exe.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/new/premake_lib.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/new/qbs_lib.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/profile/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/profile/detect.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/profile/profile_loader.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/remotes/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/remotes/encrypt.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/remotes/localdb.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/upload.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/api/uploader.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/cache/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/cache/cache.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/cache/conan_reference_layout.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/cache/db/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/cache/db/cache_database.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/cache/db/packages_table.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/cache/db/recipes_table.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/cache/db/table.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/cache/home_paths.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/cache/integrity_check.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/errors.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/graph/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/graph/build_mode.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/graph/compatibility.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/graph/compute_pid.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/graph/graph_binaries.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/graph/graph_builder.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/graph/graph_error.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/graph/install_graph.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/graph/installer.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/graph/profile_node_definer.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/graph/provides.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/graph/python_requires.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/graph/range_resolver.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/hook_manager.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/internal_tools.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/loader.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/model/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/model/conanfile_interface.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/model/cpp_info.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/model/dependencies.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/model/info.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/model/layout.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/model/lockfile.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/model/manifest.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/model/options.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/model/pkg_type.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/model/profile.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/model/recipe_ref.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/model/requires.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/model/version.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/model/version_range.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/paths.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/rest/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/rest/auth_manager.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/rest/caching_file_downloader.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/rest/client_routes.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/rest/conan_requester.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/rest/download_cache.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/rest/file_downloader.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/rest/file_uploader.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/rest/pkg_sign.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/rest/remote_credentials.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/rest/remote_manager.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/rest/rest_client.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/rest/rest_client_local_recipe_index.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/rest/rest_client_v2.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/rest/rest_routes.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/runner/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/runner/docker.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/runner/output.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/runner/ssh.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/runner/wsl.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/source.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/subsystems.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/util/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/util/config_parser.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/util/dates.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/util/files.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/internal/util/runners.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/test/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/test/assets/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/test/assets/autotools.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/test/assets/cmake.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/test/assets/genconanfile.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/test/assets/premake.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/test/assets/sources.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/test/assets/visual_project_files.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/test/utils/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/test/utils/artifactory.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/test/utils/env.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/test/utils/file_server.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/test/utils/mocks.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/test/utils/profiles.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/test/utils/scm.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/test/utils/server_launcher.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/test/utils/test_files.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/android/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/android/utils.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/apple/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/apple/apple.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/apple/xcodebuild.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/apple/xcodedeps.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/apple/xcodetoolchain.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/build/cppstd.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/build/cpu.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/build/cross_building.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/build/cstd.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/build/flags.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/build/stdcpp_library.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/cmake/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/cmake/cmake.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/cmake/cmakedeps/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/cmake/cmakedeps/cmakedeps.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/cmake/cmakedeps/templates/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/cmake/cmakedeps/templates/config.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/cmake/cmakedeps/templates/config_version.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/cmake/cmakedeps/templates/macros.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/cmake/cmakedeps/templates/target_configuration.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/cmake/cmakedeps/templates/target_data.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/cmake/cmakedeps/templates/targets.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/cmake/cmakedeps2/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/cmake/cmakedeps2/config.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/cmake/cmakedeps2/config_version.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/cmake/cmakedeps2/target_configuration.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/cmake/cmakedeps2/targets.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/cmake/presets.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/cmake/toolchain/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/cmake/toolchain/toolchain.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/cmake/utils.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/cps/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/cps/cps_deps.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/env/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/env/environment.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/env/virtualbuildenv.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/env/virtualrunenv.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/files/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/files/conandata.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/files/copy_pattern.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/files/packager.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/files/patches.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/files/symlinks/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/files/symlinks/symlinks.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/gnu/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/gnu/autotoolsdeps.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/gnu/autotoolstoolchain.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/gnu/get_gnu_triplet.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/gnu/gnudeps_flags.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/gnu/gnutoolchain.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/gnu/makedeps.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/gnu/pkgconfig.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/gnu/pkgconfigdeps.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/google/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/google/bazel.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/google/bazeldeps.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/google/layout.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/google/toolchain.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/intel/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/layout/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/meson/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/meson/meson.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/microsoft/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/microsoft/layout.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/microsoft/msbuild.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/microsoft/msbuilddeps.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/microsoft/nmakedeps.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/microsoft/nmaketoolchain.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/microsoft/subsystems.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/microsoft/toolchain.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/premake/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/premake/constants.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/premake/premake.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/premake/premakedeps.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/premake/toolchain.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/qbs/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/qbs/common.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/qbs/qbs.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/qbs/qbsdeps.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/qbs/qbsprofile.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/ros/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/ros/rosenv.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/sbom/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/sbom/cyclonedx.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/sbom/spdx_licenses.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/scm/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/scm/git.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/scons/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/scons/sconsdeps.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan/tools/system/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan.egg-info/dependency_links.txt +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan.egg-info/entry_points.txt +0 -0
- {conan-2.19.0 → conan-2.20.0}/conan.egg-info/top_level.txt +0 -0
- {conan-2.19.0 → conan-2.20.0}/conans/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conans/conan.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conans/conan_server.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conans/migrations.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conans/model/__init__.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conans/model/package_ref.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conans/model/recipe_ref.py +0 -0
- {conan-2.19.0 → conan-2.20.0}/conans/requirements_dev.txt +0 -0
- {conan-2.19.0 → conan-2.20.0}/conans/requirements_runner.txt +0 -0
- {conan-2.19.0 → conan-2.20.0}/conans/requirements_server.txt +0 -0
- {conan-2.19.0 → conan-2.20.0}/pyproject.toml +0 -0
- {conan-2.19.0 → conan-2.20.0}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: conan
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.20.0
|
|
4
4
|
Summary: Conan C/C++ package manager
|
|
5
5
|
Home-page: https://conan.io
|
|
6
6
|
Author: JFrog LTD
|
|
@@ -179,10 +179,14 @@ Classifier: Intended Audience :: Developers
|
|
|
179
179
|
Classifier: Topic :: Software Development :: Build Tools
|
|
180
180
|
Classifier: License :: OSI Approved :: MIT License
|
|
181
181
|
Classifier: Programming Language :: Python :: 3
|
|
182
|
-
Classifier: Programming Language :: Python :: 3.6
|
|
183
182
|
Classifier: Programming Language :: Python :: 3.7
|
|
184
183
|
Classifier: Programming Language :: Python :: 3.8
|
|
185
|
-
|
|
184
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
185
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
186
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
187
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
188
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
189
|
+
Requires-Python: >=3.7
|
|
186
190
|
Description-Content-Type: text/markdown
|
|
187
191
|
Provides-Extra: dev
|
|
188
192
|
Provides-Extra: test
|
|
@@ -19,11 +19,12 @@ from conan.api.subapi.profiles import ProfilesAPI
|
|
|
19
19
|
from conan.api.subapi.list import ListAPI
|
|
20
20
|
from conan.api.subapi.remotes import RemotesAPI
|
|
21
21
|
from conan.api.subapi.remove import RemoveAPI
|
|
22
|
-
from conan.api.subapi.search import SearchAPI
|
|
23
22
|
from conan.api.subapi.upload import UploadAPI
|
|
24
23
|
from conan.errors import ConanException
|
|
25
24
|
from conan.internal.cache.home_paths import HomePaths
|
|
26
25
|
from conan.internal.hook_manager import HookManager
|
|
26
|
+
from conan.internal.model.conf import load_global_conf, ConfDefinition, CORE_CONF_PATTERN
|
|
27
|
+
from conan.internal.model.settings import load_settings_yml
|
|
27
28
|
from conan.internal.paths import get_conan_user_home
|
|
28
29
|
from conan.internal.api.migrations import ClientMigrator
|
|
29
30
|
from conan.internal.model.version_range import validate_conan_version
|
|
@@ -38,40 +39,40 @@ class ConanAPI:
|
|
|
38
39
|
def __init__(self, cache_folder=None):
|
|
39
40
|
"""
|
|
40
41
|
:param cache_folder: Conan cache/home folder. It will have less priority than the
|
|
41
|
-
"home_folder" defined in a Workspace.
|
|
42
|
+
``"home_folder"`` defined in a Workspace.
|
|
42
43
|
"""
|
|
43
44
|
|
|
44
45
|
version = sys.version_info
|
|
45
|
-
if version.major == 2 or version.minor <
|
|
46
|
-
raise ConanException("Conan needs Python >= 3.
|
|
46
|
+
if version.major == 2 or version.minor < 7:
|
|
47
|
+
raise ConanException("Conan needs Python >= 3.7")
|
|
47
48
|
if cache_folder is not None and not os.path.isabs(cache_folder):
|
|
48
49
|
raise ConanException("cache_folder has to be an absolute path")
|
|
49
50
|
|
|
50
51
|
init_colorama(sys.stderr)
|
|
52
|
+
# Deprecated, but still used internally, prefer home_folder
|
|
51
53
|
self.cache_folder = cache_folder or get_conan_user_home()
|
|
52
|
-
self.
|
|
53
|
-
# This API is depended upon by the subsequent ones, it should be initialized first
|
|
54
|
-
self.config = ConfigAPI(self)
|
|
55
|
-
_check_conan_version(self)
|
|
56
|
-
|
|
54
|
+
self._home_folder = self.cache_folder
|
|
57
55
|
self._api_helpers = self._ApiHelpers(self)
|
|
58
56
|
self.migrate()
|
|
59
57
|
|
|
60
|
-
|
|
58
|
+
#: Used to interact with the local Conan configuration
|
|
59
|
+
self.config: ConfigAPI = ConfigAPI(self, self._api_helpers)
|
|
60
|
+
#: Used to interact with remotes
|
|
61
|
+
self.remotes: RemotesAPI = RemotesAPI(self, self._api_helpers)
|
|
61
62
|
self.command = CommandAPI(self)
|
|
62
|
-
|
|
63
|
-
self.
|
|
64
|
-
|
|
65
|
-
self.list = ListAPI(self)
|
|
66
|
-
self.profiles = ProfilesAPI(self)
|
|
63
|
+
#: Used to get latest refs and list refs of recipes and packages
|
|
64
|
+
self.list: ListAPI = ListAPI(self)
|
|
65
|
+
self.profiles = ProfilesAPI(self, self._api_helpers)
|
|
67
66
|
self.install = InstallAPI(self, self._api_helpers)
|
|
68
67
|
self.graph = GraphAPI(self, self._api_helpers)
|
|
69
68
|
self.export = ExportAPI(self, self._api_helpers)
|
|
70
69
|
self.remove = RemoveAPI(self)
|
|
71
70
|
self.new = NewAPI(self)
|
|
72
|
-
|
|
73
|
-
self.
|
|
74
|
-
|
|
71
|
+
#: Used to upload recipes and packages to remotes
|
|
72
|
+
self.upload: UploadAPI = UploadAPI(self, self._api_helpers)
|
|
73
|
+
#: Used to download recipes and packages from remotes
|
|
74
|
+
self.download: DownloadAPI = DownloadAPI(self)
|
|
75
|
+
self.cache = CacheAPI(self, self._api_helpers)
|
|
75
76
|
self.lockfile = LockfileAPI(self)
|
|
76
77
|
self.local = LocalAPI(self, self._api_helpers)
|
|
77
78
|
self.audit = AuditAPI(self)
|
|
@@ -79,18 +80,23 @@ class ConanAPI:
|
|
|
79
80
|
self.workspace = WorkspaceAPI(self)
|
|
80
81
|
self.report = ReportAPI(self, self._api_helpers)
|
|
81
82
|
|
|
83
|
+
@property
|
|
84
|
+
def home_folder(self):
|
|
85
|
+
""" Where the Conan user home is located. Read only.
|
|
86
|
+
Can be modified by the ``CONAN_HOME`` environment variable or by the
|
|
87
|
+
``.conanrc`` file in the current directory or any parent directory
|
|
88
|
+
when Conan is called.
|
|
89
|
+
"""
|
|
90
|
+
return self._home_folder
|
|
91
|
+
|
|
82
92
|
def reinit(self):
|
|
83
93
|
"""
|
|
84
94
|
Reinitialize the Conan API. This is useful when the configuration changes.
|
|
85
95
|
"""
|
|
86
|
-
# TODO: Think order of reinitialization for helpers
|
|
87
96
|
self._api_helpers.reinit()
|
|
88
|
-
self.config.reinit()
|
|
89
97
|
self.remotes.reinit()
|
|
90
98
|
self.local.reinit()
|
|
91
99
|
|
|
92
|
-
_check_conan_version(self)
|
|
93
|
-
|
|
94
100
|
def migrate(self):
|
|
95
101
|
# Migration system
|
|
96
102
|
# TODO: A prettier refactoring of migrators would be nice
|
|
@@ -101,13 +107,34 @@ class ConanAPI:
|
|
|
101
107
|
class _ApiHelpers:
|
|
102
108
|
def __init__(self, conan_api):
|
|
103
109
|
self._conan_api = conan_api
|
|
110
|
+
self._cli_core_confs = None
|
|
111
|
+
self._init_global_conf()
|
|
104
112
|
self.hook_manager = HookManager(HomePaths(self._conan_api.home_folder).hooks_path)
|
|
105
113
|
|
|
114
|
+
def set_core_confs(self, core_confs):
|
|
115
|
+
confs = ConfDefinition()
|
|
116
|
+
for c in core_confs:
|
|
117
|
+
if not CORE_CONF_PATTERN.match(c):
|
|
118
|
+
raise ConanException(f"Only core. values are allowed in --core-conf. Got {c}")
|
|
119
|
+
confs.loads("\n".join(core_confs))
|
|
120
|
+
confs.validate()
|
|
121
|
+
self._cli_core_confs = confs
|
|
122
|
+
# Last but not least, apply the new configuration
|
|
123
|
+
# This will in turn call ApiHelpers.reinit() as the very first thing
|
|
124
|
+
self._conan_api.reinit()
|
|
125
|
+
|
|
126
|
+
def _init_global_conf(self):
|
|
127
|
+
self.global_conf = load_global_conf(self._conan_api.home_folder)
|
|
128
|
+
if self._cli_core_confs:
|
|
129
|
+
self.global_conf.update_conf_definition(self._cli_core_confs)
|
|
130
|
+
required_range_new = self.global_conf.get("core:required_conan_version")
|
|
131
|
+
if required_range_new:
|
|
132
|
+
validate_conan_version(required_range_new)
|
|
133
|
+
|
|
106
134
|
def reinit(self):
|
|
135
|
+
self._init_global_conf()
|
|
107
136
|
self.hook_manager.reinit()
|
|
108
137
|
|
|
109
|
-
|
|
110
|
-
def
|
|
111
|
-
|
|
112
|
-
if required_range_new:
|
|
113
|
-
validate_conan_version(required_range_new)
|
|
138
|
+
@property
|
|
139
|
+
def settings_yml(self):
|
|
140
|
+
return load_settings_yml(self._conan_api.home_folder)
|
|
@@ -13,6 +13,7 @@ from conan.internal.util.files import load
|
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
class MultiPackagesList:
|
|
16
|
+
""" A collection of PackagesList by remote name."""
|
|
16
17
|
def __init__(self):
|
|
17
18
|
self.lists = {}
|
|
18
19
|
|
|
@@ -29,6 +30,7 @@ class MultiPackagesList:
|
|
|
29
30
|
self.lists[remote_name] = {"error": error}
|
|
30
31
|
|
|
31
32
|
def serialize(self):
|
|
33
|
+
""" Serialize object to a dictionary."""
|
|
32
34
|
return {k: v.serialize() if isinstance(v, PackagesList) else v
|
|
33
35
|
for k, v in self.lists.items()}
|
|
34
36
|
|
|
@@ -42,6 +44,7 @@ class MultiPackagesList:
|
|
|
42
44
|
|
|
43
45
|
@staticmethod
|
|
44
46
|
def load(file):
|
|
47
|
+
""" Create an instance of the class from a serialized JSON file path pointed by ``file``."""
|
|
45
48
|
try:
|
|
46
49
|
content = json.loads(load(file))
|
|
47
50
|
except JSONDecodeError as e:
|
|
@@ -68,6 +71,25 @@ class MultiPackagesList:
|
|
|
68
71
|
|
|
69
72
|
@staticmethod
|
|
70
73
|
def load_graph(graphfile, graph_recipes=None, graph_binaries=None, context=None):
|
|
74
|
+
""" Create an instance of the class from a graph file path, which is
|
|
75
|
+
the json format returned by a few commands
|
|
76
|
+
like ``conan graph info`` or ``conan create/install.``
|
|
77
|
+
|
|
78
|
+
:parameter str graphfile: Path to the graph file
|
|
79
|
+
:parameter list[str] graph_recipes: List for kinds of recipes to return.
|
|
80
|
+
For example ``"cache"`` will return only recipes in the local cache,
|
|
81
|
+
``"download"`` will return only recipes that have been downloaded,
|
|
82
|
+
and passing ``"*"`` will return all recipes.
|
|
83
|
+
:parameter list[str] graph_binaries: List for kinds of binaries to return.
|
|
84
|
+
For example ``"cache"`` will return only binaries in the local cache,
|
|
85
|
+
``"download"`` will return only binaries that have been downloaded,
|
|
86
|
+
``"build"`` will return only binaries that are built,
|
|
87
|
+
``"missing"`` will return only binaries that are missing,
|
|
88
|
+
``"invalid"`` will return only binaries that are invalid,
|
|
89
|
+
and passing ``"*"`` will return all binaries.
|
|
90
|
+
:parameter str context: Context to filter the graph,
|
|
91
|
+
can be ``"host"``, ``"build"``, ``"host-only"`` or ``"build-only"``
|
|
92
|
+
"""
|
|
71
93
|
if not os.path.isfile(graphfile):
|
|
72
94
|
raise ConanException(f"Graph file not found: {graphfile}")
|
|
73
95
|
try:
|
|
@@ -81,7 +103,7 @@ class MultiPackagesList:
|
|
|
81
103
|
"More Info at 'https://docs.conan.io/2/reference/commands/formatters/graph_info_json_formatter.html"
|
|
82
104
|
)
|
|
83
105
|
|
|
84
|
-
mpkglist =
|
|
106
|
+
mpkglist = MultiPackagesList._define_graph(graph, graph_recipes, graph_binaries,
|
|
85
107
|
context=base_context)
|
|
86
108
|
if context == "build-only":
|
|
87
109
|
host = MultiPackagesList._define_graph(graph, graph_recipes, graph_binaries,
|
|
@@ -169,6 +191,7 @@ class MultiPackagesList:
|
|
|
169
191
|
|
|
170
192
|
|
|
171
193
|
class PackagesList:
|
|
194
|
+
""" A collection of recipes, revisions and packages."""
|
|
172
195
|
def __init__(self):
|
|
173
196
|
self.recipes = {}
|
|
174
197
|
|
|
@@ -202,12 +225,13 @@ class PackagesList:
|
|
|
202
225
|
result.append(subpkglist)
|
|
203
226
|
return result
|
|
204
227
|
|
|
205
|
-
def only_recipes(self):
|
|
206
|
-
|
|
228
|
+
def only_recipes(self) -> None:
|
|
229
|
+
""" Filter out all the packages and package revisions, keep only the recipes and
|
|
230
|
+
recipe revisions in self.recipes.
|
|
231
|
+
"""
|
|
207
232
|
for ref, ref_dict in self.recipes.items():
|
|
208
233
|
for rrev_dict in ref_dict.get("revisions", {}).values():
|
|
209
234
|
rrev_dict.pop("packages", None)
|
|
210
|
-
return result
|
|
211
235
|
|
|
212
236
|
def add_refs(self, refs):
|
|
213
237
|
# RREVS alreday come in ASCENDING order, so upload does older revisions first
|
|
@@ -264,18 +288,36 @@ class PackagesList:
|
|
|
264
288
|
return result
|
|
265
289
|
|
|
266
290
|
def serialize(self):
|
|
267
|
-
|
|
291
|
+
""" Serialize the instance to a dictionary."""
|
|
292
|
+
return self.recipes.copy()
|
|
268
293
|
|
|
269
294
|
@staticmethod
|
|
270
295
|
def deserialize(data):
|
|
296
|
+
""" Loads the data from a serialized dictionary."""
|
|
271
297
|
result = PackagesList()
|
|
272
298
|
result.recipes = data
|
|
273
299
|
return result
|
|
274
300
|
|
|
275
301
|
|
|
276
302
|
class ListPattern:
|
|
303
|
+
""" Object holding a pattern that matches recipes, revisions and packages."""
|
|
277
304
|
|
|
278
305
|
def __init__(self, expression, rrev="latest", package_id=None, prev="latest", only_recipe=False):
|
|
306
|
+
"""
|
|
307
|
+
:param expression: The pattern to match, e.g. ``"name/*:*"``
|
|
308
|
+
:param rrev: The recipe revision to match, defaults to ``"latest"``,
|
|
309
|
+
can also be ``"!latest"`` or ``"~latest"`` to match all but the latest revision,
|
|
310
|
+
a pattern like ``"1234*"`` to match a specific revision,
|
|
311
|
+
or a specific revision like ``"1234"``.
|
|
312
|
+
:param package_id: The package ID to match, defaults to ``None``, which matches all package IDs.
|
|
313
|
+
:param prev: The package revision to match, defaults to ``"latest"``,
|
|
314
|
+
can also be ``"!latest"`` or ``"~latest"`` to match all but the latest revision,
|
|
315
|
+
a pattern like ``"1234*"`` to match a specific revision,
|
|
316
|
+
or a specific revision like ``"1234"``.
|
|
317
|
+
:param only_recipe: If ``True``, only the recipe part of the expression is parsed,
|
|
318
|
+
ignoring ``package_id`` and ``prev``. This is useful for commands that
|
|
319
|
+
only operate on recipes, like ``conan search``.
|
|
320
|
+
"""
|
|
279
321
|
def split(s, c, default=None):
|
|
280
322
|
if not s:
|
|
281
323
|
return None, default
|
|
@@ -10,20 +10,28 @@ from conan.internal.util.dates import timestamp_to_str
|
|
|
10
10
|
|
|
11
11
|
@total_ordering
|
|
12
12
|
class RecipeReference:
|
|
13
|
-
"""
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
""" An exact (no version-range, no alias) reference of a recipe,
|
|
14
|
+
it represents a reference of the form ``name/version[@user/channel][#revision][%timestamp]``.
|
|
15
|
+
Should be enough to locate a recipe in the cache or in a server, and
|
|
16
|
+
validation will be external to this class, at specific points (export, api, etc).
|
|
16
17
|
"""
|
|
17
18
|
|
|
18
19
|
def __init__(self, name=None, version=None, user=None, channel=None, revision=None,
|
|
19
20
|
timestamp=None):
|
|
20
|
-
|
|
21
|
+
""" The attributes should be regarded as immutable, and should not be modified by the user."""
|
|
22
|
+
#: Name of the reference
|
|
23
|
+
self.name: str = name
|
|
21
24
|
if version is not None and not isinstance(version, Version):
|
|
22
25
|
version = Version(version)
|
|
23
|
-
|
|
26
|
+
#: Version of the reference
|
|
27
|
+
self.version: Version = version # This MUST be a version if we want to be able to order
|
|
28
|
+
#: User of the reference, if any
|
|
24
29
|
self.user = user
|
|
30
|
+
#: Channel of the reference, if any
|
|
25
31
|
self.channel = channel
|
|
32
|
+
#: Revision of the reference, if any
|
|
26
33
|
self.revision = revision
|
|
34
|
+
#: Timestamp of the reference, if any
|
|
27
35
|
self.timestamp = timestamp
|
|
28
36
|
|
|
29
37
|
def copy(self):
|
|
@@ -90,6 +98,8 @@ class RecipeReference:
|
|
|
90
98
|
|
|
91
99
|
@staticmethod
|
|
92
100
|
def loads(rref):
|
|
101
|
+
""" Instantiates an object from a string, in the form:
|
|
102
|
+
``name/version[@user/channel][#revision][%timestamp]``"""
|
|
93
103
|
try:
|
|
94
104
|
# timestamp
|
|
95
105
|
tokens = rref.rsplit("%", 1)
|
|
@@ -120,8 +130,7 @@ class RecipeReference:
|
|
|
120
130
|
f" in the form name/version[@user/channel]")
|
|
121
131
|
|
|
122
132
|
def validate_ref(self, allow_uppercase=False):
|
|
123
|
-
"""
|
|
124
|
-
that could contain version ranges
|
|
133
|
+
""" Check that the reference is valid, and raise a ``ConanException`` if not.
|
|
125
134
|
"""
|
|
126
135
|
from conan.api.output import ConanOutput
|
|
127
136
|
self_str = str(self)
|
|
@@ -159,6 +168,13 @@ class RecipeReference:
|
|
|
159
168
|
f"'{self.channel}'")
|
|
160
169
|
|
|
161
170
|
def matches(self, pattern, is_consumer):
|
|
171
|
+
""" fnmatches the reference against the provided pattern.
|
|
172
|
+
|
|
173
|
+
:parameter str pattern: the pattern to match against, it can contain wildcards,
|
|
174
|
+
and can start with ``!`` or ``~`` to negate the match.
|
|
175
|
+
A special value of ``&`` will return a match only of ``is_consumer`` is ``True``
|
|
176
|
+
:parameter bool is_consumer: if ``True``, the pattern ``&`` will match this reference.
|
|
177
|
+
"""
|
|
162
178
|
negate = False
|
|
163
179
|
if pattern.startswith("!") or pattern.startswith("~"):
|
|
164
180
|
pattern = pattern[1:]
|
|
@@ -182,9 +198,7 @@ class RecipeReference:
|
|
|
182
198
|
return condition
|
|
183
199
|
|
|
184
200
|
def partial_match(self, pattern):
|
|
185
|
-
|
|
186
|
-
Finds if pattern matches any of partial sums of tokens of conan reference
|
|
187
|
-
"""
|
|
201
|
+
# Finds if pattern matches any of partial sums of tokens of conan reference
|
|
188
202
|
tokens = [self.name, "/", str(self.version)]
|
|
189
203
|
if self.user:
|
|
190
204
|
tokens += ["@", self.user]
|
|
@@ -36,4 +36,9 @@ class Remote:
|
|
|
36
36
|
return str(self)
|
|
37
37
|
|
|
38
38
|
def invalidate_cache(self):
|
|
39
|
+
""" If external operations might have modified the remote since it was instantiated,
|
|
40
|
+
this method can be called to invalidate the cache.
|
|
41
|
+
Note that this is done automatically when the remote is used in any operation by Conan,
|
|
42
|
+
such as uploading packages, so this method is not usually needed when only interacting
|
|
43
|
+
with the Conan API"""
|
|
39
44
|
self._caching = {}
|
|
@@ -85,13 +85,31 @@ def _color_enabled(stream):
|
|
|
85
85
|
|
|
86
86
|
|
|
87
87
|
class ConanOutput:
|
|
88
|
+
""" A singleton class to handle output messages in Conan.
|
|
89
|
+
|
|
90
|
+
Recipes should only access this class through the ``self.output`` attribute of the recipe,
|
|
91
|
+
but custom commands or tools can instantiate it directly, where doing so for each message is
|
|
92
|
+
a valid practice.
|
|
93
|
+
|
|
94
|
+
It provides methods to write messages at different levels of verbosity, such as debug, info,
|
|
95
|
+
warning, and error. The output level can be controlled by the user through command-line options
|
|
96
|
+
or environment variables.
|
|
97
|
+
|
|
98
|
+
The output methods return the instance itself, so different methods can be chained together.
|
|
99
|
+
"""
|
|
88
100
|
# Singleton
|
|
89
101
|
_conan_output_level = LEVEL_STATUS
|
|
90
102
|
_silent_warn_tags = []
|
|
91
103
|
_warnings_as_errors = []
|
|
92
104
|
lock = Lock()
|
|
93
105
|
|
|
94
|
-
def __init__(self, scope=""):
|
|
106
|
+
def __init__(self, scope: str = ""):
|
|
107
|
+
""" Initialize the ConanOutput instance.
|
|
108
|
+
|
|
109
|
+
:parameter scope: A string that represents the scope of the output. This is usually the
|
|
110
|
+
reference of the recipe being executed, like ``pkg/1.0@user/channel`` and is prefixed
|
|
111
|
+
to the output messages. If not provided, it defaults to an empty string.
|
|
112
|
+
"""
|
|
95
113
|
self.stream = sys.stderr
|
|
96
114
|
self._scope = scope
|
|
97
115
|
# FIXME: This is needed because in testing we are redirecting the sys.stderr to a buffer
|
|
@@ -108,12 +126,6 @@ class ConanOutput:
|
|
|
108
126
|
|
|
109
127
|
@classmethod
|
|
110
128
|
def define_log_level(cls, v):
|
|
111
|
-
"""
|
|
112
|
-
Translates the verbosity level entered by a Conan command. If it's `None` (-v),
|
|
113
|
-
it will be defaulted to `verbose` level.
|
|
114
|
-
|
|
115
|
-
:param v: `str` or `None`, where `None` is the same as `verbose`.
|
|
116
|
-
"""
|
|
117
129
|
env_level = os.getenv("CONAN_LOG_LEVEL")
|
|
118
130
|
v = env_level or v
|
|
119
131
|
levels = {"quiet": LEVEL_QUIET, # -vquiet 80
|
|
@@ -175,11 +187,13 @@ class ConanOutput:
|
|
|
175
187
|
|
|
176
188
|
return self
|
|
177
189
|
|
|
178
|
-
def box(self, msg):
|
|
190
|
+
def box(self, msg: str):
|
|
191
|
+
""" Draw a box around the message, useful for important messages"""
|
|
179
192
|
color = Color.BRIGHT_GREEN
|
|
180
193
|
self.writeln("\n**************************************************", fg=color)
|
|
181
194
|
self.writeln(f'*{msg: ^48}*', fg=color)
|
|
182
195
|
self.writeln(f"**************************************************\n", fg=color)
|
|
196
|
+
return self
|
|
183
197
|
|
|
184
198
|
def login_msg(self, msg, newline=False):
|
|
185
199
|
# unconditional to the error level, this has to show always
|
|
@@ -206,53 +220,91 @@ class ConanOutput:
|
|
|
206
220
|
ret = msg
|
|
207
221
|
|
|
208
222
|
if newline:
|
|
209
|
-
ret
|
|
223
|
+
ret = f"{ret}\n"
|
|
210
224
|
|
|
211
225
|
with self.lock:
|
|
212
226
|
self.stream.write(ret)
|
|
213
227
|
self.stream.flush()
|
|
214
228
|
|
|
215
|
-
def trace(self, msg):
|
|
229
|
+
def trace(self, msg: str):
|
|
230
|
+
""" This is the most extreme level of detail.
|
|
231
|
+
|
|
232
|
+
Trace messages log every little step the system takes, including function entries and exits,
|
|
233
|
+
variable changes, and other very specific events.
|
|
234
|
+
|
|
235
|
+
This message won't be printed unless the user has set the log level to trace
|
|
236
|
+
(e.g., using the ``-vvv`` option in the command line).
|
|
237
|
+
|
|
238
|
+
It’s used when full visibility of everything happening in the system is required,
|
|
239
|
+
but should be used carefully due to the large amount of information it can generate."""
|
|
216
240
|
if self._conan_output_level <= LEVEL_TRACE:
|
|
217
241
|
self._write_message(msg, fg=Color.BLUE)
|
|
218
242
|
return self
|
|
219
243
|
|
|
220
|
-
def debug(self, msg, fg=Color.MAGENTA, bg=None):
|
|
244
|
+
def debug(self, msg: str, fg: str = Color.MAGENTA, bg: str = None):
|
|
245
|
+
""" With a high level of detail, it is mainly used for debugging code.
|
|
246
|
+
|
|
247
|
+
This message won't be printed unless the user has set the log level to debug
|
|
248
|
+
(e.g., using the ``-vv`` option in the command line).
|
|
249
|
+
|
|
250
|
+
These messages provide useful information for developers, such as variable values
|
|
251
|
+
or execution flow details, to trace errors or analyze the program's behavior."""
|
|
221
252
|
if self._conan_output_level <= LEVEL_DEBUG:
|
|
222
253
|
self._write_message(msg, fg=fg, bg=bg)
|
|
223
254
|
return self
|
|
224
255
|
|
|
225
|
-
def verbose(self, msg, fg=None, bg=None):
|
|
256
|
+
def verbose(self, msg: str, fg: str = None, bg: str = None):
|
|
257
|
+
""" Displays additional and detailed information that, while not critical,
|
|
258
|
+
can be useful for better understanding how the system is working.
|
|
259
|
+
|
|
260
|
+
This message won't be printed unless the user has set the log level to verbose
|
|
261
|
+
(e.g., using the ``-v`` option in the command line).
|
|
262
|
+
|
|
263
|
+
It’s appropriate for gaining more context without overloading the logs with
|
|
264
|
+
excessive detail. Useful when more clarity is needed than a simple info."""
|
|
226
265
|
if self._conan_output_level <= LEVEL_VERBOSE:
|
|
227
266
|
self._write_message(msg, fg=fg, bg=bg)
|
|
228
267
|
return self
|
|
229
268
|
|
|
230
|
-
def status(self, msg, fg=None, bg=None):
|
|
269
|
+
def status(self, msg: str, fg: str = None, bg: str = None):
|
|
270
|
+
""" Provides general information about the system or ongoing operations.
|
|
271
|
+
|
|
272
|
+
Info messages are basic and used to inform about common events,
|
|
273
|
+
like the start or completion of processes, without implying specific problems or achievements."""
|
|
231
274
|
if self._conan_output_level <= LEVEL_STATUS:
|
|
232
275
|
self._write_message(msg, fg=fg, bg=bg)
|
|
233
276
|
return self
|
|
234
277
|
|
|
235
|
-
# Remove in a later refactor of all the output.info calls
|
|
236
278
|
info = status
|
|
237
279
|
|
|
238
|
-
def title(self, msg):
|
|
280
|
+
def title(self, msg: str):
|
|
281
|
+
""" Draws a title around the message, useful for important messages"""
|
|
239
282
|
if self._conan_output_level <= LEVEL_NOTICE:
|
|
240
283
|
self._write_message("\n======== {} ========".format(msg),
|
|
241
284
|
fg=Color.BRIGHT_MAGENTA)
|
|
242
285
|
return self
|
|
243
286
|
|
|
244
|
-
def subtitle(self, msg):
|
|
287
|
+
def subtitle(self, msg: str):
|
|
288
|
+
""" Draws a subtitle around the message, useful for important messages"""
|
|
245
289
|
if self._conan_output_level <= LEVEL_NOTICE:
|
|
246
290
|
self._write_message("\n-------- {} --------".format(msg),
|
|
247
291
|
fg=Color.BRIGHT_MAGENTA)
|
|
248
292
|
return self
|
|
249
293
|
|
|
250
|
-
def highlight(self, msg):
|
|
294
|
+
def highlight(self, msg: str):
|
|
295
|
+
""" Marks or emphasizes important events or processes that need to stand out but don’t necessarily
|
|
296
|
+
indicate success or error.
|
|
297
|
+
|
|
298
|
+
These messages draw attention to key points that may be relevant for the user or administrator."""
|
|
251
299
|
if self._conan_output_level <= LEVEL_NOTICE:
|
|
252
300
|
self._write_message(msg, fg=Color.BRIGHT_MAGENTA)
|
|
253
301
|
return self
|
|
254
302
|
|
|
255
|
-
def success(self, msg):
|
|
303
|
+
def success(self, msg: str):
|
|
304
|
+
""" Shows that an operation has been completed successfully.
|
|
305
|
+
|
|
306
|
+
This type of message is useful to confirm that key processes or tasks have finished correctly,
|
|
307
|
+
which is essential for good application monitoring."""
|
|
256
308
|
if self._conan_output_level <= LEVEL_NOTICE:
|
|
257
309
|
self._write_message(msg, fg=Color.BRIGHT_GREEN)
|
|
258
310
|
return self
|
|
@@ -262,7 +314,15 @@ class ConanOutput:
|
|
|
262
314
|
lookup_tag = warn_tag or "unknown"
|
|
263
315
|
return any(fnmatch.fnmatch(lookup_tag, pattern) for pattern in patterns)
|
|
264
316
|
|
|
265
|
-
def warning(self, msg, warn_tag=None):
|
|
317
|
+
def warning(self, msg: str, warn_tag: str = None):
|
|
318
|
+
""" Highlights a potential issue that, while not stopping the system,
|
|
319
|
+
could cause problems in the future or under certain conditions.
|
|
320
|
+
|
|
321
|
+
Warnings signal abnormal situations that should be
|
|
322
|
+
reviewed but don’t necessarily cause an immediate halt in operations.
|
|
323
|
+
Notice that if the tag matches the pattern in the ``core:warnings_as_errors`` configuration,
|
|
324
|
+
and is not skipped, this will be upgraded to an error, and raise an exception
|
|
325
|
+
when the output is printed, so that the error does not pass unnoticed."""
|
|
266
326
|
_treat_as_error = self._warn_tag_matches(warn_tag, self._warnings_as_errors)
|
|
267
327
|
if (self._conan_output_level <= LEVEL_WARNING or
|
|
268
328
|
(_treat_as_error and self._conan_output_level <= LEVEL_ERROR)):
|
|
@@ -277,7 +337,15 @@ class ConanOutput:
|
|
|
277
337
|
self._write_message(f"WARN: {output}", Color.YELLOW)
|
|
278
338
|
return self
|
|
279
339
|
|
|
280
|
-
def error(self, msg, error_type=None):
|
|
340
|
+
def error(self, msg: str, error_type: str = None):
|
|
341
|
+
""" Indicates that a serious issue has occurred that prevents the system
|
|
342
|
+
or application from continuing to function correctly.
|
|
343
|
+
|
|
344
|
+
Typically, this represents a failure in the normal flow of execution,
|
|
345
|
+
such as a service crash or a critical exception.
|
|
346
|
+
Notice that if the user has set the ``core:warnings_as_errors`` configuration,
|
|
347
|
+
this will raise an exception when the output is printed,
|
|
348
|
+
so that the error does not pass unnoticed."""
|
|
281
349
|
if self._warnings_as_errors and error_type != "exception":
|
|
282
350
|
raise ConanException(msg)
|
|
283
351
|
if self._conan_output_level <= LEVEL_ERROR:
|
|
@@ -19,7 +19,7 @@ class AuditAPI:
|
|
|
19
19
|
"""
|
|
20
20
|
|
|
21
21
|
def __init__(self, conan_api):
|
|
22
|
-
self.
|
|
22
|
+
self._conan_api = conan_api
|
|
23
23
|
self._home_folder = conan_api.home_folder
|
|
24
24
|
self._providers_path = os.path.join(self._home_folder, "audit_providers.json")
|
|
25
25
|
self._provider_cls = {
|
|
@@ -86,7 +86,7 @@ class AuditAPI:
|
|
|
86
86
|
|
|
87
87
|
provider_cls = self._provider_cls.get(provider_data["type"])
|
|
88
88
|
|
|
89
|
-
return provider_cls(self.
|
|
89
|
+
return provider_cls(self._conan_api, provider_name, provider_data)
|
|
90
90
|
|
|
91
91
|
def list_providers(self):
|
|
92
92
|
"""
|
|
@@ -96,7 +96,7 @@ class AuditAPI:
|
|
|
96
96
|
result = []
|
|
97
97
|
for name, provider_data in providers.items():
|
|
98
98
|
provider_cls = self._provider_cls.get(provider_data["type"])
|
|
99
|
-
result.append(provider_cls(self.
|
|
99
|
+
result.append(provider_cls(self._conan_api, name, provider_data))
|
|
100
100
|
return result
|
|
101
101
|
|
|
102
102
|
def add_provider(self, name, url, provider_type):
|