conan 2.22.2__tar.gz → 2.24.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.22.2/conan.egg-info → conan-2.24.0}/PKG-INFO +2 -2
- {conan-2.22.2 → conan-2.24.0}/README.md +1 -1
- {conan-2.22.2 → conan-2.24.0}/conan/__init__.py +1 -1
- {conan-2.22.2 → conan-2.24.0}/conan/api/conan_api.py +7 -5
- {conan-2.22.2 → conan-2.24.0}/conan/api/input.py +1 -1
- {conan-2.22.2 → conan-2.24.0}/conan/api/model/list.py +1 -0
- {conan-2.22.2 → conan-2.24.0}/conan/api/model/remote.py +14 -2
- {conan-2.22.2 → conan-2.24.0}/conan/api/output.py +11 -3
- {conan-2.22.2 → conan-2.24.0}/conan/api/subapi/audit.py +10 -8
- {conan-2.22.2 → conan-2.24.0}/conan/api/subapi/cache.py +36 -15
- conan-2.24.0/conan/api/subapi/config.py +264 -0
- {conan-2.22.2 → conan-2.24.0}/conan/api/subapi/graph.py +19 -11
- {conan-2.22.2 → conan-2.24.0}/conan/api/subapi/install.py +15 -6
- {conan-2.22.2 → conan-2.24.0}/conan/api/subapi/list.py +37 -15
- {conan-2.22.2 → conan-2.24.0}/conan/api/subapi/lockfile.py +13 -8
- {conan-2.22.2 → conan-2.24.0}/conan/api/subapi/new.py +1 -1
- {conan-2.22.2 → conan-2.24.0}/conan/api/subapi/remotes.py +6 -3
- {conan-2.22.2 → conan-2.24.0}/conan/api/subapi/report.py +14 -6
- {conan-2.22.2 → conan-2.24.0}/conan/api/subapi/upload.py +13 -7
- {conan-2.22.2 → conan-2.24.0}/conan/api/subapi/workspace.py +92 -27
- {conan-2.22.2 → conan-2.24.0}/conan/cli/cli.py +1 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/command.py +10 -4
- {conan-2.22.2 → conan-2.24.0}/conan/cli/commands/cache.py +12 -4
- {conan-2.22.2 → conan-2.24.0}/conan/cli/commands/config.py +23 -4
- {conan-2.22.2 → conan-2.24.0}/conan/cli/commands/create.py +7 -3
- {conan-2.22.2 → conan-2.24.0}/conan/cli/commands/install.py +33 -14
- {conan-2.22.2 → conan-2.24.0}/conan/cli/commands/lock.py +55 -16
- {conan-2.22.2 → conan-2.24.0}/conan/cli/commands/remote.py +8 -6
- conan-2.24.0/conan/cli/commands/run.py +55 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/commands/workspace.py +52 -9
- {conan-2.22.2 → conan-2.24.0}/conan/cli/formatters/audit/vulnerabilities.py +137 -28
- {conan-2.22.2 → conan-2.24.0}/conan/cli/formatters/graph/info_graph_html.py +39 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/formatters/report/diff.py +28 -5
- {conan-2.22.2 → conan-2.24.0}/conan/cli/formatters/report/diff_html.py +219 -15
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/audit/providers.py +20 -6
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/config/config_installer.py +3 -2
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/detect/detect_api.py +1 -1
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/detect/detect_vs.py +1 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/export.py +3 -1
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/new/basic.py +1 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/new/bazel_7_exe.py +1 -1
- {conan-2.22.2 → conan-2.24.0}/conan/internal/cache/db/packages_table.py +1 -1
- {conan-2.22.2 → conan-2.24.0}/conan/internal/cache/db/recipes_table.py +1 -1
- {conan-2.22.2 → conan-2.24.0}/conan/internal/cache/db/table.py +6 -20
- {conan-2.22.2 → conan-2.24.0}/conan/internal/cache/integrity_check.py +15 -8
- {conan-2.22.2 → conan-2.24.0}/conan/internal/default_settings.py +12 -12
- {conan-2.22.2 → conan-2.24.0}/conan/internal/graph/graph_binaries.py +69 -22
- {conan-2.22.2 → conan-2.24.0}/conan/internal/graph/graph_builder.py +14 -2
- {conan-2.22.2 → conan-2.24.0}/conan/internal/graph/graph_error.py +17 -2
- {conan-2.22.2 → conan-2.24.0}/conan/internal/graph/installer.py +14 -6
- {conan-2.22.2 → conan-2.24.0}/conan/internal/loader.py +2 -1
- {conan-2.22.2 → conan-2.24.0}/conan/internal/model/conan_file.py +6 -2
- conan-2.24.0/conan/internal/model/conanconfig.py +36 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/model/conf.py +6 -8
- conan-2.24.0/conan/internal/model/recipe_ref.py +13 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/model/workspace.py +23 -4
- {conan-2.22.2 → conan-2.24.0}/conan/internal/paths.py +1 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/rest/client_routes.py +5 -2
- {conan-2.22.2 → conan-2.24.0}/conan/internal/rest/conan_requester.py +8 -13
- {conan-2.22.2 → conan-2.24.0}/conan/internal/rest/remote_manager.py +12 -6
- {conan-2.22.2 → conan-2.24.0}/conan/internal/rest/rest_client.py +2 -2
- {conan-2.22.2 → conan-2.24.0}/conan/internal/rest/rest_client_local_recipe_index.py +1 -1
- {conan-2.22.2 → conan-2.24.0}/conan/internal/rest/rest_client_v2.py +3 -3
- {conan-2.22.2 → conan-2.24.0}/conan/internal/runner/docker.py +2 -1
- {conan-2.22.2 → conan-2.24.0}/conan/internal/runner/output.py +1 -0
- {conan-2.22.2 → conan-2.24.0}/conan/test/assets/premake.py +3 -2
- {conan-2.22.2 → conan-2.24.0}/conan/test/assets/visual_project_files.py +0 -2
- {conan-2.22.2 → conan-2.24.0}/conan/test/utils/tools.py +3 -3
- {conan-2.22.2 → conan-2.24.0}/conan/tools/android/utils.py +2 -1
- {conan-2.22.2 → conan-2.24.0}/conan/tools/build/cstd.py +2 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/build/flags.py +0 -37
- {conan-2.22.2 → conan-2.24.0}/conan/tools/cmake/cmake.py +33 -20
- {conan-2.22.2 → conan-2.24.0}/conan/tools/cmake/cmakedeps2/target_configuration.py +23 -20
- {conan-2.22.2 → conan-2.24.0}/conan/tools/cmake/toolchain/blocks.py +21 -4
- {conan-2.22.2 → conan-2.24.0}/conan/tools/cmake/toolchain/toolchain.py +18 -9
- {conan-2.22.2 → conan-2.24.0}/conan/tools/env/environment.py +6 -2
- {conan-2.22.2 → conan-2.24.0}/conan/tools/gnu/autotoolstoolchain.py +7 -2
- {conan-2.22.2 → conan-2.24.0}/conan/tools/gnu/gnutoolchain.py +7 -2
- {conan-2.22.2 → conan-2.24.0}/conan/tools/google/bazeldeps.py +17 -2
- {conan-2.22.2 → conan-2.24.0}/conan/tools/meson/meson.py +7 -2
- {conan-2.22.2 → conan-2.24.0}/conan/tools/meson/toolchain.py +3 -4
- {conan-2.22.2 → conan-2.24.0}/conan/tools/microsoft/nmakedeps.py +1 -1
- {conan-2.22.2 → conan-2.24.0}/conan/tools/microsoft/nmaketoolchain.py +15 -10
- {conan-2.22.2 → conan-2.24.0}/conan/tools/microsoft/toolchain.py +8 -6
- {conan-2.22.2 → conan-2.24.0}/conan/tools/microsoft/visual.py +11 -8
- {conan-2.22.2 → conan-2.24.0}/conan/tools/premake/premake.py +5 -2
- {conan-2.22.2 → conan-2.24.0}/conan/tools/system/package_manager.py +4 -4
- {conan-2.22.2 → conan-2.24.0}/conan/tools/system/pip_manager.py +26 -14
- {conan-2.22.2 → conan-2.24.0/conan.egg-info}/PKG-INFO +2 -2
- {conan-2.22.2 → conan-2.24.0}/conan.egg-info/SOURCES.txt +2 -0
- {conan-2.22.2 → conan-2.24.0}/conan.egg-info/requires.txt +1 -3
- {conan-2.22.2 → conan-2.24.0}/conans/requirements.txt +1 -1
- {conan-2.22.2 → conan-2.24.0}/conans/requirements_dev.txt +0 -1
- conan-2.22.2/conan/api/subapi/config.py +0 -189
- conan-2.22.2/conan/internal/model/recipe_ref.py +0 -8
- {conan-2.22.2 → conan-2.24.0}/LICENSE.md +0 -0
- {conan-2.22.2 → conan-2.24.0}/MANIFEST.in +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/api/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/api/model/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/api/model/refs.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/api/subapi/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/api/subapi/command.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/api/subapi/download.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/api/subapi/export.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/api/subapi/local.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/api/subapi/profiles.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/api/subapi/remove.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/args.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/commands/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/commands/audit.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/commands/build.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/commands/download.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/commands/editable.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/commands/export.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/commands/export_pkg.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/commands/graph.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/commands/inspect.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/commands/list.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/commands/new.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/commands/pkglist.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/commands/profile.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/commands/remove.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/commands/report.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/commands/search.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/commands/source.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/commands/test.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/commands/upload.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/commands/version.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/exit_codes.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/formatters/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/formatters/audit/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/formatters/graph/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/formatters/graph/build_order_html.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/formatters/graph/graph.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/formatters/graph/graph_info_text.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/formatters/graph/info_graph_dot.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/formatters/list/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/formatters/list/list.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/formatters/list/search_table_html.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/formatters/report/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/printers/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cli/printers/graph.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cps/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/cps/cps.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/errors.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/audit/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/config/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/detect/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/install/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/install/generators.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/list/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/list/query_parse.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/local/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/local/editable.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/migrations.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/new/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/new/alias_new.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/new/autoools_exe.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/new/autotools_lib.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/new/bazel_7_lib.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/new/bazel_exe.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/new/bazel_lib.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/new/cmake_exe.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/new/cmake_lib.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/new/header_lib.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/new/local_recipes_index.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/new/meson_exe.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/new/meson_lib.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/new/msbuild_exe.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/new/msbuild_lib.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/new/premake_exe.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/new/premake_lib.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/new/qbs_lib.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/new/workspace.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/profile/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/profile/detect.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/profile/profile_loader.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/remotes/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/remotes/encrypt.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/remotes/localdb.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/upload.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/api/uploader.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/cache/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/cache/cache.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/cache/conan_reference_layout.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/cache/db/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/cache/db/cache_database.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/cache/home_paths.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/conan_app.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/deploy.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/errors.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/graph/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/graph/build_mode.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/graph/compatibility.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/graph/compute_pid.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/graph/graph.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/graph/install_graph.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/graph/profile_node_definer.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/graph/provides.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/graph/proxy.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/graph/python_requires.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/graph/range_resolver.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/hook_manager.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/internal_tools.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/methods.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/model/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/model/conanfile_interface.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/model/cpp_info.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/model/dependencies.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/model/info.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/model/layout.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/model/lockfile.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/model/manifest.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/model/options.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/model/pkg_type.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/model/profile.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/model/requires.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/model/settings.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/model/version.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/model/version_range.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/rest/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/rest/auth_manager.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/rest/caching_file_downloader.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/rest/download_cache.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/rest/file_downloader.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/rest/file_uploader.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/rest/pkg_sign.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/rest/remote_credentials.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/rest/rest_routes.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/runner/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/runner/ssh.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/runner/wsl.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/source.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/subsystems.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/util/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/util/config_parser.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/util/dates.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/util/files.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/internal/util/runners.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/test/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/test/assets/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/test/assets/autotools.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/test/assets/cmake.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/test/assets/genconanfile.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/test/assets/sources.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/test/utils/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/test/utils/artifactory.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/test/utils/env.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/test/utils/file_server.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/test/utils/mocks.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/test/utils/profiles.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/test/utils/scm.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/test/utils/server_launcher.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/test/utils/test_files.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/android/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/apple/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/apple/apple.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/apple/xcodebuild.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/apple/xcodedeps.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/apple/xcodetoolchain.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/build/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/build/compiler.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/build/cppstd.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/build/cpu.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/build/cross_building.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/build/stdcpp_library.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/cmake/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/cmake/cmakedeps/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/cmake/cmakedeps/cmakedeps.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/cmake/cmakedeps/templates/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/cmake/cmakedeps/templates/config.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/cmake/cmakedeps/templates/config_version.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/cmake/cmakedeps/templates/macros.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/cmake/cmakedeps/templates/target_configuration.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/cmake/cmakedeps/templates/target_data.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/cmake/cmakedeps/templates/targets.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/cmake/cmakedeps2/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/cmake/cmakedeps2/cmakedeps.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/cmake/cmakedeps2/config.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/cmake/cmakedeps2/config_version.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/cmake/cmakedeps2/targets.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/cmake/layout.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/cmake/presets.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/cmake/toolchain/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/cmake/utils.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/cps/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/cps/cps_deps.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/env/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/env/virtualbuildenv.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/env/virtualrunenv.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/files/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/files/conandata.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/files/copy_pattern.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/files/files.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/files/patches.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/files/symlinks/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/files/symlinks/symlinks.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/gnu/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/gnu/autotools.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/gnu/autotoolsdeps.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/gnu/get_gnu_triplet.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/gnu/gnudeps_flags.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/gnu/makedeps.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/gnu/pkgconfig.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/gnu/pkgconfigdeps.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/google/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/google/bazel.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/google/layout.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/google/toolchain.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/intel/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/intel/intel_cc.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/layout/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/meson/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/meson/helpers.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/microsoft/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/microsoft/layout.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/microsoft/msbuild.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/microsoft/msbuilddeps.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/microsoft/subsystems.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/premake/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/premake/constants.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/premake/premakedeps.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/premake/toolchain.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/qbs/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/qbs/common.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/qbs/qbs.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/qbs/qbsdeps.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/qbs/qbsprofile.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/ros/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/ros/rosenv.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/sbom/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/sbom/cyclonedx.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/sbom/spdx_licenses.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/scm/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/scm/git.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/scons/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/scons/sconsdeps.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan/tools/system/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan.egg-info/dependency_links.txt +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan.egg-info/entry_points.txt +0 -0
- {conan-2.22.2 → conan-2.24.0}/conan.egg-info/top_level.txt +0 -0
- {conan-2.22.2 → conan-2.24.0}/conans/__init__.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conans/conan.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conans/conan_server.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conans/migrations.py +0 -0
- {conan-2.22.2 → conan-2.24.0}/conans/requirements_runner.txt +0 -0
- {conan-2.22.2 → conan-2.24.0}/conans/requirements_server.txt +0 -0
- {conan-2.22.2 → conan-2.24.0}/pyproject.toml +0 -0
- {conan-2.22.2 → conan-2.24.0}/setup.cfg +0 -0
- {conan-2.22.2 → conan-2.24.0}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: conan
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.24.0
|
|
4
4
|
Summary: Conan C/C++ package manager
|
|
5
5
|
Home-page: https://conan.io
|
|
6
6
|
Author: JFrog LTD
|
|
@@ -23,7 +23,7 @@ Description: <picture>
|
|
|
23
23
|
- Homepage: https://conan.io/
|
|
24
24
|
- Github: https://github.com/conan-io/conan
|
|
25
25
|
- Docs: https://docs.conan.io
|
|
26
|
-
- Slack: https://cpplang.slack.com (#conan channel. Please, click [here](https://
|
|
26
|
+
- Slack: https://cpplang.slack.com (#conan channel. Please, click [here](https://cppalliance.org/slack/#cpp-slack) to get an invitation)
|
|
27
27
|
- Twitter: https://twitter.com/conan_io
|
|
28
28
|
- Blog: https://blog.conan.io
|
|
29
29
|
- Security reports: https://jfrog.com/trust/report-vulnerability
|
|
@@ -12,7 +12,7 @@ Decentralized, open-source (MIT), C/C++ package manager.
|
|
|
12
12
|
- Homepage: https://conan.io/
|
|
13
13
|
- Github: https://github.com/conan-io/conan
|
|
14
14
|
- Docs: https://docs.conan.io
|
|
15
|
-
- Slack: https://cpplang.slack.com (#conan channel. Please, click [here](https://
|
|
15
|
+
- Slack: https://cpplang.slack.com (#conan channel. Please, click [here](https://cppalliance.org/slack/#cpp-slack) to get an invitation)
|
|
16
16
|
- Twitter: https://twitter.com/conan_io
|
|
17
17
|
- Blog: https://blog.conan.io
|
|
18
18
|
- Security reports: https://jfrog.com/trust/report-vulnerability
|
|
@@ -74,13 +74,16 @@ class ConanAPI:
|
|
|
74
74
|
self.upload: UploadAPI = UploadAPI(self, self._api_helpers)
|
|
75
75
|
#: Used to download recipes and packages from remotes
|
|
76
76
|
self.download: DownloadAPI = DownloadAPI(self)
|
|
77
|
-
|
|
78
|
-
self.
|
|
77
|
+
#: Used to interact wit the packages storage cache
|
|
78
|
+
self.cache: CacheAPI = CacheAPI(self, self._api_helpers)
|
|
79
|
+
#: Used to read and manage lockfile files
|
|
80
|
+
self.lockfile: LockfileAPI = LockfileAPI(self)
|
|
79
81
|
self.local = LocalAPI(self, self._api_helpers)
|
|
80
|
-
|
|
82
|
+
#: Used to check vulnerabilities of dependencies
|
|
83
|
+
self.audit: AuditAPI = AuditAPI(self)
|
|
81
84
|
# Now, lazy loading of editables
|
|
82
85
|
self.workspace = WorkspaceAPI(self)
|
|
83
|
-
self.report = ReportAPI(self, self._api_helpers)
|
|
86
|
+
self.report: ReportAPI = ReportAPI(self, self._api_helpers)
|
|
84
87
|
|
|
85
88
|
@property
|
|
86
89
|
def home_folder(self) -> str:
|
|
@@ -150,4 +153,3 @@ class ConanAPI:
|
|
|
150
153
|
@property
|
|
151
154
|
def requester(self):
|
|
152
155
|
return self._requester
|
|
153
|
-
|
|
@@ -78,7 +78,7 @@ class UserInput:
|
|
|
78
78
|
"""Request user to input a boolean"""
|
|
79
79
|
ret = None
|
|
80
80
|
while ret is None:
|
|
81
|
-
if default_option
|
|
81
|
+
if default_option:
|
|
82
82
|
s = self.request_string("%s (YES/no)" % msg)
|
|
83
83
|
elif default_option is False:
|
|
84
84
|
s = self.request_string("%s (NO/yes)" % msg)
|
|
@@ -3,11 +3,23 @@ LOCAL_RECIPES_INDEX = "local-recipes-index"
|
|
|
3
3
|
|
|
4
4
|
class Remote:
|
|
5
5
|
"""
|
|
6
|
-
The ``Remote`` class represents a remote registry of packages.
|
|
7
|
-
should not be created directly, but obtained from the relevant ``RemotesAPI`` subapi methods.
|
|
6
|
+
The ``Remote`` class represents a remote registry of packages.
|
|
8
7
|
"""
|
|
9
8
|
def __init__(self, name, url, verify_ssl=True, disabled=False, allowed_packages=None,
|
|
10
9
|
remote_type=None, recipes_only=False):
|
|
10
|
+
""" A Remote object can be constructed to be passed as an argument to
|
|
11
|
+
RemotesAPI methods. When possible, it is better to use Remote objects returned by the API,
|
|
12
|
+
but for the ``RemotesAPI.add()`` method, for which a new constructed object is necessary.
|
|
13
|
+
It is recommended to use named arguments like ``Remote(..., verify_ssl=False)`` in
|
|
14
|
+
the constructor.
|
|
15
|
+
:param name: The name of the remote.
|
|
16
|
+
:param url: The URL of the remote repository (or local folder for "local-recipes-index").
|
|
17
|
+
:param verify_ssl: Enable SSL Certificate validation.
|
|
18
|
+
:param disabled: Disable the remote repository.
|
|
19
|
+
:param allowed_packages: List of patterns of allowed packages from this remote
|
|
20
|
+
:param remote_type: Type of the remote repository, use "local-recipes-index" or ``None``
|
|
21
|
+
:param recipes_only: If True, binaries form this remote will be ignored and never used
|
|
22
|
+
"""
|
|
11
23
|
self.name = name # Read only, is the key
|
|
12
24
|
self.url = url
|
|
13
25
|
self.verify_ssl = verify_ssl
|
|
@@ -124,6 +124,14 @@ class ConanOutput:
|
|
|
124
124
|
def set_warnings_as_errors(cls, value):
|
|
125
125
|
cls._warnings_as_errors = value
|
|
126
126
|
|
|
127
|
+
@classmethod
|
|
128
|
+
def get_output_level(cls):
|
|
129
|
+
return cls._conan_output_level
|
|
130
|
+
|
|
131
|
+
@classmethod
|
|
132
|
+
def set_output_level(cls, level):
|
|
133
|
+
cls._conan_output_level = level
|
|
134
|
+
|
|
127
135
|
@classmethod
|
|
128
136
|
def valid_log_levels(cls):
|
|
129
137
|
return {"quiet": LEVEL_QUIET, # -vquiet 80
|
|
@@ -151,7 +159,7 @@ class ConanOutput:
|
|
|
151
159
|
vals = "quiet, error, warning, notice, status, verbose, debug(v), trace(vv)"
|
|
152
160
|
raise ConanException(f"Invalid argument '-v{v}'{msg}.\nAllowed values: {vals}")
|
|
153
161
|
else:
|
|
154
|
-
cls.
|
|
162
|
+
cls.set_output_level(level)
|
|
155
163
|
|
|
156
164
|
@classmethod
|
|
157
165
|
def level_allowed(cls, level):
|
|
@@ -270,13 +278,13 @@ class ConanOutput:
|
|
|
270
278
|
self._write_message(msg, fg=fg, bg=bg)
|
|
271
279
|
return self
|
|
272
280
|
|
|
273
|
-
def status(self, msg: str, fg: str = None, bg: str = None):
|
|
281
|
+
def status(self, msg: str, fg: str = None, bg: str = None, newline: bool = True):
|
|
274
282
|
""" Provides general information about the system or ongoing operations.
|
|
275
283
|
|
|
276
284
|
Info messages are basic and used to inform about common events,
|
|
277
285
|
like the start or completion of processes, without implying specific problems or achievements."""
|
|
278
286
|
if self._conan_output_level <= LEVEL_STATUS:
|
|
279
|
-
self._write_message(msg, fg=fg, bg=bg)
|
|
287
|
+
self._write_message(msg, fg=fg, bg=bg, newline=newline)
|
|
280
288
|
return self
|
|
281
289
|
|
|
282
290
|
info = status
|
|
@@ -3,7 +3,6 @@ import json
|
|
|
3
3
|
import os
|
|
4
4
|
import base64
|
|
5
5
|
|
|
6
|
-
from conan.api.output import ConanOutput
|
|
7
6
|
from conan.internal.api.audit.providers import ConanCenterProvider, PrivateProvider
|
|
8
7
|
from conan.errors import ConanException
|
|
9
8
|
from conan.internal.api.remotes.encrypt import encode, decode
|
|
@@ -69,9 +68,9 @@ class AuditAPI:
|
|
|
69
68
|
)
|
|
70
69
|
|
|
71
70
|
raise ConanException(
|
|
72
|
-
f"Provider '{provider_name}' not found. Please specify a valid provider name or add
|
|
73
|
-
f"'conan audit provider add {provider_name} {add_arguments}
|
|
74
|
-
f"{register_message}"
|
|
71
|
+
f"Provider '{provider_name}' not found. Please specify a valid provider name or add "
|
|
72
|
+
f"it using: 'conan audit provider add {provider_name} {add_arguments} "
|
|
73
|
+
f"--token=<token>'\n{register_message}"
|
|
75
74
|
)
|
|
76
75
|
|
|
77
76
|
provider_data = providers[provider_name]
|
|
@@ -83,9 +82,11 @@ class AuditAPI:
|
|
|
83
82
|
provider_data["token"] = env_token
|
|
84
83
|
elif "token" in provider_data:
|
|
85
84
|
try:
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
85
|
+
enc_token = base64.standard_b64decode(provider_data["token"]).decode()
|
|
86
|
+
provider_data["token"] = decode(enc_token, CYPHER_KEY)
|
|
87
|
+
except binascii.Error:
|
|
88
|
+
raise ConanException(f"Invalid token format for provider '{provider_name}'. "
|
|
89
|
+
f"The token might be corrupt.")
|
|
89
90
|
|
|
90
91
|
provider_cls = self._provider_cls.get(provider_data["type"])
|
|
91
92
|
|
|
@@ -143,7 +144,8 @@ class AuditAPI:
|
|
|
143
144
|
providers = _load_providers(self._providers_path)
|
|
144
145
|
|
|
145
146
|
assert provider.name in providers
|
|
146
|
-
|
|
147
|
+
encode_token = encode(token, CYPHER_KEY).encode()
|
|
148
|
+
providers[provider.name]["token"] = base64.standard_b64encode(encode_token).decode()
|
|
147
149
|
setattr(provider, "token", token)
|
|
148
150
|
_save_providers(self._providers_path, providers)
|
|
149
151
|
|
|
@@ -8,8 +8,9 @@ from conan.api.model import PackagesList
|
|
|
8
8
|
from conan.api.output import ConanOutput
|
|
9
9
|
from conan.internal.api.uploader import compress_files
|
|
10
10
|
from conan.internal.cache.cache import PkgCache
|
|
11
|
-
from conan.internal.cache.conan_reference_layout import EXPORT_SRC_FOLDER, EXPORT_FOLDER,
|
|
12
|
-
|
|
11
|
+
from conan.internal.cache.conan_reference_layout import (EXPORT_SRC_FOLDER, EXPORT_FOLDER,
|
|
12
|
+
SRC_FOLDER, METADATA,
|
|
13
|
+
DOWNLOAD_EXPORT_FOLDER)
|
|
13
14
|
from conan.internal.cache.home_paths import HomePaths
|
|
14
15
|
from conan.internal.cache.integrity_check import IntegrityChecker
|
|
15
16
|
from conan.internal.rest.download_cache import DownloadCache
|
|
@@ -21,6 +22,8 @@ from conan.internal.util.files import rmdir, mkdir, remove, save
|
|
|
21
22
|
|
|
22
23
|
|
|
23
24
|
class CacheAPI:
|
|
25
|
+
""" This CacheAPI is used to interact with the packages storage cache
|
|
26
|
+
"""
|
|
24
27
|
|
|
25
28
|
def __init__(self, conan_api, api_helpers):
|
|
26
29
|
self._conan_api = conan_api
|
|
@@ -70,17 +73,29 @@ class CacheAPI:
|
|
|
70
73
|
return ref_layout.finalize()
|
|
71
74
|
return _check_folder_existence(pref, "package", ref_layout.package())
|
|
72
75
|
|
|
73
|
-
def check_integrity(self, package_list):
|
|
74
|
-
"""
|
|
76
|
+
def check_integrity(self, package_list, return_pkg_list=False):
|
|
77
|
+
"""
|
|
78
|
+
Check if the recipes and packages are corrupted
|
|
79
|
+
|
|
80
|
+
:param package_list: PackagesList to check
|
|
81
|
+
:param return_pkg_list: If True, return a PackagesList with corrupted artifacts
|
|
82
|
+
:return: PackagesList with corrupted artifacts if return_pkg_list is True
|
|
83
|
+
:raises: ConanExcepcion if there are corrupted artifacts and return_pkg_list is False
|
|
84
|
+
"""
|
|
75
85
|
cache = PkgCache(self._conan_api.cache_folder, self._api_helpers.global_conf)
|
|
76
86
|
checker = IntegrityChecker(cache)
|
|
77
|
-
checker.check(package_list)
|
|
87
|
+
corrupted_pkg_list = checker.check(package_list)
|
|
88
|
+
if return_pkg_list:
|
|
89
|
+
return corrupted_pkg_list
|
|
90
|
+
if corrupted_pkg_list:
|
|
91
|
+
raise ConanException("There are corrupted artifacts, check the error logs")
|
|
78
92
|
|
|
79
93
|
def clean(self, package_list, source=True, build=True, download=True, temp=True,
|
|
80
94
|
backup_sources=False):
|
|
81
95
|
"""
|
|
82
96
|
Remove non critical folders from the cache, like source, build and download (.tgz store)
|
|
83
97
|
folders.
|
|
98
|
+
|
|
84
99
|
:param package_list: the package lists that should be cleaned
|
|
85
100
|
:param source: boolean, remove the "source" folder if True
|
|
86
101
|
:param build: boolean, remove the "build" folder if True
|
|
@@ -104,7 +119,8 @@ class CacheAPI:
|
|
|
104
119
|
if not os.path.exists(manifest) or not os.path.exists(info):
|
|
105
120
|
rmdir(folder)
|
|
106
121
|
if backup_sources:
|
|
107
|
-
backup_files = self._conan_api.cache.get_backup_sources(package_list, exclude=False,
|
|
122
|
+
backup_files = self._conan_api.cache.get_backup_sources(package_list, exclude=False,
|
|
123
|
+
only_upload=False)
|
|
108
124
|
ConanOutput().verbose(f"Cleaning {len(backup_files)} backup sources")
|
|
109
125
|
for f in backup_files:
|
|
110
126
|
remove(f)
|
|
@@ -126,7 +142,7 @@ class CacheAPI:
|
|
|
126
142
|
if download:
|
|
127
143
|
rmdir(pref_layout.download_package())
|
|
128
144
|
|
|
129
|
-
def save(self, package_list, tgz_path, no_source=False):
|
|
145
|
+
def save(self, package_list: PackagesList, tgz_path, no_source=False) -> None:
|
|
130
146
|
global_conf = self._api_helpers.global_conf
|
|
131
147
|
cache = PkgCache(self._conan_api.cache_folder, global_conf)
|
|
132
148
|
cache_folder = cache.store # Note, this is not the home, but the actual package cache
|
|
@@ -175,10 +191,11 @@ class CacheAPI:
|
|
|
175
191
|
pkglist_path = os.path.join(tempfile.gettempdir(), "pkglist.json")
|
|
176
192
|
save(pkglist_path, serialized)
|
|
177
193
|
tar_files["pkglist.json"] = pkglist_path
|
|
178
|
-
compress_files(tar_files, os.path.basename(tgz_path), os.path.dirname(tgz_path),
|
|
194
|
+
compress_files(tar_files, os.path.basename(tgz_path), os.path.dirname(tgz_path),
|
|
195
|
+
compresslevel, recursive=True)
|
|
179
196
|
remove(pkglist_path)
|
|
180
197
|
|
|
181
|
-
def restore(self, path):
|
|
198
|
+
def restore(self, path) -> PackagesList:
|
|
182
199
|
if not os.path.isfile(path):
|
|
183
200
|
raise ConanException(f"Restore archive doesn't exist in {path}")
|
|
184
201
|
|
|
@@ -250,17 +267,21 @@ class CacheAPI:
|
|
|
250
267
|
|
|
251
268
|
def get_backup_sources(self, package_list=None, exclude=True, only_upload=True):
|
|
252
269
|
"""Get list of backup source files currently present in the cache,
|
|
253
|
-
either all of them if no argument, or filtered by those belonging to the references
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
270
|
+
either all of them if no argument, or filtered by those belonging to the references
|
|
271
|
+
in the package_list
|
|
272
|
+
|
|
273
|
+
:param package_list: a PackagesList object to filter backup files from (The files should
|
|
274
|
+
have been downloaded form any of the references in the package_list)
|
|
275
|
+
:param exclude: if True, exclude the sources that come from URLs present the
|
|
276
|
+
core.sources:exclude_urls global conf
|
|
277
|
+
:param only_upload: if True, only return the files for packages that are set to be uploaded
|
|
258
278
|
"""
|
|
259
279
|
config = self._api_helpers.global_conf
|
|
260
280
|
download_cache_path = config.get("core.sources:download_cache")
|
|
261
281
|
download_cache_path = download_cache_path or HomePaths(
|
|
262
282
|
self._conan_api.cache_folder).default_sources_backup_folder
|
|
263
|
-
excluded_urls = config.get("core.sources:exclude_urls",
|
|
283
|
+
excluded_urls = config.get("core.sources:exclude_urls",
|
|
284
|
+
check_type=list, default=[]) if exclude else []
|
|
264
285
|
download_cache = DownloadCache(download_cache_path)
|
|
265
286
|
return download_cache.get_backup_sources_files(excluded_urls, package_list, only_upload)
|
|
266
287
|
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import os
|
|
2
|
+
|
|
3
|
+
from conan.api.output import ConanOutput
|
|
4
|
+
|
|
5
|
+
from conan.internal.cache.home_paths import HomePaths
|
|
6
|
+
from conan.internal.conan_app import ConanApp
|
|
7
|
+
from conan.internal.graph.graph import CONTEXT_HOST, RECIPE_VIRTUAL, Node
|
|
8
|
+
from conan.internal.graph.graph_builder import DepsGraphBuilder
|
|
9
|
+
from conan.internal.graph.profile_node_definer import consumer_definer
|
|
10
|
+
from conan.errors import ConanException
|
|
11
|
+
|
|
12
|
+
from conan.internal.model.conanconfig import loadconanconfig, saveconanconfig, loadconanconfig_yml
|
|
13
|
+
from conan.internal.model.conf import BUILT_IN_CONFS
|
|
14
|
+
from conan.internal.model.pkg_type import PackageType
|
|
15
|
+
from conan.api.model import RecipeReference, Remote
|
|
16
|
+
from conan.internal.util.files import rmdir, remove
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class ConfigAPI:
|
|
20
|
+
""" This API provides methods to manage the Conan configuration in the Conan home folder.
|
|
21
|
+
It allows installing configurations from various sources, retrieving global configuration
|
|
22
|
+
values, and listing available configurations. It also provides methods to clean the
|
|
23
|
+
Conan home folder, resetting it to a clean state.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
def __init__(self, conan_api, helpers):
|
|
27
|
+
self._conan_api = conan_api
|
|
28
|
+
self._helpers = helpers
|
|
29
|
+
|
|
30
|
+
def home(self):
|
|
31
|
+
""" return the current Conan home folder containing the configuration files like
|
|
32
|
+
remotes, settings, profiles, and the packages cache. It is provided for debugging
|
|
33
|
+
purposes. Recall that it is not allowed to write, modify or remove packages in the
|
|
34
|
+
packages cache, and that to automate tasks that uses packages from the cache Conan
|
|
35
|
+
provides mechanisms like deployers or custom commands.
|
|
36
|
+
"""
|
|
37
|
+
return self._conan_api.cache_folder
|
|
38
|
+
|
|
39
|
+
def install(self, path_or_url, verify_ssl, config_type=None, args=None,
|
|
40
|
+
source_folder=None, target_folder=None):
|
|
41
|
+
""" install Conan configuration from a git repo, from a zip file in an http server
|
|
42
|
+
or a local folder
|
|
43
|
+
"""
|
|
44
|
+
from conan.internal.api.config.config_installer import configuration_install
|
|
45
|
+
cache_folder = self._conan_api.cache_folder
|
|
46
|
+
requester = self._helpers.requester
|
|
47
|
+
configuration_install(cache_folder, requester, path_or_url, verify_ssl,
|
|
48
|
+
config_type=config_type, args=args,
|
|
49
|
+
source_folder=source_folder, target_folder=target_folder)
|
|
50
|
+
self._conan_api.reinit()
|
|
51
|
+
|
|
52
|
+
def install_package(self, require, lockfile=None, force=False, remotes=None, profile=None):
|
|
53
|
+
ConanOutput().warning("The 'conan config install-pkg' is experimental",
|
|
54
|
+
warn_tag="experimental")
|
|
55
|
+
require = RecipeReference.loads(require)
|
|
56
|
+
required_pkgs = self.fetch_packages([require], lockfile, remotes, profile)
|
|
57
|
+
installed_refs = self._install_pkgs(required_pkgs, force)
|
|
58
|
+
self._conan_api.reinit()
|
|
59
|
+
return installed_refs
|
|
60
|
+
|
|
61
|
+
@staticmethod
|
|
62
|
+
def load_conanconfig(path, remotes):
|
|
63
|
+
if os.path.isdir(path):
|
|
64
|
+
path = os.path.join(path, "conanconfig.yml")
|
|
65
|
+
requested_requires, urls = loadconanconfig_yml(path)
|
|
66
|
+
if urls:
|
|
67
|
+
new_remotes = [Remote(f"config_install_url{'_' + str(i)}", url=url)
|
|
68
|
+
for i, url in enumerate(urls)]
|
|
69
|
+
remotes = remotes or []
|
|
70
|
+
remotes += new_remotes
|
|
71
|
+
return requested_requires, remotes
|
|
72
|
+
|
|
73
|
+
def install_conanconfig(self, path, lockfile=None, force=False, remotes=None, profile=None):
|
|
74
|
+
ConanOutput().warning("The 'conan config install-pkg' is experimental",
|
|
75
|
+
warn_tag="experimental")
|
|
76
|
+
requested_requires, remotes = self.load_conanconfig(path, remotes)
|
|
77
|
+
required_pkgs = self.fetch_packages(requested_requires, lockfile, remotes, profile)
|
|
78
|
+
installed_refs = self._install_pkgs(required_pkgs, force)
|
|
79
|
+
self._conan_api.reinit()
|
|
80
|
+
return installed_refs
|
|
81
|
+
|
|
82
|
+
def _install_pkgs(self, required_pkgs, force):
|
|
83
|
+
out = ConanOutput()
|
|
84
|
+
out.title("Configuration packages to install")
|
|
85
|
+
config_version_file = HomePaths(self._conan_api.home_folder).config_version_path
|
|
86
|
+
if not os.path.exists(config_version_file):
|
|
87
|
+
config_versions = []
|
|
88
|
+
else:
|
|
89
|
+
ConanOutput().info(f"Reading existing config-versions file: {config_version_file}")
|
|
90
|
+
config_versions = loadconanconfig(config_version_file)
|
|
91
|
+
config_versions_dict = {r.name: r for r in config_versions}
|
|
92
|
+
if len(config_versions_dict) < len(config_versions):
|
|
93
|
+
raise ConanException("There are multiple requirements for the same package "
|
|
94
|
+
f"with different versions: {config_version_file}")
|
|
95
|
+
|
|
96
|
+
new_config = config_versions_dict.copy()
|
|
97
|
+
for required_pkg in required_pkgs:
|
|
98
|
+
new_config.pop(required_pkg.ref.name, None) # To ensure new order
|
|
99
|
+
new_config[required_pkg.ref.name] = required_pkg.ref
|
|
100
|
+
final_config_refs = [r for r in new_config.values()]
|
|
101
|
+
|
|
102
|
+
prev_refs = "\n\t".join(repr(r) for r in config_versions)
|
|
103
|
+
out.info(f"Previously installed configuration packages:\n\t{prev_refs}")
|
|
104
|
+
|
|
105
|
+
new_refs = "\n\t".join(r.repr_notime() for r in final_config_refs)
|
|
106
|
+
out.info(f"New configuration packages to install:\n\t{new_refs}")
|
|
107
|
+
|
|
108
|
+
if list(config_versions_dict) == list(new_config)[:len(config_versions_dict)]:
|
|
109
|
+
# There is no conflict in order, can be done safely
|
|
110
|
+
if final_config_refs == config_versions:
|
|
111
|
+
if force:
|
|
112
|
+
out.warning("The requested configurations are identical to the already "
|
|
113
|
+
"installed ones, but forcing re-installation because --force")
|
|
114
|
+
to_install = required_pkgs
|
|
115
|
+
else:
|
|
116
|
+
out.info("The requested configurations are identical to the already "
|
|
117
|
+
"installed ones, skipping re-installation")
|
|
118
|
+
to_install = []
|
|
119
|
+
else:
|
|
120
|
+
out.info("Installing new or updating configuration packages")
|
|
121
|
+
to_install = required_pkgs
|
|
122
|
+
else:
|
|
123
|
+
# Change in order of existing configuration
|
|
124
|
+
if force:
|
|
125
|
+
out.warning("Installing these configuration packages will break the "
|
|
126
|
+
"existing order, with possible side effects. "
|
|
127
|
+
"Forcing the installation because --force was defined", warn_tag="risk")
|
|
128
|
+
to_install = required_pkgs
|
|
129
|
+
else:
|
|
130
|
+
msg = ("Installing these configuration packages will break the "
|
|
131
|
+
"existing order, with possible side effects, like breaking 'package_ids'.\n"
|
|
132
|
+
"If you still want to enforce this configuration you can:\n"
|
|
133
|
+
" Use 'conan config clean' first to fully reset your configuration.\n"
|
|
134
|
+
" Or use 'conan config install-pkg --force' to force installation.")
|
|
135
|
+
raise ConanException(msg)
|
|
136
|
+
|
|
137
|
+
out.title("Installing configuration from packages")
|
|
138
|
+
# install things and update the Conan cache "config_versions.json" file
|
|
139
|
+
from conan.internal.api.config.config_installer import configuration_install
|
|
140
|
+
cache_folder = self._conan_api.cache_folder
|
|
141
|
+
requester = self._helpers.requester
|
|
142
|
+
for pkg in to_install:
|
|
143
|
+
out.info(f"Installing configuration from {pkg.ref}")
|
|
144
|
+
configuration_install(cache_folder, requester, uri=pkg.conanfile.package_folder,
|
|
145
|
+
verify_ssl=False, config_type="dir",
|
|
146
|
+
ignore=["conaninfo.txt", "conanmanifest.txt"])
|
|
147
|
+
|
|
148
|
+
saveconanconfig(config_version_file, final_config_refs)
|
|
149
|
+
return final_config_refs
|
|
150
|
+
|
|
151
|
+
def fetch_packages(self, refs, lockfile=None, remotes=None, profile=None):
|
|
152
|
+
""" install configuration stored inside a Conan package
|
|
153
|
+
The installation of configuration will reinitialize the full ConanAPI
|
|
154
|
+
"""
|
|
155
|
+
conan_api = self._conan_api
|
|
156
|
+
remotes = conan_api.remotes.list() if remotes is None else remotes
|
|
157
|
+
profile_host = profile_build = profile or conan_api.profiles.get_profile([])
|
|
158
|
+
|
|
159
|
+
app = ConanApp(self._conan_api)
|
|
160
|
+
|
|
161
|
+
ConanOutput().title("Fetching requested configuration packages")
|
|
162
|
+
result = []
|
|
163
|
+
for ref in refs:
|
|
164
|
+
# Computation of a very simple graph that requires "ref"
|
|
165
|
+
# Need to convert input requires to RecipeReference
|
|
166
|
+
conanfile = app.loader.load_virtual(requires=[ref])
|
|
167
|
+
consumer_definer(conanfile, profile_host, profile_build)
|
|
168
|
+
root_node = Node(ref=None, conanfile=conanfile, context=CONTEXT_HOST,
|
|
169
|
+
recipe=RECIPE_VIRTUAL)
|
|
170
|
+
root_node.is_conf = True
|
|
171
|
+
update = ["*"]
|
|
172
|
+
builder = DepsGraphBuilder(app.proxy, app.loader, app.range_resolver, app.cache, remotes,
|
|
173
|
+
update, update, self._helpers.global_conf)
|
|
174
|
+
deps_graph = builder.load_graph(root_node, profile_host, profile_build, lockfile)
|
|
175
|
+
|
|
176
|
+
# Basic checks of the package: correct package_type and no-dependencies
|
|
177
|
+
deps_graph.report_graph_error()
|
|
178
|
+
pkg = deps_graph.root.edges[0].dst
|
|
179
|
+
ConanOutput().info(f"Configuration from package: {pkg}")
|
|
180
|
+
if pkg.conanfile.package_type is not PackageType.CONF:
|
|
181
|
+
raise ConanException(f'{pkg.conanfile} is not of package_type="configuration"')
|
|
182
|
+
if pkg.edges:
|
|
183
|
+
raise ConanException(f"Configuration package {pkg.ref} cannot have dependencies")
|
|
184
|
+
|
|
185
|
+
# The computation of the "package_id" and the download of the package is done as usual
|
|
186
|
+
# By default we allow all remotes, and build_mode=None, always updating
|
|
187
|
+
conan_api.graph.analyze_binaries(deps_graph, None, remotes, update=update,
|
|
188
|
+
lockfile=lockfile)
|
|
189
|
+
conan_api.install.install_binaries(deps_graph=deps_graph, remotes=remotes)
|
|
190
|
+
result.append(pkg)
|
|
191
|
+
return result
|
|
192
|
+
|
|
193
|
+
def get(self, name, default=None, check_type=None):
|
|
194
|
+
""" get the value of a global.conf item
|
|
195
|
+
"""
|
|
196
|
+
return self._helpers.global_conf.get(name, default=default, check_type=check_type)
|
|
197
|
+
|
|
198
|
+
def show(self, pattern) -> dict:
|
|
199
|
+
""" get the values of global.conf for those configurations that matches the pattern
|
|
200
|
+
"""
|
|
201
|
+
return self._helpers.global_conf.show(pattern)
|
|
202
|
+
|
|
203
|
+
@staticmethod
|
|
204
|
+
def conf_list():
|
|
205
|
+
""" list all the available built-in configurations
|
|
206
|
+
"""
|
|
207
|
+
return BUILT_IN_CONFS.copy()
|
|
208
|
+
|
|
209
|
+
def clean(self):
|
|
210
|
+
""" reset the Conan home folder to a clean state, removing all the user
|
|
211
|
+
custom configuration, custom files, and resetting modified files
|
|
212
|
+
"""
|
|
213
|
+
contents = os.listdir(self.home())
|
|
214
|
+
packages_folder = (self._helpers.global_conf.get("core.cache:storage_path") or
|
|
215
|
+
os.path.join(self.home(), "p"))
|
|
216
|
+
for content in contents:
|
|
217
|
+
content_path = os.path.join(self.home(), content)
|
|
218
|
+
if content_path == packages_folder:
|
|
219
|
+
continue
|
|
220
|
+
ConanOutput().debug(f"Removing {content_path}")
|
|
221
|
+
if os.path.isdir(content_path):
|
|
222
|
+
rmdir(content_path)
|
|
223
|
+
else:
|
|
224
|
+
remove(content_path)
|
|
225
|
+
self._conan_api.reinit()
|
|
226
|
+
# CHECK: This also generates a remotes.json that is not there after a conan profile show?
|
|
227
|
+
self._conan_api.migrate()
|
|
228
|
+
|
|
229
|
+
@property
|
|
230
|
+
def settings_yml(self):
|
|
231
|
+
""" Get the contents of the settings.yml and user_settings.yml files,
|
|
232
|
+
which define the possible values for settings.
|
|
233
|
+
|
|
234
|
+
Note that this is different from the settings present in a conanfile,
|
|
235
|
+
which represent the actual values for a specific package, while this
|
|
236
|
+
property represents the possible values for each setting.
|
|
237
|
+
|
|
238
|
+
:returns: A read-only object representing the settings scheme, with a
|
|
239
|
+
``possible_values()`` method that returns a dictionary with the possible values for each setting,
|
|
240
|
+
and a ``fields`` property that returns an ordered list with the fields of each setting.
|
|
241
|
+
Note that it's possible to access nested settings using attribute access,
|
|
242
|
+
such as ``settings_yml.compiler.possible_values()``.
|
|
243
|
+
"""
|
|
244
|
+
|
|
245
|
+
class SettingsYmlInterface:
|
|
246
|
+
def __init__(self, settings):
|
|
247
|
+
self._settings = settings
|
|
248
|
+
|
|
249
|
+
def possible_values(self):
|
|
250
|
+
""" returns a dict with the possible values for each setting """
|
|
251
|
+
return self._settings.possible_values()
|
|
252
|
+
|
|
253
|
+
@property
|
|
254
|
+
def fields(self):
|
|
255
|
+
""" returns a dict with the fields of each setting """
|
|
256
|
+
return self._settings.fields
|
|
257
|
+
|
|
258
|
+
def __getattr__(self, item):
|
|
259
|
+
return SettingsYmlInterface(getattr(self._settings, item))
|
|
260
|
+
|
|
261
|
+
def __str__(self):
|
|
262
|
+
return str(self._settings)
|
|
263
|
+
|
|
264
|
+
return SettingsYmlInterface(self._helpers.settings_yml)
|
|
@@ -88,7 +88,8 @@ class GraphAPI:
|
|
|
88
88
|
return root_node
|
|
89
89
|
|
|
90
90
|
def _load_root_virtual_conanfile(self, profile_host, profile_build, requires, tool_requires,
|
|
91
|
-
lockfile, remotes, update, check_updates=False,
|
|
91
|
+
lockfile, remotes, update, check_updates=False,
|
|
92
|
+
python_requires=None):
|
|
92
93
|
if not python_requires and not requires and not tool_requires:
|
|
93
94
|
raise ConanException("Provide requires or tool_requires")
|
|
94
95
|
app = ConanApp(self._conan_api)
|
|
@@ -108,12 +109,15 @@ class GraphAPI:
|
|
|
108
109
|
Command line helper to scope options when ``command -o myoption=myvalue`` is used,
|
|
109
110
|
that needs to be converted to "-o pkg:myoption=myvalue". The "pkg" value will be
|
|
110
111
|
computed from the given requires/tool_requires
|
|
112
|
+
|
|
113
|
+
This is legacy, as options should always be scoped now
|
|
111
114
|
"""
|
|
112
|
-
# FIXME: This helper function here is not great, find a better place
|
|
113
115
|
if requires and len(requires) == 1 and not tool_requires:
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
116
|
+
ref = requires[0]
|
|
117
|
+
if str(ref.version).startswith("["):
|
|
118
|
+
ref = ref.copy()
|
|
119
|
+
ref.version = "*"
|
|
120
|
+
profile.options.scope(ref)
|
|
117
121
|
|
|
118
122
|
def load_graph_requires(self, requires, tool_requires, profile_host, profile_build,
|
|
119
123
|
lockfile, remotes, update, check_updates=False, python_requires=None):
|
|
@@ -164,8 +168,8 @@ class GraphAPI:
|
|
|
164
168
|
""" Compute the dependency graph, starting from a root package, evaluation the graph with
|
|
165
169
|
the provided configuration in profile_build, and profile_host. The resulting graph is a
|
|
166
170
|
graph of recipes, but packages are not computed yet (package_ids) will be empty in the
|
|
167
|
-
result. The result might have errors, like version or configuration conflicts, but it is
|
|
168
|
-
possible to inspect it. Only trying to install such graph will fail
|
|
171
|
+
result. The result might have errors, like version or configuration conflicts, but it is
|
|
172
|
+
still possible to inspect it. Only trying to install such graph will fail
|
|
169
173
|
|
|
170
174
|
:param root_node: the starting point, an already initialized Node structure, as
|
|
171
175
|
returned by the "load_root_node" api
|
|
@@ -189,8 +193,8 @@ class GraphAPI:
|
|
|
189
193
|
deps_graph = builder.load_graph(root_node, profile_host, profile_build, lockfile)
|
|
190
194
|
return deps_graph
|
|
191
195
|
|
|
192
|
-
def analyze_binaries(self, graph, build_mode=None, remotes=None, update=None,
|
|
193
|
-
build_modes_test=None, tested_graph=None):
|
|
196
|
+
def analyze_binaries(self, graph, build_mode=None, remotes=None, update=None,
|
|
197
|
+
lockfile=None, build_modes_test=None, tested_graph=None):
|
|
194
198
|
""" Given a dependency graph, will compute the package_ids of all recipes in the graph, and
|
|
195
199
|
evaluate if they should be built from sources, downloaded from a remote server, of if the
|
|
196
200
|
packages are already in the local Conan cache
|
|
@@ -199,8 +203,12 @@ class GraphAPI:
|
|
|
199
203
|
:param graph: a Conan dependency graph, as returned by "load_graph()"
|
|
200
204
|
:param build_mode: TODO: Discuss if this should be a BuildMode object or list of arguments
|
|
201
205
|
:param remotes: list of remotes
|
|
202
|
-
:param update: (False by default), if Conan should look for newer versions or
|
|
203
|
-
revisions for already existing recipes in the Conan cache
|
|
206
|
+
:param update: (``False`` by default), if Conan should look for newer versions or
|
|
207
|
+
revisions for already existing recipes in the Conan cache. It also accepts an array of
|
|
208
|
+
reference patterns to limit the update to those references if any of the items match.
|
|
209
|
+
Eg. ``False``, ``None`` or ``[]`` *means no update*,
|
|
210
|
+
``True`` or ``["*"]`` *means update all*,
|
|
211
|
+
and ``["pkgA/*", "pkgB/1.0@user/channel"]`` *means to update only specific packages*.
|
|
204
212
|
:param build_modes_test: the --build-test argument
|
|
205
213
|
:param tested_graph: In case of a "test_package", the graph being tested
|
|
206
214
|
"""
|