conan 2.16.1__tar.gz → 2.17.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.16.1/conan.egg-info → conan-2.17.0}/PKG-INFO +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/__init__.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/api/conan_api.py +4 -3
- {conan-2.16.1 → conan-2.17.0}/conan/api/model/list.py +6 -3
- {conan-2.16.1 → conan-2.17.0}/conan/api/model/refs.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/api/subapi/audit.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/api/subapi/cache.py +54 -37
- {conan-2.16.1 → conan-2.17.0}/conan/api/subapi/config.py +5 -5
- {conan-2.16.1 → conan-2.17.0}/conan/api/subapi/export.py +2 -2
- {conan-2.16.1 → conan-2.17.0}/conan/api/subapi/graph.py +12 -6
- {conan-2.16.1 → conan-2.17.0}/conan/api/subapi/install.py +2 -2
- {conan-2.16.1 → conan-2.17.0}/conan/api/subapi/list.py +29 -3
- {conan-2.16.1 → conan-2.17.0}/conan/api/subapi/local.py +3 -3
- {conan-2.16.1 → conan-2.17.0}/conan/api/subapi/lockfile.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/api/subapi/new.py +3 -1
- {conan-2.16.1 → conan-2.17.0}/conan/api/subapi/profiles.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/api/subapi/remotes.py +4 -4
- {conan-2.16.1 → conan-2.17.0}/conan/api/subapi/upload.py +4 -2
- {conan-2.16.1 → conan-2.17.0}/conan/api/subapi/workspace.py +53 -32
- {conan-2.16.1 → conan-2.17.0}/conan/cli/commands/audit.py +2 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/commands/cache.py +31 -6
- {conan-2.16.1 → conan-2.17.0}/conan/cli/commands/new.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/cli/commands/remote.py +5 -1
- {conan-2.16.1 → conan-2.17.0}/conan/cli/commands/test.py +0 -6
- {conan-2.16.1 → conan-2.17.0}/conan/cli/commands/workspace.py +21 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/formatters/audit/vulnerabilities.py +2 -2
- {conan-2.16.1 → conan-2.17.0}/conan/cli/formatters/graph/info_graph_html.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/cps/cps.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/audit/providers.py +1 -2
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/config/config_installer.py +33 -17
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/detect/detect_api.py +51 -2
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/detect/detect_vs.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/export.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/install/generators.py +3 -3
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/local/editable.py +1 -1
- {conan-2.16.1/conans/client → conan-2.17.0/conan/internal/api}/migrations.py +3 -3
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/new/autoools_exe.py +15 -4
- conan-2.17.0/conan/internal/api/new/header_lib.py +116 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/new/workspace.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/profile/profile_loader.py +6 -4
- conan-2.17.0/conan/internal/api/upload.py +16 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/uploader.py +26 -10
- {conan-2.16.1 → conan-2.17.0}/conan/internal/cache/cache.py +2 -2
- {conan-2.16.1 → conan-2.17.0}/conan/internal/cache/conan_reference_layout.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/internal/cache/db/packages_table.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/internal/cache/db/recipes_table.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/internal/conan_app.py +6 -6
- {conan-2.16.1 → conan-2.17.0}/conan/internal/default_settings.py +4 -4
- {conan-2.16.1 → conan-2.17.0}/conan/internal/deploy.py +2 -2
- {conan-2.16.1/conans/client → conan-2.17.0/conan/internal}/graph/compatibility.py +4 -4
- {conan-2.16.1/conans/client → conan-2.17.0/conan/internal}/graph/graph.py +5 -3
- {conan-2.16.1/conans/client → conan-2.17.0/conan/internal}/graph/graph_binaries.py +10 -10
- {conan-2.16.1/conans/client → conan-2.17.0/conan/internal}/graph/graph_builder.py +5 -5
- {conan-2.16.1/conans/client → conan-2.17.0/conan/internal}/graph/install_graph.py +2 -2
- {conan-2.16.1/conans/client → conan-2.17.0/conan/internal/graph}/installer.py +4 -4
- {conan-2.16.1/conans/client → conan-2.17.0/conan/internal}/graph/profile_node_definer.py +1 -1
- {conan-2.16.1/conans/client → conan-2.17.0/conan/internal}/graph/provides.py +1 -1
- {conan-2.16.1/conans/client → conan-2.17.0/conan/internal}/graph/proxy.py +3 -3
- {conan-2.16.1/conans/client → conan-2.17.0/conan/internal}/graph/range_resolver.py +1 -1
- {conan-2.16.1/conans/client → conan-2.17.0/conan/internal}/hook_manager.py +1 -1
- {conan-2.16.1/conans/client → conan-2.17.0/conan/internal}/loader.py +57 -2
- {conan-2.16.1 → conan-2.17.0}/conan/internal/methods.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/internal/model/conan_file.py +2 -2
- {conan-2.16.1 → conan-2.17.0}/conan/internal/model/conanfile_interface.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/internal/model/conf.py +4 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/model/cpp_info.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/internal/model/dependencies.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/internal/model/info.py +5 -14
- {conan-2.16.1 → conan-2.17.0}/conan/internal/model/lockfile.py +2 -2
- {conan-2.16.1 → conan-2.17.0}/conan/internal/model/manifest.py +2 -2
- {conan-2.16.1 → conan-2.17.0}/conan/internal/model/workspace.py +32 -18
- {conan-2.16.1 → conan-2.17.0}/conan/internal/paths.py +15 -11
- {conan-2.16.1/conans/client → conan-2.17.0/conan/internal}/rest/auth_manager.py +2 -2
- {conan-2.16.1/conans/client/downloaders → conan-2.17.0/conan/internal/rest}/caching_file_downloader.py +3 -3
- {conan-2.16.1/conans/client → conan-2.17.0/conan/internal}/rest/client_routes.py +1 -1
- {conan-2.16.1/conans/client → conan-2.17.0/conan/internal}/rest/conan_requester.py +2 -2
- {conan-2.16.1/conans/client/downloaders → conan-2.17.0/conan/internal/rest}/download_cache.py +5 -4
- {conan-2.16.1/conans/client/downloaders → conan-2.17.0/conan/internal/rest}/file_downloader.py +2 -2
- {conan-2.16.1/conans/client → conan-2.17.0/conan/internal}/rest/file_uploader.py +2 -2
- {conan-2.16.1/conans/client → conan-2.17.0/conan/internal/rest}/pkg_sign.py +2 -2
- {conan-2.16.1/conans/client → conan-2.17.0/conan/internal}/rest/remote_credentials.py +2 -2
- {conan-2.16.1/conans/client → conan-2.17.0/conan/internal/rest}/remote_manager.py +4 -4
- {conan-2.16.1/conans/client → conan-2.17.0/conan/internal}/rest/rest_client.py +1 -1
- {conan-2.16.1/conans/client → conan-2.17.0/conan/internal/rest}/rest_client_local_recipe_index.py +3 -3
- {conan-2.16.1/conans/client → conan-2.17.0/conan/internal}/rest/rest_client_v2.py +23 -6
- {conan-2.16.1 → conan-2.17.0}/conan/internal/runner/wsl.py +2 -3
- {conan-2.16.1/conans/client → conan-2.17.0/conan/internal}/source.py +1 -2
- {conan-2.16.1/conans → conan-2.17.0/conan/internal}/util/config_parser.py +1 -1
- {conan-2.16.1/conans → conan-2.17.0/conan/internal}/util/dates.py +1 -28
- {conan-2.16.1/conans → conan-2.17.0/conan/internal}/util/files.py +0 -61
- {conan-2.16.1/conans → conan-2.17.0/conan/internal}/util/runners.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/test/utils/file_server.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/test/utils/profiles.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/test/utils/scm.py +2 -2
- {conan-2.16.1 → conan-2.17.0}/conan/test/utils/test_files.py +3 -3
- {conan-2.16.1 → conan-2.17.0}/conan/test/utils/tools.py +3 -3
- {conan-2.16.1 → conan-2.17.0}/conan/tools/apple/apple.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/tools/apple/xcodedeps.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/tools/apple/xcodetoolchain.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/tools/build/__init__.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/tools/build/cpu.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/tools/build/cstd.py +16 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/build/flags.py +14 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/cmake/cmakedeps2/cmakedeps.py +11 -3
- {conan-2.16.1 → conan-2.17.0}/conan/tools/cmake/cmakedeps2/config.py +5 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/cmake/cmakedeps2/target_configuration.py +12 -7
- {conan-2.16.1 → conan-2.17.0}/conan/tools/cmake/layout.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/tools/cmake/presets.py +15 -3
- {conan-2.16.1 → conan-2.17.0}/conan/tools/cmake/toolchain/blocks.py +2 -2
- {conan-2.16.1 → conan-2.17.0}/conan/tools/cmake/toolchain/toolchain.py +2 -2
- {conan-2.16.1 → conan-2.17.0}/conan/tools/env/environment.py +2 -2
- {conan-2.16.1 → conan-2.17.0}/conan/tools/files/conandata.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/tools/files/copy_pattern.py +5 -1
- {conan-2.16.1 → conan-2.17.0}/conan/tools/files/files.py +4 -4
- {conan-2.16.1 → conan-2.17.0}/conan/tools/files/patches.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/tools/gnu/autotools.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/tools/gnu/autotoolstoolchain.py +17 -2
- {conan-2.16.1 → conan-2.17.0}/conan/tools/gnu/gnudeps_flags.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/tools/gnu/gnutoolchain.py +17 -2
- {conan-2.16.1 → conan-2.17.0}/conan/tools/gnu/pkgconfigdeps.py +211 -268
- {conan-2.16.1 → conan-2.17.0}/conan/tools/google/bazeldeps.py +7 -5
- {conan-2.16.1 → conan-2.17.0}/conan/tools/meson/helpers.py +8 -23
- {conan-2.16.1 → conan-2.17.0}/conan/tools/meson/toolchain.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/tools/microsoft/msbuilddeps.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/tools/microsoft/subsystems.py +2 -2
- {conan-2.16.1 → conan-2.17.0}/conan/tools/microsoft/toolchain.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/tools/microsoft/visual.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/tools/premake/premakedeps.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/tools/qbs/qbsprofile.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/tools/sbom/cyclonedx.py +20 -20
- conan-2.17.0/conan/tools/sbom/spdx_licenses.py +1368 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/scm/git.py +5 -5
- {conan-2.16.1 → conan-2.17.0}/conan/tools/scons/sconsdeps.py +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan/tools/system/package_manager.py +1 -1
- {conan-2.16.1 → conan-2.17.0/conan.egg-info}/PKG-INFO +1 -1
- {conan-2.16.1 → conan-2.17.0}/conan.egg-info/SOURCES.txt +44 -46
- {conan-2.16.1 → conan-2.17.0}/conans/migrations.py +2 -2
- conan-2.16.1/conans/client/loader_txt.py +0 -53
- conan-2.16.1/conans/model/__init__.py +0 -0
- conan-2.16.1/conans/util/__init__.py +0 -0
- conan-2.16.1/conans/util/locks.py +0 -24
- conan-2.16.1/conans/util/thread.py +0 -17
- {conan-2.16.1 → conan-2.17.0}/LICENSE.md +0 -0
- {conan-2.16.1 → conan-2.17.0}/MANIFEST.in +0 -0
- {conan-2.16.1 → conan-2.17.0}/README.md +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/api/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/api/input.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/api/model/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/api/model/remote.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/api/output.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/api/subapi/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/api/subapi/command.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/api/subapi/download.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/api/subapi/remove.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/api/subapi/search.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/args.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/cli.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/command.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/commands/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/commands/build.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/commands/config.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/commands/create.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/commands/download.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/commands/editable.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/commands/export.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/commands/export_pkg.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/commands/graph.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/commands/inspect.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/commands/install.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/commands/list.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/commands/lock.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/commands/pkglist.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/commands/profile.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/commands/remove.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/commands/search.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/commands/source.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/commands/upload.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/commands/version.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/exit_codes.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/formatters/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/formatters/audit/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/formatters/graph/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/formatters/graph/build_order_html.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/formatters/graph/graph.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/formatters/graph/graph_info_text.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/formatters/graph/info_graph_dot.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/formatters/list/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/formatters/list/list.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/formatters/list/search_table_html.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/printers/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cli/printers/graph.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/cps/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/errors.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/audit/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/config/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/detect/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/install/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/list/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/list/query_parse.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/local/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/new/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/new/alias_new.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/new/autotools_lib.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/new/basic.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/new/bazel_7_exe.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/new/bazel_7_lib.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/new/bazel_exe.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/new/bazel_lib.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/new/cmake_exe.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/new/cmake_lib.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/new/local_recipes_index.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/new/meson_exe.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/new/meson_lib.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/new/msbuild_exe.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/new/msbuild_lib.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/new/qbs_lib.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/profile/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/profile/detect.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/remotes/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/remotes/encrypt.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/api/remotes/localdb.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/cache/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/cache/db/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/cache/db/cache_database.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/cache/db/table.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/cache/home_paths.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/cache/integrity_check.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/errors.py +0 -0
- {conan-2.16.1/conan/internal/model → conan-2.17.0/conan/internal/graph}/__init__.py +0 -0
- {conan-2.16.1/conans/client → conan-2.17.0/conan/internal}/graph/build_mode.py +0 -0
- {conan-2.16.1/conans/client → conan-2.17.0/conan/internal}/graph/compute_pid.py +0 -0
- {conan-2.16.1/conans/client → conan-2.17.0/conan/internal}/graph/graph_error.py +0 -0
- {conan-2.16.1/conans/client → conan-2.17.0/conan/internal}/graph/python_requires.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/internal_tools.py +0 -0
- {conan-2.16.1/conan/test → conan-2.17.0/conan/internal/model}/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/model/layout.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/model/options.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/model/pkg_type.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/model/profile.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/model/recipe_ref.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/model/requires.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/model/settings.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/model/version.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/model/version_range.py +0 -0
- {conan-2.16.1/conans/client → conan-2.17.0/conan/internal}/rest/__init__.py +0 -0
- {conan-2.16.1/conans/client → conan-2.17.0/conan/internal}/rest/rest_routes.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/runner/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/runner/docker.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/runner/output.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/internal/runner/ssh.py +0 -0
- {conan-2.16.1/conans/client → conan-2.17.0/conan/internal}/subsystems.py +0 -0
- {conan-2.16.1/conan/test/assets → conan-2.17.0/conan/internal/util}/__init__.py +0 -0
- {conan-2.16.1/conan/test/utils → conan-2.17.0/conan/test}/__init__.py +0 -0
- {conan-2.16.1/conan/tools/cmake/cmakedeps2 → conan-2.17.0/conan/test/assets}/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/test/assets/autotools.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/test/assets/cmake.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/test/assets/genconanfile.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/test/assets/sources.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/test/assets/visual_project_files.py +0 -0
- {conan-2.16.1/conan/tools/system → conan-2.17.0/conan/test/utils}/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/test/utils/artifactory.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/test/utils/env.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/test/utils/mocks.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/test/utils/server_launcher.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/android/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/android/utils.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/apple/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/apple/xcodebuild.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/build/cppstd.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/build/cross_building.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/build/stdcpp_library.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/cmake/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/cmake/cmake.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/cmake/cmakedeps/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/cmake/cmakedeps/cmakedeps.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/cmake/cmakedeps/templates/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/cmake/cmakedeps/templates/config.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/cmake/cmakedeps/templates/config_version.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/cmake/cmakedeps/templates/macros.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/cmake/cmakedeps/templates/target_configuration.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/cmake/cmakedeps/templates/target_data.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/cmake/cmakedeps/templates/targets.py +0 -0
- {conan-2.16.1/conans → conan-2.17.0/conan/tools/cmake/cmakedeps2}/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/cmake/cmakedeps2/config_version.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/cmake/cmakedeps2/targets.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/cmake/toolchain/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/cmake/utils.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/cps/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/cps/cps_deps.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/env/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/env/virtualbuildenv.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/env/virtualrunenv.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/files/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/files/packager.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/files/symlinks/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/files/symlinks/symlinks.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/gnu/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/gnu/autotoolsdeps.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/gnu/get_gnu_triplet.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/gnu/makedeps.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/gnu/pkgconfig.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/google/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/google/bazel.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/google/layout.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/google/toolchain.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/intel/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/intel/intel_cc.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/layout/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/meson/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/meson/meson.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/microsoft/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/microsoft/layout.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/microsoft/msbuild.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/microsoft/nmakedeps.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/microsoft/nmaketoolchain.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/premake/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/premake/premake.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/qbs/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/qbs/common.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/qbs/qbs.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/qbs/qbsdeps.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/ros/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/ros/rosenv.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/sbom/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/scm/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan/tools/scons/__init__.py +0 -0
- {conan-2.16.1/conans/client → conan-2.17.0/conan/tools/system}/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan.egg-info/dependency_links.txt +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan.egg-info/entry_points.txt +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan.egg-info/requires.txt +0 -0
- {conan-2.16.1 → conan-2.17.0}/conan.egg-info/top_level.txt +0 -0
- {conan-2.16.1/conans/client/downloaders → conan-2.17.0/conans}/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conans/conan.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conans/conan_server.py +0 -0
- {conan-2.16.1/conans/client/graph → conan-2.17.0/conans/model}/__init__.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conans/model/package_ref.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conans/model/recipe_ref.py +0 -0
- {conan-2.16.1 → conan-2.17.0}/conans/requirements.txt +0 -0
- {conan-2.16.1 → conan-2.17.0}/conans/requirements_dev.txt +0 -0
- {conan-2.16.1 → conan-2.17.0}/conans/requirements_runner.txt +0 -0
- {conan-2.16.1 → conan-2.17.0}/conans/requirements_server.txt +0 -0
- {conan-2.16.1 → conan-2.17.0}/pyproject.toml +0 -0
- {conan-2.16.1 → conan-2.17.0}/setup.cfg +0 -0
- {conan-2.16.1 → conan-2.17.0}/setup.py +0 -0
|
@@ -22,7 +22,7 @@ from conan.api.subapi.search import SearchAPI
|
|
|
22
22
|
from conan.api.subapi.upload import UploadAPI
|
|
23
23
|
from conan.errors import ConanException
|
|
24
24
|
from conan.internal.paths import get_conan_user_home
|
|
25
|
-
from
|
|
25
|
+
from conan.internal.api.migrations import ClientMigrator
|
|
26
26
|
from conan.internal.model.version_range import validate_conan_version
|
|
27
27
|
|
|
28
28
|
|
|
@@ -45,8 +45,7 @@ class ConanAPI:
|
|
|
45
45
|
raise ConanException("cache_folder has to be an absolute path")
|
|
46
46
|
|
|
47
47
|
init_colorama(sys.stderr)
|
|
48
|
-
self.
|
|
49
|
-
self.cache_folder = self.workspace.home_folder() or cache_folder or get_conan_user_home()
|
|
48
|
+
self.cache_folder = cache_folder or get_conan_user_home()
|
|
50
49
|
self.home_folder = self.cache_folder # Lets call it home, deprecate "cache"
|
|
51
50
|
self.migrate()
|
|
52
51
|
|
|
@@ -71,6 +70,8 @@ class ConanAPI:
|
|
|
71
70
|
self.lockfile = LockfileAPI(self)
|
|
72
71
|
self.local = LocalAPI(self)
|
|
73
72
|
self.audit = AuditAPI(self)
|
|
73
|
+
# Now, lazy loading of editables
|
|
74
|
+
self.workspace = WorkspaceAPI(self)
|
|
74
75
|
|
|
75
76
|
_check_conan_version(self)
|
|
76
77
|
|
|
@@ -4,13 +4,12 @@ import os
|
|
|
4
4
|
from json import JSONDecodeError
|
|
5
5
|
|
|
6
6
|
from conan.api.model import RecipeReference, PkgReference
|
|
7
|
-
from conan.cli import make_abs_path
|
|
8
7
|
from conan.errors import ConanException
|
|
9
8
|
from conan.internal.errors import NotFoundException
|
|
10
9
|
from conan.internal.model.version_range import VersionRange
|
|
11
|
-
from
|
|
10
|
+
from conan.internal.graph.graph import RECIPE_EDITABLE, RECIPE_CONSUMER, RECIPE_PLATFORM, \
|
|
12
11
|
RECIPE_VIRTUAL, BINARY_SKIP, BINARY_MISSING, BINARY_INVALID
|
|
13
|
-
from
|
|
12
|
+
from conan.internal.util.files import load
|
|
14
13
|
|
|
15
14
|
|
|
16
15
|
class MultiPackagesList:
|
|
@@ -95,6 +94,10 @@ class MultiPackagesList:
|
|
|
95
94
|
return mpkglist
|
|
96
95
|
except JSONDecodeError as e:
|
|
97
96
|
raise ConanException(f"Graph file invalid JSON: {graphfile}\n{e}")
|
|
97
|
+
except KeyError as e:
|
|
98
|
+
raise ConanException(f'Graph file {graphfile} is missing the required "{e}" key in its contents.\n'
|
|
99
|
+
"Note that the graph file should not be filtered "
|
|
100
|
+
"if you expect to use it with the list command.")
|
|
98
101
|
except ConanException as e:
|
|
99
102
|
raise e
|
|
100
103
|
except Exception as e:
|
|
@@ -7,7 +7,7 @@ from conan.internal.api.audit.providers import ConanCenterProvider, PrivateProvi
|
|
|
7
7
|
from conan.errors import ConanException
|
|
8
8
|
from conan.internal.api.remotes.encrypt import encode, decode
|
|
9
9
|
from conan.internal.model.recipe_ref import RecipeReference
|
|
10
|
-
from
|
|
10
|
+
from conan.internal.util.files import save, load
|
|
11
11
|
|
|
12
12
|
CONAN_CENTER_AUDIT_PROVIDER_NAME = "conancenter"
|
|
13
13
|
CYPHER_KEY = "private"
|
|
@@ -2,19 +2,22 @@ import json
|
|
|
2
2
|
import os
|
|
3
3
|
import shutil
|
|
4
4
|
import tarfile
|
|
5
|
-
|
|
5
|
+
import tempfile
|
|
6
6
|
|
|
7
7
|
from conan.api.model import PackagesList
|
|
8
8
|
from conan.api.output import ConanOutput
|
|
9
|
+
from conan.internal.api.uploader import compress_files
|
|
9
10
|
from conan.internal.cache.cache import PkgCache
|
|
11
|
+
from conan.internal.cache.conan_reference_layout import EXPORT_SRC_FOLDER, EXPORT_FOLDER, SRC_FOLDER, \
|
|
12
|
+
METADATA, DOWNLOAD_EXPORT_FOLDER
|
|
10
13
|
from conan.internal.cache.home_paths import HomePaths
|
|
11
14
|
from conan.internal.cache.integrity_check import IntegrityChecker
|
|
12
|
-
from
|
|
15
|
+
from conan.internal.rest.download_cache import DownloadCache
|
|
13
16
|
from conan.errors import ConanException
|
|
14
17
|
from conan.api.model import PkgReference
|
|
15
18
|
from conan.api.model import RecipeReference
|
|
16
|
-
from
|
|
17
|
-
from
|
|
19
|
+
from conan.internal.util.dates import revision_timestamp_now
|
|
20
|
+
from conan.internal.util.files import rmdir, mkdir, remove, save
|
|
18
21
|
|
|
19
22
|
|
|
20
23
|
class CacheAPI:
|
|
@@ -92,6 +95,7 @@ class CacheAPI:
|
|
|
92
95
|
# Clean those build folders that didn't succeed to create a package and wont be in DB
|
|
93
96
|
builds_folder = cache.builds_folder
|
|
94
97
|
if os.path.isdir(builds_folder):
|
|
98
|
+
ConanOutput().verbose(f"Cleaning temporary folders")
|
|
95
99
|
for subdir in os.listdir(builds_folder):
|
|
96
100
|
folder = os.path.join(builds_folder, subdir)
|
|
97
101
|
manifest = os.path.join(folder, "p", "conanmanifest.txt")
|
|
@@ -100,16 +104,19 @@ class CacheAPI:
|
|
|
100
104
|
rmdir(folder)
|
|
101
105
|
if backup_sources:
|
|
102
106
|
backup_files = self.conan_api.cache.get_backup_sources(package_list, exclude=False, only_upload=False)
|
|
107
|
+
ConanOutput().verbose(f"Cleaning {len(backup_files)} backup sources")
|
|
103
108
|
for f in backup_files:
|
|
104
109
|
remove(f)
|
|
105
110
|
|
|
106
111
|
for ref, ref_bundle in package_list.refs().items():
|
|
112
|
+
ConanOutput(ref.repr_notime()).verbose("Cleaning recipe cache contents")
|
|
107
113
|
ref_layout = cache.recipe_layout(ref)
|
|
108
114
|
if source:
|
|
109
115
|
rmdir(ref_layout.source())
|
|
110
116
|
if download:
|
|
111
117
|
rmdir(ref_layout.download_export())
|
|
112
118
|
for pref, _ in package_list.prefs(ref, ref_bundle).items():
|
|
119
|
+
ConanOutput(pref).verbose("Cleaning package cache contents")
|
|
113
120
|
pref_layout = cache.pkg_layout(pref)
|
|
114
121
|
if build:
|
|
115
122
|
rmdir(pref_layout.build())
|
|
@@ -118,45 +125,55 @@ class CacheAPI:
|
|
|
118
125
|
if download:
|
|
119
126
|
rmdir(pref_layout.download_package())
|
|
120
127
|
|
|
121
|
-
def save(self, package_list, tgz_path):
|
|
128
|
+
def save(self, package_list, tgz_path, no_source=False):
|
|
122
129
|
global_conf = self.conan_api.config.global_conf
|
|
123
130
|
cache = PkgCache(self.conan_api.cache_folder, global_conf)
|
|
124
131
|
cache_folder = cache.store # Note, this is not the home, but the actual package cache
|
|
125
132
|
out = ConanOutput()
|
|
126
133
|
mkdir(os.path.dirname(tgz_path))
|
|
127
|
-
name = os.path.basename(tgz_path)
|
|
128
134
|
compresslevel = global_conf.get("core.gzip:compresslevel", check_type=int)
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
135
|
+
tar_files: dict[str,str] = {} # {path_in_tar: abs_path}
|
|
136
|
+
|
|
137
|
+
for ref, ref_bundle in package_list.refs().items():
|
|
138
|
+
ref_layout = cache.recipe_layout(ref)
|
|
139
|
+
recipe_folder = os.path.relpath(ref_layout.base_folder, cache_folder)
|
|
140
|
+
recipe_folder = recipe_folder.replace("\\", "/") # make win paths portable
|
|
141
|
+
ref_bundle["recipe_folder"] = recipe_folder
|
|
142
|
+
out.info(f"Saving {ref}: {recipe_folder}")
|
|
143
|
+
# Package only selected folders, not DOWNLOAD one
|
|
144
|
+
for f in (EXPORT_FOLDER, EXPORT_SRC_FOLDER, SRC_FOLDER):
|
|
145
|
+
if f == SRC_FOLDER and no_source:
|
|
146
|
+
continue
|
|
147
|
+
path = os.path.join(cache_folder, recipe_folder, f)
|
|
148
|
+
if os.path.exists(path):
|
|
149
|
+
tar_files[f"{recipe_folder}/{f}"] = path
|
|
150
|
+
path = os.path.join(cache_folder, recipe_folder, DOWNLOAD_EXPORT_FOLDER, METADATA)
|
|
151
|
+
if os.path.exists(path):
|
|
152
|
+
tar_files[f"{recipe_folder}/{DOWNLOAD_EXPORT_FOLDER}/{METADATA}"] = path
|
|
153
|
+
|
|
154
|
+
for pref, pref_bundle in package_list.prefs(ref, ref_bundle).items():
|
|
155
|
+
pref_layout = cache.pkg_layout(pref)
|
|
156
|
+
pkg_folder = pref_layout.package()
|
|
157
|
+
folder = os.path.relpath(pkg_folder, cache_folder)
|
|
158
|
+
folder = folder.replace("\\", "/") # make win paths portable
|
|
159
|
+
pref_bundle["package_folder"] = folder
|
|
160
|
+
out.info(f"Saving {pref}: {folder}")
|
|
161
|
+
tar_files[folder] = os.path.join(cache_folder, folder)
|
|
162
|
+
|
|
163
|
+
if os.path.exists(pref_layout.metadata()):
|
|
164
|
+
metadata_folder = os.path.relpath(pref_layout.metadata(), cache_folder)
|
|
165
|
+
metadata_folder = metadata_folder.replace("\\", "/") # make paths portable
|
|
166
|
+
pref_bundle["metadata_folder"] = metadata_folder
|
|
167
|
+
out.info(f"Saving {pref} metadata: {metadata_folder}")
|
|
168
|
+
tar_files[metadata_folder] = os.path.join(cache_folder, metadata_folder)
|
|
169
|
+
|
|
170
|
+
# Create a temporary file in order to reuse compress_files functionality
|
|
171
|
+
serialized = json.dumps(package_list.serialize(), indent=2)
|
|
172
|
+
pkglist_path = os.path.join(tempfile.gettempdir(), "pkglist.json")
|
|
173
|
+
save(pkglist_path, serialized)
|
|
174
|
+
tar_files["pkglist.json"] = pkglist_path
|
|
175
|
+
compress_files(tar_files, os.path.basename(tgz_path), os.path.dirname(tgz_path), compresslevel, recursive=True)
|
|
176
|
+
remove(pkglist_path)
|
|
160
177
|
|
|
161
178
|
def restore(self, path):
|
|
162
179
|
if not os.path.isfile(path):
|
|
@@ -12,16 +12,16 @@ from conan.internal.api.detect import detect_api
|
|
|
12
12
|
from conan.internal.cache.home_paths import HomePaths
|
|
13
13
|
from conan.internal.conan_app import ConanApp
|
|
14
14
|
from conan.internal.default_settings import default_settings_yml
|
|
15
|
-
from
|
|
16
|
-
from
|
|
17
|
-
from
|
|
15
|
+
from conan.internal.graph.graph import CONTEXT_HOST, RECIPE_VIRTUAL, Node
|
|
16
|
+
from conan.internal.graph.graph_builder import DepsGraphBuilder
|
|
17
|
+
from conan.internal.graph.profile_node_definer import consumer_definer
|
|
18
18
|
from conan.errors import ConanException
|
|
19
19
|
from conan.internal.model.conf import ConfDefinition, BUILT_IN_CONFS, CORE_CONF_PATTERN
|
|
20
20
|
from conan.internal.model.pkg_type import PackageType
|
|
21
21
|
from conan.api.model import RecipeReference
|
|
22
22
|
from conan.internal.model.settings import Settings
|
|
23
|
-
from
|
|
24
|
-
from
|
|
23
|
+
from conan.internal.hook_manager import HookManager
|
|
24
|
+
from conan.internal.util.files import load, save, rmdir, remove
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
class ConfigAPI:
|
|
@@ -3,9 +3,9 @@ from conan.internal.cache.cache import PkgCache
|
|
|
3
3
|
from conan.internal.conan_app import ConanApp
|
|
4
4
|
from conan.internal.api.export import cmd_export
|
|
5
5
|
from conan.internal.methods import run_package_method
|
|
6
|
-
from
|
|
6
|
+
from conan.internal.graph.graph import BINARY_BUILD, RECIPE_INCACHE
|
|
7
7
|
from conan.api.model import PkgReference
|
|
8
|
-
from
|
|
8
|
+
from conan.internal.util.files import mkdir
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
class ExportAPI:
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
from conan.api.output import ConanOutput
|
|
2
2
|
from conan.internal.conan_app import ConanApp, ConanBasicApp
|
|
3
3
|
from conan.internal.model.recipe_ref import ref_matches
|
|
4
|
-
from
|
|
5
|
-
CONTEXT_BUILD, BINARY_MISSING
|
|
6
|
-
from
|
|
7
|
-
from
|
|
8
|
-
from
|
|
9
|
-
from
|
|
4
|
+
from conan.internal.graph.graph import Node, RECIPE_CONSUMER, CONTEXT_HOST, RECIPE_VIRTUAL, \
|
|
5
|
+
CONTEXT_BUILD, BINARY_MISSING, DepsGraph
|
|
6
|
+
from conan.internal.graph.graph_binaries import GraphBinariesAnalyzer
|
|
7
|
+
from conan.internal.graph.graph_builder import DepsGraphBuilder
|
|
8
|
+
from conan.internal.graph.install_graph import InstallGraph, ProfileArgs
|
|
9
|
+
from conan.internal.graph.profile_node_definer import initialize_conanfile_profile, consumer_definer
|
|
10
10
|
from conan.errors import ConanException
|
|
11
11
|
from conan.api.model import RecipeReference
|
|
12
12
|
|
|
@@ -129,6 +129,12 @@ class GraphAPI:
|
|
|
129
129
|
update=update,
|
|
130
130
|
python_requires=python_requires)
|
|
131
131
|
|
|
132
|
+
if not requires and not tool_requires and python_requires is not None:
|
|
133
|
+
# This only happens at `conan create` for python-requires, the graph is not needed
|
|
134
|
+
# in fact, it can cause errors, if tool-requires injected
|
|
135
|
+
dep_graph = DepsGraph()
|
|
136
|
+
dep_graph.add_node(root_node)
|
|
137
|
+
return dep_graph
|
|
132
138
|
# check_updates = args.check_updates if "check_updates" in args else False
|
|
133
139
|
deps_graph = self.load_graph(root_node, profile_host=profile_host,
|
|
134
140
|
profile_build=profile_build,
|
|
@@ -4,8 +4,8 @@ from conan.internal.api.install.generators import write_generators
|
|
|
4
4
|
from conan.internal.conan_app import ConanBasicApp
|
|
5
5
|
from conan.internal.deploy import do_deploys
|
|
6
6
|
|
|
7
|
-
from
|
|
8
|
-
from
|
|
7
|
+
from conan.internal.graph.install_graph import InstallGraph
|
|
8
|
+
from conan.internal.graph.installer import BinaryInstaller
|
|
9
9
|
from conan.errors import ConanInvalidConfiguration
|
|
10
10
|
|
|
11
11
|
|
|
@@ -14,8 +14,34 @@ from conan.errors import ConanException
|
|
|
14
14
|
from conan.internal.model.info import load_binary_info
|
|
15
15
|
from conan.api.model import PkgReference
|
|
16
16
|
from conan.api.model import RecipeReference
|
|
17
|
-
from
|
|
18
|
-
from
|
|
17
|
+
from conan.internal.util.dates import timestamp_now
|
|
18
|
+
from conan.internal.util.files import load
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def _timelimit(expression):
|
|
22
|
+
""" convert an expression like "2d" (2 days) or "3h" (3 hours) to a timestamp in the past
|
|
23
|
+
with respect to current time
|
|
24
|
+
"""
|
|
25
|
+
time_value = expression[:-1]
|
|
26
|
+
try:
|
|
27
|
+
time_value = int(time_value)
|
|
28
|
+
except TypeError:
|
|
29
|
+
raise ConanException(f"Time value '{time_value}' must be an integer")
|
|
30
|
+
time_units = expression[-1]
|
|
31
|
+
units = {"y": 365 * 24 * 60 * 60,
|
|
32
|
+
"M": 30 * 24 * 60 * 60,
|
|
33
|
+
"w": 7 * 24 * 60 * 60,
|
|
34
|
+
"d": 24 * 60 * 60,
|
|
35
|
+
"h": 60 * 60,
|
|
36
|
+
"m": 60,
|
|
37
|
+
"s": 1}
|
|
38
|
+
try:
|
|
39
|
+
lru_value = time_value * units[time_units]
|
|
40
|
+
except KeyError:
|
|
41
|
+
raise ConanException(f"Unrecognized time unit: '{time_units}'. Use: {list(units)}")
|
|
42
|
+
|
|
43
|
+
limit = timestamp_now() - lru_value
|
|
44
|
+
return limit
|
|
19
45
|
|
|
20
46
|
|
|
21
47
|
class ListAPI:
|
|
@@ -145,7 +171,7 @@ class ListAPI:
|
|
|
145
171
|
# Avoid doing a ``search`` of recipes if it is an exact ref and it will be used later
|
|
146
172
|
search_ref = pattern.search_ref
|
|
147
173
|
app = ConanBasicApp(self.conan_api)
|
|
148
|
-
limit_time =
|
|
174
|
+
limit_time = _timelimit(lru) if lru else None
|
|
149
175
|
out = ConanOutput()
|
|
150
176
|
remote_name = "local cache" if not remote else remote.name
|
|
151
177
|
if search_ref:
|
|
@@ -4,12 +4,12 @@ from conan.cli import make_abs_path
|
|
|
4
4
|
from conan.internal.conan_app import ConanApp
|
|
5
5
|
from conan.internal.api.local.editable import EditablePackages
|
|
6
6
|
from conan.internal.methods import run_build_method, run_source_method
|
|
7
|
-
from
|
|
8
|
-
from
|
|
7
|
+
from conan.internal.graph.graph import CONTEXT_HOST
|
|
8
|
+
from conan.internal.graph.profile_node_definer import initialize_conanfile_profile
|
|
9
9
|
from conan.internal.errors import conanfile_exception_formatter
|
|
10
10
|
from conan.errors import ConanException
|
|
11
11
|
from conan.api.model import RecipeReference
|
|
12
|
-
from
|
|
12
|
+
from conan.internal.util.files import chdir
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
class LocalAPI:
|
|
@@ -2,7 +2,7 @@ import os
|
|
|
2
2
|
|
|
3
3
|
from conan.api.output import ConanOutput
|
|
4
4
|
from conan.cli import make_abs_path
|
|
5
|
-
from
|
|
5
|
+
from conan.internal.graph.graph import Overrides
|
|
6
6
|
from conan.errors import ConanException
|
|
7
7
|
from conan.internal.model.lockfile import Lockfile, LOCKFILE
|
|
8
8
|
|
|
@@ -6,7 +6,7 @@ from jinja2 import Template, StrictUndefined, UndefinedError, Environment, meta
|
|
|
6
6
|
|
|
7
7
|
from conan.api.output import ConanOutput
|
|
8
8
|
from conan.errors import ConanException
|
|
9
|
-
from
|
|
9
|
+
from conan.internal.util.files import load, save
|
|
10
10
|
from conan import __version__
|
|
11
11
|
|
|
12
12
|
|
|
@@ -85,6 +85,7 @@ class NewAPI:
|
|
|
85
85
|
from conan.internal.api.new.alias_new import alias_file
|
|
86
86
|
from conan.internal.api.new.cmake_exe import cmake_exe_files
|
|
87
87
|
from conan.internal.api.new.cmake_lib import cmake_lib_files
|
|
88
|
+
from conan.internal.api.new.header_lib import header_only_lib_files
|
|
88
89
|
from conan.internal.api.new.meson_lib import meson_lib_files
|
|
89
90
|
from conan.internal.api.new.meson_exe import meson_exe_files
|
|
90
91
|
from conan.internal.api.new.msbuild_lib import msbuild_lib_files
|
|
@@ -101,6 +102,7 @@ class NewAPI:
|
|
|
101
102
|
new_templates = {"basic": basic_file,
|
|
102
103
|
"cmake_lib": cmake_lib_files,
|
|
103
104
|
"cmake_exe": cmake_exe_files,
|
|
105
|
+
"header_lib": header_only_lib_files,
|
|
104
106
|
"meson_lib": meson_lib_files,
|
|
105
107
|
"meson_exe": meson_exe_files,
|
|
106
108
|
"msbuild_lib": msbuild_lib_files,
|
|
@@ -3,7 +3,7 @@ import os
|
|
|
3
3
|
from conan.api.output import ConanOutput
|
|
4
4
|
from conan.internal.cache.home_paths import HomePaths
|
|
5
5
|
|
|
6
|
-
from
|
|
6
|
+
from conan.internal.loader import load_python_file
|
|
7
7
|
from conan.internal.api.profile.profile_loader import ProfileLoader
|
|
8
8
|
from conan.internal.errors import scoped_traceback
|
|
9
9
|
from conan.errors import ConanException
|
|
@@ -8,13 +8,13 @@ from conan.api.model import Remote, LOCAL_RECIPES_INDEX
|
|
|
8
8
|
from conan.api.output import ConanOutput
|
|
9
9
|
from conan.internal.cache.home_paths import HomePaths
|
|
10
10
|
from conan.internal.conan_app import ConanBasicApp
|
|
11
|
-
from
|
|
12
|
-
from
|
|
13
|
-
from
|
|
11
|
+
from conan.internal.rest.conan_requester import ConanRequester
|
|
12
|
+
from conan.internal.rest.remote_credentials import RemoteCredentials
|
|
13
|
+
from conan.internal.rest.rest_client_local_recipe_index import add_local_recipes_index_remote, \
|
|
14
14
|
remove_local_recipes_index_remote
|
|
15
15
|
from conan.internal.api.remotes.localdb import LocalDB
|
|
16
16
|
from conan.errors import ConanException
|
|
17
|
-
from
|
|
17
|
+
from conan.internal.util.files import save, load
|
|
18
18
|
|
|
19
19
|
CONAN_CENTER_REMOTE_NAME = "conancenter"
|
|
20
20
|
|
|
@@ -3,11 +3,12 @@ import time
|
|
|
3
3
|
from multiprocessing.pool import ThreadPool
|
|
4
4
|
|
|
5
5
|
from conan.api.output import ConanOutput
|
|
6
|
+
from conan.internal.api.upload import add_urls
|
|
6
7
|
from conan.internal.conan_app import ConanApp
|
|
7
8
|
from conan.internal.api.uploader import PackagePreparator, UploadExecutor, UploadUpstreamChecker, \
|
|
8
9
|
gather_metadata
|
|
9
|
-
from
|
|
10
|
-
from
|
|
10
|
+
from conan.internal.rest.pkg_sign import PkgSignaturesPlugin
|
|
11
|
+
from conan.internal.rest.file_uploader import FileUploader
|
|
11
12
|
from conan.internal.errors import AuthenticationException, ForbiddenException
|
|
12
13
|
from conan.errors import ConanException
|
|
13
14
|
|
|
@@ -99,6 +100,7 @@ class UploadAPI:
|
|
|
99
100
|
thread_pool.join()
|
|
100
101
|
elapsed = time.time() - t
|
|
101
102
|
ConanOutput().success(f"Upload completed in {int(elapsed)}s\n")
|
|
103
|
+
add_urls(package_list, remote)
|
|
102
104
|
|
|
103
105
|
def upload_backup_sources(self, files):
|
|
104
106
|
config = self.conan_api.config.global_conf
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import inspect
|
|
2
2
|
import os
|
|
3
3
|
import shutil
|
|
4
|
+
import textwrap
|
|
4
5
|
from pathlib import Path
|
|
5
6
|
|
|
6
7
|
from conan import ConanFile
|
|
@@ -9,21 +10,24 @@ from conan.api.output import ConanOutput
|
|
|
9
10
|
from conan.cli import make_abs_path
|
|
10
11
|
from conan.errors import ConanException
|
|
11
12
|
from conan.internal.conan_app import ConanApp
|
|
12
|
-
from conan.internal.model.workspace import Workspace
|
|
13
|
+
from conan.internal.model.workspace import Workspace, WORKSPACE_YML, WORKSPACE_PY, WORKSPACE_FOLDER
|
|
13
14
|
from conan.tools.scm import Git
|
|
14
|
-
from
|
|
15
|
+
from conan.internal.graph.graph import RECIPE_EDITABLE, DepsGraph, CONTEXT_HOST, RECIPE_VIRTUAL, Node, \
|
|
15
16
|
RECIPE_CONSUMER
|
|
16
|
-
from
|
|
17
|
-
from
|
|
18
|
-
from
|
|
19
|
-
from
|
|
20
|
-
from
|
|
17
|
+
from conan.internal.graph.graph import TransitiveRequirement
|
|
18
|
+
from conan.internal.graph.profile_node_definer import consumer_definer
|
|
19
|
+
from conan.internal.loader import load_python_file
|
|
20
|
+
from conan.internal.source import retrieve_exports_sources
|
|
21
|
+
from conan.internal.util.files import merge_directories, save
|
|
21
22
|
|
|
22
23
|
|
|
23
24
|
def _find_ws_folder():
|
|
24
25
|
path = Path(os.getcwd())
|
|
25
|
-
while path.is_dir() and len(path.parts) > 1: # finish at '/'
|
|
26
|
-
if
|
|
26
|
+
while path.is_dir() and len(path.parts) > 1: # finish at '/' or 'conanws/'
|
|
27
|
+
if path.name == WORKSPACE_FOLDER:
|
|
28
|
+
if (path / WORKSPACE_YML).is_file() or (path / WORKSPACE_PY).is_file():
|
|
29
|
+
return str(path)
|
|
30
|
+
if (path / WORKSPACE_YML).is_file() or (path / WORKSPACE_PY).is_file():
|
|
27
31
|
return str(path)
|
|
28
32
|
else:
|
|
29
33
|
path = path.parent
|
|
@@ -32,10 +36,10 @@ def _find_ws_folder():
|
|
|
32
36
|
def _load_workspace(ws_folder, conan_api):
|
|
33
37
|
""" loads a conanfile basic object without evaluating anything, returns the module too
|
|
34
38
|
"""
|
|
35
|
-
wspy = os.path.join(ws_folder,
|
|
39
|
+
wspy = os.path.join(ws_folder, WORKSPACE_PY)
|
|
36
40
|
if not os.path.isfile(wspy):
|
|
37
|
-
ConanOutput().info(f"
|
|
38
|
-
assert os.path.exists(os.path.join(ws_folder,
|
|
41
|
+
ConanOutput().info(f"{WORKSPACE_PY} doesn't exist in {ws_folder}, using default behavior")
|
|
42
|
+
assert os.path.exists(os.path.join(ws_folder, WORKSPACE_YML))
|
|
39
43
|
ws = Workspace(ws_folder, conan_api)
|
|
40
44
|
else:
|
|
41
45
|
try:
|
|
@@ -43,7 +47,7 @@ def _load_workspace(ws_folder, conan_api):
|
|
|
43
47
|
ws = _parse_module(module, module_id)
|
|
44
48
|
ws = ws(ws_folder, conan_api)
|
|
45
49
|
except ConanException as e:
|
|
46
|
-
raise ConanException(f"Error loading
|
|
50
|
+
raise ConanException(f"Error loading {WORKSPACE_PY} at '{wspy}': {e}")
|
|
47
51
|
return ws
|
|
48
52
|
|
|
49
53
|
|
|
@@ -86,17 +90,6 @@ class WorkspaceAPI:
|
|
|
86
90
|
self._check_ws()
|
|
87
91
|
return self._ws.name()
|
|
88
92
|
|
|
89
|
-
def home_folder(self):
|
|
90
|
-
"""
|
|
91
|
-
@return: The custom defined Conan home/cache folder if defined, else None
|
|
92
|
-
"""
|
|
93
|
-
if not self._folder:
|
|
94
|
-
return
|
|
95
|
-
folder = self._ws.home_folder()
|
|
96
|
-
if folder is None or os.path.isabs(folder):
|
|
97
|
-
return folder
|
|
98
|
-
return os.path.normpath(os.path.join(self._folder, folder))
|
|
99
|
-
|
|
100
93
|
def folder(self):
|
|
101
94
|
"""
|
|
102
95
|
@return: the current workspace folder where the conanws.yml or conanws.py is located
|
|
@@ -110,7 +103,7 @@ class WorkspaceAPI:
|
|
|
110
103
|
"""
|
|
111
104
|
if not self._folder:
|
|
112
105
|
return
|
|
113
|
-
editables = self._ws.
|
|
106
|
+
editables = self._ws.packages()
|
|
114
107
|
editables = {RecipeReference.loads(r): v.copy() for r, v in editables.items()}
|
|
115
108
|
for v in editables.values():
|
|
116
109
|
path = os.path.normpath(os.path.join(self._folder, v["path"], "conanfile.py"))
|
|
@@ -170,8 +163,8 @@ class WorkspaceAPI:
|
|
|
170
163
|
|
|
171
164
|
def _check_ws(self):
|
|
172
165
|
if not self._folder:
|
|
173
|
-
raise ConanException("Workspace not defined, please create a "
|
|
174
|
-
"'
|
|
166
|
+
raise ConanException(f"Workspace not defined, please create a "
|
|
167
|
+
f"'{WORKSPACE_PY}' or '{WORKSPACE_YML}' file")
|
|
175
168
|
|
|
176
169
|
def add(self, path, name=None, version=None, user=None, channel=None, cwd=None,
|
|
177
170
|
output_folder=None, remotes=None, product=False):
|
|
@@ -201,29 +194,57 @@ class WorkspaceAPI:
|
|
|
201
194
|
self._ws.add(ref, full_path, output_folder, product)
|
|
202
195
|
return ref
|
|
203
196
|
|
|
197
|
+
@staticmethod
|
|
198
|
+
def init(path):
|
|
199
|
+
abs_path = make_abs_path(path)
|
|
200
|
+
os.makedirs(abs_path, exist_ok=True)
|
|
201
|
+
ws_yml_file = Path(abs_path, WORKSPACE_YML)
|
|
202
|
+
ws_py_file = Path(abs_path, WORKSPACE_PY)
|
|
203
|
+
if not ws_yml_file.exists():
|
|
204
|
+
ConanOutput().success(f"Created empty {WORKSPACE_YML} in {path}")
|
|
205
|
+
save(ws_yml_file, "")
|
|
206
|
+
if not ws_py_file.exists():
|
|
207
|
+
ConanOutput().success(f"Created minimal {WORKSPACE_PY} in {path}")
|
|
208
|
+
ws_name = os.path.basename(abs_path)
|
|
209
|
+
save(ws_py_file, textwrap.dedent(f'''\
|
|
210
|
+
from conan import Workspace
|
|
211
|
+
|
|
212
|
+
class MyWorkspace(Workspace):
|
|
213
|
+
"""
|
|
214
|
+
Minimal Workspace class definition.
|
|
215
|
+
More info: https://docs.conan.io/2/incubating.html#workspaces
|
|
216
|
+
"""
|
|
217
|
+
def name(self):
|
|
218
|
+
return "{ws_name}"
|
|
219
|
+
'''))
|
|
220
|
+
|
|
204
221
|
def remove(self, path):
|
|
205
222
|
self._check_ws()
|
|
206
223
|
return self._ws.remove(path)
|
|
207
224
|
|
|
225
|
+
def clean(self):
|
|
226
|
+
self._check_ws()
|
|
227
|
+
return self._ws.clean()
|
|
228
|
+
|
|
208
229
|
def info(self):
|
|
209
230
|
self._check_ws()
|
|
210
231
|
return {"name": self.name,
|
|
211
232
|
"folder": self._folder,
|
|
212
233
|
"products": self.products,
|
|
213
|
-
"
|
|
234
|
+
"packages": self._ws.packages()}
|
|
214
235
|
|
|
215
236
|
def editable_from_path(self, path):
|
|
216
|
-
editables = self._ws.
|
|
237
|
+
editables = self._ws.packages()
|
|
217
238
|
for ref, info in editables.items():
|
|
218
239
|
if info["path"].replace("\\", "/") == path:
|
|
219
240
|
return RecipeReference.loads(ref)
|
|
220
241
|
|
|
221
242
|
def collapse_editables(self, deps_graph, profile_host, profile_build):
|
|
222
|
-
ConanOutput().title(
|
|
243
|
+
ConanOutput().title("Collapsing workspace editables")
|
|
223
244
|
|
|
224
245
|
root_class = self._ws.root_conanfile()
|
|
225
246
|
if root_class is not None:
|
|
226
|
-
conanfile = root_class("
|
|
247
|
+
conanfile = root_class(f"{WORKSPACE_PY} base project Conanfile")
|
|
227
248
|
consumer_definer(conanfile, profile_host, profile_build)
|
|
228
249
|
root = Node(None, conanfile, context=CONTEXT_HOST, recipe=RECIPE_CONSUMER,
|
|
229
250
|
path=self._folder) # path lets use the conanws.py folder
|
|
@@ -233,7 +254,7 @@ class WorkspaceAPI:
|
|
|
233
254
|
if getattr(conanfile, field, None):
|
|
234
255
|
raise ConanException(f"Conanfile in conanws.py shouldn't have '{field}'")
|
|
235
256
|
else:
|
|
236
|
-
ConanOutput().info("Workspace
|
|
257
|
+
ConanOutput().info(f"Workspace {WORKSPACE_PY} not found in the workspace folder, "
|
|
237
258
|
"using default behavior")
|
|
238
259
|
conanfile = ConanFile(display_name="cli")
|
|
239
260
|
consumer_definer(conanfile, profile_host, profile_build)
|