conan 2.11.0__tar.gz → 2.12.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.11.0/conan.egg-info → conan-2.12.0}/PKG-INFO +3 -1
- {conan-2.11.0 → conan-2.12.0}/README.md +2 -0
- conan-2.12.0/conan/__init__.py +5 -0
- {conan-2.11.0 → conan-2.12.0}/conan/api/conan_api.py +36 -12
- conan-2.12.0/conan/api/model/__init__.py +3 -0
- conan-2.11.0/conan/api/model.py → conan-2.12.0/conan/api/model/list.py +4 -38
- conan-2.11.0/conans/model/recipe_ref.py → conan-2.12.0/conan/api/model/refs.py +100 -6
- conan-2.12.0/conan/api/model/remote.py +39 -0
- {conan-2.11.0 → conan-2.12.0}/conan/api/output.py +10 -6
- {conan-2.11.0 → conan-2.12.0}/conan/api/subapi/cache.py +2 -2
- {conan-2.11.0 → conan-2.12.0}/conan/api/subapi/config.py +56 -10
- {conan-2.11.0 → conan-2.12.0}/conan/api/subapi/download.py +2 -2
- {conan-2.11.0 → conan-2.12.0}/conan/api/subapi/export.py +1 -1
- {conan-2.11.0 → conan-2.12.0}/conan/api/subapi/graph.py +16 -4
- {conan-2.11.0 → conan-2.12.0}/conan/api/subapi/install.py +5 -1
- {conan-2.11.0 → conan-2.12.0}/conan/api/subapi/list.py +12 -7
- {conan-2.11.0 → conan-2.12.0}/conan/api/subapi/local.py +4 -1
- {conan-2.11.0 → conan-2.12.0}/conan/api/subapi/lockfile.py +10 -1
- {conan-2.11.0 → conan-2.12.0}/conan/api/subapi/new.py +3 -1
- {conan-2.11.0 → conan-2.12.0}/conan/api/subapi/profiles.py +1 -1
- {conan-2.11.0 → conan-2.12.0}/conan/api/subapi/remotes.py +29 -17
- {conan-2.11.0 → conan-2.12.0}/conan/api/subapi/remove.py +11 -9
- {conan-2.11.0 → conan-2.12.0}/conan/api/subapi/search.py +2 -2
- {conan-2.11.0 → conan-2.12.0}/conan/api/subapi/upload.py +2 -3
- {conan-2.11.0 → conan-2.12.0}/conan/api/subapi/workspace.py +33 -7
- {conan-2.11.0 → conan-2.12.0}/conan/cli/args.py +6 -2
- {conan-2.11.0 → conan-2.12.0}/conan/cli/command.py +14 -15
- {conan-2.11.0 → conan-2.12.0}/conan/cli/commands/cache.py +2 -2
- {conan-2.11.0 → conan-2.12.0}/conan/cli/commands/config.py +10 -0
- {conan-2.11.0 → conan-2.12.0}/conan/cli/commands/graph.py +4 -15
- {conan-2.11.0 → conan-2.12.0}/conan/cli/commands/lock.py +6 -13
- {conan-2.11.0 → conan-2.12.0}/conan/cli/commands/new.py +1 -1
- {conan-2.11.0 → conan-2.12.0}/conan/cli/commands/profile.py +22 -13
- {conan-2.11.0 → conan-2.12.0}/conan/cli/commands/test.py +1 -1
- {conan-2.11.0 → conan-2.12.0}/conan/cli/commands/workspace.py +65 -2
- {conan-2.11.0 → conan-2.12.0}/conan/cps/cps.py +1 -1
- {conan-2.11.0 → conan-2.12.0}/conan/internal/api/config/config_installer.py +1 -3
- {conan-2.11.0 → conan-2.12.0}/conan/internal/api/detect/detect_api.py +1 -1
- {conan-2.11.0 → conan-2.12.0}/conan/internal/api/export.py +2 -2
- {conan-2.11.0 → conan-2.12.0}/conan/internal/api/local/editable.py +1 -1
- conan-2.12.0/conan/internal/api/new/workspace.py +33 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/api/profile/profile_loader.py +4 -4
- {conan-2.11.0 → conan-2.12.0}/conan/internal/cache/cache.py +2 -2
- {conan-2.11.0 → conan-2.12.0}/conan/internal/cache/conan_reference_layout.py +1 -1
- {conan-2.11.0 → conan-2.12.0}/conan/internal/cache/db/cache_database.py +3 -3
- {conan-2.11.0 → conan-2.12.0}/conan/internal/cache/db/packages_table.py +2 -2
- {conan-2.11.0 → conan-2.12.0}/conan/internal/cache/db/recipes_table.py +1 -1
- {conan-2.11.0 → conan-2.12.0}/conan/internal/cache/db/table.py +2 -2
- {conan-2.11.0 → conan-2.12.0}/conan/internal/cache/integrity_check.py +12 -4
- {conan-2.11.0 → conan-2.12.0}/conan/internal/conan_app.py +3 -7
- {conan-2.11.0 → conan-2.12.0}/conan/internal/deploy.py +2 -2
- {conan-2.11.0 → conan-2.12.0}/conan/internal/methods.py +4 -4
- {conan-2.11.0/conans → conan-2.12.0/conan/internal}/model/conan_file.py +13 -7
- {conan-2.11.0/conans → conan-2.12.0/conan/internal}/model/conf.py +6 -1
- conan-2.11.0/conans/model/build_info.py → conan-2.12.0/conan/internal/model/cpp_info.py +61 -33
- {conan-2.11.0/conans → conan-2.12.0/conan/internal}/model/dependencies.py +7 -5
- {conan-2.11.0/conans → conan-2.12.0/conan/internal}/model/info.py +4 -4
- {conan-2.11.0/conans → conan-2.12.0/conan/internal}/model/layout.py +2 -2
- conan-2.11.0/conans/model/graph_lock.py → conan-2.12.0/conan/internal/model/lockfile.py +2 -2
- {conan-2.11.0/conans → conan-2.12.0/conan/internal}/model/options.py +1 -1
- {conan-2.11.0/conans → conan-2.12.0/conan/internal}/model/profile.py +3 -3
- conan-2.12.0/conan/internal/model/recipe_ref.py +8 -0
- {conan-2.11.0/conans → conan-2.12.0/conan/internal}/model/requires.py +6 -4
- {conan-2.11.0/conans → conan-2.12.0/conan/internal}/model/version_range.py +1 -1
- {conan-2.11.0 → conan-2.12.0}/conan/internal/runner/docker.py +1 -3
- {conan-2.11.0 → conan-2.12.0}/conan/internal/workspace.py +36 -9
- {conan-2.11.0 → conan-2.12.0}/conan/test/assets/genconanfile.py +1 -1
- {conan-2.11.0 → conan-2.12.0}/conan/test/assets/pkg_cmake.py +1 -1
- {conan-2.11.0 → conan-2.12.0}/conan/test/utils/mocks.py +3 -3
- {conan-2.11.0 → conan-2.12.0}/conan/test/utils/profiles.py +2 -2
- {conan-2.11.0 → conan-2.12.0}/conan/test/utils/tools.py +15 -5
- {conan-2.11.0 → conan-2.12.0}/conan/tools/__init__.py +1 -1
- {conan-2.11.0 → conan-2.12.0}/conan/tools/apple/xcodedeps.py +1 -1
- {conan-2.11.0 → conan-2.12.0}/conan/tools/build/cppstd.py +1 -1
- {conan-2.11.0 → conan-2.12.0}/conan/tools/build/cstd.py +1 -1
- {conan-2.11.0 → conan-2.12.0}/conan/tools/build/flags.py +1 -1
- {conan-2.11.0 → conan-2.12.0}/conan/tools/cmake/__init__.py +1 -1
- {conan-2.11.0 → conan-2.12.0}/conan/tools/cmake/cmakedeps/cmakedeps.py +1 -1
- {conan-2.11.0 → conan-2.12.0}/conan/tools/cmake/cmakedeps2/cmakedeps.py +7 -2
- {conan-2.11.0 → conan-2.12.0}/conan/tools/cmake/cmakedeps2/target_configuration.py +9 -10
- {conan-2.11.0 → conan-2.12.0}/conan/tools/cmake/presets.py +2 -1
- {conan-2.11.0 → conan-2.12.0}/conan/tools/cmake/toolchain/blocks.py +6 -2
- {conan-2.11.0 → conan-2.12.0}/conan/tools/cmake/toolchain/toolchain.py +12 -2
- {conan-2.11.0 → conan-2.12.0}/conan/tools/env/environment.py +2 -3
- {conan-2.11.0 → conan-2.12.0}/conan/tools/files/conandata.py +3 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/files/files.py +12 -25
- {conan-2.11.0 → conan-2.12.0}/conan/tools/files/patches.py +58 -23
- {conan-2.11.0 → conan-2.12.0}/conan/tools/gnu/autotoolstoolchain.py +2 -2
- {conan-2.11.0 → conan-2.12.0}/conan/tools/gnu/gnutoolchain.py +3 -3
- {conan-2.11.0 → conan-2.12.0}/conan/tools/gnu/pkgconfigdeps.py +53 -49
- {conan-2.11.0 → conan-2.12.0}/conan/tools/google/bazeldeps.py +2 -2
- {conan-2.11.0 → conan-2.12.0}/conan/tools/meson/helpers.py +1 -1
- {conan-2.11.0 → conan-2.12.0}/conan/tools/meson/toolchain.py +6 -4
- {conan-2.11.0 → conan-2.12.0}/conan/tools/microsoft/msbuilddeps.py +1 -1
- {conan-2.11.0 → conan-2.12.0}/conan/tools/qbs/qbsdeps.py +1 -1
- conan-2.12.0/conan/tools/sbom/cyclonedx.py +76 -0
- conan-2.12.0/conan/tools/scm/__init__.py +2 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/scm/git.py +4 -2
- {conan-2.11.0 → conan-2.12.0/conan.egg-info}/PKG-INFO +3 -1
- {conan-2.11.0 → conan-2.12.0}/conan.egg-info/SOURCES.txt +26 -19
- {conan-2.11.0 → conan-2.12.0}/conan.egg-info/requires.txt +2 -2
- {conan-2.11.0 → conan-2.12.0}/conans/client/graph/build_mode.py +1 -1
- {conan-2.11.0 → conan-2.12.0}/conans/client/graph/compatibility.py +35 -26
- {conan-2.11.0 → conan-2.12.0}/conans/client/graph/compute_pid.py +1 -1
- {conan-2.11.0 → conan-2.12.0}/conans/client/graph/graph.py +24 -3
- {conan-2.11.0 → conan-2.12.0}/conans/client/graph/graph_binaries.py +3 -3
- {conan-2.11.0 → conan-2.12.0}/conans/client/graph/graph_builder.py +8 -6
- {conan-2.11.0 → conan-2.12.0}/conans/client/graph/install_graph.py +4 -5
- {conan-2.11.0 → conan-2.12.0}/conans/client/graph/profile_node_definer.py +1 -1
- {conan-2.11.0 → conan-2.12.0}/conans/client/graph/provides.py +1 -1
- {conan-2.11.0 → conan-2.12.0}/conans/client/graph/python_requires.py +2 -2
- {conan-2.11.0 → conan-2.12.0}/conans/client/graph/range_resolver.py +2 -2
- {conan-2.11.0 → conan-2.12.0}/conans/client/installer.py +2 -2
- {conan-2.11.0 → conan-2.12.0}/conans/client/loader.py +4 -4
- {conan-2.11.0 → conan-2.12.0}/conans/client/migrations.py +1 -1
- {conan-2.11.0 → conan-2.12.0}/conans/client/remote_manager.py +18 -5
- {conan-2.11.0 → conan-2.12.0}/conans/client/rest/auth_manager.py +5 -2
- {conan-2.11.0 → conan-2.12.0}/conans/client/rest/client_routes.py +2 -2
- {conan-2.11.0 → conan-2.12.0}/conans/client/rest/conan_requester.py +9 -13
- {conan-2.11.0 → conan-2.12.0}/conans/client/rest/file_uploader.py +21 -21
- {conan-2.11.0 → conan-2.12.0}/conans/client/rest/rest_client_v2.py +2 -2
- {conan-2.11.0 → conan-2.12.0}/conans/client/rest_client_local_recipe_index.py +2 -2
- {conan-2.11.0 → conan-2.12.0}/conans/migrations.py +1 -1
- conan-2.12.0/conans/model/__init__.py +0 -0
- conan-2.12.0/conans/model/package_ref.py +30 -0
- conan-2.12.0/conans/model/recipe_ref.py +31 -0
- {conan-2.11.0 → conan-2.12.0}/conans/requirements_dev.txt +2 -2
- {conan-2.11.0 → conan-2.12.0}/conans/requirements_server.txt +1 -1
- conan-2.12.0/conans/util/__init__.py +0 -0
- conan-2.11.0/conan/__init__.py +0 -5
- conan-2.11.0/conan/cli/formatters/list/binary_html_table.py +0 -141
- conan-2.11.0/conan/tools/scm/__init__.py +0 -2
- conan-2.11.0/conans/model/package_ref.py +0 -104
- {conan-2.11.0 → conan-2.12.0}/LICENSE.md +0 -0
- {conan-2.11.0 → conan-2.12.0}/MANIFEST.in +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/api/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/api/input.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/api/subapi/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/api/subapi/command.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/cli/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/cli/cli.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/cli/commands/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/cli/commands/build.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/cli/commands/create.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/cli/commands/download.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/cli/commands/editable.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/cli/commands/export.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/cli/commands/export_pkg.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/cli/commands/inspect.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/cli/commands/install.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/cli/commands/list.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/cli/commands/pkglist.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/cli/commands/remote.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/cli/commands/remove.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/cli/commands/search.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/cli/commands/source.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/cli/commands/upload.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/cli/commands/version.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/cli/exit_codes.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/cli/formatters/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/cli/formatters/graph/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/cli/formatters/graph/build_order_html.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/cli/formatters/graph/graph.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/cli/formatters/graph/graph_info_text.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/cli/formatters/graph/info_graph_dot.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/cli/formatters/graph/info_graph_html.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/cli/formatters/list/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/cli/formatters/list/list.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/cli/formatters/list/search_table_html.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/cli/printers/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/cli/printers/graph.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/cps/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/errors.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/api/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/api/config/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/api/detect/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/api/detect/detect_vs.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/api/install/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/api/install/generators.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/api/list/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/api/list/query_parse.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/api/local/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/api/new/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/api/new/alias_new.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/api/new/autoools_exe.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/api/new/autotools_lib.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/api/new/basic.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/api/new/bazel_7_exe.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/api/new/bazel_7_lib.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/api/new/bazel_exe.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/api/new/bazel_lib.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/api/new/cmake_exe.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/api/new/cmake_lib.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/api/new/local_recipes_index.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/api/new/meson_exe.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/api/new/meson_lib.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/api/new/msbuild_exe.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/api/new/msbuild_lib.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/api/new/qbs_lib.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/api/profile/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/api/profile/detect.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/api/remotes/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/api/remotes/encrypt.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/api/remotes/localdb.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/api/uploader.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/cache/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/cache/db/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/cache/home_paths.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/default_settings.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/errors.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/internal_tools.py +0 -0
- {conan-2.11.0/conan/test → conan-2.12.0/conan/internal/model}/__init__.py +0 -0
- {conan-2.11.0/conans → conan-2.12.0/conan/internal}/model/conanfile_interface.py +0 -0
- {conan-2.11.0/conans → conan-2.12.0/conan/internal}/model/manifest.py +0 -0
- {conan-2.11.0/conans → conan-2.12.0/conan/internal}/model/pkg_type.py +0 -0
- {conan-2.11.0/conans → conan-2.12.0/conan/internal}/model/settings.py +0 -0
- {conan-2.11.0/conans → conan-2.12.0/conan/internal}/model/version.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/paths.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/runner/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/runner/ssh.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/internal/runner/wsl.py +0 -0
- {conan-2.11.0/conan/test/utils → conan-2.12.0/conan/test}/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/test/assets/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/test/assets/autotools.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/test/assets/cmake.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/test/assets/sources.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/test/assets/visual_project_files.py +0 -0
- {conan-2.11.0/conan/tools/cmake/cmakedeps2 → conan-2.12.0/conan/test/utils}/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/test/utils/artifactory.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/test/utils/env.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/test/utils/file_server.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/test/utils/scm.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/test/utils/server_launcher.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/test/utils/test_files.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/android/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/android/utils.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/apple/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/apple/apple.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/apple/xcodebuild.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/apple/xcodetoolchain.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/build/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/build/cpu.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/build/cross_building.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/build/stdcpp_library.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/cmake/cmake.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/cmake/cmakedeps/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/cmake/cmakedeps/templates/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/cmake/cmakedeps/templates/config.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/cmake/cmakedeps/templates/config_version.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/cmake/cmakedeps/templates/macros.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/cmake/cmakedeps/templates/target_configuration.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/cmake/cmakedeps/templates/target_data.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/cmake/cmakedeps/templates/targets.py +0 -0
- {conan-2.11.0/conan/tools/system → conan-2.12.0/conan/tools/cmake/cmakedeps2}/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/cmake/cmakedeps2/config.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/cmake/cmakedeps2/config_version.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/cmake/cmakedeps2/targets.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/cmake/layout.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/cmake/toolchain/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/cmake/utils.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/cps/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/cps/cps_deps.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/env/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/env/virtualbuildenv.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/env/virtualrunenv.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/files/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/files/copy_pattern.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/files/packager.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/files/symlinks/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/files/symlinks/symlinks.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/gnu/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/gnu/autotools.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/gnu/autotoolsdeps.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/gnu/get_gnu_triplet.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/gnu/gnudeps_flags.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/gnu/makedeps.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/gnu/pkgconfig.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/google/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/google/bazel.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/google/layout.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/google/toolchain.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/intel/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/intel/intel_cc.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/layout/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/meson/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/meson/meson.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/microsoft/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/microsoft/layout.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/microsoft/msbuild.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/microsoft/nmakedeps.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/microsoft/nmaketoolchain.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/microsoft/subsystems.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/microsoft/toolchain.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/microsoft/visual.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/premake/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/premake/premake.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/premake/premakedeps.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/qbs/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/qbs/common.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/qbs/qbs.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/qbs/qbsprofile.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/ros/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/ros/rosenv.py +0 -0
- {conan-2.11.0/conans → conan-2.12.0/conan/tools/sbom}/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/scons/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/scons/sconsdeps.py +0 -0
- {conan-2.11.0/conans/client → conan-2.12.0/conan/tools/system}/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan/tools/system/package_manager.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan.egg-info/dependency_links.txt +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan.egg-info/entry_points.txt +0 -0
- {conan-2.11.0 → conan-2.12.0}/conan.egg-info/top_level.txt +0 -0
- {conan-2.11.0/conans/client/downloaders → conan-2.12.0/conans}/__init__.py +0 -0
- {conan-2.11.0/conans/client/graph → conan-2.12.0/conans/client}/__init__.py +0 -0
- {conan-2.11.0/conans/model → conan-2.12.0/conans/client/downloaders}/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conans/client/downloaders/caching_file_downloader.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conans/client/downloaders/download_cache.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conans/client/downloaders/file_downloader.py +0 -0
- {conan-2.11.0/conans/util → conan-2.12.0/conans/client/graph}/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conans/client/graph/graph_error.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conans/client/graph/proxy.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conans/client/hook_manager.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conans/client/loader_txt.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conans/client/pkg_sign.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conans/client/rest/__init__.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conans/client/rest/remote_credentials.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conans/client/rest/rest_client.py +0 -0
- {conan-2.11.0/conans/model → conan-2.12.0/conans/client/rest}/rest_routes.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conans/client/source.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conans/client/subsystems.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conans/conan.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conans/conan_server.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conans/requirements.txt +0 -0
- {conan-2.11.0 → conan-2.12.0}/conans/requirements_runner.txt +0 -0
- {conan-2.11.0 → conan-2.12.0}/conans/util/config_parser.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conans/util/dates.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conans/util/files.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conans/util/locks.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conans/util/runners.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/conans/util/thread.py +0 -0
- {conan-2.11.0 → conan-2.12.0}/pyproject.toml +0 -0
- {conan-2.11.0 → conan-2.12.0}/setup.cfg +0 -0
- {conan-2.11.0 → conan-2.12.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.12.0
|
|
4
4
|
Summary: Conan C/C++ package manager
|
|
5
5
|
Home-page: https://conan.io
|
|
6
6
|
Author: JFrog LTD
|
|
@@ -25,6 +25,8 @@ Description: <picture>
|
|
|
25
25
|
- Docs: https://docs.conan.io
|
|
26
26
|
- Slack: https://cpplang.slack.com (#conan channel. Please, click [here](https://join.slack.com/t/cpplang/shared_invite/zt-1snzdn6rp-rOUxF3166oz1_11Tr5H~xg) to get an invitation)
|
|
27
27
|
- Twitter: https://twitter.com/conan_io
|
|
28
|
+
- Blog: https://blog.conan.io
|
|
29
|
+
- Security reports: https://jfrog.com/trust/report-vulnerability
|
|
28
30
|
|
|
29
31
|
|
|
30
32
|
Conan is a package manager for C and C++ developers:
|
|
@@ -14,6 +14,8 @@ Decentralized, open-source (MIT), C/C++ package manager.
|
|
|
14
14
|
- Docs: https://docs.conan.io
|
|
15
15
|
- Slack: https://cpplang.slack.com (#conan channel. Please, click [here](https://join.slack.com/t/cpplang/shared_invite/zt-1snzdn6rp-rOUxF3166oz1_11Tr5H~xg) to get an invitation)
|
|
16
16
|
- Twitter: https://twitter.com/conan_io
|
|
17
|
+
- Blog: https://blog.conan.io
|
|
18
|
+
- Security reports: https://jfrog.com/trust/report-vulnerability
|
|
17
19
|
|
|
18
20
|
|
|
19
21
|
Conan is a package manager for C and C++ developers:
|
|
@@ -6,7 +6,6 @@ from conan.api.subapi.command import CommandAPI
|
|
|
6
6
|
from conan.api.subapi.local import LocalAPI
|
|
7
7
|
from conan.api.subapi.lockfile import LockfileAPI
|
|
8
8
|
from conan.api.subapi.workspace import WorkspaceAPI
|
|
9
|
-
from conan import conan_version
|
|
10
9
|
from conan.api.subapi.config import ConfigAPI
|
|
11
10
|
from conan.api.subapi.download import DownloadAPI
|
|
12
11
|
from conan.api.subapi.export import ExportAPI
|
|
@@ -19,13 +18,18 @@ from conan.api.subapi.remotes import RemotesAPI
|
|
|
19
18
|
from conan.api.subapi.remove import RemoveAPI
|
|
20
19
|
from conan.api.subapi.search import SearchAPI
|
|
21
20
|
from conan.api.subapi.upload import UploadAPI
|
|
22
|
-
from conans.client.migrations import ClientMigrator
|
|
23
21
|
from conan.errors import ConanException
|
|
24
22
|
from conan.internal.paths import get_conan_user_home
|
|
25
|
-
from conans.
|
|
23
|
+
from conans.client.migrations import ClientMigrator
|
|
24
|
+
from conan.internal.model.version_range import validate_conan_version
|
|
26
25
|
|
|
27
26
|
|
|
28
27
|
class ConanAPI:
|
|
28
|
+
"""
|
|
29
|
+
This is the main object to interact with the Conan API. It provides all the subapis to work with
|
|
30
|
+
recipes, packages, remotes, etc., which are exposed as attributes of this class, and should
|
|
31
|
+
not be created directly.
|
|
32
|
+
"""
|
|
29
33
|
def __init__(self, cache_folder=None):
|
|
30
34
|
|
|
31
35
|
version = sys.version_info
|
|
@@ -36,14 +40,14 @@ class ConanAPI:
|
|
|
36
40
|
self.workspace = WorkspaceAPI(self)
|
|
37
41
|
self.cache_folder = self.workspace.home_folder() or cache_folder or get_conan_user_home()
|
|
38
42
|
self.home_folder = self.cache_folder # Lets call it home, deprecate "cache"
|
|
43
|
+
self.migrate()
|
|
39
44
|
|
|
40
|
-
#
|
|
41
|
-
|
|
42
|
-
migrator.migrate()
|
|
45
|
+
# This API is depended upon by the subsequent ones, it should be initialized first
|
|
46
|
+
self.config = ConfigAPI(self)
|
|
43
47
|
|
|
44
|
-
self.command = CommandAPI(self)
|
|
45
48
|
self.remotes = RemotesAPI(self)
|
|
46
|
-
|
|
49
|
+
self.command = CommandAPI(self)
|
|
50
|
+
# Search recipes by wildcard and packages filtering by configuration
|
|
47
51
|
self.search = SearchAPI(self)
|
|
48
52
|
# Get latest refs and list refs of recipes and packages
|
|
49
53
|
self.list = ListAPI(self)
|
|
@@ -52,7 +56,6 @@ class ConanAPI:
|
|
|
52
56
|
self.graph = GraphAPI(self)
|
|
53
57
|
self.export = ExportAPI(self)
|
|
54
58
|
self.remove = RemoveAPI(self)
|
|
55
|
-
self.config = ConfigAPI(self)
|
|
56
59
|
self.new = NewAPI(self)
|
|
57
60
|
self.upload = UploadAPI(self)
|
|
58
61
|
self.download = DownloadAPI(self)
|
|
@@ -60,6 +63,27 @@ class ConanAPI:
|
|
|
60
63
|
self.lockfile = LockfileAPI(self)
|
|
61
64
|
self.local = LocalAPI(self)
|
|
62
65
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
+
_check_conan_version(self)
|
|
67
|
+
|
|
68
|
+
def reinit(self):
|
|
69
|
+
"""
|
|
70
|
+
Reinitialize the Conan API. This is useful when the configuration changes.
|
|
71
|
+
"""
|
|
72
|
+
self.config.reinit()
|
|
73
|
+
self.remotes.reinit()
|
|
74
|
+
self.local.reinit()
|
|
75
|
+
|
|
76
|
+
_check_conan_version(self)
|
|
77
|
+
|
|
78
|
+
def migrate(self):
|
|
79
|
+
# Migration system
|
|
80
|
+
# TODO: A prettier refactoring of migrators would be nice
|
|
81
|
+
from conan import conan_version
|
|
82
|
+
migrator = ClientMigrator(self.cache_folder, conan_version)
|
|
83
|
+
migrator.migrate()
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def _check_conan_version(conan_api):
|
|
87
|
+
required_range_new = conan_api.config.global_conf.get("core:required_conan_version")
|
|
88
|
+
if required_range_new:
|
|
89
|
+
validate_conan_version(required_range_new)
|
|
@@ -3,47 +3,13 @@ import json
|
|
|
3
3
|
import os
|
|
4
4
|
from json import JSONDecodeError
|
|
5
5
|
|
|
6
|
+
from conan.errors import ConanException
|
|
7
|
+
from conan.internal.errors import NotFoundException
|
|
8
|
+
from conan.api.model import RecipeReference, PkgReference
|
|
9
|
+
from conan.internal.model.version_range import VersionRange
|
|
6
10
|
from conans.client.graph.graph import RECIPE_EDITABLE, RECIPE_CONSUMER, RECIPE_PLATFORM, \
|
|
7
11
|
RECIPE_VIRTUAL, BINARY_SKIP, BINARY_MISSING, BINARY_INVALID
|
|
8
|
-
from conan.internal.errors import NotFoundException
|
|
9
|
-
from conan.errors import ConanException
|
|
10
|
-
from conans.model.package_ref import PkgReference
|
|
11
|
-
from conans.model.recipe_ref import RecipeReference
|
|
12
12
|
from conans.util.files import load
|
|
13
|
-
from conans.model.version_range import VersionRange
|
|
14
|
-
|
|
15
|
-
LOCAL_RECIPES_INDEX = "local-recipes-index"
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
class Remote:
|
|
19
|
-
|
|
20
|
-
def __init__(self, name, url, verify_ssl=True, disabled=False, allowed_packages=None,
|
|
21
|
-
remote_type=None):
|
|
22
|
-
self.name = name # Read only, is the key
|
|
23
|
-
self.url = url
|
|
24
|
-
self.verify_ssl = verify_ssl
|
|
25
|
-
self.disabled = disabled
|
|
26
|
-
self.allowed_packages = allowed_packages
|
|
27
|
-
self.remote_type = remote_type
|
|
28
|
-
|
|
29
|
-
def __eq__(self, other):
|
|
30
|
-
if other is None:
|
|
31
|
-
return False
|
|
32
|
-
return (self.name == other.name and self.url == other.url and
|
|
33
|
-
self.verify_ssl == other.verify_ssl and self.disabled == other.disabled)
|
|
34
|
-
|
|
35
|
-
def __str__(self):
|
|
36
|
-
allowed_msg = ""
|
|
37
|
-
if self.allowed_packages:
|
|
38
|
-
allowed_msg = ", Allowed packages: {}".format(", ".join(self.allowed_packages))
|
|
39
|
-
if self.remote_type == LOCAL_RECIPES_INDEX:
|
|
40
|
-
return "{}: {} [{}, Enabled: {}{}]".format(self.name, self.url, LOCAL_RECIPES_INDEX,
|
|
41
|
-
not self.disabled, allowed_msg)
|
|
42
|
-
return "{}: {} [Verify SSL: {}, Enabled: {}{}]".format(self.name, self.url, self.verify_ssl,
|
|
43
|
-
not self.disabled, allowed_msg)
|
|
44
|
-
|
|
45
|
-
def __repr__(self):
|
|
46
|
-
return str(self)
|
|
47
13
|
|
|
48
14
|
|
|
49
15
|
class MultiPackagesList:
|
|
@@ -4,7 +4,7 @@ import re
|
|
|
4
4
|
from functools import total_ordering
|
|
5
5
|
|
|
6
6
|
from conan.errors import ConanException
|
|
7
|
-
from
|
|
7
|
+
from conan.internal.model.version import Version
|
|
8
8
|
from conans.util.dates import timestamp_to_str
|
|
9
9
|
|
|
10
10
|
|
|
@@ -205,8 +205,102 @@ class RecipeReference:
|
|
|
205
205
|
return True
|
|
206
206
|
|
|
207
207
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
ref =
|
|
212
|
-
|
|
208
|
+
class PkgReference:
|
|
209
|
+
|
|
210
|
+
def __init__(self, ref=None, package_id=None, revision=None, timestamp=None):
|
|
211
|
+
self.ref = ref
|
|
212
|
+
self.package_id = package_id
|
|
213
|
+
self.revision = revision
|
|
214
|
+
self.timestamp = timestamp # float, Unix seconds UTC
|
|
215
|
+
|
|
216
|
+
def __repr__(self):
|
|
217
|
+
""" long repr like pkg/0.1@user/channel#rrev%timestamp """
|
|
218
|
+
if self.ref is None:
|
|
219
|
+
return ""
|
|
220
|
+
result = repr(self.ref)
|
|
221
|
+
if self.package_id:
|
|
222
|
+
result += ":{}".format(self.package_id)
|
|
223
|
+
if self.revision is not None:
|
|
224
|
+
result += "#{}".format(self.revision)
|
|
225
|
+
if self.timestamp is not None:
|
|
226
|
+
result += "%{}".format(self.timestamp)
|
|
227
|
+
return result
|
|
228
|
+
|
|
229
|
+
def repr_notime(self):
|
|
230
|
+
if self.ref is None:
|
|
231
|
+
return ""
|
|
232
|
+
result = self.ref.repr_notime()
|
|
233
|
+
if self.package_id:
|
|
234
|
+
result += ":{}".format(self.package_id)
|
|
235
|
+
if self.revision is not None:
|
|
236
|
+
result += "#{}".format(self.revision)
|
|
237
|
+
return result
|
|
238
|
+
|
|
239
|
+
def repr_reduced(self):
|
|
240
|
+
if self.ref is None:
|
|
241
|
+
return ""
|
|
242
|
+
result = self.ref.repr_reduced()
|
|
243
|
+
if self.package_id:
|
|
244
|
+
result += ":{}".format(self.package_id[0:4])
|
|
245
|
+
if self.revision is not None:
|
|
246
|
+
result += "#{}".format(self.revision[0:4])
|
|
247
|
+
return result
|
|
248
|
+
|
|
249
|
+
def repr_humantime(self):
|
|
250
|
+
result = self.repr_notime()
|
|
251
|
+
assert self.timestamp
|
|
252
|
+
result += " ({})".format(timestamp_to_str(self.timestamp))
|
|
253
|
+
return result
|
|
254
|
+
|
|
255
|
+
def __str__(self):
|
|
256
|
+
""" shorter representation, excluding the revision and timestamp """
|
|
257
|
+
if self.ref is None:
|
|
258
|
+
return ""
|
|
259
|
+
result = str(self.ref)
|
|
260
|
+
if self.package_id:
|
|
261
|
+
result += ":{}".format(self.package_id)
|
|
262
|
+
return result
|
|
263
|
+
|
|
264
|
+
def __lt__(self, ref):
|
|
265
|
+
# The timestamp goes before the revision for ordering revisions chronologically
|
|
266
|
+
raise Exception("WHO IS COMPARING PACKAGE REFERENCES?")
|
|
267
|
+
# return (self.name, self.version, self.user, self.channel, self.timestamp, self.revision) \
|
|
268
|
+
# < (ref.name, ref.version, ref.user, ref.channel, ref._timestamp, ref.revision)
|
|
269
|
+
|
|
270
|
+
def __eq__(self, other):
|
|
271
|
+
# TODO: In case of equality, should it use the revision and timestamp?
|
|
272
|
+
# Used:
|
|
273
|
+
# at "graph_binaries" to check: cache_latest_prev != pref
|
|
274
|
+
# at "installer" to check: if pkg_layout.reference != pref (probably just optimization?)
|
|
275
|
+
# at "revisions_test"
|
|
276
|
+
return self.ref == other.ref and self.package_id == other.package_id and \
|
|
277
|
+
self.revision == other.revision
|
|
278
|
+
|
|
279
|
+
def __hash__(self):
|
|
280
|
+
# Used in dicts of PkgReferences as keys like the cached nodes in the graph binaries
|
|
281
|
+
return hash((self.ref, self.package_id, self.revision))
|
|
282
|
+
|
|
283
|
+
@staticmethod
|
|
284
|
+
def loads(pkg_ref): # TODO: change this default to validate only on end points
|
|
285
|
+
try:
|
|
286
|
+
tokens = pkg_ref.split(":", 1)
|
|
287
|
+
assert len(tokens) == 2
|
|
288
|
+
ref, pkg_id = tokens
|
|
289
|
+
|
|
290
|
+
ref = RecipeReference.loads(ref)
|
|
291
|
+
|
|
292
|
+
# timestamp
|
|
293
|
+
tokens = pkg_id.rsplit("%", 1)
|
|
294
|
+
text = tokens[0]
|
|
295
|
+
timestamp = float(tokens[1]) if len(tokens) == 2 else None
|
|
296
|
+
|
|
297
|
+
# revision
|
|
298
|
+
tokens = text.split("#", 1)
|
|
299
|
+
package_id = tokens[0]
|
|
300
|
+
revision = tokens[1] if len(tokens) == 2 else None
|
|
301
|
+
|
|
302
|
+
return PkgReference(ref, package_id, revision, timestamp)
|
|
303
|
+
except Exception:
|
|
304
|
+
raise ConanException(
|
|
305
|
+
f"{pkg_ref} is not a valid package reference, provide a reference"
|
|
306
|
+
f" in the form name/version[@user/channel:package_id]")
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
LOCAL_RECIPES_INDEX = "local-recipes-index"
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class Remote:
|
|
5
|
+
"""
|
|
6
|
+
The ``Remote`` class represents a remote registry of packages. It's a read-only opaque object that
|
|
7
|
+
should not be created directly, but obtained from the relevant ``RemotesAPI`` subapi methods.
|
|
8
|
+
"""
|
|
9
|
+
def __init__(self, name, url, verify_ssl=True, disabled=False, allowed_packages=None,
|
|
10
|
+
remote_type=None):
|
|
11
|
+
self.name = name # Read only, is the key
|
|
12
|
+
self.url = url
|
|
13
|
+
self.verify_ssl = verify_ssl
|
|
14
|
+
self.disabled = disabled
|
|
15
|
+
self.allowed_packages = allowed_packages
|
|
16
|
+
self.remote_type = remote_type
|
|
17
|
+
self._caching = {}
|
|
18
|
+
|
|
19
|
+
def __eq__(self, other):
|
|
20
|
+
if other is None:
|
|
21
|
+
return False
|
|
22
|
+
return (self.name == other.name and self.url == other.url and
|
|
23
|
+
self.verify_ssl == other.verify_ssl and self.disabled == other.disabled)
|
|
24
|
+
|
|
25
|
+
def __str__(self):
|
|
26
|
+
allowed_msg = ""
|
|
27
|
+
if self.allowed_packages:
|
|
28
|
+
allowed_msg = ", Allowed packages: {}".format(", ".join(self.allowed_packages))
|
|
29
|
+
if self.remote_type == LOCAL_RECIPES_INDEX:
|
|
30
|
+
return "{}: {} [{}, Enabled: {}{}]".format(self.name, self.url, LOCAL_RECIPES_INDEX,
|
|
31
|
+
not self.disabled, allowed_msg)
|
|
32
|
+
return "{}: {} [Verify SSL: {}, Enabled: {}{}]".format(self.name, self.url, self.verify_ssl,
|
|
33
|
+
not self.disabled, allowed_msg)
|
|
34
|
+
|
|
35
|
+
def __repr__(self):
|
|
36
|
+
return str(self)
|
|
37
|
+
|
|
38
|
+
def invalidate_cache(self):
|
|
39
|
+
self._caching = {}
|
|
@@ -212,12 +212,12 @@ class ConanOutput:
|
|
|
212
212
|
|
|
213
213
|
def trace(self, msg):
|
|
214
214
|
if self._conan_output_level <= LEVEL_TRACE:
|
|
215
|
-
self._write_message(msg, fg=Color.
|
|
215
|
+
self._write_message(msg, fg=Color.BLUE)
|
|
216
216
|
return self
|
|
217
217
|
|
|
218
218
|
def debug(self, msg):
|
|
219
219
|
if self._conan_output_level <= LEVEL_DEBUG:
|
|
220
|
-
self._write_message(msg)
|
|
220
|
+
self._write_message(msg, fg=Color.MAGENTA)
|
|
221
221
|
return self
|
|
222
222
|
|
|
223
223
|
def verbose(self, msg, fg=None, bg=None):
|
|
@@ -294,10 +294,14 @@ def cli_out_write(data, fg=None, bg=None, endline="\n", indentation=0):
|
|
|
294
294
|
sys.stdout.write(data)
|
|
295
295
|
else:
|
|
296
296
|
data = f"{' ' * indentation}{data}{endline}"
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
297
|
+
if sys.stdout.isatty():
|
|
298
|
+
# https://github.com/conan-io/conan/issues/17245 avoid colorama crash and overhead
|
|
299
|
+
# skip deinit/reinit if stdout is not a TTY to preserve redirected output to file
|
|
300
|
+
colorama.deinit()
|
|
301
|
+
sys.stdout.write(data)
|
|
302
|
+
colorama.reinit()
|
|
303
|
+
else:
|
|
304
|
+
sys.stdout.write(data)
|
|
301
305
|
|
|
302
306
|
|
|
303
307
|
class TimedOutput:
|
|
@@ -11,8 +11,8 @@ from conan.internal.cache.home_paths import HomePaths
|
|
|
11
11
|
from conan.internal.cache.integrity_check import IntegrityChecker
|
|
12
12
|
from conans.client.downloaders.download_cache import DownloadCache
|
|
13
13
|
from conan.errors import ConanException
|
|
14
|
-
from
|
|
15
|
-
from
|
|
14
|
+
from conan.api.model import PkgReference
|
|
15
|
+
from conan.api.model import RecipeReference
|
|
16
16
|
from conans.util.dates import revision_timestamp_now
|
|
17
17
|
from conans.util.files import rmdir, gzopen_without_timestamps, mkdir, remove
|
|
18
18
|
|
|
@@ -16,11 +16,11 @@ from conans.client.graph.graph import CONTEXT_HOST, RECIPE_VIRTUAL, Node
|
|
|
16
16
|
from conans.client.graph.graph_builder import DepsGraphBuilder
|
|
17
17
|
from conans.client.graph.profile_node_definer import consumer_definer
|
|
18
18
|
from conan.errors import ConanException
|
|
19
|
-
from
|
|
20
|
-
from
|
|
21
|
-
from
|
|
22
|
-
from
|
|
23
|
-
from conans.util.files import load, save
|
|
19
|
+
from conan.internal.model.conf import ConfDefinition, BUILT_IN_CONFS, CORE_CONF_PATTERN
|
|
20
|
+
from conan.internal.model.pkg_type import PackageType
|
|
21
|
+
from conan.api.model import RecipeReference
|
|
22
|
+
from conan.internal.model.settings import Settings
|
|
23
|
+
from conans.util.files import load, save, rmdir, remove
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
class ConfigAPI:
|
|
@@ -28,6 +28,7 @@ class ConfigAPI:
|
|
|
28
28
|
def __init__(self, conan_api):
|
|
29
29
|
self.conan_api = conan_api
|
|
30
30
|
self._new_config = None
|
|
31
|
+
self._cli_core_confs = None
|
|
31
32
|
|
|
32
33
|
def home(self):
|
|
33
34
|
return self.conan_api.cache_folder
|
|
@@ -36,9 +37,11 @@ class ConfigAPI:
|
|
|
36
37
|
source_folder=None, target_folder=None):
|
|
37
38
|
# TODO: We probably want to split this into git-folder-http cases?
|
|
38
39
|
from conan.internal.api.config.config_installer import configuration_install
|
|
39
|
-
|
|
40
|
-
|
|
40
|
+
cache_folder = self.conan_api.cache_folder
|
|
41
|
+
requester = self.conan_api.remotes.requester
|
|
42
|
+
configuration_install(cache_folder, requester, path_or_url, verify_ssl, config_type=config_type, args=args,
|
|
41
43
|
source_folder=source_folder, target_folder=target_folder)
|
|
44
|
+
self.conan_api.reinit()
|
|
42
45
|
|
|
43
46
|
def install_pkg(self, ref, lockfile=None, force=False, remotes=None, profile=None):
|
|
44
47
|
ConanOutput().warning("The 'conan config install-pkg' is experimental",
|
|
@@ -90,13 +93,16 @@ class ConfigAPI:
|
|
|
90
93
|
return pkg.pref # Already installed, we can skip repeating the install
|
|
91
94
|
|
|
92
95
|
from conan.internal.api.config.config_installer import configuration_install
|
|
93
|
-
|
|
96
|
+
cache_folder = self.conan_api.cache_folder
|
|
97
|
+
requester = self.conan_api.remotes.requester
|
|
98
|
+
configuration_install(cache_folder, requester, uri=pkg.conanfile.package_folder, verify_ssl=False,
|
|
94
99
|
config_type="dir", ignore=["conaninfo.txt", "conanmanifest.txt"])
|
|
95
100
|
# We save the current package full reference in the file for future
|
|
96
101
|
# And for ``package_id`` computation
|
|
97
102
|
config_versions = {ref.split("/", 1)[0]: ref for ref in config_versions}
|
|
98
103
|
config_versions[pkg.pref.ref.name] = pkg.pref.repr_notime()
|
|
99
104
|
save(config_version_file, json.dumps({"config_version": list(config_versions.values())}))
|
|
105
|
+
self.conan_api.reinit()
|
|
100
106
|
return pkg.pref
|
|
101
107
|
|
|
102
108
|
def get(self, name, default=None, check_type=None):
|
|
@@ -111,11 +117,19 @@ class ConfigAPI:
|
|
|
111
117
|
configuration defined with the new syntax as in profiles, this config will be composed
|
|
112
118
|
to the profile ones and passed to the conanfiles.conf, which can be passed to collaborators
|
|
113
119
|
"""
|
|
120
|
+
# Lazy loading
|
|
114
121
|
if self._new_config is None:
|
|
115
|
-
|
|
116
|
-
self.
|
|
122
|
+
self._new_config = ConfDefinition()
|
|
123
|
+
self._populate_global_conf()
|
|
117
124
|
return self._new_config
|
|
118
125
|
|
|
126
|
+
def _populate_global_conf(self):
|
|
127
|
+
cache_folder = self.conan_api.cache_folder
|
|
128
|
+
new_config = self.load_config(cache_folder)
|
|
129
|
+
self._new_config.update_conf_definition(new_config)
|
|
130
|
+
if self._cli_core_confs is not None:
|
|
131
|
+
self._new_config.update_conf_definition(self._cli_core_confs)
|
|
132
|
+
|
|
119
133
|
@staticmethod
|
|
120
134
|
def load_config(home_folder):
|
|
121
135
|
# Do not document yet, keep it private
|
|
@@ -188,3 +202,35 @@ class ConfigAPI:
|
|
|
188
202
|
appending_recursive_dict_update(settings, settings_user)
|
|
189
203
|
|
|
190
204
|
return Settings(settings)
|
|
205
|
+
|
|
206
|
+
def clean(self):
|
|
207
|
+
contents = os.listdir(self.home())
|
|
208
|
+
packages_folder = self.global_conf.get("core.cache:storage_path") or os.path.join(self.home(), "p")
|
|
209
|
+
for content in contents:
|
|
210
|
+
content_path = os.path.join(self.home(), content)
|
|
211
|
+
if content_path == packages_folder or content == "version.txt":
|
|
212
|
+
continue
|
|
213
|
+
ConanOutput().debug(f"Removing {content_path}")
|
|
214
|
+
if os.path.isdir(content_path):
|
|
215
|
+
rmdir(content_path)
|
|
216
|
+
else:
|
|
217
|
+
remove(content_path)
|
|
218
|
+
self.conan_api.reinit()
|
|
219
|
+
# CHECK: This also generates a remotes.json that is not there after a conan profile show?
|
|
220
|
+
self.conan_api.migrate()
|
|
221
|
+
|
|
222
|
+
def set_core_confs(self, core_confs):
|
|
223
|
+
confs = ConfDefinition()
|
|
224
|
+
for c in core_confs:
|
|
225
|
+
if not CORE_CONF_PATTERN.match(c):
|
|
226
|
+
raise ConanException(f"Only core. values are allowed in --core-conf. Got {c}")
|
|
227
|
+
confs.loads("\n".join(core_confs))
|
|
228
|
+
confs.validate()
|
|
229
|
+
self._cli_core_confs = confs
|
|
230
|
+
# Last but not least, apply the new configuration
|
|
231
|
+
self.conan_api.reinit()
|
|
232
|
+
|
|
233
|
+
def reinit(self):
|
|
234
|
+
if self._new_config is not None:
|
|
235
|
+
self._new_config.clear()
|
|
236
|
+
self._populate_global_conf()
|
|
@@ -6,8 +6,8 @@ from conan.api.model import Remote, PackagesList
|
|
|
6
6
|
from conan.api.output import ConanOutput
|
|
7
7
|
from conan.internal.conan_app import ConanBasicApp
|
|
8
8
|
from conan.errors import ConanException
|
|
9
|
-
from
|
|
10
|
-
from
|
|
9
|
+
from conan.api.model import PkgReference
|
|
10
|
+
from conan.api.model import RecipeReference
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
class DownloadAPI:
|
|
@@ -6,7 +6,7 @@ from conan.internal.api.export import cmd_export
|
|
|
6
6
|
from conan.internal.methods import run_package_method
|
|
7
7
|
from conans.client.graph.graph import BINARY_BUILD, RECIPE_INCACHE
|
|
8
8
|
from conans.client.hook_manager import HookManager
|
|
9
|
-
from
|
|
9
|
+
from conan.api.model import PkgReference
|
|
10
10
|
from conans.util.files import mkdir
|
|
11
11
|
|
|
12
12
|
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
from conan.api.output import ConanOutput
|
|
2
|
-
from conan.internal.conan_app import ConanApp
|
|
2
|
+
from conan.internal.conan_app import ConanApp, ConanBasicApp
|
|
3
|
+
from conan.internal.model.recipe_ref import ref_matches
|
|
3
4
|
from conans.client.graph.graph import Node, RECIPE_CONSUMER, CONTEXT_HOST, RECIPE_VIRTUAL, \
|
|
4
|
-
CONTEXT_BUILD
|
|
5
|
+
CONTEXT_BUILD, BINARY_MISSING
|
|
5
6
|
from conans.client.graph.graph_binaries import GraphBinariesAnalyzer
|
|
6
7
|
from conans.client.graph.graph_builder import DepsGraphBuilder
|
|
7
8
|
from conans.client.graph.profile_node_definer import initialize_conanfile_profile, consumer_definer
|
|
8
9
|
from conan.errors import ConanException
|
|
9
|
-
from
|
|
10
|
+
from conan.api.model import RecipeReference
|
|
10
11
|
|
|
11
12
|
|
|
12
13
|
class GraphAPI:
|
|
@@ -196,7 +197,18 @@ class GraphAPI:
|
|
|
196
197
|
:param tested_graph: In case of a "test_package", the graph being tested
|
|
197
198
|
"""
|
|
198
199
|
ConanOutput().title("Computing necessary packages")
|
|
199
|
-
conan_app =
|
|
200
|
+
conan_app = ConanBasicApp(self.conan_api)
|
|
200
201
|
binaries_analyzer = GraphBinariesAnalyzer(conan_app, self.conan_api.config.global_conf)
|
|
201
202
|
binaries_analyzer.evaluate_graph(graph, build_mode, lockfile, remotes, update,
|
|
202
203
|
build_modes_test, tested_graph)
|
|
204
|
+
|
|
205
|
+
@staticmethod
|
|
206
|
+
def find_first_missing_binary(graph, missing=None):
|
|
207
|
+
""" (Experimental) Given a dependency graph, will return the first node with a
|
|
208
|
+
missing binary package
|
|
209
|
+
"""
|
|
210
|
+
for node in graph.ordered_iterate():
|
|
211
|
+
if ((not missing and node.binary == BINARY_MISSING) # First missing binary or specified
|
|
212
|
+
or (missing and ref_matches(node.ref, missing, is_consumer=None))):
|
|
213
|
+
return node.ref, node.conanfile.info
|
|
214
|
+
raise ConanException("There is no missing binary")
|
|
@@ -75,7 +75,7 @@ class InstallAPI:
|
|
|
75
75
|
# Issue related: https://github.com/conan-io/conan/issues/16543
|
|
76
76
|
base_folder = os.path.abspath(deploy_folder) if deploy_folder \
|
|
77
77
|
else conanfile.folders.base_build
|
|
78
|
-
do_deploys(self.conan_api, deps_graph, deploy, deploy_package, base_folder)
|
|
78
|
+
do_deploys(self.conan_api.home_folder, deps_graph, deploy, deploy_package, base_folder)
|
|
79
79
|
|
|
80
80
|
final_generators = []
|
|
81
81
|
# Don't use set for uniqueness because order matters
|
|
@@ -89,3 +89,7 @@ class InstallAPI:
|
|
|
89
89
|
hook_manager = HookManager(HomePaths(self.conan_api.home_folder).hooks_path)
|
|
90
90
|
write_generators(conanfile, hook_manager, self.conan_api.home_folder,
|
|
91
91
|
envs_generation=envs_generation)
|
|
92
|
+
|
|
93
|
+
def deploy(self, graph, deployer, deploy_package=None, deploy_folder=None):
|
|
94
|
+
return do_deploys(self.conan_api.home_folder, graph, deployer, deploy_package=deploy_package,
|
|
95
|
+
deploy_folder=deploy_folder)
|
|
@@ -6,12 +6,13 @@ from conan.api.model import PackagesList
|
|
|
6
6
|
from conan.api.output import ConanOutput, TimedOutput
|
|
7
7
|
from conan.internal.api.list.query_parse import filter_package_configs
|
|
8
8
|
from conan.internal.conan_app import ConanBasicApp
|
|
9
|
+
from conan.internal.model.recipe_ref import ref_matches
|
|
9
10
|
from conan.internal.paths import CONANINFO
|
|
10
11
|
from conan.internal.errors import NotFoundException
|
|
11
12
|
from conan.errors import ConanException
|
|
12
|
-
from
|
|
13
|
-
from
|
|
14
|
-
from
|
|
13
|
+
from conan.internal.model.info import load_binary_info
|
|
14
|
+
from conan.api.model import PkgReference
|
|
15
|
+
from conan.api.model import RecipeReference
|
|
15
16
|
from conans.util.dates import timelimit
|
|
16
17
|
from conans.util.files import load
|
|
17
18
|
|
|
@@ -224,6 +225,8 @@ class ListAPI:
|
|
|
224
225
|
return select_bundle
|
|
225
226
|
|
|
226
227
|
def explain_missing_binaries(self, ref, conaninfo, remotes):
|
|
228
|
+
""" (Experimental) Explain why a binary is missing in the cache
|
|
229
|
+
"""
|
|
227
230
|
ConanOutput().info(f"Missing binary: {ref}")
|
|
228
231
|
ConanOutput().info(f"With conaninfo.txt (package_id):\n{conaninfo.dumps()}")
|
|
229
232
|
conaninfo = load_binary_info(conaninfo.dumps())
|
|
@@ -391,10 +394,12 @@ def _get_cache_packages_binary_info(cache, prefs) -> Dict[PkgReference, dict]:
|
|
|
391
394
|
# Read conaninfo
|
|
392
395
|
info_path = os.path.join(pkg_layout.package(), CONANINFO)
|
|
393
396
|
if not os.path.exists(info_path):
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
397
|
+
ConanOutput().error(f"Corrupted package '{pkg_layout.reference}' "
|
|
398
|
+
f"without conaninfo.txt in: {info_path}")
|
|
399
|
+
info = {}
|
|
400
|
+
else:
|
|
401
|
+
conan_info_content = load(info_path)
|
|
402
|
+
info = load_binary_info(conan_info_content)
|
|
398
403
|
pref = pkg_layout.reference
|
|
399
404
|
# The key shoudln't have the latest package revision, we are asking for package configs
|
|
400
405
|
pref.revision = None
|
|
@@ -10,7 +10,7 @@ from conans.client.graph.profile_node_definer import initialize_conanfile_profil
|
|
|
10
10
|
from conan.internal.errors import conanfile_exception_formatter
|
|
11
11
|
from conan.errors import ConanException
|
|
12
12
|
from conans.client.hook_manager import HookManager
|
|
13
|
-
from
|
|
13
|
+
from conan.api.model import RecipeReference
|
|
14
14
|
from conans.util.files import chdir
|
|
15
15
|
|
|
16
16
|
|
|
@@ -118,3 +118,6 @@ class LocalAPI:
|
|
|
118
118
|
conanfile = app.loader.load_named(conanfile_path, name=name, version=version, user=user,
|
|
119
119
|
channel=channel, remotes=remotes, graph_lock=lockfile)
|
|
120
120
|
return conanfile
|
|
121
|
+
|
|
122
|
+
def reinit(self):
|
|
123
|
+
self.editable_packages = EditablePackages(self._conan_api.home_folder)
|
|
@@ -4,7 +4,7 @@ from conan.api.output import ConanOutput
|
|
|
4
4
|
from conan.cli import make_abs_path
|
|
5
5
|
from conans.client.graph.graph import Overrides
|
|
6
6
|
from conan.errors import ConanException
|
|
7
|
-
from
|
|
7
|
+
from conan.internal.model.lockfile import Lockfile, LOCKFILE
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
class LockfileAPI:
|
|
@@ -80,6 +80,15 @@ class LockfileAPI:
|
|
|
80
80
|
lockfile.update_lock(graph, lock_packages)
|
|
81
81
|
return lockfile
|
|
82
82
|
|
|
83
|
+
@staticmethod
|
|
84
|
+
def merge_lockfiles(lockfiles):
|
|
85
|
+
result = Lockfile()
|
|
86
|
+
for lockfile in lockfiles:
|
|
87
|
+
lockfile = make_abs_path(lockfile)
|
|
88
|
+
graph_lock = Lockfile.load(lockfile)
|
|
89
|
+
result.merge(graph_lock)
|
|
90
|
+
return result
|
|
91
|
+
|
|
83
92
|
@staticmethod
|
|
84
93
|
def add_lockfile(lockfile=None, requires=None, build_requires=None, python_requires=None,
|
|
85
94
|
config_requires=None):
|