conan-server 2.2.3__tar.gz → 2.3.1__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-server-2.2.3/conan_server.egg-info → conan-server-2.3.1}/PKG-INFO +4 -10
- {conan-server-2.2.3 → conan-server-2.3.1}/README.md +3 -9
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/api/model.py +26 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/api/subapi/cache.py +31 -12
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/api/subapi/local.py +7 -4
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/api/subapi/remotes.py +4 -1
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/cli.py +9 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/commands/create.py +35 -1
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/commands/export_pkg.py +2 -1
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/commands/graph.py +2 -6
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/commands/new.py +1 -1
- conan-server-2.3.1/conan/cli/commands/pkglist.py +93 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/commands/profile.py +8 -2
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/commands/version.py +13 -1
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/formatters/graph/graph.py +12 -9
- conan-server-2.3.1/conan/cli/formatters/graph/info_graph_dot.py +13 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/formatters/graph/info_graph_html.py +35 -12
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/internal/api/detect_api.py +53 -21
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/internal/api/new/autoools_exe.py +1 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/internal/api/new/autotools_lib.py +2 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/internal/cache/db/packages_table.py +17 -17
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/internal/cache/db/recipes_table.py +9 -9
- conan-server-2.3.1/conan/internal/runner/__init__.py +6 -0
- conan-server-2.3.1/conan/internal/runner/docker.py +273 -0
- conan-server-2.3.1/conan/internal/runner/ssh.py +273 -0
- conan-server-2.3.1/conan/internal/runner/wsl.py +144 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/apple/apple.py +50 -34
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/cmake/cmake.py +3 -7
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/cmake/cmakedeps/cmakedeps.py +5 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/cmake/cmakedeps/templates/config.py +10 -7
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/cmake/cmakedeps/templates/target_configuration.py +44 -42
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/cmake/cmakedeps/templates/target_data.py +19 -14
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/cmake/presets.py +32 -22
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/cmake/toolchain/toolchain.py +7 -6
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/files/copy_pattern.py +13 -6
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/gnu/__init__.py +1 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/gnu/autotools.py +0 -1
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/gnu/autotoolstoolchain.py +24 -30
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/gnu/get_gnu_triplet.py +24 -14
- conan-server-2.3.1/conan/tools/gnu/gnutoolchain.py +265 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/google/bazeldeps.py +12 -8
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/meson/meson.py +11 -13
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/meson/toolchain.py +138 -66
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/microsoft/visual.py +15 -18
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/scm/git.py +13 -5
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/system/package_manager.py +2 -2
- {conan-server-2.2.3 → conan-server-2.3.1/conan_server.egg-info}/PKG-INFO +4 -10
- {conan-server-2.2.3 → conan-server-2.3.1}/conan_server.egg-info/SOURCES.txt +7 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan_server.egg-info/requires.txt +10 -2
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/__init__.py +1 -1
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/cmd/export.py +1 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/cmd/uploader.py +15 -4
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/conf/__init__.py +3 -2
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/conf/config_installer.py +2 -2
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/conf/detect_vs.py +1 -1
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/downloaders/file_downloader.py +1 -1
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/generators/__init__.py +13 -6
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/graph/compatibility.py +29 -12
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/graph/compute_pid.py +6 -5
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/graph/graph.py +9 -2
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/graph/graph_binaries.py +1 -1
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/graph/graph_builder.py +9 -3
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/graph/graph_error.py +9 -13
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/graph/install_graph.py +1 -1
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/graph/profile_node_definer.py +5 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/profile_loader.py +15 -1
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/rest/conan_requester.py +5 -5
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/rest/remote_credentials.py +9 -6
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/rest/rest_client_common.py +4 -1
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/store/localdb.py +2 -2
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/model/conan_file.py +0 -1
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/model/conf.py +3 -2
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/model/dependencies.py +3 -1
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/model/graph_lock.py +13 -8
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/model/profile.py +2 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/model/recipe_ref.py +7 -2
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/model/requires.py +3 -10
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/model/settings.py +26 -22
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/model/version_range.py +4 -2
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/paths/__init__.py +3 -1
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/requirements_dev.txt +5 -1
- conan-server-2.3.1/conans/requirements_runner.txt +2 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/test/conftest.py +1 -1
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/test/utils/file_server.py +1 -1
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/test/utils/tools.py +3 -1
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/util/windows.py +3 -4
- conan-server-2.2.3/conan/cli/formatters/graph/info_graph_dot.py +0 -9
- {conan-server-2.2.3 → conan-server-2.3.1}/LICENSE.md +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/MANIFEST.in +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/api/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/api/conan_api.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/api/output.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/api/subapi/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/api/subapi/command.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/api/subapi/config.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/api/subapi/download.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/api/subapi/export.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/api/subapi/graph.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/api/subapi/install.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/api/subapi/list.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/api/subapi/lockfile.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/api/subapi/new.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/api/subapi/profiles.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/api/subapi/remove.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/api/subapi/search.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/api/subapi/upload.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/args.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/command.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/commands/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/commands/build.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/commands/cache.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/commands/config.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/commands/download.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/commands/editable.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/commands/export.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/commands/inspect.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/commands/install.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/commands/list.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/commands/lock.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/commands/remote.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/commands/remove.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/commands/search.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/commands/source.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/commands/test.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/commands/upload.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/exit_codes.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/formatters/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/formatters/graph/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/formatters/graph/graph_info_text.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/formatters/list/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/formatters/list/binary_html_table.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/formatters/list/list.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/formatters/list/search_table_html.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/printers/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/cli/printers/graph.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/errors.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/internal/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/internal/api/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/internal/api/new/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/internal/api/new/alias_new.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/internal/api/new/basic.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/internal/api/new/bazel_exe.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/internal/api/new/bazel_lib.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/internal/api/new/cmake_exe.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/internal/api/new/cmake_lib.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/internal/api/new/local_recipes_index.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/internal/api/new/meson_exe.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/internal/api/new/meson_lib.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/internal/api/new/msbuild_exe.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/internal/api/new/msbuild_lib.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/internal/cache/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/internal/cache/cache.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/internal/cache/conan_reference_layout.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/internal/cache/db/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/internal/cache/db/cache_database.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/internal/cache/db/table.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/internal/cache/home_paths.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/internal/conan_app.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/internal/deploy.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/internal/integrity_check.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/internal/internal_tools.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/internal/upload_metadata.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/android/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/android/utils.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/apple/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/apple/xcodebuild.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/apple/xcodedeps.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/apple/xcodetoolchain.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/build/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/build/cppstd.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/build/cpu.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/build/cross_building.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/build/flags.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/build/stdcpp_library.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/cmake/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/cmake/cmakedeps/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/cmake/cmakedeps/templates/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/cmake/cmakedeps/templates/config_version.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/cmake/cmakedeps/templates/macros.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/cmake/cmakedeps/templates/targets.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/cmake/layout.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/cmake/toolchain/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/cmake/toolchain/blocks.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/cmake/utils.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/env/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/env/environment.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/env/virtualbuildenv.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/env/virtualrunenv.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/files/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/files/conandata.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/files/files.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/files/packager.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/files/patches.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/files/symlinks/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/files/symlinks/symlinks.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/gnu/autotoolsdeps.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/gnu/gnudeps_flags.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/gnu/makedeps.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/gnu/pkgconfig.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/gnu/pkgconfigdeps.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/google/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/google/bazel.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/google/layout.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/google/toolchain.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/intel/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/intel/intel_cc.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/layout/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/meson/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/meson/helpers.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/microsoft/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/microsoft/layout.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/microsoft/msbuild.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/microsoft/msbuilddeps.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/microsoft/nmakedeps.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/microsoft/nmaketoolchain.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/microsoft/subsystems.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/microsoft/toolchain.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/premake/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/premake/premake.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/premake/premakedeps.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/qbs/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/qbs/qbs.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/qbs/qbsprofile.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/scm/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/scons/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/scons/sconsdeps.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan/tools/system/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan_server.egg-info/dependency_links.txt +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan_server.egg-info/entry_points.txt +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conan_server.egg-info/top_level.txt +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/cache/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/cache/cache.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/cache/editable.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/cmd/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/conanfile/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/conanfile/build.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/conanfile/configure.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/conanfile/implementations.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/conanfile/package.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/conf/detect.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/conf/required_version.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/downloaders/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/downloaders/caching_file_downloader.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/downloaders/download_cache.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/graph/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/graph/build_mode.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/graph/provides.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/graph/proxy.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/graph/python_requires.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/graph/range_resolver.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/hook_manager.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/installer.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/loader.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/loader_txt.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/migrations.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/pkg_sign.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/remote_manager.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/rest/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/rest/auth_manager.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/rest/client_routes.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/rest/file_uploader.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/rest/rest_client.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/rest/rest_client_v2.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/rest_client_local_recipe_index.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/source.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/store/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/subsystems.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/client/userio.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/conan.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/conan_server.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/errors.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/migrations.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/model/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/model/build_info.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/model/conanfile_interface.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/model/info.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/model/layout.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/model/manifest.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/model/options.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/model/package_ref.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/model/pkg_type.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/model/rest_routes.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/model/version.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/requirements.txt +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/requirements_server.txt +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/search/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/search/query_parse.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/search/search.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/conf/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/conf/default_server_conf.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/crypto/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/crypto/jwt/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/crypto/jwt/jwt_credentials_manager.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/crypto/jwt/jwt_manager.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/launcher.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/migrate.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/migrations.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/plugin_loader.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/rest/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/rest/api_v2.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/rest/bottle_plugins/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/rest/bottle_plugins/authorization_header.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/rest/bottle_plugins/http_basic_authentication.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/rest/bottle_plugins/jwt_authentication.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/rest/bottle_plugins/return_handler.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/rest/bottle_routes.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/rest/controller/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/rest/controller/v2/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/rest/controller/v2/conan.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/rest/controller/v2/delete.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/rest/controller/v2/ping.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/rest/controller/v2/revisions.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/rest/controller/v2/search.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/rest/controller/v2/users.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/rest/server.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/revision_list.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/server_launcher.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/service/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/service/authorize.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/service/mime.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/service/user_service.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/service/v2/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/service/v2/search.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/service/v2/service_v2.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/store/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/store/disk_adapter.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/store/server_store.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/utils/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/server/utils/files.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/test/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/test/assets/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/test/assets/autotools.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/test/assets/cmake.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/test/assets/genconanfile.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/test/assets/pkg_cmake.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/test/assets/sources.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/test/assets/visual_project_files.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/test/utils/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/test/utils/artifactory.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/test/utils/mocks.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/test/utils/profiles.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/test/utils/scm.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/test/utils/server_launcher.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/test/utils/test_files.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/util/__init__.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/util/config_parser.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/util/dates.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/util/encrypt.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/util/env.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/util/files.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/util/locks.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/util/runners.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/util/sha.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/conans/util/thread.py +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/pyproject.toml +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/setup.cfg +0 -0
- {conan-server-2.2.3 → conan-server-2.3.1}/setup.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: conan-server
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.3.1
|
|
4
4
|
Summary: Conan Server of Conan C/C++ package manager
|
|
5
5
|
Home-page: https://conan.io
|
|
6
6
|
Author: JFrog LTD
|
|
@@ -43,12 +43,6 @@ Description: <picture>
|
|
|
43
43
|
This is the **developer/maintainer** documentation. For user documentation, go to https://docs.conan.io
|
|
44
44
|
|
|
45
45
|
|
|
46
|
-
| **develop2** |
|
|
47
|
-
|-------------------------|
|
|
48
|
-
| [](https://ci.conan.io/blue/organizations/jenkins/ConanTestSuitev2/activity) |
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
46
|
## Setup
|
|
53
47
|
|
|
54
48
|
You can run Conan from source in Windows, MacOS, and Linux:
|
|
@@ -87,9 +81,9 @@ Description: <picture>
|
|
|
87
81
|
|
|
88
82
|
|
|
89
83
|
Feedback and contribution are always welcome in this project.
|
|
90
|
-
Please read our [contributing guide](https://github.com/conan-io/conan/blob/
|
|
84
|
+
Please read our [contributing guide](https://github.com/conan-io/conan/blob/develop2/.github/CONTRIBUTING.md).
|
|
91
85
|
Also, if you plan to contribute, please add some testing for your changes. You can read the [Conan
|
|
92
|
-
tests guidelines section](https://github.com/conan-io/conan/blob/
|
|
86
|
+
tests guidelines section](https://github.com/conan-io/conan/blob/develop2/conans/test/README.md) for
|
|
93
87
|
some advice on how to write tests for Conan.
|
|
94
88
|
|
|
95
89
|
### Running the tests
|
|
@@ -141,7 +135,7 @@ Description: <picture>
|
|
|
141
135
|
To run specific tests, you can specify the test name too, something like:
|
|
142
136
|
|
|
143
137
|
```bash
|
|
144
|
-
$ python -m pytest conans/test/
|
|
138
|
+
$ python -m pytest conans/test/functional/command/export_test.py::TestRevisionModeSCM::test_revision_mode_scm -s
|
|
145
139
|
```
|
|
146
140
|
|
|
147
141
|
The `-s` argument can be useful to see some output that otherwise is captured by *pytest*.
|
|
@@ -35,12 +35,6 @@ Conan is a package manager for C and C++ developers:
|
|
|
35
35
|
This is the **developer/maintainer** documentation. For user documentation, go to https://docs.conan.io
|
|
36
36
|
|
|
37
37
|
|
|
38
|
-
| **develop2** |
|
|
39
|
-
|-------------------------|
|
|
40
|
-
| [](https://ci.conan.io/blue/organizations/jenkins/ConanTestSuitev2/activity) |
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
38
|
## Setup
|
|
45
39
|
|
|
46
40
|
You can run Conan from source in Windows, MacOS, and Linux:
|
|
@@ -79,9 +73,9 @@ You can run Conan from source in Windows, MacOS, and Linux:
|
|
|
79
73
|
|
|
80
74
|
|
|
81
75
|
Feedback and contribution are always welcome in this project.
|
|
82
|
-
Please read our [contributing guide](https://github.com/conan-io/conan/blob/
|
|
76
|
+
Please read our [contributing guide](https://github.com/conan-io/conan/blob/develop2/.github/CONTRIBUTING.md).
|
|
83
77
|
Also, if you plan to contribute, please add some testing for your changes. You can read the [Conan
|
|
84
|
-
tests guidelines section](https://github.com/conan-io/conan/blob/
|
|
78
|
+
tests guidelines section](https://github.com/conan-io/conan/blob/develop2/conans/test/README.md) for
|
|
85
79
|
some advice on how to write tests for Conan.
|
|
86
80
|
|
|
87
81
|
### Running the tests
|
|
@@ -133,7 +127,7 @@ OK
|
|
|
133
127
|
To run specific tests, you can specify the test name too, something like:
|
|
134
128
|
|
|
135
129
|
```bash
|
|
136
|
-
$ python -m pytest conans/test/
|
|
130
|
+
$ python -m pytest conans/test/functional/command/export_test.py::TestRevisionModeSCM::test_revision_mode_scm -s
|
|
137
131
|
```
|
|
138
132
|
|
|
139
133
|
The `-s` argument can be useful to see some output that otherwise is captured by *pytest*.
|
|
@@ -47,6 +47,9 @@ class MultiPackagesList:
|
|
|
47
47
|
def __init__(self):
|
|
48
48
|
self.lists = {}
|
|
49
49
|
|
|
50
|
+
def setdefault(self, key, default):
|
|
51
|
+
return self.lists.setdefault(key, default)
|
|
52
|
+
|
|
50
53
|
def __getitem__(self, name):
|
|
51
54
|
try:
|
|
52
55
|
return self.lists[name]
|
|
@@ -63,6 +66,10 @@ class MultiPackagesList:
|
|
|
63
66
|
return {k: v.serialize() if isinstance(v, PackagesList) else v
|
|
64
67
|
for k, v in self.lists.items()}
|
|
65
68
|
|
|
69
|
+
def merge(self, other):
|
|
70
|
+
for k, v in other.lists.items():
|
|
71
|
+
self.lists.setdefault(k, PackagesList()).merge(v)
|
|
72
|
+
|
|
66
73
|
@staticmethod
|
|
67
74
|
def load(file):
|
|
68
75
|
content = json.loads(load(file))
|
|
@@ -76,9 +83,18 @@ class MultiPackagesList:
|
|
|
76
83
|
pkglist.lists = result
|
|
77
84
|
return pkglist
|
|
78
85
|
|
|
86
|
+
@staticmethod
|
|
87
|
+
def from_graph(graph, graph_recipes=None, graph_binaries=None):
|
|
88
|
+
graph = {"graph": graph.serialize()}
|
|
89
|
+
return MultiPackagesList._define_graph(graph, graph_recipes, graph_binaries)
|
|
90
|
+
|
|
79
91
|
@staticmethod
|
|
80
92
|
def load_graph(graphfile, graph_recipes=None, graph_binaries=None):
|
|
81
93
|
graph = json.loads(load(graphfile))
|
|
94
|
+
return MultiPackagesList._define_graph(graph, graph_recipes, graph_binaries)
|
|
95
|
+
|
|
96
|
+
@staticmethod
|
|
97
|
+
def _define_graph(graph, graph_recipes=None, graph_binaries=None):
|
|
82
98
|
pkglist = MultiPackagesList()
|
|
83
99
|
cache_list = PackagesList()
|
|
84
100
|
if graph_recipes is None and graph_binaries is None:
|
|
@@ -143,6 +159,16 @@ class PackagesList:
|
|
|
143
159
|
def __init__(self):
|
|
144
160
|
self.recipes = {}
|
|
145
161
|
|
|
162
|
+
def merge(self, other):
|
|
163
|
+
def recursive_dict_update(d, u): # TODO: repeated from conandata.py
|
|
164
|
+
for k, v in u.items():
|
|
165
|
+
if isinstance(v, dict):
|
|
166
|
+
d[k] = recursive_dict_update(d.get(k, {}), v)
|
|
167
|
+
else:
|
|
168
|
+
d[k] = v
|
|
169
|
+
return d
|
|
170
|
+
recursive_dict_update(self.recipes, other.recipes)
|
|
171
|
+
|
|
146
172
|
def split(self):
|
|
147
173
|
"""
|
|
148
174
|
Returns a list of PackageList, splitted one per reference.
|
|
@@ -155,6 +155,8 @@ class CacheAPI:
|
|
|
155
155
|
tgz.close()
|
|
156
156
|
|
|
157
157
|
def restore(self, path):
|
|
158
|
+
if not os.path.isfile(path):
|
|
159
|
+
raise ConanException(f"Restore archive doesn't exist in {path}")
|
|
158
160
|
with open(path, mode='rb') as file_handler:
|
|
159
161
|
the_tar = tarfile.open(fileobj=file_handler)
|
|
160
162
|
fileobj = the_tar.extractfile("pkglist.json")
|
|
@@ -162,32 +164,49 @@ class CacheAPI:
|
|
|
162
164
|
the_tar.extractall(path=self.conan_api.cache_folder)
|
|
163
165
|
the_tar.close()
|
|
164
166
|
|
|
167
|
+
# After unzipping the files, we need to update the DB that references these files
|
|
165
168
|
out = ConanOutput()
|
|
166
169
|
package_list = PackagesList.deserialize(json.loads(pkglist))
|
|
167
170
|
cache = ClientCache(self.conan_api.cache_folder, self.conan_api.config.global_conf)
|
|
168
171
|
for ref, ref_bundle in package_list.refs().items():
|
|
169
172
|
ref.timestamp = revision_timestamp_now()
|
|
170
173
|
ref_bundle["timestamp"] = ref.timestamp
|
|
171
|
-
recipe_layout = cache.get_or_create_ref_layout(ref)
|
|
174
|
+
recipe_layout = cache.get_or_create_ref_layout(ref) # DB folder entry
|
|
172
175
|
recipe_folder = ref_bundle["recipe_folder"]
|
|
173
176
|
rel_path = os.path.relpath(recipe_layout.base_folder, cache.cache_folder)
|
|
174
177
|
rel_path = rel_path.replace("\\", "/")
|
|
178
|
+
# In the case of recipes, they are always "in place", so just checking it
|
|
175
179
|
assert rel_path == recipe_folder, f"{rel_path}!={recipe_folder}"
|
|
176
180
|
out.info(f"Restore: {ref} in {recipe_folder}")
|
|
177
181
|
for pref, pref_bundle in package_list.prefs(ref, ref_bundle).items():
|
|
178
182
|
pref.timestamp = revision_timestamp_now()
|
|
179
183
|
pref_bundle["timestamp"] = pref.timestamp
|
|
180
|
-
pkg_layout = cache.get_or_create_pkg_layout(pref)
|
|
181
|
-
|
|
182
|
-
out.info(f"Restore: {pref} in {
|
|
183
|
-
#
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
#
|
|
189
|
-
|
|
190
|
-
|
|
184
|
+
pkg_layout = cache.get_or_create_pkg_layout(pref) # DB Folder entry
|
|
185
|
+
unzipped_pkg_folder = pref_bundle["package_folder"]
|
|
186
|
+
out.info(f"Restore: {pref} in {unzipped_pkg_folder}")
|
|
187
|
+
# If the DB folder entry is different to the disk unzipped one, we need to move it
|
|
188
|
+
# This happens for built (not downloaded) packages in the source "conan cache save"
|
|
189
|
+
db_pkg_folder = os.path.relpath(pkg_layout.package(), cache.cache_folder)
|
|
190
|
+
db_pkg_folder = db_pkg_folder.replace("\\", "/")
|
|
191
|
+
if db_pkg_folder != unzipped_pkg_folder:
|
|
192
|
+
# If a previous package exists, like a previous restore, then remove it
|
|
193
|
+
if os.path.exists(pkg_layout.package()):
|
|
194
|
+
shutil.rmtree(pkg_layout.package())
|
|
195
|
+
shutil.move(os.path.join(cache.cache_folder, unzipped_pkg_folder),
|
|
196
|
+
pkg_layout.package())
|
|
197
|
+
pref_bundle["package_folder"] = db_pkg_folder
|
|
198
|
+
unzipped_metadata_folder = pref_bundle.get("metadata_folder")
|
|
199
|
+
if unzipped_metadata_folder:
|
|
200
|
+
out.info(f"Restore: {pref} metadata in {unzipped_metadata_folder}")
|
|
201
|
+
db_metadata_folder = os.path.relpath(pkg_layout.metadata(), cache.cache_folder)
|
|
202
|
+
db_metadata_folder = db_metadata_folder.replace("\\", "/")
|
|
203
|
+
if db_metadata_folder != unzipped_metadata_folder:
|
|
204
|
+
# We need to put the package in the final location in the cache
|
|
205
|
+
if os.path.exists(pkg_layout.metadata()):
|
|
206
|
+
shutil.rmtree(pkg_layout.metadata())
|
|
207
|
+
shutil.move(os.path.join(cache.cache_folder, unzipped_metadata_folder),
|
|
208
|
+
pkg_layout.metadata())
|
|
209
|
+
pref_bundle["metadata_folder"] = db_metadata_folder
|
|
191
210
|
|
|
192
211
|
return package_list
|
|
193
212
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import os
|
|
2
2
|
|
|
3
|
+
from conan.api.output import ConanOutput
|
|
3
4
|
from conan.cli import make_abs_path
|
|
4
5
|
from conan.internal.conan_app import ConanApp
|
|
5
6
|
from conans.client.cache.editable import EditablePackages
|
|
@@ -60,7 +61,8 @@ class LocalAPI:
|
|
|
60
61
|
|
|
61
62
|
def editable_remove(self, path=None, requires=None, cwd=None):
|
|
62
63
|
if path:
|
|
63
|
-
path =
|
|
64
|
+
path = make_abs_path(path, cwd)
|
|
65
|
+
path = os.path.join(path, "conanfile.py")
|
|
64
66
|
return self.editable_packages.remove(path, requires)
|
|
65
67
|
|
|
66
68
|
def editable_list(self):
|
|
@@ -109,9 +111,10 @@ class LocalAPI:
|
|
|
109
111
|
with chdir(conanfile.build_folder):
|
|
110
112
|
conanfile.test()
|
|
111
113
|
|
|
112
|
-
def inspect(self, conanfile_path, remotes, lockfile
|
|
114
|
+
def inspect(self, conanfile_path, remotes, lockfile, name=None, version=None, user=None,
|
|
115
|
+
channel=None):
|
|
113
116
|
app = ConanApp(self._conan_api)
|
|
114
|
-
conanfile = app.loader.load_named(conanfile_path, name=
|
|
115
|
-
|
|
117
|
+
conanfile = app.loader.load_named(conanfile_path, name=name, version=version, user=user,
|
|
118
|
+
channel=channel, remotes=remotes, graph_lock=lockfile)
|
|
116
119
|
return conanfile
|
|
117
120
|
|
|
@@ -257,7 +257,10 @@ def _load(remotes_file):
|
|
|
257
257
|
_save(remotes_file, [remote])
|
|
258
258
|
return [remote]
|
|
259
259
|
|
|
260
|
-
|
|
260
|
+
try:
|
|
261
|
+
data = json.loads(load(remotes_file))
|
|
262
|
+
except Exception as e:
|
|
263
|
+
raise ConanException(f"Error loading JSON remotes file '{remotes_file}': {e}")
|
|
261
264
|
result = []
|
|
262
265
|
for r in data.get("remotes", []):
|
|
263
266
|
remote = Remote(r["name"], r["url"], r["verify_ssl"], r.get("disabled", False),
|
|
@@ -236,6 +236,14 @@ class Cli:
|
|
|
236
236
|
return ERROR_UNEXPECTED
|
|
237
237
|
|
|
238
238
|
|
|
239
|
+
def _warn_python_version():
|
|
240
|
+
version = sys.version_info
|
|
241
|
+
if version.minor == 6:
|
|
242
|
+
ConanOutput().warning("Python 3.6 is end-of-life since 2021. "
|
|
243
|
+
"Conan future versions will drop support for it, "
|
|
244
|
+
"please upgrade Python", warn_tag="deprecated")
|
|
245
|
+
|
|
246
|
+
|
|
239
247
|
def main(args):
|
|
240
248
|
""" main entry point of the conan application, using a Command to
|
|
241
249
|
parse parameters
|
|
@@ -281,6 +289,7 @@ def main(args):
|
|
|
281
289
|
error = SUCCESS
|
|
282
290
|
try:
|
|
283
291
|
cli.run(args)
|
|
292
|
+
_warn_python_version()
|
|
284
293
|
except BaseException as e:
|
|
285
294
|
error = cli.exception_exit_error(e)
|
|
286
295
|
sys.exit(error)
|
|
@@ -9,6 +9,7 @@ from conan.cli.formatters.graph import format_graph_json
|
|
|
9
9
|
from conan.cli.printers import print_profiles
|
|
10
10
|
from conan.cli.printers.graph import print_graph_packages, print_graph_basic
|
|
11
11
|
from conan.errors import ConanException
|
|
12
|
+
from conans.client.graph.graph import BINARY_BUILD
|
|
12
13
|
from conans.util.files import mkdir
|
|
13
14
|
|
|
14
15
|
|
|
@@ -26,14 +27,20 @@ def create(conan_api, parser, *args):
|
|
|
26
27
|
parser.add_argument("-tf", "--test-folder", action=OnceArgument,
|
|
27
28
|
help='Alternative test folder name. By default it is "test_package". '
|
|
28
29
|
'Use "" to skip the test stage')
|
|
30
|
+
parser.add_argument("-tm", "--test-missing", action='store_true', default=False,
|
|
31
|
+
help='Run the test_package checks only if the package is built from source'
|
|
32
|
+
' but not if it already existed (using --build=missing)')
|
|
29
33
|
parser.add_argument("-bt", "--build-test", action="append",
|
|
30
34
|
help="Same as '--build' but only for the test_package requires. By default"
|
|
31
35
|
" if not specified it will take the '--build' value if specified")
|
|
36
|
+
raw_args = args[0]
|
|
32
37
|
args = parser.parse_args(*args)
|
|
33
38
|
|
|
39
|
+
if args.test_missing and args.test_folder == "":
|
|
40
|
+
raise ConanException('--test-folder="" is incompatible with --test-missing')
|
|
41
|
+
|
|
34
42
|
cwd = os.getcwd()
|
|
35
43
|
path = conan_api.local.get_conanfile_path(args.path, cwd, py=True)
|
|
36
|
-
test_conanfile_path = _get_test_conanfile_path(args.test_folder, path)
|
|
37
44
|
overrides = eval(args.lockfile_overrides) if args.lockfile_overrides else None
|
|
38
45
|
lockfile = conan_api.lockfile.get_lockfile(lockfile=args.lockfile,
|
|
39
46
|
conanfile_path=path,
|
|
@@ -56,6 +63,25 @@ def create(conan_api, parser, *args):
|
|
|
56
63
|
lockfile = conan_api.lockfile.update_lockfile_export(lockfile, conanfile, ref, is_build)
|
|
57
64
|
|
|
58
65
|
print_profiles(profile_host, profile_build)
|
|
66
|
+
if profile_host.runner and not os.environ.get("CONAN_RUNNER_ENVIRONMENT"):
|
|
67
|
+
from conan.internal.runner.docker import DockerRunner
|
|
68
|
+
from conan.internal.runner.ssh import SSHRunner
|
|
69
|
+
from conan.internal.runner.wsl import WSLRunner
|
|
70
|
+
try:
|
|
71
|
+
runner_type = profile_host.runner['type'].lower()
|
|
72
|
+
except KeyError:
|
|
73
|
+
raise ConanException(f"Invalid runner configuration. 'type' must be defined")
|
|
74
|
+
runner_instances_map = {
|
|
75
|
+
'docker': DockerRunner,
|
|
76
|
+
# 'ssh': SSHRunner,
|
|
77
|
+
# 'wsl': WSLRunner,
|
|
78
|
+
}
|
|
79
|
+
try:
|
|
80
|
+
runner_instance = runner_instances_map[runner_type]
|
|
81
|
+
except KeyError:
|
|
82
|
+
raise ConanException(f"Invalid runner type '{runner_type}'. Allowed values: {', '.join(runner_instances_map.keys())}")
|
|
83
|
+
return runner_instance(conan_api, 'create', profile_host, profile_build, args, raw_args).run()
|
|
84
|
+
|
|
59
85
|
if args.build is not None and args.build_test is None:
|
|
60
86
|
args.build_test = args.build
|
|
61
87
|
|
|
@@ -91,6 +117,14 @@ def create(conan_api, parser, *args):
|
|
|
91
117
|
lockfile = conan_api.lockfile.update_lockfile(lockfile, deps_graph, args.lockfile_packages,
|
|
92
118
|
clean=args.lockfile_clean)
|
|
93
119
|
|
|
120
|
+
test_package_folder = getattr(conanfile, "test_package_folder", None) \
|
|
121
|
+
if args.test_folder is None else args.test_folder
|
|
122
|
+
test_conanfile_path = _get_test_conanfile_path(test_package_folder, path)
|
|
123
|
+
# If the user provide --test-missing and the binary was not built from source, skip test_package
|
|
124
|
+
if args.test_missing and deps_graph.root.dependencies\
|
|
125
|
+
and deps_graph.root.dependencies[0].dst.binary != BINARY_BUILD:
|
|
126
|
+
test_conanfile_path = None # disable it
|
|
127
|
+
|
|
94
128
|
if test_conanfile_path:
|
|
95
129
|
# TODO: We need arguments for:
|
|
96
130
|
# - decide update policy "--test_package_update"
|
|
@@ -46,7 +46,8 @@ def export_pkg(conan_api, parser, *args):
|
|
|
46
46
|
profile_host, profile_build = conan_api.profiles.get_profiles_from_args(args)
|
|
47
47
|
remotes = conan_api.remotes.list(args.remote) if not args.no_remote else []
|
|
48
48
|
|
|
49
|
-
conanfile = conan_api.local.inspect(path, remotes, lockfile
|
|
49
|
+
conanfile = conan_api.local.inspect(path, remotes, lockfile, name=args.name,
|
|
50
|
+
version=args.version, user=args.user, channel=args.channel)
|
|
50
51
|
# The package_type is not fully processed at export
|
|
51
52
|
if conanfile.package_type == "python-require":
|
|
52
53
|
raise ConanException("export-pkg can only be used for binaries, not for 'python-require'")
|
|
@@ -14,9 +14,8 @@ from conan.errors import ConanException
|
|
|
14
14
|
from conan.internal.deploy import do_deploys
|
|
15
15
|
from conans.client.graph.graph import BINARY_MISSING
|
|
16
16
|
from conans.client.graph.install_graph import InstallGraph
|
|
17
|
-
from conans.errors import
|
|
17
|
+
from conans.errors import NotFoundException
|
|
18
18
|
from conans.model.recipe_ref import ref_matches, RecipeReference
|
|
19
|
-
from conans.model.version_range import VersionRange
|
|
20
19
|
|
|
21
20
|
|
|
22
21
|
def explain_formatter_text(data):
|
|
@@ -214,10 +213,7 @@ def graph_info(conan_api, parser, subparser, *args):
|
|
|
214
213
|
remotes, args.update,
|
|
215
214
|
check_updates=args.check_updates)
|
|
216
215
|
print_graph_basic(deps_graph)
|
|
217
|
-
if deps_graph.error:
|
|
218
|
-
ConanOutput().info("Graph error", Color.BRIGHT_RED)
|
|
219
|
-
ConanOutput().info(" {}".format(deps_graph.error), Color.BRIGHT_RED)
|
|
220
|
-
else:
|
|
216
|
+
if not deps_graph.error:
|
|
221
217
|
conan_api.graph.analyze_binaries(deps_graph, args.build, remotes=remotes, update=args.update,
|
|
222
218
|
lockfile=lockfile)
|
|
223
219
|
print_graph_packages(deps_graph)
|
|
@@ -18,7 +18,7 @@ def new(conan_api, parser, *args):
|
|
|
18
18
|
"either a predefined built-in or a user-provided one. "
|
|
19
19
|
"Available built-in templates: basic, cmake_lib, cmake_exe, "
|
|
20
20
|
"meson_lib, meson_exe, msbuild_lib, msbuild_exe, bazel_lib, bazel_exe, "
|
|
21
|
-
"autotools_lib, autotools_exe, local_recipes_index"
|
|
21
|
+
"autotools_lib, autotools_exe, local_recipes_index. "
|
|
22
22
|
"E.g. 'conan new cmake_lib -d name=hello -d version=0.1'. "
|
|
23
23
|
"You can define your own templates too by inputting an absolute path "
|
|
24
24
|
"as your template, or a path relative to your conan home folder."
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import copy
|
|
2
|
+
|
|
3
|
+
from conan.api.conan_api import ConanAPI
|
|
4
|
+
from conan.api.model import MultiPackagesList, PackagesList
|
|
5
|
+
from conan.cli import make_abs_path
|
|
6
|
+
from conan.cli.command import conan_command, conan_subcommand
|
|
7
|
+
from conan.cli.commands.list import print_list_text, print_list_json
|
|
8
|
+
from conan.cli.formatters.list import list_packages_html
|
|
9
|
+
from conans.errors import NotFoundException
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@conan_command(group="Consumer")
|
|
13
|
+
def pkglist(conan_api: ConanAPI, parser, *args): # noqa
|
|
14
|
+
"""
|
|
15
|
+
Several operations over package lists
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@conan_subcommand(formatters={"text": print_list_text,
|
|
20
|
+
"json": print_list_json,
|
|
21
|
+
"html": list_packages_html})
|
|
22
|
+
def pkglist_find_remote(conan_api, parser, subparser, *args):
|
|
23
|
+
"""
|
|
24
|
+
(Experimental) Find the remotes of a list of packages in the cache
|
|
25
|
+
"""
|
|
26
|
+
subparser.add_argument('list', help="Input package list")
|
|
27
|
+
subparser.add_argument("-r", "--remote", default=None, action="append",
|
|
28
|
+
help="Remote names. Accepts wildcards "
|
|
29
|
+
"('*' means all the remotes available)")
|
|
30
|
+
args = parser.parse_args(*args)
|
|
31
|
+
|
|
32
|
+
listfile = make_abs_path(args.list)
|
|
33
|
+
multi_pkglist = MultiPackagesList.load(listfile)
|
|
34
|
+
package_list = multi_pkglist["Local Cache"]
|
|
35
|
+
selected_remotes = conan_api.remotes.list(args.remote)
|
|
36
|
+
|
|
37
|
+
result = MultiPackagesList()
|
|
38
|
+
for r in selected_remotes:
|
|
39
|
+
result_pkg_list = PackagesList()
|
|
40
|
+
for ref, recipe_bundle in package_list.refs().items():
|
|
41
|
+
ref_no_rev = copy.copy(ref) # TODO: Improve ugly API
|
|
42
|
+
ref_no_rev.revision = None
|
|
43
|
+
try:
|
|
44
|
+
revs = conan_api.list.recipe_revisions(ref_no_rev, remote=r)
|
|
45
|
+
except NotFoundException:
|
|
46
|
+
continue
|
|
47
|
+
if ref not in revs: # not found
|
|
48
|
+
continue
|
|
49
|
+
result_pkg_list.add_refs([ref])
|
|
50
|
+
for pref, pref_bundle in package_list.prefs(ref, recipe_bundle).items():
|
|
51
|
+
pref_no_rev = copy.copy(pref) # TODO: Improve ugly API
|
|
52
|
+
pref_no_rev.revision = None
|
|
53
|
+
try:
|
|
54
|
+
prevs = conan_api.list.package_revisions(pref_no_rev, remote=r)
|
|
55
|
+
except NotFoundException:
|
|
56
|
+
continue
|
|
57
|
+
if pref in prevs:
|
|
58
|
+
result_pkg_list.add_prefs(ref, [pref])
|
|
59
|
+
info = recipe_bundle["packages"][pref.package_id]["info"]
|
|
60
|
+
result_pkg_list.add_configurations({pref: info})
|
|
61
|
+
if result_pkg_list.recipes:
|
|
62
|
+
result.add(r.name, result_pkg_list)
|
|
63
|
+
|
|
64
|
+
return {
|
|
65
|
+
"results": result.serialize(),
|
|
66
|
+
"conan_api": conan_api,
|
|
67
|
+
"cli_args": " ".join([f"{arg}={getattr(args, arg)}"
|
|
68
|
+
for arg in vars(args) if getattr(args, arg)])
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
@conan_subcommand(formatters={"text": print_list_text,
|
|
73
|
+
"json": print_list_json,
|
|
74
|
+
"html": list_packages_html})
|
|
75
|
+
def pkglist_merge(conan_api, parser, subparser, *args):
|
|
76
|
+
"""
|
|
77
|
+
(Experimental) Merge several package lists into a single one
|
|
78
|
+
"""
|
|
79
|
+
subparser.add_argument("-l", "--list", help="Package list file", action="append")
|
|
80
|
+
args = parser.parse_args(*args)
|
|
81
|
+
|
|
82
|
+
result = MultiPackagesList()
|
|
83
|
+
for pkglist in args.list:
|
|
84
|
+
listfile = make_abs_path(pkglist)
|
|
85
|
+
multi_pkglist = MultiPackagesList.load(listfile)
|
|
86
|
+
result.merge(multi_pkglist)
|
|
87
|
+
|
|
88
|
+
return {
|
|
89
|
+
"results": result.serialize(),
|
|
90
|
+
"conan_api": conan_api,
|
|
91
|
+
"cli_args": " ".join([f"{arg}={getattr(args, arg)}"
|
|
92
|
+
for arg in vars(args) if getattr(args, arg)])
|
|
93
|
+
}
|
|
@@ -58,12 +58,18 @@ def profile_detect(conan_api, parser, subparser, *args):
|
|
|
58
58
|
"""
|
|
59
59
|
subparser.add_argument("--name", help="Profile name, 'default' if not specified")
|
|
60
60
|
subparser.add_argument("-f", "--force", action='store_true', help="Overwrite if exists")
|
|
61
|
+
subparser.add_argument("-e", "--exist-ok", action='store_true',
|
|
62
|
+
help="If the profile already exist, do not detect a new one")
|
|
61
63
|
args = parser.parse_args(*args)
|
|
62
64
|
|
|
63
65
|
profile_name = args.name or "default"
|
|
64
66
|
profile_pathname = conan_api.profiles.get_path(profile_name, os.getcwd(), exists=False)
|
|
65
|
-
if
|
|
66
|
-
|
|
67
|
+
if os.path.exists(profile_pathname):
|
|
68
|
+
if args.exist_ok:
|
|
69
|
+
ConanOutput().info(f"Profile '{profile_name}' already exists, skipping detection")
|
|
70
|
+
return
|
|
71
|
+
if not args.force:
|
|
72
|
+
raise ConanException(f"Profile '{profile_pathname}' already exists")
|
|
67
73
|
|
|
68
74
|
detected_profile = conan_api.profiles.detect()
|
|
69
75
|
ConanOutput().success("\nDetected profile:")
|
|
@@ -12,10 +12,22 @@ def version(conan_api, parser, *args):
|
|
|
12
12
|
Give information about the Conan client version.
|
|
13
13
|
"""
|
|
14
14
|
|
|
15
|
-
return {
|
|
15
|
+
return {
|
|
16
|
+
'version': str(conan_version),
|
|
17
|
+
'conan_path': sys.argv[0],
|
|
16
18
|
'python': {
|
|
17
19
|
'version': platform.python_version().replace('\n', ''),
|
|
18
20
|
'sys_version': sys.version.replace('\n', ''),
|
|
21
|
+
'sys_executable': sys.executable,
|
|
22
|
+
'is_frozen': getattr(sys, 'frozen', False),
|
|
23
|
+
'architecture': platform.machine(),
|
|
24
|
+
},
|
|
25
|
+
'system': {
|
|
26
|
+
'version': platform.version(),
|
|
27
|
+
'platform': platform.platform(),
|
|
28
|
+
'system': platform.system(),
|
|
29
|
+
'release': platform.release(),
|
|
30
|
+
'cpu': platform.processor(),
|
|
19
31
|
}
|
|
20
32
|
}
|
|
21
33
|
|
|
@@ -54,16 +54,23 @@ class _PrinterGraphItem(object):
|
|
|
54
54
|
class _Grapher(object):
|
|
55
55
|
def __init__(self, deps_graph):
|
|
56
56
|
self._deps_graph = deps_graph
|
|
57
|
-
self.node_map, self.
|
|
57
|
+
self.node_map, self._edges = self._build_graph()
|
|
58
58
|
self._nodes = self.node_map.values()
|
|
59
59
|
|
|
60
60
|
@property
|
|
61
61
|
def nodes(self):
|
|
62
|
-
ConanOutput().warning("--format=html rendering using 'graph' object is deprecated and "
|
|
62
|
+
ConanOutput().warning("--format=html/dot rendering using 'graph' object is deprecated and "
|
|
63
63
|
"will be removed in future 2.X version. Please upgrade your template "
|
|
64
64
|
"to use 'deps_graph' instead", warn_tag="deprecated")
|
|
65
65
|
return self._nodes
|
|
66
66
|
|
|
67
|
+
@property
|
|
68
|
+
def edges(self):
|
|
69
|
+
ConanOutput().warning("--format=html/dot rendering using 'graph' object is deprecated and "
|
|
70
|
+
"will be removed in future 2.X version. Please upgrade your template "
|
|
71
|
+
"to use 'deps_graph' instead", warn_tag="deprecated")
|
|
72
|
+
return self._edges
|
|
73
|
+
|
|
67
74
|
def _build_graph(self):
|
|
68
75
|
graph_nodes = self._deps_graph.by_levels()
|
|
69
76
|
build_time_nodes = self._deps_graph.build_time_nodes()
|
|
@@ -95,10 +102,10 @@ class _Grapher(object):
|
|
|
95
102
|
|
|
96
103
|
|
|
97
104
|
def _render_graph(graph, error, template, template_folder):
|
|
98
|
-
deps_graph =
|
|
105
|
+
deps_graph = graph.serialize()
|
|
99
106
|
graph = _Grapher(graph)
|
|
100
107
|
from conans import __version__ as client_version
|
|
101
|
-
template = Template(template)
|
|
108
|
+
template = Template(template, autoescape=select_autoescape(['html', 'xml']))
|
|
102
109
|
return template.render(deps_graph=deps_graph, graph=graph, error=error,
|
|
103
110
|
base_template_path=template_folder, version=client_version)
|
|
104
111
|
|
|
@@ -126,11 +133,7 @@ def format_graph_html(result):
|
|
|
126
133
|
def format_graph_dot(result):
|
|
127
134
|
graph = result["graph"]
|
|
128
135
|
conan_api = result["conan_api"]
|
|
129
|
-
|
|
130
|
-
serial = graph.serialize()
|
|
131
|
-
# TODO: This is not used, it is necessary to update the renderings to use the serialized graph
|
|
132
|
-
# instead of the native graph
|
|
133
|
-
serial = filter_graph(serial, package_filter)
|
|
136
|
+
|
|
134
137
|
template_folder = os.path.join(conan_api.cache_folder, "templates")
|
|
135
138
|
user_template = os.path.join(template_folder, "graph.dot")
|
|
136
139
|
template = load(user_template) if os.path.isfile(user_template) else graph_info_dot
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
|
|
2
|
+
graph_info_dot = """\
|
|
3
|
+
digraph {
|
|
4
|
+
{%- for node_id, node in deps_graph["nodes"].items() %}
|
|
5
|
+
{%- for dep_id, dep in node["dependencies"].items() %}
|
|
6
|
+
{%- if dep["direct"] %}
|
|
7
|
+
"{{ node["label"] }}" -> "{{ deps_graph["nodes"][dep_id]["label"] }}"
|
|
8
|
+
{%- endif %}
|
|
9
|
+
{%- endfor %}
|
|
10
|
+
{%- endfor %}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
"""
|