Full Code of conan-io/conan for AI

develop2 202f42c2b26a cached
1135 files
7.3 MB
2.0M tokens
8187 symbols
1 requests
Download .txt
Showing preview only (7,907K chars total). Download the full file or copy to clipboard to get everything.
Repository: conan-io/conan
Branch: develop2
Commit: 202f42c2b26a
Files: 1135
Total size: 7.3 MB

Directory structure:
gitextract_tvb7y0th/

├── .ci/
│   ├── __init__.py
│   ├── bump_dev_version.py
│   └── docker/
│       └── conan-tests
├── .editorconfig
├── .github/
│   ├── CONTRIBUTING.md
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug.yml
│   │   ├── feature_request.yml
│   │   └── question.yml
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── actions/
│   │   └── test-coverage/
│   │       └── action.yml
│   └── workflows/
│       ├── build-binaries.yml
│       ├── linux-tests.yml
│       ├── main.yml
│       ├── osx-tests.yml
│       └── win-tests.yml
├── .gitignore
├── LICENSE.md
├── MANIFEST.in
├── README.md
├── codecov.yml
├── conan/
│   ├── __init__.py
│   ├── api/
│   │   ├── __init__.py
│   │   ├── conan_api.py
│   │   ├── input.py
│   │   ├── model/
│   │   │   ├── __init__.py
│   │   │   ├── list.py
│   │   │   ├── refs.py
│   │   │   └── remote.py
│   │   ├── output.py
│   │   └── subapi/
│   │       ├── __init__.py
│   │       ├── audit.py
│   │       ├── cache.py
│   │       ├── command.py
│   │       ├── config.py
│   │       ├── download.py
│   │       ├── export.py
│   │       ├── graph.py
│   │       ├── install.py
│   │       ├── list.py
│   │       ├── local.py
│   │       ├── lockfile.py
│   │       ├── new.py
│   │       ├── profiles.py
│   │       ├── remotes.py
│   │       ├── remove.py
│   │       ├── report.py
│   │       ├── upload.py
│   │       └── workspace.py
│   ├── cli/
│   │   ├── __init__.py
│   │   ├── args.py
│   │   ├── cli.py
│   │   ├── command.py
│   │   ├── commands/
│   │   │   ├── __init__.py
│   │   │   ├── audit.py
│   │   │   ├── build.py
│   │   │   ├── cache.py
│   │   │   ├── config.py
│   │   │   ├── create.py
│   │   │   ├── download.py
│   │   │   ├── editable.py
│   │   │   ├── export.py
│   │   │   ├── export_pkg.py
│   │   │   ├── graph.py
│   │   │   ├── inspect.py
│   │   │   ├── install.py
│   │   │   ├── list.py
│   │   │   ├── lock.py
│   │   │   ├── new.py
│   │   │   ├── pkglist.py
│   │   │   ├── profile.py
│   │   │   ├── remote.py
│   │   │   ├── remove.py
│   │   │   ├── report.py
│   │   │   ├── require.py
│   │   │   ├── run.py
│   │   │   ├── search.py
│   │   │   ├── source.py
│   │   │   ├── test.py
│   │   │   ├── upload.py
│   │   │   ├── version.py
│   │   │   └── workspace.py
│   │   ├── exit_codes.py
│   │   ├── formatters/
│   │   │   ├── __init__.py
│   │   │   ├── audit/
│   │   │   │   ├── __init__.py
│   │   │   │   └── vulnerabilities.py
│   │   │   ├── graph/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── build_order_html.py
│   │   │   │   ├── graph.py
│   │   │   │   ├── graph_info_text.py
│   │   │   │   ├── info_graph_dot.py
│   │   │   │   └── info_graph_html.py
│   │   │   ├── list/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── list.py
│   │   │   │   └── search_table_html.py
│   │   │   └── report/
│   │   │       ├── __init__.py
│   │   │       ├── diff.py
│   │   │       └── diff_html.py
│   │   └── printers/
│   │       ├── __init__.py
│   │       └── graph.py
│   ├── cps/
│   │   ├── __init__.py
│   │   └── cps.py
│   ├── errors.py
│   ├── internal/
│   │   ├── __init__.py
│   │   ├── api/
│   │   │   ├── __init__.py
│   │   │   ├── audit/
│   │   │   │   ├── __init__.py
│   │   │   │   └── providers.py
│   │   │   ├── config/
│   │   │   │   ├── __init__.py
│   │   │   │   └── config_installer.py
│   │   │   ├── detect/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── detect_api.py
│   │   │   │   └── detect_vs.py
│   │   │   ├── export.py
│   │   │   ├── install/
│   │   │   │   ├── __init__.py
│   │   │   │   └── generators.py
│   │   │   ├── list/
│   │   │   │   ├── __init__.py
│   │   │   │   └── query_parse.py
│   │   │   ├── local/
│   │   │   │   ├── __init__.py
│   │   │   │   └── editable.py
│   │   │   ├── migrations.py
│   │   │   ├── new/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── alias_new.py
│   │   │   │   ├── autoools_exe.py
│   │   │   │   ├── autotools_lib.py
│   │   │   │   ├── basic.py
│   │   │   │   ├── bazel_7_exe.py
│   │   │   │   ├── bazel_7_lib.py
│   │   │   │   ├── bazel_exe.py
│   │   │   │   ├── bazel_lib.py
│   │   │   │   ├── cmake_exe.py
│   │   │   │   ├── cmake_lib.py
│   │   │   │   ├── header_lib.py
│   │   │   │   ├── local_recipes_index.py
│   │   │   │   ├── meson_exe.py
│   │   │   │   ├── meson_lib.py
│   │   │   │   ├── msbuild_exe.py
│   │   │   │   ├── msbuild_lib.py
│   │   │   │   ├── premake_exe.py
│   │   │   │   ├── premake_lib.py
│   │   │   │   ├── qbs_lib.py
│   │   │   │   └── workspace.py
│   │   │   ├── profile/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── detect.py
│   │   │   │   └── profile_loader.py
│   │   │   ├── remotes/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── encrypt.py
│   │   │   │   └── localdb.py
│   │   │   ├── upload.py
│   │   │   └── uploader.py
│   │   ├── cache/
│   │   │   ├── __init__.py
│   │   │   ├── cache.py
│   │   │   ├── conan_reference_layout.py
│   │   │   ├── db/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── cache_database.py
│   │   │   │   ├── packages_table.py
│   │   │   │   ├── recipes_table.py
│   │   │   │   └── table.py
│   │   │   ├── home_paths.py
│   │   │   └── integrity_check.py
│   │   ├── conan_app.py
│   │   ├── default_settings.py
│   │   ├── deploy.py
│   │   ├── errors.py
│   │   ├── graph/
│   │   │   ├── __init__.py
│   │   │   ├── build_mode.py
│   │   │   ├── compatibility.py
│   │   │   ├── compute_pid.py
│   │   │   ├── graph.py
│   │   │   ├── graph_binaries.py
│   │   │   ├── graph_builder.py
│   │   │   ├── graph_error.py
│   │   │   ├── install_graph.py
│   │   │   ├── installer.py
│   │   │   ├── profile_node_definer.py
│   │   │   ├── provides.py
│   │   │   ├── proxy.py
│   │   │   ├── python_requires.py
│   │   │   └── range_resolver.py
│   │   ├── hook_manager.py
│   │   ├── internal_tools.py
│   │   ├── loader.py
│   │   ├── methods.py
│   │   ├── model/
│   │   │   ├── __init__.py
│   │   │   ├── conan_file.py
│   │   │   ├── conanconfig.py
│   │   │   ├── conanfile_interface.py
│   │   │   ├── conf.py
│   │   │   ├── cpp_info.py
│   │   │   ├── dependencies.py
│   │   │   ├── info.py
│   │   │   ├── layout.py
│   │   │   ├── lockfile.py
│   │   │   ├── manifest.py
│   │   │   ├── options.py
│   │   │   ├── pkg_type.py
│   │   │   ├── profile.py
│   │   │   ├── recipe_ref.py
│   │   │   ├── requires.py
│   │   │   ├── settings.py
│   │   │   ├── version.py
│   │   │   ├── version_range.py
│   │   │   └── workspace.py
│   │   ├── paths.py
│   │   ├── rest/
│   │   │   ├── __init__.py
│   │   │   ├── auth_manager.py
│   │   │   ├── caching_file_downloader.py
│   │   │   ├── client_routes.py
│   │   │   ├── conan_requester.py
│   │   │   ├── download_cache.py
│   │   │   ├── file_downloader.py
│   │   │   ├── file_uploader.py
│   │   │   ├── pkg_sign.py
│   │   │   ├── remote_credentials.py
│   │   │   ├── remote_manager.py
│   │   │   ├── rest_client.py
│   │   │   ├── rest_client_local_recipe_index.py
│   │   │   ├── rest_client_v2.py
│   │   │   └── rest_routes.py
│   │   ├── runner/
│   │   │   ├── __init__.py
│   │   │   ├── docker.py
│   │   │   ├── output.py
│   │   │   ├── ssh.py
│   │   │   └── wsl.py
│   │   ├── source.py
│   │   ├── subsystems.py
│   │   └── util/
│   │       ├── __init__.py
│   │       ├── config_parser.py
│   │       ├── dates.py
│   │       ├── files.py
│   │       └── runners.py
│   ├── test/
│   │   ├── __init__.py
│   │   ├── assets/
│   │   │   ├── __init__.py
│   │   │   ├── autotools.py
│   │   │   ├── cmake.py
│   │   │   ├── genconanfile.py
│   │   │   ├── premake.py
│   │   │   ├── sources.py
│   │   │   └── visual_project_files.py
│   │   └── utils/
│   │       ├── __init__.py
│   │       ├── artifactory.py
│   │       ├── env.py
│   │       ├── file_server.py
│   │       ├── mocks.py
│   │       ├── profiles.py
│   │       ├── scm.py
│   │       ├── server_launcher.py
│   │       ├── test_files.py
│   │       └── tools.py
│   └── tools/
│       ├── __init__.py
│       ├── android/
│       │   ├── __init__.py
│       │   └── utils.py
│       ├── apple/
│       │   ├── __init__.py
│       │   ├── apple.py
│       │   ├── xcodebuild.py
│       │   ├── xcodedeps.py
│       │   └── xcodetoolchain.py
│       ├── build/
│       │   ├── __init__.py
│       │   ├── compiler.py
│       │   ├── cppstd.py
│       │   ├── cpu.py
│       │   ├── cross_building.py
│       │   ├── cstd.py
│       │   ├── flags.py
│       │   └── stdcpp_library.py
│       ├── cmake/
│       │   ├── __init__.py
│       │   ├── cmake.py
│       │   ├── cmakeconfigdeps/
│       │   │   ├── __init__.py
│       │   │   ├── cmakeconfigdeps.py
│       │   │   ├── config.py
│       │   │   ├── config_version.py
│       │   │   ├── target_configuration.py
│       │   │   └── targets.py
│       │   ├── cmakedeps/
│       │   │   ├── __init__.py
│       │   │   ├── cmakedeps.py
│       │   │   └── templates/
│       │   │       ├── __init__.py
│       │   │       ├── config.py
│       │   │       ├── config_version.py
│       │   │       ├── macros.py
│       │   │       ├── target_configuration.py
│       │   │       ├── target_data.py
│       │   │       └── targets.py
│       │   ├── layout.py
│       │   ├── presets.py
│       │   ├── toolchain/
│       │   │   ├── __init__.py
│       │   │   ├── blocks.py
│       │   │   └── toolchain.py
│       │   └── utils.py
│       ├── cps/
│       │   ├── __init__.py
│       │   └── cps_deps.py
│       ├── env/
│       │   ├── __init__.py
│       │   ├── environment.py
│       │   ├── virtualbuildenv.py
│       │   └── virtualrunenv.py
│       ├── files/
│       │   ├── __init__.py
│       │   ├── conandata.py
│       │   ├── copy_pattern.py
│       │   ├── files.py
│       │   ├── patches.py
│       │   └── symlinks/
│       │       ├── __init__.py
│       │       └── symlinks.py
│       ├── gnu/
│       │   ├── __init__.py
│       │   ├── autotools.py
│       │   ├── autotoolsdeps.py
│       │   ├── autotoolstoolchain.py
│       │   ├── get_gnu_triplet.py
│       │   ├── gnudeps_flags.py
│       │   ├── gnutoolchain.py
│       │   ├── makedeps.py
│       │   ├── pkgconfig.py
│       │   └── pkgconfigdeps.py
│       ├── google/
│       │   ├── __init__.py
│       │   ├── bazel.py
│       │   ├── bazeldeps.py
│       │   ├── layout.py
│       │   └── toolchain.py
│       ├── intel/
│       │   ├── __init__.py
│       │   └── intel_cc.py
│       ├── layout/
│       │   └── __init__.py
│       ├── meson/
│       │   ├── __init__.py
│       │   ├── helpers.py
│       │   ├── meson.py
│       │   └── toolchain.py
│       ├── microsoft/
│       │   ├── __init__.py
│       │   ├── layout.py
│       │   ├── msbuild.py
│       │   ├── msbuilddeps.py
│       │   ├── nmakedeps.py
│       │   ├── nmaketoolchain.py
│       │   ├── subsystems.py
│       │   ├── toolchain.py
│       │   └── visual.py
│       ├── premake/
│       │   ├── __init__.py
│       │   ├── constants.py
│       │   ├── premake.py
│       │   ├── premakedeps.py
│       │   └── toolchain.py
│       ├── qbs/
│       │   ├── __init__.py
│       │   ├── common.py
│       │   ├── qbs.py
│       │   ├── qbsdeps.py
│       │   └── qbsprofile.py
│       ├── ros/
│       │   ├── __init__.py
│       │   └── rosenv.py
│       ├── sbom/
│       │   ├── __init__.py
│       │   ├── cyclonedx.py
│       │   └── spdx_licenses.py
│       ├── scm/
│       │   ├── __init__.py
│       │   └── git.py
│       ├── scons/
│       │   ├── __init__.py
│       │   └── sconsdeps.py
│       └── system/
│           ├── __init__.py
│           ├── package_manager.py
│           └── python_manager.py
├── conans/
│   ├── __init__.py
│   ├── conan.py
│   ├── conan_server.py
│   ├── migrations.py
│   ├── requirements.txt
│   ├── requirements_dev.txt
│   ├── requirements_runner.txt
│   ├── requirements_server.txt
│   └── server/
│       ├── __init__.py
│       ├── conf/
│       │   ├── __init__.py
│       │   └── default_server_conf.py
│       ├── crypto/
│       │   ├── __init__.py
│       │   └── jwt/
│       │       ├── __init__.py
│       │       └── jwt_credentials_manager.py
│       ├── launcher.py
│       ├── migrate.py
│       ├── migrations.py
│       ├── plugin_loader.py
│       ├── rest/
│       │   ├── __init__.py
│       │   ├── api_v2.py
│       │   ├── bottle_plugins/
│       │   │   ├── __init__.py
│       │   │   ├── authorization_header.py
│       │   │   ├── http_basic_authentication.py
│       │   │   ├── jwt_authentication.py
│       │   │   └── return_handler.py
│       │   ├── bottle_routes.py
│       │   ├── controller/
│       │   │   ├── __init__.py
│       │   │   └── v2/
│       │   │       ├── __init__.py
│       │   │       ├── conan.py
│       │   │       ├── delete.py
│       │   │       ├── ping.py
│       │   │       ├── revisions.py
│       │   │       ├── search.py
│       │   │       └── users.py
│       │   └── server.py
│       ├── revision_list.py
│       ├── server_launcher.py
│       ├── service/
│       │   ├── __init__.py
│       │   ├── authorize.py
│       │   ├── mime.py
│       │   ├── user_service.py
│       │   └── v2/
│       │       ├── __init__.py
│       │       ├── search.py
│       │       └── service_v2.py
│       ├── store/
│       │   ├── __init__.py
│       │   ├── disk_adapter.py
│       │   └── server_store.py
│       └── utils/
│           ├── __init__.py
│           └── files.py
├── contributors.txt
├── pyinstaller.py
├── pyproject.toml
├── pytest.ini
├── setup.cfg
├── setup.py
├── setup_server.py
└── test/
    ├── .gitignore
    ├── README.md
    ├── __init__.py
    ├── conftest.py
    ├── functional/
    │   ├── __init__.py
    │   ├── command/
    │   │   ├── __init__.py
    │   │   ├── dockerfiles/
    │   │   │   ├── Dockerfile
    │   │   │   ├── Dockerfile_args
    │   │   │   ├── Dockerfile_ninja
    │   │   │   ├── Dockerfile_profile_detect
    │   │   │   └── Dockerfile_test
    │   │   ├── export_test.py
    │   │   ├── profile_test.py
    │   │   ├── report_test.py
    │   │   ├── runner_test.py
    │   │   ├── test_build.py
    │   │   ├── test_config_install.py
    │   │   ├── test_config_install_pkg.py
    │   │   ├── test_custom_symlink_home.py
    │   │   ├── test_install_deploy.py
    │   │   └── test_new.py
    │   ├── conftest.py
    │   ├── layout/
    │   │   ├── __init__.py
    │   │   ├── test_build_system_layout_helpers.py
    │   │   ├── test_editable_cmake.py
    │   │   ├── test_editable_cmake_components.py
    │   │   ├── test_editable_msbuild.py
    │   │   ├── test_exports_sources.py
    │   │   ├── test_in_cache.py
    │   │   ├── test_in_subfolder.py
    │   │   ├── test_local_commands.py
    │   │   └── test_source_folder.py
    │   ├── revisions_test.py
    │   ├── sbom/
    │   │   ├── __init__.py
    │   │   └── test_cyclonedx.py
    │   ├── subsystems_build_test.py
    │   ├── test_local_recipes_index.py
    │   ├── test_profile_detect_api.py
    │   ├── test_third_party_patch_flow.py
    │   ├── toolchains/
    │   │   ├── __init__.py
    │   │   ├── android/
    │   │   │   ├── __init__.py
    │   │   │   └── test_using_cmake.py
    │   │   ├── apple/
    │   │   │   ├── __init__.py
    │   │   │   ├── test_xcodebuild.py
    │   │   │   ├── test_xcodebuild_targets.py
    │   │   │   ├── test_xcodedeps_build_configs.py
    │   │   │   ├── test_xcodedeps_components.py
    │   │   │   └── test_xcodetoolchain.py
    │   │   ├── autotools/
    │   │   │   ├── __init__.py
    │   │   │   └── test_universal_binaries.py
    │   │   ├── cmake/
    │   │   │   ├── __init__.py
    │   │   │   ├── cmakeconfigdeps/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── test_cmakeconfigdeps_aliases.py
    │   │   │   │   ├── test_cmakeconfigdeps_frameworks.py
    │   │   │   │   ├── test_cmakeconfigdeps_new.py
    │   │   │   │   ├── test_cmakeconfigdeps_new_cpp_linkage.py
    │   │   │   │   ├── test_cmakeconfigdeps_new_paths.py
    │   │   │   │   └── test_cmakeconfigdeps_sources.py
    │   │   │   ├── cmakedeps/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── test_apple_frameworks.py
    │   │   │   │   ├── test_build_context_protobuf.py
    │   │   │   │   ├── test_build_context_transitive_build.py
    │   │   │   │   ├── test_cmakedeps.py
    │   │   │   │   ├── test_cmakedeps_aggregator.py
    │   │   │   │   ├── test_cmakedeps_aliases.py
    │   │   │   │   ├── test_cmakedeps_and_linker_flags.py
    │   │   │   │   ├── test_cmakedeps_build_modules.py
    │   │   │   │   ├── test_cmakedeps_components.py
    │   │   │   │   ├── test_cmakedeps_components_names.py
    │   │   │   │   ├── test_cmakedeps_custom_configs.py
    │   │   │   │   ├── test_cmakedeps_find_module_and_config.py
    │   │   │   │   ├── test_cmakedeps_transitivity.py
    │   │   │   │   ├── test_cmakedeps_versions.py
    │   │   │   │   ├── test_conditional_build_type.py
    │   │   │   │   ├── test_link_order.py
    │   │   │   │   └── test_weird_library_names.py
    │   │   │   ├── test_cmake.py
    │   │   │   ├── test_cmake_and_no_soname_flag.py
    │   │   │   ├── test_cmake_extra_variables.py
    │   │   │   ├── test_cmake_find_none.py
    │   │   │   ├── test_cmake_multi.py
    │   │   │   ├── test_cmake_toolchain.py
    │   │   │   ├── test_cmake_toolchain_m1.py
    │   │   │   ├── test_cmake_toolchain_presets.py
    │   │   │   ├── test_cmake_toolchain_win_clang.py
    │   │   │   ├── test_cmake_toolchain_xcode_flags.py
    │   │   │   ├── test_cmake_transitive_rpath.py
    │   │   │   ├── test_cmaketoolchain_paths.py
    │   │   │   ├── test_cps.py
    │   │   │   ├── test_ninja.py
    │   │   │   ├── test_presets_inherit.py
    │   │   │   ├── test_shared_cmake.py
    │   │   │   ├── test_transitive_build_scripts.py
    │   │   │   ├── test_universal_binaries.py
    │   │   │   └── test_v2_cmake_template.py
    │   │   ├── emscripten/
    │   │   │   ├── __init__.py
    │   │   │   └── test_emcc.py
    │   │   ├── env/
    │   │   │   ├── __init__.py
    │   │   │   ├── test_complete.py
    │   │   │   └── test_virtualenv_powershell.py
    │   │   ├── gnu/
    │   │   │   ├── __init__.py
    │   │   │   ├── autotools/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── test_android.py
    │   │   │   │   ├── test_apple_toolchain.py
    │   │   │   │   ├── test_basic.py
    │   │   │   │   ├── test_crossbuild_triplet.py
    │   │   │   │   ├── test_ios.py
    │   │   │   │   └── test_win_bash.py
    │   │   │   ├── test_gnutoolchain_android.py
    │   │   │   ├── test_gnutoolchain_apple.py
    │   │   │   ├── test_makedeps.py
    │   │   │   ├── test_pkg_config.py
    │   │   │   ├── test_pkgconfigdeps.py
    │   │   │   ├── test_pkgconfigdeps_autotools.py
    │   │   │   ├── test_universal_binaries.py
    │   │   │   └── test_v2_autotools_template.py
    │   │   ├── google/
    │   │   │   ├── __init__.py
    │   │   │   ├── test_bazel.py
    │   │   │   └── test_bazeltoolchain_cross_compilation.py
    │   │   ├── intel/
    │   │   │   ├── __init__.py
    │   │   │   ├── test_intel_cc.py
    │   │   │   └── test_using_msbuild.py
    │   │   ├── ios/
    │   │   │   ├── __init__.py
    │   │   │   ├── _utils.py
    │   │   │   └── test_using_cmake.py
    │   │   ├── meson/
    │   │   │   ├── __init__.py
    │   │   │   ├── _base.py
    │   │   │   ├── test_backend.py
    │   │   │   ├── test_cross_compilation.py
    │   │   │   ├── test_install.py
    │   │   │   ├── test_meson.py
    │   │   │   ├── test_meson_and_gnu_deps_flags.py
    │   │   │   ├── test_meson_and_objc.py
    │   │   │   ├── test_meson_native_attribute.py
    │   │   │   ├── test_meson_transitive_rpath_sysroot.py
    │   │   │   ├── test_pkg_config_reuse.py
    │   │   │   ├── test_preprocessor_definitions.py
    │   │   │   ├── test_subproject.py
    │   │   │   ├── test_test.py
    │   │   │   └── test_v2_meson_template.py
    │   │   ├── microsoft/
    │   │   │   ├── __init__.py
    │   │   │   ├── test_msbuild.py
    │   │   │   ├── test_msbuilddeps.py
    │   │   │   ├── test_msbuilddeps_components.py
    │   │   │   ├── test_msbuilddeps_traits.py
    │   │   │   ├── test_msbuildtoolchain.py
    │   │   │   ├── test_v2_msbuild_template.py
    │   │   │   └── test_vcvars.py
    │   │   ├── qbs/
    │   │   │   ├── __init__.py
    │   │   │   ├── test_qbs.py
    │   │   │   ├── test_qbsdeps.py
    │   │   │   ├── test_qbsprofile.py
    │   │   │   └── test_qbsprofile_gen.py
    │   │   ├── scons/
    │   │   │   ├── __init__.py
    │   │   │   └── test_sconsdeps.py
    │   │   ├── test_basic.py
    │   │   ├── test_nmake_toolchain.py
    │   │   └── test_premake.py
    │   ├── tools/
    │   │   ├── __init__.py
    │   │   ├── scm/
    │   │   │   ├── __init__.py
    │   │   │   ├── test_git.py
    │   │   │   ├── test_git_get_commit.py
    │   │   │   └── test_version.py
    │   │   ├── system/
    │   │   │   ├── __init__.py
    │   │   │   ├── package_manager_test.py
    │   │   │   └── python_manager_test.py
    │   │   ├── test_apple_tools.py
    │   │   └── test_files.py
    │   ├── tools_versions_test.py
    │   ├── util/
    │   │   ├── __init__.py
    │   │   ├── test_cmd_args_to_string.py
    │   │   └── tools_test.py
    │   ├── utils.py
    │   └── workspace/
    │       ├── __init__.py
    │       └── test_workspace.py
    ├── integration/
    │   ├── __init__.py
    │   ├── build_requires/
    │   │   ├── __init__.py
    │   │   ├── build_requires_test.py
    │   │   ├── profile_build_requires_test.py
    │   │   ├── test_build_requires_source_method.py
    │   │   ├── test_install_test_build_require.py
    │   │   ├── test_relocatable_toolchain.py
    │   │   └── test_toolchain_packages.py
    │   ├── cache/
    │   │   ├── __init__.py
    │   │   ├── backup_sources_test.py
    │   │   ├── cache2_update_test.py
    │   │   ├── download_cache_test.py
    │   │   ├── rmdir_fail_test.py
    │   │   ├── storage_path_test.py
    │   │   ├── test_home_special_char.py
    │   │   ├── test_package_revisions.py
    │   │   └── test_same_pref_removal.py
    │   ├── command/
    │   │   ├── __init__.py
    │   │   ├── alias_test.py
    │   │   ├── cache/
    │   │   │   ├── __init__.py
    │   │   │   ├── test_cache_clean.py
    │   │   │   ├── test_cache_integrity.py
    │   │   │   ├── test_cache_path.py
    │   │   │   ├── test_cache_save_restore.py
    │   │   │   └── test_cache_sign.py
    │   │   ├── config_test.py
    │   │   ├── create_test.py
    │   │   ├── custom_commands_test.py
    │   │   ├── download/
    │   │   │   ├── __init__.py
    │   │   │   ├── download_parallel_test.py
    │   │   │   ├── download_selected_packages_test.py
    │   │   │   ├── download_test.py
    │   │   │   └── test_download_patterns.py
    │   │   ├── export/
    │   │   │   ├── __init__.py
    │   │   │   ├── export_dirty_test.py
    │   │   │   ├── export_path_test.py
    │   │   │   ├── export_sources_test.py
    │   │   │   ├── export_test.py
    │   │   │   ├── exports_method_test.py
    │   │   │   └── test_export.py
    │   │   ├── export_pkg_test.py
    │   │   ├── help_test.py
    │   │   ├── info/
    │   │   │   ├── __init__.py
    │   │   │   ├── info_options_test.py
    │   │   │   ├── info_test.py
    │   │   │   ├── test_graph_info_graphical.py
    │   │   │   ├── test_info_build_order.py
    │   │   │   └── test_info_folders.py
    │   │   ├── install/
    │   │   │   ├── __init__.py
    │   │   │   ├── install_cascade_test.py
    │   │   │   ├── install_missing_dep_test.py
    │   │   │   ├── install_parallel_test.py
    │   │   │   ├── install_test.py
    │   │   │   ├── install_update_test.py
    │   │   │   ├── test_graph_build_mode.py
    │   │   │   └── test_install_transitive.py
    │   │   ├── list/
    │   │   │   ├── __init__.py
    │   │   │   ├── list_test.py
    │   │   │   ├── search_test.py
    │   │   │   ├── test_combined_pkglist_flows.py
    │   │   │   └── test_list_lru.py
    │   │   ├── remote/
    │   │   │   ├── __init__.py
    │   │   │   ├── remote_test.py
    │   │   │   ├── remote_verify_ssl_test.py
    │   │   │   └── test_remote_users.py
    │   │   ├── remove_empty_dirs_test.py
    │   │   ├── remove_test.py
    │   │   ├── require/
    │   │   │   ├── __init__.py
    │   │   │   └── test_command_require.py
    │   │   ├── source_test.py
    │   │   ├── test_audit.py
    │   │   ├── test_build.py
    │   │   ├── test_forced_download_source.py
    │   │   ├── test_graph_find_binaries.py
    │   │   ├── test_inspect.py
    │   │   ├── test_new.py
    │   │   ├── test_outdated.py
    │   │   ├── test_output.py
    │   │   ├── test_package_test.py
    │   │   ├── test_profile.py
    │   │   ├── test_run.py
    │   │   ├── test_version.py
    │   │   └── upload/
    │   │       ├── __init__.py
    │   │       ├── test_upload_bundle.py
    │   │       ├── test_upload_parallel.py
    │   │       ├── test_upload_patterns.py
    │   │       ├── upload_complete_test.py
    │   │       ├── upload_compression_test.py
    │   │       └── upload_test.py
    │   ├── conan_api/
    │   │   ├── __init__.py
    │   │   ├── exit_with_code_test.py
    │   │   ├── list_test.py
    │   │   ├── test_cli.py
    │   │   ├── test_local_api.py
    │   │   └── test_profile_api.py
    │   ├── conan_v2/
    │   │   ├── __init__.py
    │   │   └── test_legacy_cpp_info.py
    │   ├── conanfile/
    │   │   ├── __init__.py
    │   │   ├── conan_data_test.py
    │   │   ├── conanfile_errors_test.py
    │   │   ├── conanfile_helpers_test.py
    │   │   ├── files/
    │   │   │   ├── .gitattributes
    │   │   │   ├── conanfile_utf16be_with_bom.txt
    │   │   │   ├── conanfile_utf16le_with_bom.txt
    │   │   │   ├── conanfile_utf8.txt
    │   │   │   └── conanfile_utf8_with_bom.txt
    │   │   ├── folders_access_test.py
    │   │   ├── generators_list_test.py
    │   │   ├── init_test.py
    │   │   ├── invalid_configuration_test.py
    │   │   ├── load_requires_file_test.py
    │   │   ├── no_copy_source_test.py
    │   │   ├── required_conan_version_test.py
    │   │   ├── runner_test.py
    │   │   ├── same_userchannel_test.py
    │   │   ├── set_name_version_test.py
    │   │   ├── test_attributes_scope.py
    │   │   ├── test_conanfile_txt_encodings.py
    │   │   ├── test_conanfile_txt_test_requires.py
    │   │   ├── test_cpp_info_serialize.py
    │   │   ├── test_deploy_method.py
    │   │   ├── test_deprecated.py
    │   │   ├── test_exception_printing.py
    │   │   ├── test_finalize_method.py
    │   │   ├── test_print_in_conanfile.py
    │   │   └── test_version_str.py
    │   ├── configuration/
    │   │   ├── __init__.py
    │   │   ├── client_certs_test.py
    │   │   ├── conf/
    │   │   │   ├── __init__.py
    │   │   │   ├── test_auth_source_plugin.py
    │   │   │   ├── test_conf.py
    │   │   │   ├── test_conf_copy.py
    │   │   │   ├── test_conf_from_br.py
    │   │   │   ├── test_conf_package_id.py
    │   │   │   └── test_conf_profile.py
    │   │   ├── custom_setting_test_package_test.py
    │   │   ├── default_profile_test.py
    │   │   ├── invalid_settings_test.py
    │   │   ├── profile_test.py
    │   │   ├── proxies_conf_test.py
    │   │   ├── requester_test.py
    │   │   ├── required_version_test.py
    │   │   ├── test_auth_remote_plugin.py
    │   │   ├── test_custom_symlinked_home.py
    │   │   ├── test_profile_jinja.py
    │   │   ├── test_profile_plugin.py
    │   │   └── test_profile_priority.py
    │   ├── cps/
    │   │   ├── __init__.py
    │   │   └── test_cps.py
    │   ├── cross_building/
    │   │   ├── __init__.py
    │   │   ├── build_requires_from_profile_test.py
    │   │   ├── test_cross_build_options.py
    │   │   └── test_package_test.py
    │   ├── editable/
    │   │   ├── __init__.py
    │   │   ├── editable_add_test.py
    │   │   ├── editable_remove_test.py
    │   │   ├── forbidden_commands_test.py
    │   │   ├── test_editable_envvars.py
    │   │   ├── test_editable_import.py
    │   │   ├── test_editable_layout.py
    │   │   ├── test_editable_ranges.py
    │   │   ├── test_editables_layout.py
    │   │   └── transitive_editable_test.py
    │   ├── environment/
    │   │   ├── __init__.py
    │   │   ├── test_buildenv_profile.py
    │   │   ├── test_env.py
    │   │   └── test_runenv_profile.py
    │   ├── extensions/
    │   │   ├── __init__.py
    │   │   ├── hooks/
    │   │   │   ├── __init__.py
    │   │   │   ├── hook_test.py
    │   │   │   ├── test_post_export.py
    │   │   │   └── test_post_package.py
    │   │   ├── test_cppstd_compat.py
    │   │   ├── test_plugin_cmd_wrapper.py
    │   │   ├── test_profile_plugin.py
    │   │   └── test_profile_plugin_runtime.py
    │   ├── generators/
    │   │   ├── __init__.py
    │   │   ├── generators_test.py
    │   │   ├── order_libs_test.py
    │   │   ├── test_custom_global_generators.py
    │   │   └── test_generators_from_br.py
    │   ├── graph/
    │   │   ├── __init__.py
    │   │   ├── conflict_diamond_test.py
    │   │   ├── core/
    │   │   │   ├── __init__.py
    │   │   │   ├── graph_manager_base.py
    │   │   │   ├── graph_manager_test.py
    │   │   │   ├── test_alias.py
    │   │   │   ├── test_auto_package_type.py
    │   │   │   ├── test_build_require_invalid.py
    │   │   │   ├── test_build_requires.py
    │   │   │   ├── test_options.py
    │   │   │   ├── test_provides.py
    │   │   │   └── test_version_ranges.py
    │   │   ├── require_override_test.py
    │   │   ├── test_dependencies_visit.py
    │   │   ├── test_divergent_cppstd_build_host.py
    │   │   ├── test_platform_requires.py
    │   │   ├── test_pure_runtime_dep.py
    │   │   ├── test_remote_resolution.py
    │   │   ├── test_repackaging.py
    │   │   ├── test_replace_requires.py
    │   │   ├── test_require_same_pkg_versions.py
    │   │   ├── test_skip_binaries.py
    │   │   ├── test_skip_build.py
    │   │   ├── test_subgraph_reports.py
    │   │   ├── test_system_tools.py
    │   │   ├── test_test_requires.py
    │   │   ├── test_validate_build.py
    │   │   ├── ux/
    │   │   │   ├── __init__.py
    │   │   │   └── loop_detection_test.py
    │   │   └── version_ranges/
    │   │       ├── __init__.py
    │   │       ├── test_version_range_conf.py
    │   │       ├── version_range_override_test.py
    │   │       ├── version_ranges_cached_test.py
    │   │       └── version_ranges_diamond_test.py
    │   ├── layout/
    │   │   ├── __init__.py
    │   │   ├── devflow_test.py
    │   │   ├── export_folder_variable_test.py
    │   │   ├── test_cmake_build_folder.py
    │   │   ├── test_layout_generate.py
    │   │   ├── test_layout_paths.py
    │   │   └── test_legacy_cpp_info_and_layout.py
    │   ├── lockfile/
    │   │   ├── __init__.py
    │   │   ├── test_ci.py
    │   │   ├── test_ci_overrides.py
    │   │   ├── test_ci_revisions.py
    │   │   ├── test_compatibility.py
    │   │   ├── test_graph_overrides.py
    │   │   ├── test_lock_alias.py
    │   │   ├── test_lock_build_requires.py
    │   │   ├── test_lock_merge.py
    │   │   ├── test_lock_packages.py
    │   │   ├── test_lock_pyrequires.py
    │   │   ├── test_lock_pyrequires_revisions.py
    │   │   ├── test_lock_requires.py
    │   │   ├── test_lock_requires_revisions.py
    │   │   ├── test_options.py
    │   │   └── test_user_overrides.py
    │   ├── metadata/
    │   │   ├── __init__.py
    │   │   ├── test_metadata_collect.py
    │   │   ├── test_metadata_commands.py
    │   │   ├── test_metadata_deploy.py
    │   │   ├── test_metadata_logs.py
    │   │   └── test_metadata_test_package.py
    │   ├── options/
    │   │   ├── __init__.py
    │   │   ├── options_test.py
    │   │   ├── test_configure_options.py
    │   │   ├── test_options_build_requires.py
    │   │   └── test_package_config_test.py
    │   ├── package_id/
    │   │   ├── __init__.py
    │   │   ├── build_id_test.py
    │   │   ├── compatible_test.py
    │   │   ├── package_id_and_confs_test.py
    │   │   ├── package_id_modes_test.py
    │   │   ├── package_id_requires_modes_test.py
    │   │   ├── package_id_test.py
    │   │   ├── python_requires_package_id_test.py
    │   │   ├── test_cache_compatibles.py
    │   │   ├── test_config_package_id.py
    │   │   ├── test_default_package_id.py
    │   │   ├── test_package_id_test_requires.py
    │   │   ├── test_valid_package_id_values.py
    │   │   ├── test_validate.py
    │   │   ├── transitive_header_only_test.py
    │   │   └── transitive_options_affect_id_test.py
    │   ├── py_requires/
    │   │   ├── __init__.py
    │   │   └── python_requires_test.py
    │   ├── remote/
    │   │   ├── __init__.py
    │   │   ├── auth_bearer_test.py
    │   │   ├── auth_test.py
    │   │   ├── broken_download_test.py
    │   │   ├── download_retries_test.py
    │   │   ├── download_test.py
    │   │   ├── multi_remote_checks_test.py
    │   │   ├── multi_remote_test.py
    │   │   ├── requester_test.py
    │   │   ├── rest_api_test.py
    │   │   ├── retry_test.py
    │   │   ├── selected_remotes_test.py
    │   │   ├── server_error_test.py
    │   │   ├── test_conaninfo_parsing.py
    │   │   ├── test_local_recipes_index.py
    │   │   ├── test_offline.py
    │   │   ├── test_remote_file_credentials.py
    │   │   ├── test_remote_recipes_only.py
    │   │   └── test_request_headers.py
    │   ├── sbom/
    │   │   ├── __init__.py
    │   │   └── test_cyclonedx.py
    │   ├── settings/
    │   │   ├── __init__.py
    │   │   ├── built_type_setting_test.py
    │   │   ├── per_package_settings_test.py
    │   │   ├── remove_subsetting_test.py
    │   │   ├── settings_override_test.py
    │   │   ├── test_disable_settings_assignment.py
    │   │   ├── test_non_defining_settings.py
    │   │   ├── test_settings_possible_values.py
    │   │   └── test_settings_user.py
    │   ├── symlinks/
    │   │   ├── __init__.py
    │   │   └── symlinks_test.py
    │   ├── sysroot_test.py
    │   ├── system_reqs_test.py
    │   ├── test_components.py
    │   ├── test_components_error.py
    │   ├── test_compressions.py
    │   ├── test_db_error.py
    │   ├── test_migrations.py
    │   ├── test_package_python_files.py
    │   ├── test_package_vendor.py
    │   ├── test_pkg_signing.py
    │   ├── test_recipe_policies.py
    │   ├── test_source_download_password.py
    │   ├── test_timestamp_error.py
    │   ├── tgz_macos_dot_files_test.py
    │   ├── toolchains/
    │   │   ├── __init__.py
    │   │   ├── apple/
    │   │   │   ├── __init__.py
    │   │   │   ├── test_xcodedeps.py
    │   │   │   └── test_xcodetoolchain.py
    │   │   ├── cmake/
    │   │   │   ├── __init__.py
    │   │   │   ├── cmakeconfigdeps/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── test_cmakeconfigdeps.py
    │   │   │   │   └── test_cmakeconfigdeps_frameworks.py
    │   │   │   ├── cmakedeps/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── test_cmakedeps.py
    │   │   │   │   └── test_cmakedeps_find_module_and_config.py
    │   │   │   ├── test_cmake.py
    │   │   │   ├── test_cmaketoolchain.py
    │   │   │   └── test_cmaketoolchain_blocks.py
    │   │   ├── env/
    │   │   │   ├── __init__.py
    │   │   │   ├── test_buildenv.py
    │   │   │   ├── test_environment.py
    │   │   │   ├── test_virtualenv_default_apply.py
    │   │   │   ├── test_virtualenv_object_access.py
    │   │   │   └── test_virtualenv_winbash.py
    │   │   ├── gnu/
    │   │   │   ├── __init__.py
    │   │   │   ├── test_autotools.py
    │   │   │   ├── test_autotoolsdeps.py
    │   │   │   ├── test_autotoolstoolchain.py
    │   │   │   ├── test_basic_layout.py
    │   │   │   ├── test_gnutoolchain.py
    │   │   │   ├── test_makedeps.py
    │   │   │   └── test_pkgconfigdeps.py
    │   │   ├── google/
    │   │   │   ├── __init__.py
    │   │   │   ├── test_bazeldeps.py
    │   │   │   └── test_bazeltoolchain.py
    │   │   ├── intel/
    │   │   │   ├── __init__.py
    │   │   │   └── test_intel_cc.py
    │   │   ├── meson/
    │   │   │   ├── __init__.py
    │   │   │   └── test_mesontoolchain.py
    │   │   ├── microsoft/
    │   │   │   ├── __init__.py
    │   │   │   ├── test_msbuild_toolchain.py
    │   │   │   ├── test_msbuilddeps.py
    │   │   │   ├── test_msbuildtoolchain.py
    │   │   │   ├── test_nmakedeps.py
    │   │   │   ├── test_nmaketoolchain.py
    │   │   │   ├── test_vs_layout.py
    │   │   │   └── vcvars_test.py
    │   │   ├── premake/
    │   │   │   ├── __init__.py
    │   │   │   ├── test_premake.py
    │   │   │   ├── test_premakedeps.py
    │   │   │   └── test_premaketoolchain.py
    │   │   ├── qbs/
    │   │   │   ├── __init__.py
    │   │   │   ├── test_qbsdeps.py
    │   │   │   └── test_qbsprofile.py
    │   │   ├── scons/
    │   │   │   ├── __init__.py
    │   │   │   └── test_scondeps.py
    │   │   ├── test_raise_on_universal_binaries.py
    │   │   └── test_toolchain_namespaces.py
    │   ├── tools/
    │   │   ├── __init__.py
    │   │   ├── conan_version_test.py
    │   │   ├── cppstd_minimum_version_test.py
    │   │   ├── cpu_count_test.py
    │   │   ├── file_tools_test.py
    │   │   ├── fix_symlinks_test.py
    │   │   ├── ros/
    │   │   │   ├── __init__.py
    │   │   │   └── test_rosenv.py
    │   │   └── system/
    │   │       ├── __init__.py
    │   │       └── package_manager_test.py
    │   └── workspace/
    │       ├── __init__.py
    │       └── test_workspace.py
    ├── performance/
    │   ├── .gitignore
    │   ├── __init__.py
    │   ├── test_compatibility_performance.py
    │   ├── test_db_performance.py
    │   └── test_large_graph.py
    └── unittests/
        ├── __init__.py
        ├── cli/
        │   ├── __init__.py
        │   ├── common_test.py
        │   └── test_cli_ref_matching.py
        ├── client/
        │   ├── __init__.py
        │   ├── build/
        │   │   ├── __init__.py
        │   │   ├── c_std_flags_test.py
        │   │   ├── compiler_flags_test.py
        │   │   └── cpp_std_flags_test.py
        │   ├── command/
        │   │   ├── __init__.py
        │   │   └── parse_arguments_test.py
        │   ├── conan_output_test.py
        │   ├── conanfile_loader_test.py
        │   ├── conf/
        │   │   ├── __init__.py
        │   │   ├── config_installer/
        │   │   │   ├── __init__.py
        │   │   │   └── test_install_folder.py
        │   │   └── detect/
        │   │       ├── __init__.py
        │   │       └── test_gcc_compiler.py
        │   ├── file_copier/
        │   │   ├── __init__.py
        │   │   └── test_report_copied_files.py
        │   ├── graph/
        │   │   ├── __init__.py
        │   │   ├── build_mode_test.py
        │   │   └── deps_graph_test.py
        │   ├── migrations/
        │   │   ├── __init__.py
        │   │   └── test_migrator.py
        │   ├── optimize_conanfile_load_test.py
        │   ├── pkg_sign_test.py
        │   ├── profile_loader/
        │   │   ├── __init__.py
        │   │   ├── compiler_cppstd_test.py
        │   │   └── profile_loader_test.py
        │   ├── remote_manager_test.py
        │   ├── rest/
        │   │   ├── __init__.py
        │   │   ├── downloader_test.py
        │   │   ├── requester_test.py
        │   │   ├── response_test.py
        │   │   ├── rest_client_v2/
        │   │   │   ├── __init__.py
        │   │   │   └── rest_client_v2_test.py
        │   │   └── uploader_test.py
        │   ├── source/
        │   │   └── __init__.py
        │   ├── tools/
        │   │   ├── __init__.py
        │   │   ├── cppstd_required_test.py
        │   │   ├── files/
        │   │   │   ├── __init__.py
        │   │   │   └── rename_test.py
        │   │   └── test_env.py
        │   ├── userio_test.py
        │   └── util/
        │       ├── __init__.py
        │       └── time_test.py
        ├── model/
        │   ├── __init__.py
        │   ├── build_info/
        │   │   ├── __init__.py
        │   │   ├── components_test.py
        │   │   ├── generic_properties_test.py
        │   │   ├── new_build_info_test.py
        │   │   └── test_deduce_locations.py
        │   ├── conanfile_test.py
        │   ├── info_test.py
        │   ├── manifest_test.py
        │   ├── options_test.py
        │   ├── other_settings_test.py
        │   ├── profile_test.py
        │   ├── settings_test.py
        │   ├── test_conf.py
        │   ├── test_list.py
        │   ├── test_package_reference.py
        │   ├── test_recipe_reference.py
        │   ├── version/
        │   │   ├── __init__.py
        │   │   ├── test_version_bump.py
        │   │   ├── test_version_comparison.py
        │   │   ├── test_version_parse.py
        │   │   ├── test_version_range.py
        │   │   └── test_version_range_intersection.py
        │   └── versionrepr_test.py
        ├── paths/
        │   ├── __init__.py
        │   └── user_home_test.py
        ├── search/
        │   ├── __init__.py
        │   ├── cache_db_search_test.py
        │   └── search_query_parse_test.py
        ├── server/
        │   ├── __init__.py
        │   ├── authenticator_plugin_test.py
        │   ├── conan_server_config_parser_test.py
        │   ├── conf_test.py
        │   ├── crypto/
        │   │   ├── __init__.py
        │   │   └── jwt_test.py
        │   ├── revision_list_test.py
        │   ├── service/
        │   │   ├── __init__.py
        │   │   ├── authorizer_test.py
        │   │   └── service_test.py
        │   └── test_utils.py
        ├── source/
        │   ├── __init__.py
        │   └── merge_directories_test.py
        ├── tools/
        │   ├── __init__.py
        │   ├── android/
        │   │   ├── __init__.py
        │   │   └── test_android_tools.py
        │   ├── apple/
        │   │   ├── __init__.py
        │   │   ├── test_apple_tools.py
        │   │   └── test_xcodebuild.py
        │   ├── build/
        │   │   ├── __init__.py
        │   │   ├── test_can_run.py
        │   │   ├── test_compiler.py
        │   │   ├── test_cppstd.py
        │   │   ├── test_cross_building.py
        │   │   ├── test_cstd.py
        │   │   └── test_stdcpp_library.py
        │   ├── cmake/
        │   │   ├── __init__.py
        │   │   ├── test_cmake_cmd_line_args.py
        │   │   ├── test_cmake_install.py
        │   │   ├── test_cmake_presets_definitions.py
        │   │   ├── test_cmake_test.py
        │   │   └── test_cmaketoolchain.py
        │   ├── env/
        │   │   ├── __init__.py
        │   │   ├── test_env.py
        │   │   └── test_env_files.py
        │   ├── files/
        │   │   ├── __init__.py
        │   │   ├── checksums_test.py
        │   │   ├── collect_lib_test.py
        │   │   ├── test_chmod.py
        │   │   ├── test_downloads.py
        │   │   ├── test_file_read_and_write.py
        │   │   ├── test_patches.py
        │   │   ├── test_rename.py
        │   │   ├── test_rm.py
        │   │   ├── test_symlinks.py
        │   │   ├── test_tool_copy.py
        │   │   ├── test_toolchain.py
        │   │   └── test_zipping.py
        │   ├── files_patch_test.py
        │   ├── gnu/
        │   │   ├── __init__.py
        │   │   ├── autotools_test.py
        │   │   ├── autotools_toolchain_test.py
        │   │   ├── autotoolschain_test.py
        │   │   ├── gnudepsflags_test.py
        │   │   ├── test_gnutoolchain.py
        │   │   └── test_triplets.py
        │   ├── google/
        │   │   ├── __init__.py
        │   │   └── test_bazel.py
        │   ├── intel/
        │   │   ├── __init__.py
        │   │   └── test_intel_cc.py
        │   ├── meson/
        │   │   ├── __init__.py
        │   │   └── test_meson.py
        │   ├── microsoft/
        │   │   ├── __init__.py
        │   │   ├── conantoolchain.props
        │   │   ├── conantoolchain_release_x64.props
        │   │   ├── test_check_min_vs.py
        │   │   ├── test_msbuild.py
        │   │   ├── test_msvs_toolset.py
        │   │   └── test_subsystem.py
        │   └── system/
        │       ├── __init__.py
        │       └── python_manager_test.py
        └── util/
            ├── __init__.py
            ├── apple_test.py
            ├── conanfile_tools_test.py
            ├── detect_libc_test.py
            ├── detect_test.py
            ├── detected_architecture_test.py
            ├── file_hashes_test.py
            ├── files/
            │   ├── __init__.py
            │   ├── strip_root_extract_test.py
            │   ├── tar_extract_test.py
            │   ├── test_copy_compat.py
            │   ├── test_dirty.py
            │   └── test_remove.py
            ├── files_extract_wildcard_test.py
            ├── local_db_test.py
            ├── output_test.py
            ├── test_encrypt.py
            ├── tools_test.py
            ├── unix_path_test.py
            ├── xz_test.py
            └── zip_permissions_test.py

================================================
FILE CONTENTS
================================================

================================================
FILE: .ci/__init__.py
================================================


================================================
FILE: .ci/bump_dev_version.py
================================================
import os
import time


def replace_in_file(file_path, search, replace):
    with open(file_path, "r") as handle:
        content = handle.read()
        if search not in content:
            raise Exception("Incorrect development version in conan/__init__.py")
    content = content.replace(search, replace)
    content = content.encode("utf-8")
    with open(file_path, "wb") as handle:
        handle.write(content)

def bump_dev():
    vfile = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../conan/__init__.py")
    snapshot = "%s" % int(time.time())
    replace_in_file(vfile, "-dev'", "-dev%s'" % snapshot)


if __name__ == "__main__":
    bump_dev()


================================================
FILE: .ci/docker/conan-tests
================================================
FROM ubuntu:24.04

LABEL maintainer="Conan.io <info@conan.io>"

ENV DEBIAN_FRONTEND=noninteractive

ENV PY37=3.7.9 \
    PY38=3.8.6 \
    PY39=3.9.2 \
    PY310=3.10.16 \
    PY312=3.12.3 \
    PY313=3.13.0 \
    PY314=3.14.0 \
    CMAKE_3_15=/usr/share/cmake-3.15.7/bin/cmake \
    CMAKE_3_16=/usr/share/cmake-3.16.9/bin/cmake \
    CMAKE_3_17=/usr/share/cmake-3.17.5/bin/cmake \
    CMAKE_3_19=/usr/share/cmake-3.19.7/bin/cmake \
    CMAKE_3_23=/usr/share/cmake-3.23.5/bin/cmake \
    CMAKE_3_27=/usr/share/cmake-3.27.9/bin/cmake \
    CMAKE_4_2=/usr/share/cmake-4.2.1/bin/cmake \
    GCC_9=/usr/bin/gcc-9 \
    GXX_9=/usr/bin/g++-9 \
    GCC_11=/usr/bin/gcc-11 \
    GXX_11=/usr/bin/g++-11 \
    CLANG_14=/usr/bin/clang-14 \
    CLANGXX_14=/usr/bin/clang++-14 \
    BAZEL_6=6.5.0 \
    BAZEL_7=7.6.2 \
    BAZEL_8=8.4.2 \
    EMSDK=4.0.22

RUN apt-get update && \
    apt-get install -y --no-install-recommends \
        software-properties-common \
        build-essential \
        libtool \
        automake \
        autoconf \
        pkg-config \
        gettext \
        git \
        curl \
        make \
        libssl-dev \
        zlib1g-dev \
        libbz2-dev \
        libreadline-dev \
        libsqlite3-dev \
        wget \
        llvm \
        libncurses5-dev \
        libncursesw5-dev \
        xz-utils \
        tk-dev \
        libffi-dev \
        liblzma-dev \
        libzstd-dev \
        python3-openssl \
        ca-certificates \
        sudo \
        tar \
        linux-libc-dev \
        subversion \
        subversion-tools \
        ninja-build \
        gcc-9 \
        g++-9 \
        gcc-11 \
        g++-11 \
        clang-14 \
        clang++-14 \
        gcc-arm-linux-gnueabihf \
        g++-arm-linux-gnueabihf \
        unzip \
        apt-transport-https \
        gnupg-agent \
        gcc-9-multilib \
        g++-9-multilib \
        gcc-11-multilib \
        g++-11-multilib \
        scons && \
    # fix: asm/errno.h: No such file or directory
    ln -s /usr/include/asm-generic/ /usr/include/asm && \
    add-apt-repository -y ppa:ubuntu-toolchain-r/test && \
    apt-get update && \
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - && \
    add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu jammy stable" && \
    apt-get update && \
    apt-get install -y --no-install-recommends docker-ce docker-ce-cli containerd.io && \
    rm -rf /var/lib/apt/lists/*

RUN useradd -m -s /bin/bash conan && \
    echo 'conan ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers

ENV HOME /home/conan
ENV PYENV_ROOT $HOME/.pyenv
ENV PATH $PYENV_ROOT/bin:$PYENV_ROOT/shims:/usr/bin:/bin:$PATH

RUN curl https://pyenv.run | bash && \
    pyenv install $PY37 && \
    pyenv install $PY38 && \
    pyenv install $PY39 && \
    pyenv install $PY310 && \
    pyenv install $PY312 && \
    pyenv install $PY314 && \
    pyenv global $PY39 && \
    curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && \
    python get-pip.py && \
    rm get-pip.py

RUN chown -R conan:conan $HOME

USER root

RUN wget https://github.com/Kitware/CMake/releases/download/v3.15.7/cmake-3.15.7-Linux-x86_64.tar.gz && \
    tar -xvzf cmake-3.15.7-Linux-x86_64.tar.gz && mv cmake-3.15.7-Linux-x86_64 /usr/share/cmake-3.15.7  && \
    wget https://github.com/Kitware/CMake/releases/download/v3.16.9/cmake-3.16.9-Linux-x86_64.tar.gz   && \
    tar -xvzf cmake-3.16.9-Linux-x86_64.tar.gz && mv cmake-3.16.9-Linux-x86_64 /usr/share/cmake-3.16.9 && \
    wget https://github.com/Kitware/CMake/releases/download/v3.17.5/cmake-3.17.5-Linux-x86_64.tar.gz   && \
    tar -xvzf cmake-3.17.5-Linux-x86_64.tar.gz && mv cmake-3.17.5-Linux-x86_64 /usr/share/cmake-3.17.5 && \
    wget https://github.com/Kitware/CMake/releases/download/v3.19.7/cmake-3.19.7-Linux-x86_64.tar.gz   && \
    tar -xvzf cmake-3.19.7-Linux-x86_64.tar.gz && mv cmake-3.19.7-Linux-x86_64 /usr/share/cmake-3.19.7 && \
    wget https://github.com/Kitware/CMake/releases/download/v3.23.5/cmake-3.23.5-Linux-x86_64.tar.gz   && \
    tar -xvzf cmake-3.23.5-Linux-x86_64.tar.gz && mv cmake-3.23.5-linux-x86_64/ /usr/share/cmake-3.23.5 && \
    wget https://github.com/Kitware/CMake/releases/download/v3.27.9/cmake-3.27.9-Linux-x86_64.tar.gz   && \
    tar -xvzf cmake-3.27.9-Linux-x86_64.tar.gz && mv cmake-3.27.9-linux-x86_64/ /usr/share/cmake-3.27.9 && \
    wget https://cmake.org/files/v4.2/cmake-4.2.1-linux-x86_64.tar.gz   && \
    tar -xvzf cmake-4.2.1-linux-x86_64.tar.gz && mv cmake-4.2.1-linux-x86_64/ /usr/share/cmake-4.2.1 && \
    update-alternatives --install /usr/bin/cmake cmake $CMAKE_3_15 10 && \
    update-alternatives --install /usr/bin/cmake cmake $CMAKE_3_16 20 && \
    update-alternatives --install /usr/bin/cmake cmake $CMAKE_3_17 30 && \
    update-alternatives --install /usr/bin/cmake cmake $CMAKE_3_19 40 && \
    update-alternatives --install /usr/bin/cmake cmake $CMAKE_3_23 50 && \
    update-alternatives --install /usr/bin/cmake cmake $CMAKE_3_27 60 && \
    update-alternatives --install /usr/bin/cmake cmake $CMAKE_4_2 70 && \
    # set CMake 3.15 as default
    update-alternatives --set cmake $CMAKE_3_15

RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 10 && \
    update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 30 && \
    update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 10 && \
    update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 30 && \
    update-alternatives --install /usr/bin/clang clang /usr/bin/clang-14 10 && \
    update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-14 10 && \
    update-alternatives --set gcc /usr/bin/gcc-9 && \
    update-alternatives --set g++ /usr/bin/g++-9 && \
    update-alternatives --set clang /usr/bin/clang-14 && \
    update-alternatives --set clang++ /usr/bin/clang++-14

RUN mkdir -p /usr/share/bazel-$BAZEL_6/bin && \
    wget https://github.com/bazelbuild/bazel/releases/download/${BAZEL_6}/bazel-${BAZEL_6}-linux-x86_64 && \
    chmod +x bazel-${BAZEL_6}-linux-x86_64 && \
    mv bazel-${BAZEL_6}-linux-x86_64 /usr/share/bazel-$BAZEL_6/bin/bazel && \
    mkdir -p /usr/share/bazel-$BAZEL_7/bin && \
    wget https://github.com/bazelbuild/bazel/releases/download/${BAZEL_7}/bazel-${BAZEL_7}-linux-x86_64 && \
    chmod +x bazel-${BAZEL_7}-linux-x86_64 && \
    mv bazel-${BAZEL_7}-linux-x86_64 /usr/share/bazel-$BAZEL_7/bin/bazel && \
    mkdir -p /usr/share/bazel-$BAZEL_8/bin && \
    wget https://github.com/bazelbuild/bazel/releases/download/${BAZEL_8}/bazel-${BAZEL_8}-linux-x86_64 && \
    chmod +x bazel-${BAZEL_8}-linux-x86_64 && \
    mv bazel-${BAZEL_8}-linux-x86_64 /usr/share/bazel-$BAZEL_8/bin/bazel

RUN wget https://github.com/premake/premake-core/releases/download/v5.0.0-beta4/premake-5.0.0-beta4-linux.tar.gz && \
    tar -xvzf premake-5.0.0-beta4-linux.tar.gz && chmod +x premake5 && mkdir /usr/share/premake && \
    mv premake5 /usr/share/premake

RUN cd /tmp && \
    mkdir qbs && \
    cd qbs && \
    curl -L https://download.qt.io/official_releases/qbs/2.6.0/qbs-linux-x86_64-2.6.0.tar.gz > qbs-linux-x86_64-2.6.0.tar.gz && \
    tar -xzf qbs-linux-x86_64-2.6.0.tar.gz && \
    mv qbs-linux-x86_64-2.6.0 /usr/share/qbs && \
    rm qbs-linux-x86_64-2.6.0.tar.gz

RUN cd /tmp && \
    wget https://github.com/emscripten-core/emsdk/archive/refs/tags/${EMSDK}.tar.gz && \
    tar xzf ${EMSDK}.tar.gz --directory /usr/share && \
    cd /usr/share/emsdk-${EMSDK} && \
    pyenv local 3.12 && \
    ./emsdk update && \
    ./emsdk install latest && \
    ./emsdk activate latest --permanent && \
    . /usr/share/emsdk-${EMSDK}/emsdk_env.sh && \
    embuilder build MINIMAL && \
    embuilder build MINIMAL --wasm64
    # echo "EMSDK_QUIET=1 . /usr/share/emsdk-${EMSDK}/emsdk_env.sh" >> /etc/bash.bashrc
# Manually add the emsdk binaries to the PATH and set emcc cache directory to a writable location
ENV PATH="/usr/share/emsdk-$EMSDK:/usr/share/emsdk-$EMSDK/upstream/emscripten:/usr/share/emsdk-$EMSDK/node/22.16.0_64bit/bin:$PATH" \
    EM_CACHE=$HOME/.emscripten_cache

RUN echo "export QT_NO_GLIB=1" >> /etc/profile.d/qt.sh

USER conan
WORKDIR $HOME

CMD ["/bin/bash"]


================================================
FILE: .editorconfig
================================================
# https://editorconfig.org/

root = true

[*]
indent_style = space
indent_size = 4
insert_final_newline = true
trim_trailing_whitespace = true
end_of_line = lf
charset = utf-8

# Docstrings and comments use max_line_length = 79
[*.py]
max_line_length = 101


================================================
FILE: .github/CONTRIBUTING.md
================================================
Contributing to Conan
=====================

The following summarizes the process for contributing to the Conan project.

Community
---------

Conan is an Open Source MIT licensed project.
Conan is developed by the Conan maintainers and a great community of contributors.

Dev-flow & Pull Requests
------------------------

Conan follows the ["GitFlow"](https://datasift.github.io/gitflow/IntroducingGitFlow.html) branching model.
Issues are triaged and categorized mainly by type (feature, bug...) complexity (high, medium...) and priority (high, medium...) using GitHub
 labels. Then they are moved to a stage called "queue" when they are considered to be ready for implementation.

To contribute follow the next steps:

1. Comment in the corresponding issue that you want to contribute the feature/fix proposed. If there is no open issue, we strongly suggest
   to open one to gather feedback.
2. Check that the issue has been staged to "queue" or ask @conan-io/barbarians to do it. This helps in terms of validation and discussion of
   possible implementation of the feature/fix.
3. Fork the [Conan main repository](https://github.com/conan-io/conan) and create a `feature/xxx` branch from the `develop2` branch and develop
   your fix/feature as discussed in previous step.
4. Try to keep your branch updated with the `develop2` branch to avoid conflicts.
5. Run the ``test/unittest`` and ``test/integration`` test suite locally, as described in [Conan tests guidelines section](https://github.com/conan-io/conan/blob/develop2/test/README.md). If you are doing changes to a build system integration, locate the respective folder for that integration in ``test/functional`` and run the tests of that folder. It is not expected that contributors have to run the full test suite locally, as it requires too many external tools.
6. Open a pull request, and select `develop2` as the base branch. Never open a pull request to ``release/xxx`` branches, unless the branch is to be part of the next 2.X.Y patch. In that case, the PR should be targeted to ``release/2.X``.
7. Add the text (besides other comments): "fixes #IssueNumber" in the body of the PR, referring to the issue of step 1.
8. Submit a PR to the Conan documentation about the changes done providing examples if needed.

The ``conan-io`` organization maintainers will review and help with the coding of tests. Finally it will be assigned to milestone.

Each milestone corresponds to a Conan release, a branch `release/xxx` will be opened from the `develop2` branch.
When the branch is ready, a tag corresponding to the version will be pushed and it will be merged into `develop2` branch.

The release plan is done monthly but dates are not fixed, the ``conan-io`` organization maintainers reserve the right of altering the issues
of each milestone as well as the release dates.

Issues
------

If you think you found a bug in Conan open an issue indicating the following:

- Explain the Conan version, Operating System, compiler and any other tool that could be related to the issue.
- Explain, as detailed as possible, how to reproduce the issue. Use git repos to contain code/recipes to reproduce issues.
- Include the expected behavior as well as what actually happened.
- Provide output captures (as text).
- Feel free to attach a screenshot or video illustrating the issue if you think it will be helpful.

For any suggestion, feature request or question open an issue indicating the following:

- Questions and support requests are always welcome.
- Use the [question] or [suggestion] tags in the title.
- Try to explain the motivation, what are you trying to do, what is the pain it tries to solve.
- What do you expect from Conan.

We use the following tags to control the status of the issues:

- **triaging**: Issue is being considered or under discussion. Maintainers are trying to understand the use case or gathering the necessary
  information.
- **queue**: Issue has been categorized and is ready to be done in a following release (not necessarily in the next one).
- **in-progress**: A milestone has previously been assigned to the issue and is now under development.
- **review**: Issue has a PR associated that solves it (remember to use the GitHub keywords "closes #IssueNumber", "fixes #IssueNumber"...
  in the description of the PR).
- **closed via PR**: A PR with the fix or new feature has been merged to `develop2` and the issue will be fixed in the next monthly release.

Code of conduct
---------------

Try to be polite, Conan maintainers and contributors are really willing to help and we enjoy it.

Please keep in mind these points:

- There are limited resources/time and not all issues/pull requests can be considered as well as we would like.
- ``conan-io`` maintainers can tag/close/modify any opened issue and it should not be interpreted as a rude or disrespectful action. It
  **always** responds to organizational purposes. A closed issue can be perfectly reopened or further commented.
- It is very hard to keep the project in good health in terms of technical debt, usability, serviceability, etc. If the proposed feature is
  not clearly stated, enough information is not provided or it is not sure that would be a good feature for the future development of the project, it won't be accepted. The community plays a very important role during this discussion so it strongly encouraged to
  explain the value of a feature for the community, the needed documentation and its use cases.
  - Backwards compatibility and not breaking users' packages is very important and it won't be done unless there are very good reasons.
- You should not get bothered if you feel unattended, Conan is an Open Source project, not a commercial product. Try to explain what you
  really need and we will try to help you.
- The Conan maintainers won't tolerate harassment or abuse.

If a user is not following the code of conduct:

   - We will contact the user to remind the rules.
   - If the misconduct continues, they will be banned from the repository for one week.
   - After that, any other code of conduct transgression will carry the permanent ban from all the conan-io organization repositories.

Code style
----------

- In general, follow [pep8](https://www.python.org/dev/peps/pep-0008/)
- Limit all lines to a maximum of 101 characters (`Right margin` setting in PyCharm)
- Specify imports in the following order: system, `blank line`, 3rd-party, `blank line`, own; all sorted alphabetically:
```
import os
import platform
import shutil

from tqdm import tqdm

from conan.tools.cmake import CMakeToolchain
from conan.tools.files import save, load
```
- Write tests, if possible


================================================
FILE: .github/ISSUE_TEMPLATE/bug.yml
================================================
name: Bug Report
description: Report a bug, something does not work as it's supposed to
title: '[bug]'
body:
  - type: textarea
    id: description
    attributes:
      label: Describe the bug
      description: Include the bug description and environment details
      placeholder: |
        Environment details: OS, compiler, Conan version, Conan profiles, etc.
        Description: xxxx
    validations:
      required: false
  - type: textarea
    id: steps
    attributes:
      label: How to reproduce it
      description: It would be great to know how to reproduce it locally
      placeholder: |
        Commands to reproduce it, remote repository to use it locally, etc. Every detail is more than welcome!
    validations:
      required: false


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.yml
================================================
name: Feature Request
description: Request a new feature or suggest a change
title: '[feature] SHORT DESCRIPTION'
body:
  - type: markdown
    attributes:
      value: |
        Thanks for taking the time to submit a request. 
        **Please don't forget to update the issue title.**
  - type: textarea
    id: suggestion
    attributes:
      label: What is your suggestion?
      description: Please be as specific as possible!
      placeholder: Hi! I would like for conan to be able to ...
    validations:
      required: true
  - type: checkboxes
    id: contributing
    attributes:
      label: Have you read the CONTRIBUTING guide?
      description: It can be found in [CONTRIBUTING.md](https://github.com/conan-io/conan/blob/develop/.github/CONTRIBUTING.md)
      options:
        - label: I've read the CONTRIBUTING guide
    validations:
      required: true


================================================
FILE: .github/ISSUE_TEMPLATE/question.yml
================================================
name: Question
description: If something needs clarification
title: '[question] SHORT DESCRIPTION'
body:
  - type: markdown
    attributes:
      value: |
        Thanks for taking the time to fill your question. 
        **Please don't forget to update the issue title.**
  - type: textarea
    id: question
    attributes:
      label: What is your question?
      description: Please be as specific as possible!
      placeholder: Hi! I have a question regarding ...
    validations:
      required: true
  - type: checkboxes
    id: contributing
    attributes:
      label: Have you read the CONTRIBUTING guide?
      description: It can be found in [CONTRIBUTING.md](https://github.com/conan-io/conan/blob/develop/.github/CONTRIBUTING.md)
      options:
        - label: I've read the CONTRIBUTING guide
    validations:
      required: true


================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
Changelog: (Feature | Fix | Bugfix): Describe here your pull request
Docs: https://github.com/conan-io/docs/pull/XXXX

- [ ] Refer to the issue that supports this Pull Request.
- [ ] If the issue has missing info, explain the purpose/use case/pain/need that covers this Pull Request.
- [ ] I've read the [Contributing guide](https://github.com/conan-io/conan/blob/develop2/.github/CONTRIBUTING.md).
- [ ] I've followed the PEP8 style guides for Python code.
- [ ] I've opened another PR in the Conan docs repo to the ``develop`` branch, documenting this one.


================================================
FILE: .github/actions/test-coverage/action.yml
================================================

description: 'Run tests enabling coverage in certain conditions and upload coverage artifacts for later process'

inputs:
  python-version:
    description: 'Python version in which the tests was ran'
    required: true

  test-type:
    description: 'Test suite name'
    required: true

  duration:
    description: 'Show N slowest test durations (N=0 for all)'
    required: true
    default: '10'

  tests:
    description: 'Tests folder and options to run'
    required: false

  workers:
    description: 'Number of workers to run tests'
    default: auto

runs:
  using: 'composite'
  steps:
      - name: Run tests with coverage
        if: ${{ inputs.tests }}
        shell: ${{ runner.os == 'Windows' && 'pwsh' || 'bash' }}
        run: |
          pytest ${{ inputs.tests }} --durations=${{ inputs.duration }} -n ${{ inputs.workers }} ${{ github.ref == 'refs/heads/develop2' && '--cov=conan --cov=conans --cov=test --cov-report=' || '' }}

      - name: Rename coverage file
        if: github.ref == 'refs/heads/develop2'
        shell: bash
        run: mv .coverage .coverage.${{ runner.os }}-${{ inputs.python-version }}-${{ inputs.test-type }}

      - name: Upload coverage artifact
        if: github.ref == 'refs/heads/develop2'
        uses: actions/upload-artifact@v4
        with:
          name: .coverage.${{ runner.os }}-${{ inputs.python-version }}-${{ inputs.test-type }}
          path: .coverage.${{ runner.os }}-${{ inputs.python-version }}-${{ inputs.test-type }}
          include-hidden-files: true


================================================
FILE: .github/workflows/build-binaries.yml
================================================
name: Build Conan Binaries
run-name: Build Conan Binaries - v${{ inputs.conan_version }} - ${{ inputs.target_sha }} - ${{ inputs.request_id }}

on:
  workflow_dispatch:
    inputs:
      conan_version: { description: Conan version to package, required: true, type: string }
      target_sha:    { description: Git SHA to package,       required: true, type: string }
      request_id:    { description: ID to identify run,       required: true, type: string }

permissions:
  contents: read

jobs:
  package:
    name: Package for ${{ matrix.platform }}/${{ matrix.arch }}
    strategy:
      fail-fast: false
      matrix:
        include:
          - { platform: Linux,   arch: x86_64, runner: ubuntu-24.04 }
          - { platform: Windows, arch: x86_64, runner: windows-2022 }
          - { platform: Windows, arch: i686,   runner: windows-2022 }
          - { platform: Windows, arch: arm64,  runner: windows-11-arm }
          - { platform: Macos,   arch: arm64,  runner: macos-14 }
          - { platform: Macos,   arch: x86_64, runner: macos-14 }
          - { platform: Linux,   arch: arm64,  runner: ubuntu-24.04-arm }
    runs-on: ${{ matrix.runner }}

    steps:
      - name: Show inputs
        shell: bash
        run: |
          echo "conan_version=${{ inputs.conan_version }}"
          echo "target_sha=${{ inputs.target_sha }}"
          echo "request_id=${{ inputs.request_id }}"

      - name: Generate Read-Only App Token
        id: generate_token
        uses: actions/create-github-app-token@v2
        with:
          app-id: ${{ secrets.GH_APP_RELEASE_ID }}
          private-key: ${{ secrets.GH_APP_RELEASE_PRIVATE_KEY }}
          permission-contents: read
          owner: conan-io
          repositories: |
            conan
            release-tools

      - name: Checkout release-tools
        uses: actions/checkout@v4
        with:
          repository: conan-io/release-tools
          token: ${{ steps.generate_token.outputs.token }}

      - name: Build packages
        shell: bash
        env:
          PLATFORM: ${{ matrix.platform }}
          ARCH: ${{ matrix.arch }}
        run: |
          ./jenkins/build_packages.sh "${{ inputs.conan_version }}" "${{ inputs.target_sha }}"

      - name: Upload artifacts
        uses: actions/upload-artifact@v4
        with:
          name: conan-${{ inputs.conan_version }}-${{ inputs.target_sha }}-${{ matrix.platform }}-${{ matrix.arch }}-${{ inputs.request_id }}
          path: dist/*


================================================
FILE: .github/workflows/linux-tests.yml
================================================
name: Linux tests

on:
  workflow_call:
    inputs:
      python-versions:
        required: true
        type: string
      run-slow-tests:
        required: false
        default: 'false'
        type: string

jobs:
  build_container:
    runs-on: ubuntu-latest
    name: Build Linux container
    outputs:
      image_tag: ${{ steps.dockerfile_hash.outputs.tag }}
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Log in to GitHub Container Registry
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Calculate Dockerfile checksum
        id: dockerfile_hash
        run: |
          DOCKERFILE_HASH=$(find ./.ci/docker/conan-tests -type f -exec sha256sum {} \; | sha256sum | cut -d' ' -f1)
          echo "tag=$DOCKERFILE_HASH" >> $GITHUB_OUTPUT

      - name: Check if image exists
        id: check_image
        run: |
          if docker manifest inspect ghcr.io/${{ github.repository_owner }}/conan-tests:${{ steps.dockerfile_hash.outputs.tag }} > /dev/null 2>&1; then
            echo "status=exists" >> $GITHUB_OUTPUT
          else
            echo "status=no-image" >> $GITHUB_OUTPUT
          fi

      - name: Build and push image if not exists
        if: steps.check_image.outputs.status == 'no-image'
        run: |
          docker build -t ghcr.io/${{ github.repository_owner }}/conan-tests:${{ steps.dockerfile_hash.outputs.tag }} -f ./.ci/docker/conan-tests .
          docker push ghcr.io/${{ github.repository_owner }}/conan-tests:${{ steps.dockerfile_hash.outputs.tag }}

  linux_tests:
    needs: build_container
    runs-on: ubuntu-latest
    container:
      image: ghcr.io/${{ github.repository_owner }}/conan-tests:${{ needs.build_container.outputs.image_tag }}
      options: --user conan
    strategy:
      matrix:
        python-version: ${{ fromJson(inputs.python-versions) }}
        test-type: [unittests, integration, functional]
        include:
        - test-type: unittests
          test-name: Unit
        - test-type: integration
          test-name: Integration
        - test-type: functional
          test-name: Functional
    name: ${{ matrix.test-name }} Tests (${{ matrix.python-version }})
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up Python ${{ matrix.python-version }}
        run: |
          pyenv global ${{ matrix.python-version }}
          python --version

      - name: Cache pip
        uses: actions/cache@v4
        with:
          path: ~/.cache/pip
          key: ${{ runner.os }}-pip-${{ matrix.python-version }}-${{ hashFiles('**/requirements*.txt') }}

      - name: Install dependencies
        run: |
          pip install --upgrade pip
          pip install -r conans/requirements.txt
          pip install -r conans/requirements_dev.txt
          pip install -r conans/requirements_server.txt
          pip install meson

      - name: Run tests
        uses: ./.github/actions/test-coverage
        with:
          python-version: ${{ matrix.python-version }}
          test-type: ${{ matrix.test-type }}
          tests: ${{ matrix.test-type == 'functional' && (inputs.run-slow-tests == 'true' && 'test/functional' || 'test/functional -m "not slow"') || format('test/{0}', matrix.test-type) }}

  linux_runner_tests:
    needs: build_container
    runs-on: ubuntu-latest
    strategy:
      matrix:
        # Use modern versions due to docker incompatibility with python <3.8
        python-version: ${{ github.event_name != 'pull_request' && fromJson('["3.13", "3.9"]') || fromJson('["3.10"]') }}

    name: Runner Tests (${{ matrix.python-version }})
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v5
        with:
          python-version: ${{ matrix.python-version }}

      - name: Cache pip
        uses: actions/cache@v4
        with:
          path: ~/.cache/pip
          key: ${{ runner.os }}-pip-${{ matrix.python-version }}-${{ hashFiles('**/requirements_runner*.txt') }}

      - name: Install dependencies
        run: |
          pip install --upgrade pip
          pip install -r conans/requirements.txt
          pip install -r conans/requirements_dev.txt
          pip install -r conans/requirements_server.txt
          pip install -r conans/requirements_runner.txt

      - name: Run runner tests
        uses: ./.github/actions/test-coverage
        with:
          python-version: ${{ matrix.python-version }}
          test-type: runners
          tests: '-m docker_runner -rs'
          workers: 1


================================================
FILE: .github/workflows/main.yml
================================================
name: Main Workflow
on:
  push:
    branches:
      - develop2
      - release/*
      - '*'
  pull_request:
    branches:
      - '*'
      - 'release/*'
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
  cancel-in-progress: true

jobs:
  ensure_latest_tag_merged:
    runs-on: ubuntu-latest
    name: Ensure latest release is merged in develop2 branch
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - shell: bash
        run: |
          git fetch --tags --prune
          latest_tag=$(git tag -l --sort=-v:refname | head -n1)
          echo "Checking that branch 'develop2' contains the latest release tag: $latest_tag"
          git merge-base --is-ancestor "$latest_tag" origin/develop2

  set_python_versions:
    runs-on: ubuntu-latest
    outputs:
      python_versions_linux_windows: ${{ steps.set_versions.outputs.python_versions_linux_windows }}
      python_versions_macos: ${{ steps.set_versions.outputs.python_versions_macos }}
      run_slow_tests: ${{ steps.set_versions.outputs.run_slow_tests }}
    name: Determine Python versions
    steps:
      - name: Fetch current PR body and check for slow-tests marker
        if: github.event_name == 'pull_request'
        id: fetch_pr
        run: |
          BODY=$(curl -s -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
            "https://api.github.com/repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}" \
            | jq -r '.body // ""')
          if echo "$BODY" | grep -Fq '$runslowtests'; then
            echo "run_slow_tests=true" >> $GITHUB_OUTPUT
          else
            echo "run_slow_tests=false" >> $GITHUB_OUTPUT
          fi

      - name: Determine Python versions
        id: set_versions
        run: |
          if [[ "${{ github.ref }}" == "refs/heads/develop2" || "${{ github.ref }}" == refs/heads/release/* ]]; then
            echo "python_versions_linux_windows=['3.14', '3.7']" >> $GITHUB_OUTPUT
            echo "python_versions_macos=['3.14', '3.8']" >> $GITHUB_OUTPUT
          else
            echo "python_versions_linux_windows=['3.10']" >> $GITHUB_OUTPUT
            echo "python_versions_macos=['3.10']" >> $GITHUB_OUTPUT
          fi

          # Run slow tests on develop2, or when PR description contains $runslowtests (checked in fetch_pr step)
          if [[ "${{ github.ref }}" == "refs/heads/develop2" ]]; then
            echo "run_slow_tests=true" >> $GITHUB_OUTPUT
          elif [[ "${{ github.event_name }}" == "pull_request" ]]; then
            echo "run_slow_tests=${{ steps.fetch_pr.outputs.run_slow_tests }}" >> $GITHUB_OUTPUT
          else
            echo "run_slow_tests=false" >> $GITHUB_OUTPUT
          fi

  linux_suite:
    needs: [ensure_latest_tag_merged, set_python_versions]
    uses: ./.github/workflows/linux-tests.yml
    name: Linux test suite
    with:
      python-versions: ${{ needs.set_python_versions.outputs.python_versions_linux_windows }}
      run-slow-tests: ${{ needs.set_python_versions.outputs.run_slow_tests }}

  osx_suite:
    needs: [ensure_latest_tag_merged, set_python_versions]
    uses: ./.github/workflows/osx-tests.yml
    name: OSX test suite
    with:
      python-versions: ${{ needs.set_python_versions.outputs.python_versions_macos }}
      run-slow-tests: ${{ needs.set_python_versions.outputs.run_slow_tests }}

  windows_suite:
    needs: [ensure_latest_tag_merged, set_python_versions]
    uses: ./.github/workflows/win-tests.yml
    name: Windows test suite
    with:
      python-versions: ${{ needs.set_python_versions.outputs.python_versions_linux_windows }}
      run-slow-tests: ${{ needs.set_python_versions.outputs.run_slow_tests }}

  code_coverage:
    runs-on: ubuntu-latest
    name: Code coverage
    if: github.ref == 'refs/heads/develop2'         # Only measure code coverage on main branch
    needs: [linux_suite, osx_suite, windows_suite]
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Download coverage artifacts
        uses: actions/download-artifact@v4
        with:
          merge-multiple: true

      - name: Merge coverage reports
        run: |
          pip install coverage
          coverage combine
          coverage report
          coverage xml

      - name: Code coverage
        uses: codecov/codecov-action@v5
        with:
          token: ${{ secrets.CODECOV_TOKEN }}

      - uses: geekyeggo/delete-artifact@v5
        with:
          name: |
            .coverage.*

  deploy_to_pypi_test:
    runs-on: ubuntu-latest
    name: Deploy to TestPyPI
    if: github.ref == 'refs/heads/develop2'
    needs: [linux_suite, osx_suite, windows_suite]
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: 3.9

      - name: Install dependencies
        run: |
          pip install --upgrade pip
          pip install twine

      - name: Bump Dev Version
        run: |
          python .ci/bump_dev_version.py

      - name: Build Package
        run: |
          python setup.py sdist

      - name: Upload to TestPyPI
        env:
          TWINE_USERNAME: ${{ secrets.TEST_PYPI_USERNAME }}
          TWINE_PASSWORD: ${{ secrets.TEST_PYPI_PASSWORD }}
        run: |
          python -m twine upload --verbose --repository-url https://test.pypi.org/legacy/ dist/*

      - name: Deploy conan-server to TestPyPI
        env:
          TWINE_USERNAME: ${{ secrets.TEST_PYPI_SERVER_USERNAME }}
          TWINE_PASSWORD: ${{ secrets.TEST_PYPI_SERVER_PASSWORD }}
        run: |
          rm -rf dist/
          mv setup_server.py setup.py
          python setup.py sdist
          python -m twine upload --verbose --repository-url https://test.pypi.org/legacy/ dist/*


================================================
FILE: .github/workflows/osx-tests.yml
================================================
name: OSX Tests

on:
  workflow_call:
    inputs:
      python-versions:
        required: true
        type: string
      run-slow-tests:
        required: false
        default: 'false'
        type: string

jobs:
  osx_setup:
    runs-on: macos-15
    name: Setup and Cache Dependencies
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.10'

      - name: Install Python requirements
        run: |
          pip install --upgrade pip
          pip install -r conans/requirements.txt
          pip install -r conans/requirements_server.txt
          pip install -r conans/requirements_dev.txt
          pip install meson

      - name: Uninstall default CMake
        run: brew uninstall --formula cmake || true

      - name: Cache Homebrew packages
        id: cache-brew
        uses: actions/cache@v4
        with:
          path: ~/Library/Caches/Homebrew
          key: ${{ runner.os }}-brew

      - name: Install homebrew dependencies
        run: |
          brew install xcodegen make libtool zlib autoconf automake ninja emscripten

      - name: Cache CMake and Bazel installations
        id: cache-tools
        uses: actions/cache@v4
        with:
          path: |
            ~/Applications/CMake/3.15.7
            ~/Applications/CMake/3.19.7
            ~/Applications/CMake/3.23.5
            ~/Applications/CMake/3.27.9
            ~/Applications/CMake/4.2.1
            ~/Applications/bazel/6.5.0
            ~/Applications/bazel/7.6.2
            ~/Applications/bazel/8.4.2
          key: ${{ runner.os }}-conan-tools-cache

      - name: Build CMake old versions not available for ARM
        if: steps.cache-tools.outputs.cache-hit != 'true'
        run: |
          set -e
          CMAKE_BUILD_VERSIONS=("3.15.7")
          for version in "${CMAKE_BUILD_VERSIONS[@]}"; do
            echo "Compiling CMake version ${version} from source for ARM..."
            wget -q --no-check-certificate https://cmake.org/files/v${version%.*}/cmake-${version}.tar.gz
            tar -xzf cmake-${version}.tar.gz
            cd cmake-${version}
            mkdir build && cd build
            ../bootstrap --prefix=${HOME}/Applications/CMake/${version} -- -DCMAKE_USE_OPENSSL=ON
            make -j$(sysctl -n hw.ncpu)
            make install
            ${HOME}/Applications/CMake/${version}/bin/cmake --version
            cd ../../
            rm -rf cmake-${version} cmake-${version}.tar.gz
          done

      - name: Install universal CMake versions
        if: steps.cache-tools.outputs.cache-hit != 'true'
        run: |
          set -e
          CMAKE_PRECOMP_VERSIONS=("3.19.7" "3.23.5" "3.27.9" "4.2.1")
          for version in "${CMAKE_PRECOMP_VERSIONS[@]}"; do
            echo "Downloading and installing precompiled universal CMake version ${version}..."
            wget -q --no-check-certificate https://cmake.org/files/v${version%.*}/cmake-${version}-macos-universal.tar.gz
            tar -xzf cmake-${version}-macos-universal.tar.gz \
              --exclude=CMake.app/Contents/bin/cmake-gui \
              --exclude=CMake.app/Contents/doc/cmake \
              --exclude=CMake.app/Contents/share/cmake-${version%.*}/Help \
              --exclude=CMake.app/Contents/share/vim
            mkdir -p ${HOME}/Applications/CMake/${version}
            cp -fR cmake-${version}-macos-universal/CMake.app/Contents/* ${HOME}/Applications/CMake/${version}
            ${HOME}/Applications/CMake/${version}/bin/cmake --version
            rm -rf cmake-${version}-macos-universal
            rm cmake-${version}-macos-universal.tar.gz
          done

      - name: Install Bazel versions
        if: steps.cache-tools.outputs.cache-hit != 'true'
        run: |
          set -e
          for version in 6.5.0 7.6.2 8.4.2; do
            mkdir -p ${HOME}/Applications/bazel/${version}
            wget -q -O ${HOME}/Applications/bazel/${version}/bazel https://github.com/bazelbuild/bazel/releases/download/${version}/bazel-${version}-darwin-arm64
            chmod +x ${HOME}/Applications/bazel/${version}/bazel
          done

  osx_tests:
    needs: osx_setup
    runs-on: macos-15
    strategy:
      fail-fast: true
      matrix:
        python-version: ${{ fromJson(inputs.python-versions) }}
        test-type: [unittests, integration, functional]
        include:
        - test-type: unittests
          test-name: Unit
        - test-type: integration
          test-name: Integration
        - test-type: functional
          test-name: Functional
    name: ${{ matrix.test-name }} Tests (${{ matrix.python-version }})
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Restore tools cache
        uses: actions/cache@v4
        with:
          path: |
            ~/Applications/CMake/3.15.7
            ~/Applications/CMake/3.19.7
            ~/Applications/CMake/3.23.5
            ~/Applications/CMake/3.27.9
            ~/Applications/CMake/4.2.1
            ~/Applications/bazel/6.5.0
            ~/Applications/bazel/7.6.2
            ~/Applications/bazel/8.4.2
          key: ${{ runner.os }}-conan-tools-cache

      - name: Select Xcode 16.4
        run: |
          sudo xcode-select -s /Applications/Xcode_16.4.app
          xcodebuild -version
          xcrun --sdk macosx --show-sdk-version
          clang --version

      # Install system dependencies BEFORE setting up the matrix Python.
      # This prevents Emscripten (which requires Python 3.10+) from crashing
      # when trying to use Python 3.8 from the matrix.
      - name: Install homebrew dependencies
        run: |
          brew update
          brew install xcodegen make libtool zlib autoconf automake ninja emscripten
          export PATH=${HOME}/Applications/CMake/3.15.7/bin:$PATH:/usr/local/bin:/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin
          emcc --version
          cmake --version
          bazel --version

      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v5
        with:
          python-version: ${{ matrix.python-version }}

      - name: Install Python Dependencies
        run: |
          pip install --upgrade pip
          pip install -r conans/requirements.txt
          pip install -r conans/requirements_server.txt
          pip install -r conans/requirements_dev.txt
          pip install meson

      - name: Run tests
        uses: ./.github/actions/test-coverage
        with:
          python-version: ${{ matrix.python-version }}
          test-type: ${{ matrix.test-type }}
          tests: ${{ matrix.test-type == 'functional' && (inputs.run-slow-tests == 'true' && 'test/functional' || 'test/functional -m "not slow"') || format('test/{0}', matrix.test-type) }}


================================================
FILE: .github/workflows/win-tests.yml
================================================
name: Windows Tests

on:
  workflow_call:
    inputs:
      python-versions:
        required: true
        type: string
      run-slow-tests:
        required: false
        default: 'false'
        type: string

jobs:
  unit_integration_tests:
    runs-on: windows-2022
    strategy:
      matrix:
        python-version: ${{ fromJson(inputs.python-versions) }}
    name: Unit & Integration Tests (${{ matrix.python-version }})
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v5
        with:
          python-version: ${{ matrix.python-version }}

      - name: Install Visual Studio Build Tools
        run: |
          Invoke-WebRequest -Uri "https://aka.ms/vs/15/release/vs_buildtools.exe" -OutFile "vs_buildtools15.exe"
          Start-Process -FilePath ".\vs_buildtools15.exe" -ArgumentList `
            "--quiet",  "--wait", "--norestart", "--nocache", `
            "--add", "Microsoft.VisualStudio.Component.VC.Tools.x86.x64", `
            "--add", "Microsoft.Component.MSBuild" -WindowStyle Hidden -Wait

      - name: Determine pip cache directory
        id: pip-cache-dir
        shell: pwsh
        run: echo "PIP_CACHE_DIR=$(pip cache dir)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append

      - name: Cache pip packages
        uses: actions/cache@v4
        with:
          path: ${{ env.PIP_CACHE_DIR }}
          key: pip-packages-${{ runner.os }}-${{ matrix.python-version }}-${{ hashFiles('**/requirements*.txt') }}
          restore-keys: |
            pip-packages-${{ runner.os }}-${{ matrix.python-version }}-

      - name: Install Python requirements
        run: |
          pip install --upgrade pip
          pip install -r conans/requirements.txt
          pip install -r conans/requirements_dev.txt
          pip install -r conans/requirements_server.txt
          git config --global core.autocrlf false

      - name: Run Unit & Integration Tests
        uses: ./.github/actions/test-coverage
        with:
          python-version: ${{ matrix.python-version }}
          test-type: unit-integration
          tests: test/unittests test/integration

  functional_tests:
    runs-on: windows-2022
    strategy:
      matrix:
        python-version: ${{ fromJson(inputs.python-versions) }}
    name: Functional Tests (${{ matrix.python-version }})
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up Python ${{ matrix.python-version }}
        uses: actions/setup-python@v5
        with:
          python-version: ${{ matrix.python-version }}

      - name: Install MSVC v14.38 Toolset
        run: |
          Start-Process -Wait "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vs_installer.exe" -ArgumentList {`
            modify `
            --quiet `
            --installPath "C:\Program Files\Microsoft Visual Studio\2022\Enterprise" `
            --add `
            Microsoft.VisualStudio.Component.VC.14.38.17.8.x86.x64 `
          }

      - name: Verify MSVC v14.38 toolset installation
        run: dir "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC"

      - name: Install Visual Studio Build Tools
        run: |
          Invoke-WebRequest -Uri "https://aka.ms/vs/15/release/vs_buildtools.exe" -OutFile "vs_buildtools15.exe"
          Start-Process -FilePath ".\vs_buildtools15.exe" -ArgumentList `
            "--quiet",  "--wait", "--norestart", "--nocache", `
            "--add", "Microsoft.VisualStudio.Component.VC.Tools.x86.x64", `
            "--add", "Microsoft.VisualStudio.Component.Windows81SDK", `
            "--add", "Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Core", `
            "--add", "Microsoft.Component.MSBuild", `
            "--add", "Microsoft.VisualStudio.Component.VC.140" -WindowStyle Hidden -Wait

      - name: Determine pip cache directory
        id: pip-cache-dir
        shell: pwsh
        run: echo "PIP_CACHE_DIR=$(pip cache dir)" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append


      - name: Cache pip packages
        uses: actions/cache@v4
        with:
          path: ${{ env.PIP_CACHE_DIR }}
          key: pip-packages-${{ runner.os }}-${{ matrix.python-version }}-${{ hashFiles('**/requirements*.txt') }}
          restore-keys: |
            pip-packages-${{ runner.os }}-${{ matrix.python-version }}-

      - name: Install Python requirements
        run: |
          pip install --upgrade pip
          pip install -r conans/requirements.txt
          pip install -r conans/requirements_server.txt
          pip install -r conans/requirements_dev.txt
          pip install meson

      - name: "Set choco cache"
        run: choco config set cacheLocation C:\choco-cache

      - uses: actions/cache@v4
        with:
          path: C:\choco-cache
          key: choco-cache

      - name: Install Chocolatey packages
        run: |
          choco install pkgconfiglite --version 0.28
          choco install ninja --version 1.10.2
          choco install mingw
          # mirrors.kernel.org/sourceware/cygwin returns 404; use alternative mirror from this list: https://cygwin.com/mirrors.html
          choco install cygwin --execution-timeout=300 --package-parameters="'/Site:https://mirror.clarkson.edu/cygwin/'"
          choco install cyg-get
          cyg-get automake gcc-g++ make binutils --verbose

      - uses: msys2/setup-msys2@v2
        id: msys2-setup
        with:
            update: true
            # It's important that the default environment that is used is MSYS
            # we check this default in a test
            msystem: MSYS
            install: >-
                mingw-w64-x86_64-toolchain
                mingw-w64-i686-toolchain
                mingw-w64-ucrt-x86_64-toolchain
                mingw-w64-clang-x86_64-toolchain
                base-devel
                gcc
                autoconf-wrapper
                automake
                libtool

      - name: Cache CMake and Bazel installations
        id: cache-tools
        uses: actions/cache@v4
        with:
          path: |
            C:\tools\cmake\3.15.7
            C:\tools\cmake\3.19.7
            C:\tools\cmake\3.23.5
            C:\tools\cmake\3.27.9
            C:\tools\cmake\4.2.1
            C:\tools\bazel\6.5.0
            C:\tools\bazel\7.6.2
            C:\tools\bazel\8.4.2
          key: ${{ runner.os }}-conan-tools-cache

      - name: Install CMake versions
        if: steps.cache-tools.outputs.cache-hit != 'true'
        run: |
          $CMAKE_BUILD_VERSIONS = "3.15.7", "3.19.7", "3.23.5", "3.27.9", "4.2.1"
          foreach ($version in $CMAKE_BUILD_VERSIONS) {
            Write-Host "Downloading CMake version $version for Windows..."
            $destination = "C:\tools\cmake\$version"
            if (-not (Test-Path $destination)) {
                New-Item -Path $destination -ItemType Directory
            }
            $major_minor_version = ($version -split '\.')[0..1] -join '.'
            if ( $major_minor_version -eq "3.15" -or $major_minor_version -eq "3.19" ) {
                $arch = "win64-x64"
            } else {
                $arch = "windows-x86_64"
            }
            $url = "https://cmake.org/files/v$major_minor_version/cmake-$version-$arch.zip"
            $zipFile = "cmake-$version-windows-x86_64.zip"
            Invoke-WebRequest -Uri $url -OutFile $zipFile
            Expand-Archive -Path $zipFile -DestinationPath $destination -Force
            Remove-Item $zipFile
          }

      - name: Install Bazel versions
        if: steps.cache-tools.outputs.cache-hit != 'true'
        run: |
          $BAZEL_BUILD_VERSIONS = "6.5.0", "7.6.2", "8.4.2"
          foreach ($version in $BAZEL_BUILD_VERSIONS) {
              Write-Host "Downloading Bazel version $version for Windows..."
              $destination = "C:\tools\bazel\$version"
              if (-not (Test-Path $destination)) {
                  New-Item -Path $destination -ItemType Directory
              }
              $major_minor_version = ($version -split '\.')[0..1] -join '.'
              $url = "https://github.com/bazelbuild/bazel/releases/download/$version/bazel-$version-windows-x86_64.zip"
              $zipFile = "bazel-$version-windows-x86_64.zip"
              Invoke-WebRequest -Uri $url -OutFile $zipFile
              Expand-Archive -Path $zipFile -DestinationPath $destination -Force
              Remove-Item $zipFile
          }

      - name: Prepare environment for functional tests
        run: |
          git config --global core.autocrlf false

          $pathsToRemove = @()
          $pathsToRemove += "C:\mingw64\bin"                # To avoid that CMake finds gcc there
          $pathsToRemove += "C:\Strawberry\c\bin"
          $pathsToRemove += "C:\Program Files\CMake\bin"    # Remove the default CMake version
          $pathsToRemove += "C:\Program Files\Git\usr\bin"  # To avoid using uname and other tools from there
          foreach ($dir in $pathsToRemove) {
              $newPath = ($env:PATH -split ";") -ne $dir -join ";"
              [System.Environment]::SetEnvironmentVariable('PATH', $newPath)
              Write-Host "$dir removed from PATH. Current PATH: $env:PATH"
          }

          # Check GCC is not in Path
          $gccPath = Get-Command gcc.exe -ErrorAction SilentlyContinue
          if ($null -ne $gccPath) {
              Write-Host "GCC found in PATH at: $($gccPath.Path)"
          } else {
              Write-Host "GCC not found in PATH."
          }

          $shortGuid = [System.Guid]::NewGuid().ToString().Substring(0, 4)
          $randomFolder = [System.IO.Path]::Combine("D:\\", "tmp_tests", $shortGuid)
          New-Item -ItemType Directory -Force -Path $randomFolder
          $env:CONAN_TEST_FOLDER = $randomFolder
          $env:Path = "C:\tools\cmake\3.15.7\cmake-3.15.7-win64-x64\bin;" + $env:Path

          $msys2Path = '${{ steps.msys2-setup.outputs.msys2-location }}'
          [System.Environment]::SetEnvironmentVariable('MSYS2_PATH', $msys2Path, [System.EnvironmentVariableTarget]::Process)
          Write-Host "Added MSYS2_PATH environment variable: $msys2Path"

          # Export variables so they persist in the next steps
          echo "PATH=$env:Path" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
          echo "CONAN_TEST_FOLDER=$env:CONAN_TEST_FOLDER" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
          echo "MSYS2_PATH=$msys2Path" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append

      - name: Run Functional Tests
        uses: ./.github/actions/test-coverage
        with:
          python-version: ${{ matrix.python-version }}
          test-type: functional
          tests: ${{ inputs.run-slow-tests == 'true' && 'test/functional' || 'test/functional -m "not slow"' }}


================================================
FILE: .gitignore
================================================
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
venv/
.venv/
*.egg-info/
.installed.cfg
*.egg
pip-wheel-metadata/

# PyInstaller
#  Usually these files are written by a python script from a template
#  before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*,cover
.pytest_cache/

# Translations
*.mo
*.pot

# Django stuff:
*.log

# Sphinx documentation
docs/_build/

# PyBuilder
target/


# OS generated files #
######################
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
Icon?
ehthumbs.db
Thumbs.db

.pydev*
.project

# IDEs #
########
.metadata
.idea
.history/

conan.conf
*default_package_folder

#Eclipse folder
.settings

#VScode folder
.vscode

#Generated certificate file
cacert.pem

#linux backup and vim files
*~
.*.sw?
Session.vim

#Pyinstaller generated binaries
/pyinstaller

# Run tests in docker in current dir
.bash_history
.conan_server/
.sudo_as_admin_successful
.noseids

# add excluded
!conans/client/build
!conan/tools/build
!test/unittests/client/build
!test/unittests/tools/build


================================================
FILE: LICENSE.md
================================================
The MIT License (MIT)

Copyright (c) 2019 JFrog LTD



Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:



The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.



THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.



================================================
FILE: MANIFEST.in
================================================
include LICENSE.md

================================================
FILE: README.md
================================================
<picture>
  <!-- These are also used for https://github.com/conan-io/.github/blob/main/profile/README.md -->
  <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/conan-io/conan/develop2/.github/conan2-logo-for-dark.svg">
  <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/conan-io/conan/develop2/.github/conan2-logo-for-light.svg">
  <img alt="JFrog | Conan 2.0 Logo" src="https://raw.githubusercontent.com/conan-io/conan/develop2/.github/conan2-logo-with-bg.svg">
</picture>

# Conan

Decentralized, open-source (MIT), C/C++ package manager.

- Homepage: https://conan.io/
- Github: https://github.com/conan-io/conan
- Docs: https://docs.conan.io
- Slack: https://cpplang.slack.com (#conan channel. Please, click [here](https://cppalliance.org/slack/#cpp-slack) to get an invitation)
- Twitter: https://twitter.com/conan_io
- Blog: https://blog.conan.io
- Security reports: https://jfrog.com/trust/report-vulnerability


Conan is a package manager for C and C++ developers:

- It is fully decentralized. Users can host their packages on their servers, privately. Integrates with Artifactory and Bintray.
- Portable. Works across all platforms, including Linux, OSX, Windows (with native and first-class support, WSL, MinGW),
  Solaris, FreeBSD, embedded and cross-compiling, docker, WSL
- Manage binaries. It can create, upload and download binaries for any configuration and platform,
  even cross-compiling, saving lots of time in development and continuous integration. The binary compatibility can be configured
  and customized. Manage all your artifacts in the same way on all platforms.
- Integrates with any build system, including any proprietary and custom one. Provides tested support for major build systems
  (CMake, MSBuild, Makefiles, Meson, etc).
- Extensible: Its Python-based recipes, together with extension points allow for great power and flexibility.
- Large and active community, especially in GitHub (https://github.com/conan-io/conan) and Slack (https://cppalliance.org/slack/ #conan channel).
  This community also creates and maintains packages in ConanCenter and Bincrafters repositories in Bintray.
- Stable. Used in production by many companies, since 1.0 there is a commitment not to break package recipes and documented behavior.


This is the **developer/maintainer** documentation. For user documentation, go to https://docs.conan.io


## Setup

You can run Conan from source in Windows, MacOS, and Linux:

- **Install pip following** [pip docs](https://pip.pypa.io/en/stable/installation/).

- **Clone Conan repository:**

  ```bash
  $ git clone https://github.com/conan-io/conan.git conan-io
  ```

  > **Note**: repository directory name matters, some directories are known to be problematic to run tests (e.g. `conan`). `conan-io` directory name was tested and guaranteed to be working.

- **Install in editable mode**

  ```bash
  $ cd conan-io && sudo pip install -e .
  ```

  If you are in Windows, using ``sudo`` is not required. Some Linux distros won't allow you to put Python packages in editable mode in the root Python installation, and creating a virtual environment ``venv`` first, is mandatory.

- **You are ready, try to run Conan:**

  ```bash
  $ conan --help

  Consumer commands
    install    Installs the requirements specified in a recipe (conanfile.py or conanfile.txt).
    ...

    Conan commands. Type "conan <command> -h" for help
  ```

## Contributing to the project


Feedback and contribution are always welcome in this project.
Please read our [contributing guide](https://github.com/conan-io/conan/blob/develop2/.github/CONTRIBUTING.md).
Also, if you plan to contribute, please add some testing for your changes. You can read the [Conan
tests guidelines section](https://github.com/conan-io/conan/blob/develop2/test/README.md) for
some advice on how to write tests for Conan.

### Running the tests


**Install Python requirements**

```bash
$ python -m pip install -r conans/requirements.txt
$ python -m pip install -r conans/requirements_server.txt
$ python -m pip install -r conans/requirements_dev.txt
```

If you are not on Windows and you are not using a Python virtual environment, you will need to run these
commands using `sudo`.

Before you can run the tests, you need to set a few environment variables first.

```bash
$ export PYTHONPATH=$PYTHONPATH:$(pwd)
```

On Windows it would be (while being in the Conan root directory):

```bash
$ set PYTHONPATH=.
```

Conan test suite defines and configures some required tools (CMake, Ninja, etc) in the
``conftest.py`` and allows to define a custom ``conftest_user.py``.
Some specific versions, like cmake>=3.15 are necessary.


You can run the tests like this:

```bash
$ python -m pytest .
```

A few minutes later it should print ``OK``:

```bash
............................................................................................
----------------------------------------------------------------------
Ran 146 tests in 50.993s

OK
```

To run specific tests, you can specify the test name too, something like:

```bash
$ python -m pytest test/functional/command/export_test.py::TestRevisionModeSCM::test_revision_mode_scm -s
```

The `-s` argument can be useful to see some output that otherwise is captured by *pytest*.

Also, you can run tests against an instance of Artifactory. Those tests should add the attribute
`artifactory_ready`.

```bash
$ python -m pytest . -m artifactory_ready
```

Some environment variables have to be defined to run them. For example, for an
Artifactory instance that is running on the localhost with default user and password configured, the
variables could take the values:

```bash
$ export CONAN_TEST_WITH_ARTIFACTORY=1
$ export ARTIFACTORY_DEFAULT_URL=http://localhost:8081/artifactory
$ export ARTIFACTORY_DEFAULT_USER=admin
$ export ARTIFACTORY_DEFAULT_PASSWORD=password
```

`ARTIFACTORY_DEFAULT_URL` is the base URL for the Artifactory repo, not one for a specific
repository. Running the tests with a real Artifactory instance will create repos on the fly so please
use a separate server for testing purposes.

## License

[MIT LICENSE](LICENSE.md)


================================================
FILE: codecov.yml
================================================
comment: false # Disable codecov PR comments -> leave only the checks
coverage:
    status:
        project:
            default:
                # https://docs.codecov.com/docs/commit-status#informational
                # Avoids failing on coverage decrease
                informational: true
        patch:
            default:
                informational: true
ignore:
  - "test/performance"


================================================
FILE: conan/__init__.py
================================================
from conan.internal.model.conan_file import ConanFile
from conan.internal.model.workspace import Workspace
from conan.internal.model.version import Version

__version__ = '2.27.0-dev'
conan_version = Version(__version__)


================================================
FILE: conan/api/__init__.py
================================================


================================================
FILE: conan/api/conan_api.py
================================================
import os
import sys

from conan.api.output import init_colorama
from conan.api.subapi.audit import AuditAPI
from conan.api.subapi.cache import CacheAPI
from conan.api.subapi.command import CommandAPI
from conan.api.subapi.local import LocalAPI
from conan.api.subapi.lockfile import LockfileAPI
from conan.api.subapi.report import ReportAPI
from conan.api.subapi.workspace import WorkspaceAPI
from conan.api.subapi.config import ConfigAPI
from conan.api.subapi.download import DownloadAPI
from conan.api.subapi.export import ExportAPI
from conan.api.subapi.install import InstallAPI
from conan.api.subapi.graph import GraphAPI
from conan.api.subapi.new import NewAPI
from conan.api.subapi.profiles import ProfilesAPI
from conan.api.subapi.list import ListAPI
from conan.api.subapi.remotes import RemotesAPI
from conan.api.subapi.remove import RemoveAPI
from conan.api.subapi.upload import UploadAPI
from conan.errors import ConanException
from conan.internal.api.remotes.localdb import LocalDB
from conan.internal.cache.cache import PkgCache
from conan.internal.cache.home_paths import HomePaths
from conan.internal.hook_manager import HookManager
from conan.internal.model.conf import load_global_conf, ConfDefinition, CORE_CONF_PATTERN
from conan.internal.model.settings import load_settings_yml
from conan.internal.paths import get_conan_user_home
from conan.internal.api.migrations import ClientMigrator
from conan.internal.model.version_range import validate_conan_version
from conan.internal.rest.auth_manager import ConanApiAuthManager
from conan.internal.rest.conan_requester import ConanRequester
from conan.internal.rest.remote_manager import RemoteManager


class ConanAPI:
    """
    This is the main object to interact with the Conan API. It provides all the subapis to work with
    recipes, packages, remotes, etc., which are exposed as attributes of this class, and should
    not be created directly.
    """
    def __init__(self, cache_folder=None):
        """
        :param cache_folder: Conan cache/home folder. It will have less priority than the
                             ``"home_folder"`` defined in a Workspace.
        """

        version = sys.version_info
        if version.major == 2 or version.minor < 7:
            raise ConanException("Conan needs Python >= 3.7")
        if cache_folder is not None and not os.path.isabs(cache_folder):
            raise ConanException("cache_folder has to be an absolute path")

        init_colorama(sys.stderr)
        # Deprecated, but still used internally, prefer home_folder
        self.cache_folder = cache_folder or get_conan_user_home()
        self._home_folder = self.cache_folder
        self._api_helpers = self._ApiHelpers(self)
        self.migrate()

        #: Used to interact with the local Conan configuration
        self.config: ConfigAPI = ConfigAPI(self, self._api_helpers)
        #: Used to interact with remotes
        self.remotes: RemotesAPI = RemotesAPI(self, self._api_helpers)
        self.command = CommandAPI(self)
        #: Used to get latest refs and list refs of recipes and packages
        self.list: ListAPI = ListAPI(self, self._api_helpers)
        self.profiles = ProfilesAPI(self, self._api_helpers)
        #: Used to install binaries, sources, deploy packages and more
        self.install: InstallAPI = InstallAPI(self, self._api_helpers)
        self.graph = GraphAPI(self, self._api_helpers)
        #: Used to export recipes and pre-compiled package binaries to the Conan cache
        self.export: ExportAPI = ExportAPI(self, self._api_helpers)
        self.remove = RemoveAPI(self, self._api_helpers)
        self.new = NewAPI(self)
        #: Used to upload recipes and packages to remotes
        self.upload: UploadAPI = UploadAPI(self, self._api_helpers)
        #: Used to download recipes and packages from remotes
        self.download: DownloadAPI = DownloadAPI(self, self._api_helpers)
        #: Used to interact wit the packages storage cache
        self.cache: CacheAPI = CacheAPI(self, self._api_helpers)
        #: Used to read and manage lockfile files
        self.lockfile: LockfileAPI = LockfileAPI(self)
        #: Local flow helpers for developer "source", "build", "editable" commands
        self.local: LocalAPI = LocalAPI(self, self._api_helpers)
        #: Used to check vulnerabilities of dependencies
        self.audit: AuditAPI = AuditAPI(self)
        #: Used to manage workspaces
        self.workspace: WorkspaceAPI = WorkspaceAPI(self)
        self.report: ReportAPI = ReportAPI(self, self._api_helpers)

    @property
    def home_folder(self) -> str:
        """ Where the Conan user home is located. Read only.
        Can be modified by the ``CONAN_HOME`` environment variable or by the
        ``.conanrc`` file in the current directory or any parent directory
        when Conan is called.
        """
        return self._home_folder

    def reinit(self):
        """
        Reinitialize the Conan API. This is useful when the configuration changes.
        """
        self._api_helpers.reinit()
        self.local.reinit()

    def migrate(self):
        # Migration system
        # TODO: A prettier refactoring of migrators would be nice
        from conan import conan_version
        migrator = ClientMigrator(self._home_folder, conan_version)
        migrator.migrate()

    class _ApiHelpers:
        # This is an internal implementation detail of Conan, DO NOT USE
        def __init__(self, conan_api):
            self._conan_api = conan_api
            self._cli_core_confs = None
            self._init_global_conf()
            # TODO: Make uniform lazy vs non lazy collaborators
            self.hook_manager = HookManager(HomePaths(self._conan_api.home_folder).hooks_path)
            # Wraps an http_requester to inject proxies, certs, etc
            self._requester = ConanRequester(self.global_conf, self._conan_api.home_folder)
            self.cache = PkgCache(self._conan_api.home_folder, self.global_conf)
            self._settings_yml = None
            self._remote_manager = None

        def set_core_confs(self, core_confs):
            confs = ConfDefinition()
            for c in core_confs:
                if not CORE_CONF_PATTERN.match(c):
                    raise ConanException(f"Only core. values are allowed in --core-conf. Got {c}")
            confs.loads("\n".join(core_confs))
            confs.validate()
            self._cli_core_confs = confs
            # Last but not least, apply the new configuration
            # This will in turn call ApiHelpers.reinit() as the very first thing
            self._conan_api.reinit()

        def _init_global_conf(self):
            self.global_conf = load_global_conf(self._conan_api.home_folder)
            if self._cli_core_confs:
                self.global_conf.update_conf_definition(self._cli_core_confs)
            required_range_new = self.global_conf.get("core:required_conan_version")
            if required_range_new:
                validate_conan_version(required_range_new)

        def reinit(self):
            self._init_global_conf()
            self.hook_manager.reinit()
            self._requester = ConanRequester(self.global_conf, self._conan_api.home_folder)
            self._settings_yml = None
            self.cache = PkgCache(self._conan_api.home_folder, self.global_conf)
            self._remote_manager = None

        @property
        def settings_yml(self):
            if self._settings_yml is None:
                self._settings_yml = load_settings_yml(self._conan_api.home_folder)
            return self._settings_yml

        @property
        def remote_manager(self):
            if self._remote_manager is None:
                home_folder = self._conan_api.home_folder
                localdb = LocalDB(home_folder)
                requester = self._conan_api._api_helpers.requester  # noqa
                auth_manager = ConanApiAuthManager(requester, self._conan_api.home_folder, localdb,
                                                   self.global_conf)
                self._remote_manager = RemoteManager(self.cache, auth_manager, home_folder)
            return self._remote_manager

        @property
        def requester(self):
            return self._requester


================================================
FILE: conan/api/input.py
================================================
import getpass
import sys

from conan.errors import ConanException


class UserInput:
    """Class to interact with the user, used to show messages and ask for information"""

    def __init__(self, non_interactive):
        """
        Params:
            ins: input stream
            out: ConanOutput, should have "write" method
        """
        self._ins = sys.stdin
        # FIXME: circular include, move "color_enabled" function to better location
        from conan.api.output import ConanOutput
        self._out = ConanOutput()
        self._interactive = not non_interactive

    def _raise_if_non_interactive(self):
        if not self._interactive:
            raise ConanException("Conan interactive mode disabled")

    def raw_input(self):
        self._raise_if_non_interactive()
        return input()

    def request_login(self, remote_name, username=None):
        """Request user to input their name and password
        :param remote_name:
        :param username If username is specified it only request password"""
        self._raise_if_non_interactive()
        if not username:
            self._out.login_msg(f"Remote '{remote_name}' username: ")
            username = self.get_username()

        self._out.login_msg("Please enter a password for "
                            f"user '{username}' on remote '{remote_name}': ")
        try:
            pwd = self.get_password()
        except ConanException:
            raise
        except Exception as e:
            raise ConanException('Cancelled pass %s' % e)
        return username, pwd

    def get_username(self):
        """Overridable for testing purpose"""
        return self.raw_input()

    @staticmethod
    def get_password():
        """Overridable for testing purpose"""
        try:
            return getpass.getpass("")
        except BaseException:  # For KeyboardInterrupt too
            raise ConanException("Interrupted interactive password input")

    def request_string(self, msg, default_value=None):
        """Request user to input a msg
        :param default_value:
        :param msg Name of the msg
        """
        self._raise_if_non_interactive()

        if default_value:
            self._out.write('%s (%s): ' % (msg, default_value))
        else:
            self._out.write('%s: ' % msg)
        s = self._ins.readline().replace("\n", "")
        if default_value is not None and s == '':
            return default_value
        return s

    def request_boolean(self, msg, default_option=None):
        """Request user to input a boolean"""
        ret = None
        while ret is None:
            if default_option:
                s = self.request_string("%s (YES/no)" % msg)
            elif default_option is False:
                s = self.request_string("%s (NO/yes)" % msg)
            else:
                s = self.request_string("%s (yes/no)" % msg)
            if default_option is not None and s == '':
                return default_option
            if s.lower() in ['yes', 'y']:
                ret = True
            elif s.lower() in ['no', 'n']:
                ret = False
            else:
                self._out.error(f"{s} is not a valid answer")
        return ret


================================================
FILE: conan/api/model/__init__.py
================================================
from conan.api.model.remote import Remote, LOCAL_RECIPES_INDEX
from conan.api.model.refs import RecipeReference, PkgReference
from conan.api.model.list import PackagesList, MultiPackagesList, ListPattern


================================================
FILE: conan/api/model/list.py
================================================
import copy
import fnmatch
import json
import os
from json import JSONDecodeError
from typing import Iterable, Tuple, Dict

from conan.api.model import RecipeReference, PkgReference
from conan.api.output import ConanOutput
from conan.errors import ConanException
from conan.internal.errors import NotFoundException
from conan.internal.model.version_range import VersionRange
from conan.internal.graph.graph import RECIPE_EDITABLE, RECIPE_CONSUMER, RECIPE_PLATFORM, \
    RECIPE_VIRTUAL, BINARY_SKIP, BINARY_MISSING, BINARY_INVALID
from conan.internal.util.files import load


class MultiPackagesList:
    """ A collection of PackagesList by remote name."""
    def __init__(self):
        self.lists = {}

    def __getitem__(self, name):
        try:
            return self.lists[name]
        except KeyError:
            raise ConanException(f"'{name}' doesn't exist in package list")

    def add(self, name, pkg_list):
        self.lists[name] = pkg_list

    def add_error(self, remote_name, error):
        self.lists[remote_name] = {"error": error}

    def serialize(self):
        """ Serialize object to a dictionary."""
        return {k: v.serialize() if isinstance(v, PackagesList) else v
                for k, v in self.lists.items()}

    def merge(self, other):
        for k, v in other.lists.items():
            self.lists.setdefault(k, PackagesList()).merge(v)

    @staticmethod
    def load(file):
        """ Create an instance of the class from a serialized JSON file path pointed by ``file``."""
        try:
            content = json.loads(load(file))
        except JSONDecodeError as e:
            raise ConanException(f"Package list file invalid JSON: {file}\n{e}")
        except Exception as e:
            raise ConanException(f"Package list file missing or broken: {file}\n{e}")
        # Check if input json is not a graph file
        if "graph" in content:
            base_path = os.path.basename(file)
            raise ConanException(
                'Expected a package list file but found a graph file. You can create a "package list" JSON file by running:\n\n'
                f"\tconan list --graph {base_path} --format=json > pkglist.json\n\n"
                "More Info at 'https://docs.conan.io/2/examples/commands/pkglists.html"
            )
        result = {}
        for remote, pkglist in content.items():
            if "error" in pkglist:
                result[remote] = pkglist
            else:
                result[remote] = PackagesList.deserialize(pkglist)
        pkglist = MultiPackagesList()
        pkglist.lists = result
        return pkglist

    @staticmethod
    def load_graph(graphfile, graph_recipes=None, graph_binaries=None, context=None):
        """ Create an instance of the class from a graph file path, which is
        the json format returned by a few commands
        like ``conan graph info`` or ``conan create/install.``

        :parameter str graphfile: Path to the graph file
        :parameter list[str] graph_recipes: List for kinds of recipes to return.
            For example ``"cache"`` will return only recipes in the local cache,
            ``"download"`` will return only recipes that have been downloaded,
            and passing ``"*"`` will return all recipes.
        :parameter list[str] graph_binaries: List for kinds of binaries to return.
            For example ``"cache"`` will return only binaries in the local cache,
            ``"download"`` will return only binaries that have been downloaded,
            ``"build"`` will return only binaries that are built,
            ``"missing"`` will return only binaries that are missing,
            ``"invalid"`` will return only binaries that are invalid,
            and passing ``"*"`` will return all binaries.
        :parameter str context: Context to filter the graph,
            can be ``"host"``, ``"build"``, ``"host-only"`` or ``"build-only"``
        """
        if not os.path.isfile(graphfile):
            raise ConanException(f"Graph file not found: {graphfile}")
        try:
            graph = json.loads(load(graphfile))
            # Check if input json is a graph file
            if "graph" not in graph:
                raise ConanException(
                    'Expected a graph file but found an unexpected JSON file format. You can create a "graph" JSON file by running:\n\n'
                    f"\tconan [ graph-info | create | export-pkg | install | test ] --format=json > graph.json\n\n"
                    "More Info at 'https://docs.conan.io/2/reference/commands/formatters/graph_info_json_formatter.html"
                )

            mpkglist = MultiPackagesList._define_graph(graph, graph_recipes, graph_binaries,
                                                       context=context)
            return mpkglist
        except JSONDecodeError as e:
            raise ConanException(f"Graph file invalid JSON: {graphfile}\n{e}")
        except KeyError as e:
            raise ConanException(f'Graph file {graphfile} is missing the required "{e}" key in its contents.\n'
                                 "Note that the graph file should not be filtered "
                                 "if you expect to use it with the list command.")
        except ConanException as e:
            raise e
        except Exception as e:
            raise ConanException(f"Graph file broken: {graphfile}\n{e}")

    @staticmethod
    def _define_graph(graph, graph_recipes=None, graph_binaries=None, context=None):
        base_context = context.split("-")[0] if context else None
        pkglist = MultiPackagesList()
        cache_list = PackagesList()
        if graph_recipes is None and graph_binaries is None:
            recipes = ["*"]
            binaries = ["*"]
        else:
            recipes = [r.lower() for r in graph_recipes or []]
            binaries = [b.lower() for b in graph_binaries or []]

        pkglist.lists["Local Cache"] = cache_list
        for node in graph["graph"]["nodes"].values():
            if base_context and node['context'] != base_context:
                continue

            # We need to add the python_requires too
            python_requires = node.get("python_requires")
            if python_requires is not None:
                for pyref, pyreq in python_requires.items():
                    pyrecipe = pyreq["recipe"]
                    if pyrecipe == RECIPE_EDITABLE:
                        continue
                    pyref = RecipeReference.loads(pyref)
                    if any(r == "*" or r == pyrecipe for r in recipes):
                        cache_list.add_ref(pyref)
                    pyremote = pyreq["remote"]
                    if pyremote:
                        remote_list = pkglist.lists.setdefault(pyremote, PackagesList())
                        remote_list.add_ref(pyref)

            recipe = node["recipe"]
            if recipe in (RECIPE_EDITABLE, RECIPE_CONSUMER, RECIPE_VIRTUAL, RECIPE_PLATFORM):
                continue

            ref = node["ref"]
            ref = RecipeReference.loads(ref)
            ref.timestamp = node["rrev_timestamp"]
            recipe = recipe.lower()
            if any(r == "*" or r == recipe for r in recipes):
                cache_list.add_ref(ref)

            remote = node["remote"]
            if remote:
                remote_list = pkglist.lists.setdefault(remote, PackagesList())
                remote_list.add_ref(ref)
            pref = PkgReference(ref, node["package_id"], node["prev"], node["prev_timestamp"])
            binary_remote = node["binary_remote"]
            if binary_remote:
                remote_list = pkglist.lists.setdefault(binary_remote, PackagesList())
                remote_list.add_ref(ref)  # Binary listed forces recipe listed
                remote_list.add_pref(pref)

            binary = node["binary"]
            if binary in (BINARY_SKIP, BINARY_INVALID, BINARY_MISSING):
                continue

            binary = binary.lower()
            if any(b == "*" or b == binary for b in binaries):
                cache_list.add_ref(ref)  # Binary listed forces recipe listed
                cache_list.add_pref(pref, node["info"])
        # Now filter possible exclusive contexts once that we know how they are distributed
        MultiPackagesList._filter_exclusive_context(pkglist, graph, context)
        return pkglist

    @staticmethod
    def _filter_exclusive_context(mpkglist, graph, context):
        if context not in ("host-only", "build-only"):
            return

        pref_contexts = {}
        for node in graph["graph"]["nodes"].values():
            if (node["recipe"] not in (RECIPE_CONSUMER, RECIPE_VIRTUAL)
                and node["ref"] and node["package_id"]):
                pref = node["ref"] + ":" + node["package_id"]
                pref_contexts.setdefault(pref, set()).add(node['context'])

        opposite_context = "build" if context == "host-only" else "host"
        for remote, pkglist in mpkglist.lists.items():
            for pref, contexts in pref_contexts.items():
                if opposite_context in contexts:
                    pref = PkgReference.loads(pref)
                    if pkglist.has_rref(pref.ref):
                        rev_dict = pkglist.recipe_dict(pref.ref)
                        rev_dict.get("packages", {}).pop(pref.package_id, None)
                        if len(rev_dict.get("packages", {})) == 0:
                            pkglist._data.pop(str(pref.ref), None)


class PackagesList:
    """ A collection of recipes, revisions and packages."""
    def __init__(self):
        self._data = {}

    def __bool__(self):
        """ Whether the package list contains any recipe"""
        return bool(self._data)

    def merge(self, other):
        assert isinstance(other, PackagesList)

        def recursive_dict_update(d, u):  # TODO: repeated from conandata.py
            for k, v in u.items():
                if isinstance(v, dict):
                    d[k] = recursive_dict_update(d.get(k, {}), v)
                else:
                    d[k] = v
            return d
        recursive_dict_update(self._data, other._data)

    def split(self):
        """
        Returns a list of PackageList, split one per reference.
        This can be useful to parallelize things like upload, parallelizing per-reference
        """
        result = []
        for r, content in self._data.items():
            subpkglist = PackagesList()
            subpkglist._data[r] = content
            result.append(subpkglist)
        return result

    def only_recipes(self) -> None:
        """ Filter out all the packages and package revisions, keep only the recipes and
            recipe revisions in self._data.
        """
        for ref, ref_dict in self._data.items():
            for rrev_dict in ref_dict.get("revisions", {}).values():
                rrev_dict.pop("packages", None)

    def add_refs(self, refs):
        ConanOutput().warning("PackagesLists.add_refs() non-public, non-documented method will be "
                              "removed, use .add_ref() instead", warn_tag="deprecated")
        # RREVS alreday come in ASCENDING order, so upload does older revisions first
        for ref in refs:
            self.add_ref(ref)

    def add_ref(self, ref: RecipeReference) -> None:
        """
        Adds a new RecipeReference to a package list
        """
        ref_dict = self._data.setdefault(str(ref), {})
        if ref.revision:
            revs_dict = ref_dict.setdefault("revisions", {})
            rev_dict = revs_dict.setdefault(ref.revision, {})
            if ref.timestamp:
                rev_dict["timestamp"] = ref.timestamp

    def add_prefs(self, rrev, prefs):
        ConanOutput().warning("PackageLists.add_prefs() non-public, non-documented method will be "
                              "removed, use .add_pref() instead", warn_tag="deprecated")
        # Prevs already come in ASCENDING order, so upload does older revisions first
        for p in prefs:
            self.add_pref(p)

    def add_pref(self, pref: PkgReference, pkg_info: dict = None) -> None:
        """
        Add a PkgReference to an already existing RecipeReference inside a package list
        """
        # Prevs already come in ASCENDING order, so upload does older revisions first
        rev_dict = self.recipe_dict(pref.ref)
        packages_dict = rev_dict.setdefault("packages", {})
        package_dict = packages_dict.setdefault(pref.package_id, {})
        if pref.revision:
            prevs_dict = package_dict.setdefault("revisions", {})
            prev_dict = prevs_dict.setdefault(pref.revision, {})
            if pref.timestamp:
                prev_dict["timestamp"] = pref.timestamp
        if pkg_info is not None:
            package_dict["info"] = pkg_info

    def add_configurations(self, confs):
        ConanOutput().warning("PackageLists.add_configurations() non-public, non-documented method "
                              "will be removed, use .add_pref() instead",
                              warn_tag="deprecated")
        for pref, conf in confs.items():
            rev_dict = self.recipe_dict(pref.ref)
            try:
                rev_dict["packages"][pref.package_id]["info"] = conf
            except KeyError:  # If package_id does not exist, do nothing, only add to existing prefs
                pass

    def refs(self):
        ConanOutput().warning("PackageLists.refs() non-public, non-documented method will be "
                              "removed, use .items() instead", warn_tag="deprecated")
        result = {}
        for ref, ref_dict in self._data.items():
            for rrev, rrev_dict in ref_dict.get("revisions", {}).items():
                t = rrev_dict.get("timestamp")
                recipe = RecipeReference.loads(f"{ref}#{rrev}")  # TODO: optimize this
                if t is not None:
                    recipe.timestamp = t
                result[recipe] = rrev_dict
        return result

    def items(self) -> Iterable[Tuple[RecipeReference, Dict[PkgReference, Dict]]]:
        """ Iterate the contents of the package list.

        The first dictionary is the information directly belonging to the recipe-revision.
        The second dictionary contains PkgReference as keys, and a dictionary with the values
        belonging to that specific package reference (settings, options, etc.).
        """
        for ref, ref_dict in self._data.items():
            for rrev, rrev_dict in ref_dict.get("revisions", {}).items():
                recipe = RecipeReference.loads(f"{ref}#{rrev}")  # TODO: optimize this
                t = rrev_dict.get("timestamp")
                if t is not None:
                    recipe.timestamp = t
                packages = {}
                for package_id, pkg_info in rrev_dict.get("packages", {}).items():
                    prevs = pkg_info.get("revisions", {})
                    for prev, prev_info in prevs.items():
                        t = prev_info.get("timestamp")
                        pref = PkgReference(recipe, package_id, prev, t)
                        packages[pref] = prev_info
                yield recipe, packages

    def recipe_dict(self, ref: RecipeReference):
        """ Gives read/write access to the dictionary containing a specific RecipeReference
        information.
        """
        return self._data[str(ref)]["revisions"][ref.revision]

    def has_rref(self, ref: RecipeReference) -> bool:
        # Checks if the PackagesList contains the given RecipeReference.
        return str(ref) in self._data and ref.revision in self._data[str(ref)].get("revisions", {})

    def package_dict(self, pref: PkgReference):
        """ Gives read/write access to the dictionary containing a specific PkgReference
        information
        """
        ref_dict = self.recipe_dict(pref.ref)
        return ref_dict["packages"][pref.package_id]["revisions"][pref.revision]

    @staticmethod
    def prefs(ref, recipe_bundle):
        ConanOutput().warning("PackageLists.prefs() non-public, non-documented method will be "
                              "removed, use .items() instead", warn_tag="deprecated")
        result = {}
        for package_id, pkg_bundle in recipe_bundle.get("packages", {}).items():
            prevs = pkg_bundle.get("revisions", {})
            for prev, prev_bundle in prevs.items():
                t = prev_bundle.get("timestamp")
                pref = PkgReference(ref, package_id, prev, t)
                result[pref] = prev_bundle
        return result

    def serialize(self):
        """ Serialize the instance to a dictionary."""
        return copy.deepcopy(self._data)

    @staticmethod
    def deserialize(data):
        """ Loads the data from a serialized dictionary."""
        result = PackagesList()
        result._data = copy.deepcopy(data)
        return result


class ListPattern:
    """ Object holding a pattern that matches recipes, revisions and packages."""

    def __init__(self, expression, rrev="latest", package_id=None, prev="latest", only_recipe=False):
        """
        :param expression: The pattern to match, e.g. ``"name/*:*"``
        :param rrev: The recipe revision to match, defaults to ``"latest"``,
                     can also be ``"!latest"`` or ``"~latest"`` to match all but the latest revision,
                     a pattern like ``"1234*"`` to match a specific revision,
                     or a specific revision like ``"1234"``.
        :param package_id: The package ID to match, defaults to ``None``, which matches all package IDs.
        :param prev: The package revision to match, defaults to ``"latest"``,
                     can also be ``"!latest"`` or ``"~latest"`` to match all but the latest revision,
                     a pattern like ``"1234*"`` to match a specific revision,
                     or a specific revision like ``"1234"``.
        :param only_recipe: If ``True``, only the recipe part of the expression is parsed,
                            ignoring ``package_id`` and ``prev``. This is useful for commands that
                            only operate on recipes, like ``conan search``.
        """
        def split(s, c, default=None):
            if not s:
                return None, default
            tokens = s.split(c, 1)
            if len(tokens) == 2:
                return tokens[0], tokens[1] or default
            return tokens[0], default

        recipe, package = split(expression, ":")
        self.raw = expression
        self.ref, rrev = split(recipe, "#", rrev)
        ref, user_channel = split(self.ref, "@")
        self.name, self.version = split(ref, "/")
        self.user, self.channel = split(user_channel, "/")
        self.rrev, _ = split(rrev, "%")
        self.package_id, prev = split(package, "#", prev)
        self.prev, _ = split(prev, "%")
        if only_recipe:
            if self.package_id:
                raise ConanException("Do not specify 'package_id' with 'only-recipe'")
        else:
            self.package_id = self.package_id or package_id

    @staticmethod
    def _only_latest(rev):
        return rev in ["!latest", "~latest"]

    @property
    def search_ref(self):
        vrange = self._version_range
        if vrange:
            return str(RecipeReference(self.name, "*", self.user, self.channel))
        if "*" in self.ref or not self.version or (self.package_id is None and self.rrev is None):
            return self.ref

    @property
    def _version_range(self):
        if self.version and self.version.startswith("[") and self.version.endswith("]"):
            return VersionRange(self.version[1:-1])

    def filter_versions(self, refs, resolve_prereleases=None):
        vrange = self._version_range
        if vrange:
            refs = [r for r in refs if vrange.contains(r.version, resolve_prereleases)]
        return refs

    @property
    def is_latest_rrev(self):
        return self.rrev == "latest"

    @property
    def is_latest_prev(self):
        return self.prev == "latest"

    def check_refs(self, refs):
        if not refs and self.ref and "*" not in self.ref:
            raise NotFoundException(f"Recipe '{self.ref}' not found")

    def filter_rrevs(self, rrevs):
        if self._only_latest(self.rrev):
            return rrevs[1:]
        rrevs = [r for r in rrevs if fnmatch.fnmatch(r.revision, self.rrev)]
        if not rrevs:
            refs_str = f'{self.ref}#{self.rrev}'
            if "*" not in refs_str:
                raise ConanException(f"Recipe revision '{refs_str}' not found")
        return rrevs

    def filter_prefs(self, prefs):
        prefs = [p for p in prefs if fnmatch.fnmatch(p.package_id, self.package_id)]
        if not prefs:
            refs_str = f'{self.ref}#{self.rrev}:{self.package_id}'
            if "*" not in refs_str:
                raise ConanException(f"Package ID '{self.raw}' not found")
        return prefs

    def filter_prevs(self, prevs):
        if self._only_latest(self.prev):
            return prevs[1:]
        prevs = [p for p in prevs if fnmatch.fnmatch(p.revision, self.prev)]
        if not prevs:
            refs_str = f'{self.ref}#{self.rrev}:{self.package_id}#{self.prev}'
            if "*" not in refs_str:
                raise ConanException(f"Package revision '{self.raw}' not found")
        return prevs


================================================
FILE: conan/api/model/refs.py
================================================

import fnmatch
import re
from functools import total_ordering

from conan.errors import ConanException
from conan.internal.model.version import Version
from conan.internal.util.dates import timestamp_to_str


@total_ordering
class RecipeReference:
    """ An exact (no version-range, no alias) reference of a recipe,
    it represents a reference of the form ``name/version[@user/channel][#revision][%timestamp]``.
    Should be enough to locate a recipe in the cache or in a server, and
    validation will be external to this class, at specific points (export, api, etc).
    """

    def __init__(self, name=None, version=None, user=None, channel=None, revision=None,
                 timestamp=None):
        """ The attributes should be regarded as immutable, and should not be modified by the user."""
        #: Name of the reference
        self.name: str = name
        if version is not None and not isinstance(version, Version):
            version = Version(version)
        #: Version of the reference
        self.version: Version = version  # This MUST be a version if we want to be able to order
        #: User of the reference, if any
        self.user = user
        #: Channel of the reference, if any
        self.channel = channel
        #: Revision of the reference, if any
        self.revision = revision
        #: Timestamp of the reference, if any
        self.timestamp = timestamp

    def copy(self):
        # Used for creating copy in lockfile-overrides mechanism
        return RecipeReference(self.name, self.version, self.user, self.channel, self.revision,
                               self.timestamp)

    def __repr__(self):
        """ long repr like pkg/0.1@user/channel#rrev%timestamp """
        result = self.repr_notime()
        if self.timestamp is not None:
            result += "%{}".format(self.timestamp)
        return result

    def repr_notime(self):
        result = self.__str__()
        if self.revision is not None:
            result += "#{}".format(self.revision)
        return result

    def repr_humantime(self):
        result = self.repr_notime()
        assert self.timestamp
        result += " ({})".format(timestamp_to_str(self.timestamp))
        return result

    def __str__(self):
        """ shorter representation, excluding the revision and timestamp """
        if self.name is None:
            return ""
        result = "/".join([self.name, str(self.version)])
        if self.user:
            result += "@{}".format(self.user)
        if self.channel:
            assert self.user
            result += "/{}".format(self.channel)
        return result

    def __lt__(self, ref):
        # The timestamp goes before the revision for ordering revisions chronologically
        # In theory this is enough for sorting
        # When no timestamp is given, it will always have lower priority, to avoid comparison
        # errors float <> None
        return (self.name, self.version, self.user or "", self.channel or "", self.timestamp or 0,
                self.revision or "") \
               < (ref.name, ref.version, ref.user or "", ref.channel or "", ref.timestamp or 0,
                  ref.revision or "")

    def __eq__(self, ref):
        # Timestamp doesn't affect equality.
        # This is necessary for building an ordered list of UNIQUE recipe_references for Lockfile
        if ref is None:
            return False
        # If one revision is not defined, they are equal
        if self.revision is not None and ref.revision is not None:
            return (self.name, self.version, self.user, self.channel, self.revision) == \
                   (ref.name, ref.version, ref.user, ref.channel, ref.revision)
        return (self.name, self.version, self.user, self.channel) == \
               (ref.name, ref.version, ref.user, ref.channel)

    def __hash__(self):
        # This is necessary for building an ordered list of UNIQUE recipe_references for Lockfile
        return hash((self.name, self.version, self.user, self.channel))

    @staticmethod
    def loads(rref):
        """ Instantiates an object from a string, in the form:
        ``name/version[@user/channel][#revision][%timestamp]``"""
        try:
            # timestamp
            tokens = rref.rsplit("%", 1)
            text = tokens[0]
            timestamp = float(tokens[1]) if len(tokens) == 2 else None

            # revision
            tokens = text.split("#", 1)
            ref = tokens[0]
            revision = tokens[1] if len(tokens) == 2 else None

            # name, version always here
            tokens = ref.split("@", 1)
            name, version = tokens[0].split("/", 1)
            assert name and version
            # user and channel
            if len(tokens) == 2 and tokens[1]:
                tokens = tokens[1].split("/", 1)
                user = tokens[0] if tokens[0] else None
                channel = tokens[1] if len(tokens) == 2 else None
            else:
                user = channel = None
            return RecipeReference(name, version, user, channel, revision, timestamp)
        except Exception:
            from conan.errors import ConanException
            raise ConanException(
                f"{rref} is not a valid recipe reference, provide a reference"
                f" in the form name/version[@user/channel]")

    def validate_ref(self, allow_uppercase=False):
        """ Check that the reference is valid, and raise a ``ConanException`` if not.
        """
        from conan.api.output import ConanOutput
        self_str = str(self)
        if self_str != self_str.lower():
            if not allow_uppercase:
                raise ConanException(f"Conan packages names '{self_str}' must be all lowercase")
            else:
                ConanOutput().warning(f"Package name '{self_str}' has uppercase, and has been "
                                      "allowed by temporary config. This will break in later 2.X")
        if len(self_str) > 200:
            raise ConanException(f"Package reference too long >200 {self_str}")
        if ":" in repr(self):
            raise ConanException(f"Invalid recipe reference '{repr(self)}' is a package reference")
        if not allow_uppercase:
            validation_pattern = re.compile(r"^[a-z0-9_][a-z0-9_+.-]{1,100}\Z")
        else:
            validation_pattern = re.compile(r"^[a-zA-Z0-9_][a-zA-Z0-9_+.-]{1,100}\Z")
        if validation_pattern.match(self.name) is None:
            raise ConanException(f"Invalid package name '{self.name}'")
        if validation_pattern.match(str(self.version)) is None:
            raise ConanException(f"Invalid package version '{self.version}'")
        if self.user and validation_pattern.match(self.user) is None:
            raise ConanException(f"Invalid package user '{self.user}'")
        if self.channel and validation_pattern.match(self.channel) is None:
            raise ConanException(f"Invalid package channel '{self.channel}'")

        # Warn if they use .+ in the name/user/channel, as it can be problematic for generators
        pattern = re.compile(r'[.+]')
        if pattern.search(self.name):
            ConanOutput().warning(f"Name containing special chars is discouraged '{self.name}'")
        if self.user and pattern.search(self.user):
            ConanOutput().warning(f"User containing special chars is discouraged '{self.user}'")
        if self.channel and pattern.search(self.channel):
            ConanOutput().warning(f"Channel containing special chars is discouraged "
                                  f"'{self.channel}'")

    def matches(self, pattern, is_consumer):
        """ fnmatches the reference against the provided pattern.

        :parameter str pattern: the pattern to match against, it can contain wildcards,
            and can start with ``!`` or ``~`` to negate the match.
            A special value of ``&`` will return a match only of ``is_consumer`` is ``True``
        :parameter bool is_consumer: if ``True``, the pattern ``&`` will match this reference.
        """
        negate = False
        if pattern.startswith("!") or pattern.startswith("~"):
            pattern = pattern[1:]
            negate = True

        no_user_channel = False
        if pattern.endswith("@"):  # it means we want to match only without user/channel
            pattern = pattern[:-1]
            no_user_channel = True
        elif "@#" in pattern:
            pattern = pattern.replace("@#", "#")
            no_user_channel = True

        condition = ((pattern == "&" and is_consumer) or
                     fnmatch.fnmatchcase(str(self), pattern) or
                     fnmatch.fnmatchcase(self.repr_notime(), pattern))
        if no_user_channel:
            condition = condition and not self.user and not self.channel
        if negate:
            return not condition
        return condition

    def partial_match(self, pattern):
        # Finds if pattern matches any of partial sums of tokens of conan reference
        tokens = [self.name, "/", str(self.version)]
        if self.user:
            tokens += ["@", self.user]
        if self.channel:
            tokens += ["/", self.channel]
        if self.revision:
            tokens += ["#", self.revision]
        partial = ""
        for token in tokens:
            partial += token
            if pattern.match(partial):
                return True


class PkgReference:

    def __init__(self, ref=None, package_id=None, revision=None, timestamp=None):
        self.ref = ref
        self.package_id = package_id
        self.revision = revision
        self.timestamp = timestamp  # float, Unix seconds UTC

    def __repr__(self):
        """ long repr like pkg/0.1@user/channel#rrev%timestamp """
        if self.ref is None:
            return ""
        result = repr(self.ref)
        if self.package_id:
            result += ":{}".format(self.package_id)
        if self.revision is not None:
            result += "#{}".format(self.revision)
        if self.timestamp is not None:
            result += "%{}".format(self.timestamp)
        return result

    def repr_notime(self):
        if self.ref is None:
            return ""
        result = self.ref.repr_notime()
        if self.package_id:
            result += ":{}".format(self.package_id)
        if self.revision is not None:
            result += "#{}".format(self.revision)
        return result

    def repr_humantime(self):
        result = self.repr_notime()
        assert self.timestamp
        result += " ({})".format(timestamp_to_str(self.timestamp))
        return result

    def __str__(self):
        """ shorter representation, excluding the revision and timestamp """
        if self.ref is None:
            return ""
        result = str(self.ref)
        if self.package_id:
            result += ":{}".format(self.package_id)
        return result

    def __lt__(self, ref):
        # The timestamp goes before the revision for ordering revisions chronologically
        raise Exception("WHO IS COMPARING PACKAGE REFERENCES?")
        # return (self.name, self.version, self.user, self.channel, self.timestamp, self.revision) \
        #       < (ref.name, ref.version, ref.user, ref.channel, ref._timestamp, ref.revision)

    def __eq__(self, other):
        # TODO: In case of equality, should it use the revision and timestamp?
        # Used:
        #    at "graph_binaries" to check: cache_latest_prev != pref
        #    at "installer" to check: if pkg_layout.reference != pref (probably just optimization?)
        #    at "revisions_test"
        return self.ref == other.ref and self.package_id == other.package_id and \
               self.revision == other.revision

    def __hash__(self):
        # Used in dicts of PkgReferences as keys like the cached nodes in the graph binaries
        return hash((self.ref, self.package_id, self.revision))

    @staticmethod
    def loads(pkg_ref):  # TODO: change this default to validate only on end points
        try:
            tokens = pkg_ref.split(":", 1)
            assert len(tokens) == 2
            ref, pkg_id = tokens

            ref = RecipeReference.loads(ref)

            # timestamp
            tokens = pkg_id.rsplit("%", 1)
            text = tokens[0]
            timestamp = float(tokens[1]) if len(tokens) == 2 else None

            # revision
            tokens = text.split("#", 1)
            package_id = tokens[0]
            revision = tokens[1] if len(tokens) == 2 else None

            return PkgReference(ref, package_id, revision, timestamp)
        except Exception:
            raise ConanException(
                f"{pkg_ref} is not a valid package reference, provide a reference"
                f" in the form name/version[@user/channel:package_id]")


================================================
FILE: conan/api/model/remote.py
================================================
LOCAL_RECIPES_INDEX = "local-recipes-index"


class Remote:
    """
    The ``Remote`` class represents a remote registry of packages.
    """
    def __init__(self, name, url, verify_ssl=True, disabled=False, allowed_packages=None,
                 remote_type=None, recipes_only=False):
        """ A Remote object can be constructed to be passed as an argument to
        RemotesAPI methods. When possible, it is better to use Remote objects returned by the API,
        but for the ``RemotesAPI.add()`` method, for which a new constructed object is necessary.
        It is recommended to use named arguments like ``Remote(..., verify_ssl=False)`` in
        the constructor.
        :param name: The name of the remote.
        :param url: The URL of the remote repository (or local folder for "local-recipes-index").
        :param verify_ssl: Enable SSL Certificate validation.
        :param disabled: Disable the remote repository.
        :param allowed_packages: List of patterns of allowed packages from this remote
        :param remote_type: Type of the remote repository, use "local-recipes-index" or ``None``
        :param recipes_only: If True, binaries form this remote will be ignored and never used
        """
        self.name = name  # Read only, is the key
        self.url = url
        self.verify_ssl = verify_ssl
        self.disabled = disabled
        self.allowed_packages = allowed_packages
        self.recipes_only = recipes_only
        self.remote_type = remote_type
        self._caching = {}

    def __eq__(self, other):
        if other is None:
            return False
        return (self.name == other.name and self.url == other.url and
                self.verify_ssl == other.verify_ssl and self.disabled == other.disabled)

    def __str__(self):
        allowed_msg = ""
        if self.allowed_packages:
            allowed_msg = ", Allowed packages: {}".format(", ".join(self.allowed_packages))
        if self.recipes_only:
            allowed_msg += ", Recipes only"
        if self.remote_type == LOCAL_RECIPES_INDEX:
            return "{}: {} [{}, Enabled: {}{}]".format(self.name, self.url, LOCAL_RECIPES_INDEX,
                                                       not self.disabled, allowed_msg)
        return "{}: {} [Verify SSL: {}, Enabled: {}{}]".format(self.name, self.url, self.verify_ssl,
                                                               not self.disabled, allowed_msg)

    def __repr__(self):
        return str(self)

    def invalidate_cache(self):
        """ If external operations might have modified the remote since it was instantiated,
        this method can be called to invalidate the cache.
        Note that this is done automatically when the remote is used in any operation by Conan,
        such as uploading packages, so this method is not usually needed when only interacting
        with the Conan API"""
        self._caching = {}


================================================
FILE: conan/api/output.py
================================================
import fnmatch
import os
import sys
import time
from threading import Lock

import colorama
from colorama import Fore, Style

from conan.errors import ConanException

LEVEL_QUIET = 80  # -q
LEVEL_ERROR = 70  # Errors
LEVEL_WARNING = 60  # Warnings
LEVEL_NOTICE = 50  # Important messages to attract user attention.
LEVEL_STATUS = 40  # Default - The main interesting messages that users might be interested in.
LEVEL_VERBOSE = 30  # -v  Detailed informational messages.
LEVEL_DEBUG = 20  # -vv Closely related to internal implementation details
LEVEL_TRACE = 10  # -vvv Fine-grained messages with very low-level implementation details


class Color:
    """ Wrapper around colorama colors that are undefined in importing
    """
    RED = Fore.RED  # @UndefinedVariable
    WHITE = Fore.WHITE  # @UndefinedVariable
    CYAN = Fore.CYAN  # @UndefinedVariable
    GREEN = Fore.GREEN  # @UndefinedVariable
    MAGENTA = Fore.MAGENTA  # @UndefinedVariable
    BLUE = Fore.BLUE  # @UndefinedVariable
    YELLOW = Fore.YELLOW  # @UndefinedVariable
    BLACK = Fore.BLACK  # @UndefinedVariable

    BRIGHT_RED = Style.BRIGHT + Fore.RED  # @UndefinedVariable
    BRIGHT_BLUE = Style.BRIGHT + Fore.BLUE  # @UndefinedVariable
    BRIGHT_YELLOW = Style.BRIGHT + Fore.YELLOW  # @UndefinedVariable
    BRIGHT_GREEN = Style.BRIGHT + Fore.GREEN  # @UndefinedVariable
    BRIGHT_CYAN = Style.BRIGHT + Fore.CYAN  # @UndefinedVariable
    BRIGHT_WHITE = Style.BRIGHT + Fore.WHITE  # @UndefinedVariable
    BRIGHT_MAGENTA = Style.BRIGHT + Fore.MAGENTA  # @UndefinedVariable


if os.environ.get("CONAN_COLOR_DARK"):
    Color.WHITE = Fore.BLACK
    Color.CYAN = Fore.BLUE
    Color.YELLOW = Fore.MAGENTA
    Color.BRIGHT_WHITE = Fore.BLACK
    Color.BRIGHT_CYAN = Fore.BLUE
    Color.BRIGHT_YELLOW = Fore.MAGENTA
    Color.BRIGHT_GREEN = Fore.GREEN


def init_colorama(stream):
    import colorama
    if _color_enabled(stream):
        if os.getenv("CLICOLOR_FORCE", "0") != "0":
            # Otherwise it is not really forced if colorama doesn't feel it
            colorama.init(strip=False, convert=False)
        else:
            colorama.init()


def _color_enabled(stream):
    """
    NO_COLOR: No colors

    https://no-color.org/

    Command-line software which adds ANSI color to its output by default should check for the
    presence of a NO_COLOR environment variable that, when present (**regardless of its value**),
    prevents the addition of ANSI color.

    CLICOLOR_FORCE: Force color

    https://bixense.com/clicolors/
    """

    if os.getenv("CLICOLOR_FORCE", "0") != "0":
        # CLICOLOR_FORCE != 0, ANSI colors should be enabled no matter what.
        return True

    if os.getenv("NO_COLOR") is not None:
        return False
    return hasattr(stream, "isatty") and stream.isatty()


class ConanOutput:
    """ A singleton class to handle output messages in Conan.

    Recipes should only access this class through the ``self.output`` attribute of the recipe,
    but custom commands or tools can instantiate it directly, where doing so for each message is
    a valid practice.

    It provides methods to write messages at different levels of verbosity, such as debug, info,
    warning, and error. The output level can be controlled by the user through command-line options
    or environment variables.

    The output methods return the instance itself, so different methods can be chained together.
    """
    # Singleton
    _conan_output_level = LEVEL_STATUS
    _silent_warn_tags = []
    _warnings_as_errors = []
    lock = Lock()

    def __init__(self, scope: str = ""):
        """ Initialize the ConanOutput instance.

        :parameter scope: A string that represents the scope of the output. This is usually the
            reference of the recipe being executed, like ``pkg/1.0@user/channel`` and is prefixed
            to the output messages. If not provided, it defaults to an empty string.
        """
        self.stream = sys.stderr
        self._scope = scope
        # FIXME:  This is needed because in testing we are redirecting the sys.stderr to a buffer
        #         stream to capture it, so colorama is not there to strip the color bytes
        self._color = _color_enabled(self.stream)

    @classmethod
    def define_silence_warnings(cls, warnings):
        cls._silent_warn_tags = warnings

    @classmethod
    def set_warnings_as_errors(cls, value):
        cls._warnings_as_errors = value

    @classmethod
    def get_output_level(cls):
        return cls._conan_output_level

    @classmethod
    def set_output_level(cls, level):
        cls._conan_output_level = level

    @classmethod
    def valid_log_levels(cls):
        return {"quiet": LEVEL_QUIET,  # -vquiet 80
                "error": LEVEL_ERROR,  # -verror 70
                "warning": LEVEL_WARNING,  # -vwaring 60
                "notice": LEVEL_NOTICE,  # -vnotice 50
                "status": LEVEL_STATUS,  # -vstatus 40
                None: LEVEL_VERBOSE,  # -v 30
                "verbose": LEVEL_VERBOSE,  # -vverbose 30
                "debug": LEVEL_DEBUG,  # -vdebug 20
                "v": LEVEL_DEBUG,  # -vv 20
                "trace": LEVEL_TRACE,  # -vtrace 10
                "vv": LEVEL_TRACE  # -vvv 10
                }

    @classmethod
    def define_log_level(cls, v):
        env_level = os.getenv("CONAN_LOG_LEVEL")
        v = env_level or v
        levels = cls.valid_log_levels()
        try:
            level = levels[v]
        except KeyError:
            msg = " defined in CONAN_LOG_LEVEL environment variable" if env_level else ""
            vals = "quiet, error, warning, notice, status, verbose, debug(v), trace(vv)"
            raise ConanException(f"Invalid argument '-v{v}'{msg}.\nAllowed values: {vals}")
        else:
            cls.set_output_level(level)

    @classmethod
    def level_allowed(cls, level):
        return cls._conan_output_level <= level

    @property
    def color(self):
        return self._color

    @property
    def scope(self):
        return self._scope

    @scope.setter
    def scope(self, out_scope):
        self._scope = out_scope

    @property
    def is_terminal(self):
        return hasattr(self.stream, "isatty") and self.stream.isatty()

    def writeln(self, data, fg=None, bg=None):
        return self.write(data, fg, bg, newline=True)

    def write(self, data, fg=None, bg=None, newline=False):
        if self._conan_output_level > LEVEL_NOTICE:
            return self
        if self._color and (fg or bg):
            data = "%s%s%s%s" % (fg or '', bg or '', data, Style.RESET_ALL)

        if newline:
            data = "%s\n" % data

        with self.lock:
            self.stream.write(data)
            self.stream.flush()

        return self

    def box(self, msg: str):
        """ Draw a box around the message, useful for important messages"""
        color = Color.BRIGHT_GREEN
        self.writeln("\n**************************************************", fg=color)
        self.writeln(f'*{msg: ^48}*', fg=color)
        self.writeln(f"**************************************************\n", fg=color)
        return self

    def login_msg(self, msg, newline=False):
        # unconditional to the error level, this has to show always
        self._write_message(msg, newline=newline)
        return self

    def _write_message(self, msg, fg=None, bg=None, newline=True):
        if isinstance(msg, dict):
            # For traces we can receive a dict already, we try to transform then into more natural
            # text
            msg = ", ".join([f"{k}: {v}" for k, v in msg.items()])
            msg = "=> {}".format(msg)
            # msg = json.dumps(msg, sort_keys=True, default=json_encoder)

        if self._scope:
            if self._color:
                ret = f"{fg or ''}{bg or ''}{self._scope}: {msg}{Style.RESET_ALL}"
            else:
                ret = f"{self._scope}: {msg}"
        else:
            if self._color:
                ret = f"{fg or ''}{bg or ''}{msg}{Style.RESET_ALL}"
            else:
                ret = msg

        if newline:
            ret = f"{ret}\n"

        with self.lock:
            self.stream.write(ret)
            self.stream.flush()

    def trace(self, msg: str):
        """ This is the most extreme level of detail.

        Trace messages log every little step the system takes, including function entries and exits,
        variable changes, and other very specific events.

        This message won't be printed unless the user has set the log level to trace
        (e.g., using the ``-vvv`` option in the command line).

        It’s used when full visibility of everything happening in the system is required,
        but should be used carefully due to the large amount of information it can generate."""
        if self._conan_output_level <= LEVEL_TRACE:
            self._write_message(msg, fg=Color.BLUE)
        return self

    def debug(self, msg: str, fg: str = Color.MAGENTA, bg: str = None):
        """ With a high level of detail, it is mainly used for debugging code.

        This message won't be printed unless the user has set the log level to debug
        (e.g., using the ``-vv`` option in the command line).

        These messages provide useful information for developers, such as variable values
        or execution flow details, to trace errors or analyze the program's behavior."""
        if self._conan_output_level <= LEVEL_DEBUG:
            self._write_message(msg, fg=fg, bg=bg)
        return self

    def verbose(self, msg: str, fg: str = None, bg: str = None):
        """ Displays additional and detailed information that, while not critical,
        can be useful for better understanding how the system is working.

        This message won't be printed unless the user has set the log level to verbose
        (e.g., using the ``-v`` option in the command line).

        It’s appropriate for gaining more context without overloading the logs with
        excessive detail. Useful when more clarity is needed than a simple info."""
        if self._conan_output_level <= LEVEL_VERBOSE:
            self._write_message(msg, fg=fg, bg=bg)
        return self

    def status(self, msg: str, fg: str = None, bg: str = None, newline: bool = True):
        """ Provides general information about the system or ongoing operations.

        Info messages are basic and used to inform about common events,
        like the start or completion of processes, without implying specific problems or achievements."""
        if self._conan_output_level <= LEVEL_STATUS:
            self._write_message(msg, fg=fg, bg=bg, newline=newline)
        return self

    info = status

    def title(self, msg: str):
        """ Draws a title around the message, useful for important messages"""
        if self._conan_output_level <= LEVEL_NOTICE:
            self._write_message("\n======== {} ========".format(msg),
                                fg=Color.BRIGHT_MAGENTA)
        return self

    def subtitle(self, msg: str):
        """ Draws a subtitle around the message, useful for important messages"""
        if self._conan_output_level <= LEVEL_NOTICE:
            self._write_message("\n-------- {} --------".format(msg),
                                fg=Color.BRIGHT_MAGENTA)
        return self

    def highlight(self, msg: str):
        """ Marks or emphasizes important events or processes that need to stand out but don’t necessarily
        indicate success or error.

        These messages draw attention to key points that may be relevant for the user or administrator."""
        if self._conan_output_level <= LEVEL_NOTICE:
            self._write_message(msg, fg=Color.BRIGHT_MAGENTA)
        return self

    def success(self, msg: str):
        """ Shows that an operation has been completed successfully.

        This type of message is useful to confirm that key processes or tasks have finished correctly,
        which is essential for good application monitoring."""
        if self._conan_output_level <= LEVEL_NOTICE:
            self._write_message(msg, fg=Color.BRIGHT_GREEN)
        return self

    @staticmethod
    def _warn_tag_matches(warn_tag, patterns):
        lookup_tag = warn_tag or "unknown"
        return any(fnmatch.fnmatch(lookup_tag, pattern) for pattern in patterns)

    def warning(self, msg: str, warn_tag: str = None):
        """ Highlights a potential issue that, while not stopping the system,
        could cause problems in the future or under certain conditions.

        Warnings signal abnormal situations that should be
        reviewed but don’t necessarily cause an immediate halt in operations.
        Notice that if the tag matches the pattern in the ``core:warnings_as_errors`` configuration,
        and is not skipped, this will be upgraded to an error, and raise an exception
        when the output is printed, so that the error does not pass unnoticed."""
        _treat_as_error = self._warn_tag_matches(warn_tag, self._warnings_as_errors)
        if (self._conan_output_level <= LEVEL_WARNING or
                (_treat_as_error and self._conan_output_level <= LEVEL_ERROR)):
            if self._warn_tag_matches(warn_tag, self._silent_warn_tags):
                return self
            warn_tag_msg = "" if warn_tag is None else f"{warn_tag}: "
            output = f"{warn_tag_msg}{msg}"

            if _treat_as_error:
                self.error(output)
            else:
                self._write_message(f"WARN: {output}", Color.YELLOW)
        return self

    def error(self, msg: str, error_type: str = None):
        """ Indicates that a serious issue has occurred that prevents the system
        or application from continuing to function correctly.

        Typically, this represents a failure in the normal flow of execution,
        such as a service crash or a critical exception.
        Notice that if the user has set the ``core:warnings_as_errors`` configuration,
        this will raise an exception when the output is printed,
        so that the error does not pass unnoticed."""
        if self._warnings_as_errors and error_type != "exception":
            raise ConanException(msg)
        if self._conan_output_level <= LEVEL_ERROR:
            self._write_message("ERROR: {}".format(msg), Color.RED)
        return self

    def flush(self):
        self.stream.flush()


def cli_out_write(data, fg=None, bg=None, endline="\n", indentation=0):
    """
    Output to be used by formatters to dump information to stdout
    """
    if (fg or bg) and _color_enabled(sys.stdout):  # need color
        data = f"{' ' * indentation}{fg or ''}{bg or ''}{data}{Style.RESET_ALL}{endline}"
        sys.stdout.write(data)
    else:
        data = f"{' ' * indentation}{data}{endline}"
        if sys.stdout.isatty():
            # https://github.com/conan-io/conan/issues/17245 avoid colorama crash and overhead
            # skip deinit/reinit if stdout is not a TTY to preserve redirected output to file
            colorama.deinit()
            sys.stdout.write(data)
            colorama.reinit()
        else:
            sys.stdout.write(data)


class TimedOutput:
    def __init__(self, interval, out=None, msg_format=None):
        self._interval = interval
        self._msg_format = msg_format
        self._t = time.time()
        self._out = out or ConanOutput()

    def info(self, msg, *args, **kwargs):
        t = time.time()
        if t - self._t > self._interval:
            self._t = t
            if self._msg_format:
                msg = self._msg_format(msg, *args, **kwargs)
            self._out.info(msg)


================================================
FILE: conan/api/subapi/__init__.py
================================================


================================================
FILE: conan/api/subapi/audit.py
================================================
import binascii
import json
import os
import base64

from conan.internal.api.audit.providers import ConanCenterProvider, PrivateProvider
from conan.errors import ConanException
from conan.internal.api.remotes.encrypt import encode, decode
from conan.internal.model.recipe_ref import RecipeReference
from conan.internal.util.files import save, load

CONAN_CENTER_AUDIT_PROVIDER_NAME = "conancenter"
CYPHER_KEY = "private"


class AuditAPI:
    """
    This class provides the functionality to scan references for vulnerabilities.
    """

    def __init__(self, conan_api):
        self._conan_api = conan_api
        self._home_folder = conan_api.home_folder
        self._providers_path = os.path.join(self._home_folder, "audit_providers.json")
        self._provider_cls = {
            "conan-center-proxy": ConanCenterProvider,
            "private": PrivateProvider,
        }

    @staticmethod
    def scan(deps_graph, provider, context=None):
        """
        Scan a given recipe for vulnerabilities in its dependencies.
        """
        refs = sorted(set(RecipeReference.loads(f"{node.ref.name}/{node.ref.version}")
                          for node in deps_graph.nodes[1:]
                          if context is None or node.context == context),
                      key=lambda ref: ref.name)
        return provider.get_cves(refs)

    @staticmethod
    def list(references, provider):
        """
        List the vulnerabilities of the given reference.
        """
        refs = [RecipeReference.loads(ref) for ref in references]
        for ref in refs:
            ref.validate_ref()
        return provider.get_cves(refs)

    def get_provider(self, provider_name):
        """
        Get the provider by name.
        """
        # TODO: More work remains to be done here, hardcoded for now for testing
        providers = _load_providers(self._providers_path)
        if provider_name not in providers:
            add_arguments = (
                "--url=https://audit.conan.io/ --type=conan-center-proxy"
                if provider_name == CONAN_CENTER_AUDIT_PROVIDER_NAME
                else "--url=<url> --type=<type>"
            )

            register_message = (
                f"If you don't have a valid token, register at: https://audit.conan.io/register."
                if provider_name == CONAN_CENTER_AUDIT_PROVIDER_NAME
                else ""
            )

            raise ConanException(
                f"Provider '{provider_name}' not found. Please specify a valid provider name or add "
                f"it using: 'conan audit provider add {provider_name} {add_arguments} "
                f"--token=<token>'\n{register_message}"
            )

        provider_data = providers[provider_name]
        safe_provider_name = provider_name.replace("-", "_")
        env_token = os.getenv(f"CONAN_AUDIT_PROVIDER_TOKEN_{safe_provider_name.upper()}")

        if env_token:
            # Always override the token with the environment variable
            provider_data["token"] = env_token
        elif "token" in provider_data:
            try:
                enc_token = base64.standard_b64decode(provider_data["token"]).decode()
                provider_data["token"] = decode(enc_token, CYPHER_KEY)
            except binascii.Error:
                raise ConanException(f"Invalid token format for provider '{provider_name}'. "
                                     f"The token might be corrupt.")

        provider_cls = self._provider_cls.get(provider_data["type"])

        return provider_cls(self._conan_api, provider_name, provider_data)

    def list_providers(self):
        """
        Get all available providers.
        """
        providers = _load_providers(self._providers_path)
        result = []
        for name, provider_data in providers.items():
            provider_cls = self._provider_cls.get(provider_data["type"])
            result.append(provider_cls(self._conan_api, name, provider_data))
        return result

    def add_provider(self, name, url, provider_type):
        """
        Add a provider.
        """
        providers = _load_providers(self._providers_path)
        if name in providers:
            raise ConanException(f"Provider '{name}' already exists")

        if provider_type not in self._provider_cls:
            raise ConanException(f"Provider type '{provider_type}' not found")

        providers[name] = {
            "name": name,
            "url": url,
            "type": provider_type
        }

        _save_providers(self._providers_path, providers)

    def remove_provider(self, provider_name):
        """
        Remove a provider.
        """
        providers = _load_providers(self._providers_path)
        if provider_name not in providers:
            raise ConanException(f"Provider '{provider_name}' not found")

        del providers[provider_name]

        _save_providers(self._providers_path, providers)

    def auth_provider(self, provider, token):
        """
        Authenticate a provider.
        """
        if not provider:
            raise ConanException("Provider not found")

        providers = _load_providers(self._providers_path)

        assert provider.name in providers
        encode_token = encode(token, CYPHER_KEY).encode()
        providers[provider.name]["token"] = base64.standard_b64encode(encode_token).decode()
        setattr(provider, "token", token)
        _save_providers(self._providers_path, providers)


def _load_providers(providers_path):
    if not os.path.exists(providers_path):
        default_providers = {
            CONAN_CENTER_AUDIT_PROVIDER_NAME: {
                "url": "https://audit.conan.io/",
                "type": "conan-center-proxy"
            }
        }
        save(providers_path, json.dumps(default_providers, indent=4))

    return json.loads(load(providers_path))


def _save_providers(providers_path, providers):
    save(providers_path, json.dumps(providers, indent=4))
    # Make readable & writeable only by current user
    os.chmod(providers_path, 0o600)


================================================
FILE: conan/api/subapi/cache.py
================================================
import json
import os
import shutil
import tarfile
import tempfile

from conan.api.model import PackagesList
from conan.api.output import ConanOutput
from conan.internal.api.uploader import compress_files, get_compress_level
from conan.internal.cache.cache import PkgCache
from conan.internal.cache.conan_reference_layout import (EXPORT_SRC_FOLDER, EXPORT_FOLDER,
                                                         SRC_FOLDER, METADATA,
                                                         DOWNLOAD_EXPORT_FOLDER)
from conan.internal.cache.home_paths import HomePaths
from conan.internal.cache.integrity_check import IntegrityChecker
from conan.internal.paths import COMPRESSIONS
from conan.internal.rest.download_cache import DownloadCache
from conan.errors import ConanException
from conan.api.model import PkgReference
from conan.api.model import RecipeReference
from conan.internal.api.uploader import PackagePreparator
from conan.internal.conan_app import ConanApp
from conan.internal.rest.pkg_sign import PkgSignaturesPlugin
from conan.internal.util.dates import revision_timestamp_now
from conan.internal.util.files import rmdir, mkdir, remove, save


class CacheAPI:
    """ This CacheAPI is used to interact with the packages storage cache

    Note that the Conan packages cache is exclusively **read-only** for user code. Only Conan
    can write or modify the folders and files in the Conan cache. In general, when a method
    returns a folder, it is mostly for debugging purposes and read-only access, but never to
    modify the contents of the cache.
    """

    def __init__(self, conan_api, api_helpers):
        self._conan_api = conan_api
        self._api_helpers = api_helpers

    def export_path(self, ref: RecipeReference):
        """Returns the path of the recipe conanfile and exported files in the Conan cache

        This folder is exclusively for **read-only** access, typically for debugging purposes,
        it is completely forbidden to modify any of its contents.

        :param ref: RecipeReference. If it includes recipe revision, that exact revision will be
           returned, if it doesn't include recipe revision, it will return the latest revision one.
        :return: path to the folder, as a string
        :raises: ConanExcepcion if the folder doesn't exist
        """

        cache = PkgCache(self._conan_api.cache_folder, self._api_helpers.global_conf)
        ref = _resolve_latest_ref(cache, ref)
        ref_layout = cache.recipe_layout(ref)
        return _check_folder_existence(ref, "export", ref_layout.export())

    def recipe_metadata_path(self, ref: RecipeReference):
        """Returns the path of the recipe metadata files in the Conan cache

        Exceptionally, adding or modifying the files within this folder is allowed, as
        the metadata files are not taken into account into the computation of the recipe hash
        (recipe revision).

        :param ref: RecipeReference. If it includes recipe revision, that exact revision will be
           returned, if it doesn't include recipe revision, it will return the latest revision one.
        :return: path to the folder, as a string
        :raises: ConanExcepcion if the folder doesn't exist
        """
        cache = PkgCache(self._conan_api.cache_folder, self._api_helpers.global_conf)
        ref = _resolve_latest_ref(cache, ref)
        ref_layout = cache.recipe_layout(ref)
        return _check_folder_existence(ref, "metadata", ref_layout.metadata())

    def export_source_path(self, ref: RecipeReference):
        """Returns the path of the exported sources in the Conan cache

        Note that the exported sources only exist in the cache when the package has been created
        locally or built from source.

        This folder is exclusively for **read-only** access, typically for debugging purposes,
        it is completely forbidden to modify any of its contents.

        :param ref: RecipeReference. If it includes recipe revision, that exact revision will be
           returned, if it doesn't include recipe revision, it will return the latest revision one.
        :return: path to the folder, as a string
        :raises: ConanExcepcion if the folder doesn't exist
        """
        cache = PkgCache(self._conan_api.cache_folder, self._api_helpers.global_conf)
        ref = _resolve_latest_ref(cache, ref)
        ref_layout = cache.recipe_layout(ref)
        return _check_folder_existence(ref, "export_sources", ref_layout.export_sources())

    def source_path(self, ref: RecipeReference):
        """Returns the path of the temporary source folder in the Conan cache

        Note that the source folder only exist in the cache when the package has been created
        locally or built from source.

        This folder is exclusively for **read-only** access, typically for debugging purposes,
        it is completely forbidden to modify any of its contents.

        :param ref: RecipeReference. If it includes recipe revision, that exact revision will be
           returned, if it doesn't include recipe revision, it will return the latest revision one.
        :return: path to the folder, as a string
        :raises: ConanExcepcion if the folder doesn't exist
        """
        cache = PkgCache(self._conan_api.cache_folder, self._api_helpers.global_conf)
        ref = _resolve_latest_ref(cache, ref)
        ref_layout = cache.recipe_layout(ref)
        return _check_folder_existence(ref, "source", ref_layout.source())

    def build_path(self, pref: PkgReference):
        """Returns the path of the temporary build folder in the Conan cache

        Note that the build folder only exist in the cache when the package has been created
        locally or built from source.

        This folder is exclusively for **read-only** access, typically for debugging purposes,
        it is completely forbidden to modify any of its contents.

        :param pref: PkgReference. If it includes recipe revision, that exact revision will be
           returned, if it doesn't include recipe revision, it will return the latest revision one.
           Exactly same behavior for the package revision.
        :return: path to the folder, as a string
        :raises: ConanExcepcion if the folder doesn't exist
        """
        cache = PkgCache(self._conan_api.cache_folder, self._api_helpers.global_conf)
        pref = _resolve_latest_pref(cache, pref)
        ref_layout = cache.pkg_layout(pref)
        return _check_folder_existence(pref, "build", ref_layout.build())

    def package_metadata_path(self, pref: PkgReference):
        """Returns the path of the package metadata folder in the Conan cache

        Exceptionally, adding or modifying the files within this folder is allowed, as
        the metadata files are not taken into account into the computation of the package hash
        (package revision).

       :param pref: PkgReference. If it includes recipe revision, that exact revision will be
           returned, if it doesn't include recipe revision, it will return the latest revision one.
           Exactly same behavior for the package revision.
       :return: path to the folder, as a string
       :raises: ConanExcepcion if the folder doesn't exist
        """
        cache = PkgCache(self._conan_api.cache_folder, self._api_helpers.global_conf)
        pref = _resolve_latest_pref(cache, pref)
        ref_layout = cache.pkg_layout(pref)
        return _check_folder_existence(pref, "metadata", ref_layout.metadata())

    def package_path(self, pref: PkgReference):
        """Returns the path of the package folder in the Conan cache

        This folder is exclusively for **read-only** access, typically for debugging purposes,
        it is completely forbidden to modify any of its contents.

        :param pref: PkgReference. If it includes recipe revision, that exact revision will be
           returned, if it doesn't include recipe revision, it will return the latest revision one.
           Exactly same behavior for the package revision.
        :return: path to the folder, as a string
        :raises: ConanExcepcion if the folder doesn't exist
        """
        cache = PkgCache(self._conan_api.cache_folder, self._api_helpers.global_conf)
        pref = _resolve_latest_pref(cache, pref)
        ref_layout = cache.pkg_layout(pref)
        if os.path.exists(ref_layout.finalize()):
            return ref_layout.finalize()
        return _check_folder_existence(pref, "package", ref_layout.package())

    def check_integrity(self, package_list, return_pkg_list=False):
        """
        Check if the recipes and packages are corrupted

        :param package_list: PackagesList to check
        :param return_pkg_list: If True, return a PackagesList with corrupted artifacts
        :return: PackagesList with corrupted artifacts if return_pkg_list is True
        :raises: ConanExcepcion if there are corrupted artifacts and return_pkg_list is False
        """
        cache = PkgCache(self._conan_api.cache_folder, self._api_helpers.global_conf)
        checker = IntegrityChecker(cache)
        corrupted_pkg_list = checker.check(package_list)
        if return_pkg_list:
            return corrupted_pkg_list
        if corrupted_pkg_list:
            raise ConanException("There are corrupted artifacts, check the error logs")

    def sign(self, package_list):
        """Sign packages with the package signing plugin"""
        cache = PkgCache(self._conan_api.cache_folder, self._api_helpers.global_conf)
        pkg_signer = PkgSignaturesPlugin(cache, self._conan_api.home_folder)
        if not pkg_signer.is_sign_configured:
            raise ConanException(
                "The sign() function in the package sign plugin is not defined. For more "
                "information on how to configure the plugin, please read the documentation at "
                "https://docs.conan.io/2/reference/extensions/package_signing.html.")

        app = ConanApp(self._conan_api)
        preparator = PackagePreparator(app, self._api_helpers.cache,
                                       self._api_helpers.remote_manager,
                                       self._api_helpers.global_conf)
        # Some packages can have missing sources/exports_sources
        enabled_remotes = self._conan_api.remotes.list()
        preparator.prepare(package_list, enabled_remotes, None, force=True)

        for rref, packages in package_list.items():
            recipe_bundle = package_list.recipe_dict(rref)
            rref_folder = cache.recipe_layout(rref).download_export()
            try:
                pkg_signer.sign_pkg(rref, recipe_bundle.get("files", {}), rref_folder)
            except Exception as e:
                recipe_bundle["pkgsign_error"] = str(e)
            for pref in packages:
                pkg_bundle = package_list.package_dict(pref)
                if pkg_bundle:
                    pref_folder = cache.pkg_layout(pref).download_package()
                    try:
                        pkg_signer.sign_pkg(pref, pkg_bundle.get("files", {}), pref_folder)
                    except Exception as e:
                        pkg_bundle["pkgsign_error"] = str(e)
        return package_list

    def verify(self, package_list):
        """Verify packages with the package signing plugin"""
        cache = PkgCache(self._conan_api.cache_folder, self._api_helpers.global_conf)
        pkg_signer = PkgSignaturesPlugin(cache, self._conan_api.home_folder)
        if not pkg_signer.is_verify_configured:
            raise ConanException(
                "The verify() function in the package sign plugin is not defined. For more "
                "information on how to configure the plugin, please read the documentation at "
                "https://docs.conan.io/2/reference/extensions/package_signing.html.")

        for rref, packages in package_list.items():
            recipe_bundle = package_list.recipe_dict(rref)
            layout = cache.recipe_layout(rref)
            rref_folder = layout.download_export()
            files = {file: os.path.join(rref_folder, file) for file in
                     sorted(os.listdir(rref_folder)) if not file.startswith(METADATA)}
            recipe_bundle["files"] = files
            try:
                pkg_signer.verify(rref, rref_folder, layout.metadata(), files)
            except Exception as e:
                recipe_bundle["pkgsign_error"] = str(e)
            for pref in packages:
                pkg_bundle = package_list.package_dict(pref)
                if pkg_bundle:
                    layout = cache.pkg_layout(pref)
                    pref_folder = layout.download_package()
                    files = {file: os.path.join(pref_folder, file) for file in
                             sorted(os.listdir(pref_folder)) if not file.startswith(METADATA)}
                    pkg_bundle["files"] = files
                    try:
                        pkg_signer.verify(pref, pref_folder, layout.metadata(), files)
                    except Exception as e:
                        pkg_bundle["pkgsign_error"] = str(e)
        return package_list

    def clean(self, package_list, source=True, build=True, download=True, temp=True,
              backup_sources=False) -> None:
        """
        Remove non critical folders from the cache, like source, build and download (.tgz store)
        folders.

        :param package_list: the package lists that should be cleaned
        :param source: boolean, remove the "source" folder if True
        :param build: boolean, remove the "build" folder if True
        :param download: boolean, remove the "download (.tgz)" folder if True
        :param temp: boolean, remove the temporary folders
        :param backup_sources: boolean, remove the "source" folder if True
        :return:
        """

        cache = PkgCache(self._conan_api.cache_folder, self._api_helpers.global_conf)
        if temp:
            rmdir(cache.temp_folder)
            # Clean those build folders that didn't succeed to create a package and wont be in DB
            builds_folder = cache.builds_folder
            if os.path.isdir(builds_folder):
                ConanOutput().verbose(f"Cleaning temporary folders")
                for subdir in os.listdir(builds_folder):
                    folder = os.path.join(builds_folder, subdir)
                    manifest = os.path.join(folder, "p", "conanmanifest.txt")
                    info = os.path.join(folder, "p", "conaninfo.txt")
                    if not os.path.exists(manifest) or not os.path.exists(info):
                        rmdir(folder)

        if backup_sources:
            backup_files = self._conan_api.cache.get_backup_sources(package_list, exclude=False,
                                                                    only_upload=False)
            ConanOutput().verbose(f"Cleaning {len(backup_files)} backup sources")
            for f in backup_files:
                remove(f)

        for ref, packages in package_list.items():
            ConanOutput(ref.repr_notime()).verbose("Cleaning recipe cache contents")
            ref_layout = cache.recipe_layout(ref)
            if source:
                rmdir(ref_layout.source())
            if download:
                rmdir(ref_layout.download_export())
            for pref in packages:
                ConanOutput(pref).verbose("Cleaning package cache contents")
                pref_layout = cache.pkg_layout(pref)
                if build:
                    rmdir(pref_layout.build())
                    # It is important to remove the "build_id" identifier if build-folder is removed
                    cache.remove_build_id(pref)
                if download:
                    rmdir(pref_layout.download_package())

    def save(self, package_list: PackagesList, path, no_source=False) -> None:
        """Create a compressed archive with recipes and packages from the Conan cache that
        can be later restored in another cache.

        Do not manipulate the contents of the resulting archive, as it also contains metadata,
        and modifying the contents would be equivalent to modify the Conan package cache, which
        is forbidden.

        :param package_list: PackagesList containing the recipes and packages to add
           to the compressed archive
        :param path: The archive file to generate. Based on the extension of the file, different
           compression formats can be used (.tgz, .txz and .tzst, the latter only for Python>=3.14).
        :param no_source: If True, the source folders in the cache will not be added to the archive.
        :return:
        """
        global_conf = self._api_helpers.global_conf
        cache = PkgCache(self._conan_api.cache_folder, global_conf)
        cache_folder = cache.store  # Note, this is not the home, but the actual package cache
        out = ConanOutput()
        mkdir(os.path.dirname(path))
        tgz_name = os.path.basename(path)
        compressformat = next((e for e in COMPRESSIONS if tgz_name.endswith(e)), None)
        if not compressformat:
            raise ConanException(f"Unsupported compression format for {tgz_name}")
        compresslevel = get_compress_level(compressformat, global_conf)
        tar_files: dict[str, str] = {}  # {path_in_tar: abs_path}

        for ref, packages in package_list.items():
            ref_layout = cache.recipe_layout(ref)
            recipe_folder = os.path.relpath(ref_layout.base_folder, cache_folder)
            recipe_folder = recipe_folder.replace("\\", "/")  # make win paths portable
            ref_bundle = package_list.recipe_dict(ref)
            ref_bundle["recipe_folder"] = recipe_folder
            out.info(f"Saving {ref}: {recipe_folder}")
            # Package only selected folders, not DOWNLOAD one
            for f in (EXPORT_FOLDER, EXPORT_SRC_FOLDER, SRC_FOLDER):
                if f == SRC_FOLDER and no_source:
                    continue
                cachepath = os.path.join(cache_folder, recipe_folder, f)
                if os.path.exists(cachepath):
                    tar_files[f"{recipe_folder}/{f}"] = cachepath
            cachepath = os.path.join(cache_folder, recipe_folder, DOWNLOAD_EXPORT_FOLDER, METADATA)
            if os.path.exists(cachepath):
                tar_files[f"{recipe_folder}/{DOWNLOAD_EXPORT_FOLDER}/{METADATA}"] = cachepath

            for pref in packages:
                pref_layout = cache.pkg_layout(pref)
                pkg_folder = pref_layout.package()
                folder = os.path.relpath(pkg_folder, cache_folder)
                folder = folder.replace("\\", "/")  # make win paths portable
                pkg_dict = package_list.package_dict(pref)
                pkg_dict["package_folder"] = folder
                out.info(f"Saving {pref}: {folder}")
                tar_files[folder] = os.path.join(cache_folder, folder)

                if os.path.exists(pref_layout.metadata()):
                    metadata_folder = os.path.relpath(pref_layout.metadata(), cache_folder)
                    metadata_folder = metadata_folder.replace("\\", "/")  # make paths portable
                    pkg_dict["metadata_folder"] = metadata_folder
                    out.info(f"Saving {pref} metadata: {metadata_folder}")
                    tar_files[metadata_folder] = os.path.join(cache_folder, metadata_folder)

        # Create a temporary file in order to reuse compress_files functionality
        serialized = json.dumps(package_list.serialize(), indent=2)
        pkglist_path = os.path.join(tempfile.gettempdir(), "pkglist.json")
        save(pkglist_path, serialized)
        tar_files["pkglist.json"] = pkglist_path
        compress_files(tar_files, tgz_name, os.path.dirname(path), compresslevel, recursive=True)
        remove(pkglist_path)
        ConanOutput().success(f"Created cache save file: {path}")

    def restore(self, path) -> PackagesList:
        """Restore a compressed archive with recipes and packages previously saved from another
        Conan cache into the currently active Conan cache.

        :param path: The archive file to restore. Based on the extension of the file, different
           compression formats can be used (.tgz, .txz and .tzst, the latter only for Python>=3.14).
        :return: a PackageLists with the recipes and packages that have been restored to the cache
        """
        if not os.path.isfile(path):
            raise ConanException(f"Restore archive doesn't exist in {path}")

        cache = PkgCache(self._conan_api.cache_folder, self._api_helpers.global_conf)
        cache_folder = cache.store  # Note, this is not the home, but the actual package cache

        with open(path, mode='rb') as file_handler:
            the_tar = tarfile.open(fileobj=file_handler)
            fileobj = the_tar.extractfile("pkglist.json")
            pkglist = fileobj.read()
            the_tar.extraction_filter = (lambda member, _: member)  # fully_trusted (Py 3.14)
            the_tar.extractall(path=cache_folder)
            the_tar.close()

        # After unzipping the files, we need to update the DB that references these files
        out = ConanOutput()
        package_list = PackagesList.deserialize(json.loads(pkglist))
        for ref, packages in package_list.items():
            ref_bundle = package_list.recipe_dict(ref)
            ref.timestamp = revision_timestamp_now()
            ref_bundle["timestamp"] = ref.timestamp
            try:
                recipe_layout = cache.recipe_layout(ref)
            except ConanException:
                recipe_layout = cache.create_ref_layout(ref)  # new DB folder entry
            recipe_folder = ref_bundle["recipe_folder"]
            rel_path = os.path.relpath(recipe_layout.base_folder, cache_folder)
            rel_path = rel_path.replace("\\", "/")
            # In the case of recipes, they are always "in place", so just checking it
            assert rel_path == recipe_folder, f"{rel_path}!={recipe_folder}"
            out.info(f"Restore: {ref} in {recipe_folder}")
            for pref in packages:
                pref.timestamp = revision_timestamp_now()
                pref_bundle = package_list.package_dict(pref)
                pref_bundle["timestamp"] = pref.timestamp
                try:
                    pkg_layout = cache.pkg_layout(pref)
                except ConanException:
                    pkg_layout = cache.create_pkg_layout(pref)  # DB Folder entry
                # FIXME: This is not taking into account the existence of previous package
                unzipped_pkg_folder = pref_bundle["package_folder"]
                out.info(f"Restore: {pref} in {unzipped_pkg_folder}")
                # If the DB folder entry is different to the disk unzipped one, we need to move it
                # This happens for built (not downloaded) packages in the source "conan cache save"
                db_pkg_folder = os.path.relpath(pkg_layout.package(), cache_folder)
                db_pkg_folder = db_pkg_folder.replace("\\", "/")
                if db_pkg_folder != unzipped_pkg_folder:
                    # If a previous package exists, like a previous restore, then remove it
                    if os.path.exists(pkg_layout.package()):
                        shutil.rmtree(pkg_layout.package())
                    shutil.move(os.path.join(cache_folder, unzipped_pkg_folder),
                                pkg_layout.package())
                    pref_bundle["package_folder"] = db_pkg_folder
                unzipped_metadata_folder = pref_bundle.get("metadata_folder")
                if unzipped_metadata_folder:
                    # FIXME: Restore metadata is not incremental, but destructive
                    out.info(f"Restore: {pref} metadata in {unzipped_metadata_folder}")
                    db_metadata_folder = os.path.relpath(pkg_layout.metadata(), cache_folder)
                    db_metadata_folder = db_metadata_folder.replace("\\", "/")
                    if db_metadata_folder != unzipped_metadata_folder:
                        # We need to put the package in the final location in the cache
                        if os.path.exists(pkg_layout.metadata()):
                            shutil.rmtree(pkg_layout.metadata())
                        shutil.move(os.path.join(cache_folder, unzipped_metadata_folder),
                                    pkg_layout.metadata())
                        pref_bundle["metadata_folder"] = db_metadata_folder

        return package_list

    def get_backup_sources(self, package_list=None, exclude=True, only_upload=True):
        """Get list of backup source files currently present in the cache,
        either all of them if no argument, or filtered by those belonging to the references
        in the package_list

        :param package_list: a PackagesList object to filter backup files from (The files should
          have been downloaded form any of the references in the package_list)
        :param exclude: if True, exclude the sources that come from URLs present the
          core.sources:exclude_urls global conf
        :param only_upload: if True, only return the files for packages that are set to be uploaded
        :return: A list of files that need to be uploaded
        """
        config = self._api_helpers.global_conf
        download_cache_path = config.get("core.sources:download_cache")
        download_cache_path = download_cache_path or HomePaths(
            self._conan_api.cache_folder).default_sources_backup_folder
        excluded_urls = config.get("core.sources:exclude_urls",
                                   check_type=list, default=[]) if exclude else []
        download_cache = DownloadCache(download_cache_path)
        return download_cache.get_backup_sources_files(excluded_urls, package_list, only_upload)

    def path_to_ref(self, path):
        # This method is explicitly not publicly documented, as mostly a command helper for
        # debugging, it shouldn't be used in any real API usage
        cache = PkgCache(self._conan_api.cache_folder, self._api_helpers.global_conf)
        result = cache.path_to_ref(path)
        if result is None:
            base, folder = os.path.split(path)
            result = cache.path_to_ref(base)
        return result


def _resolve_latest_ref(cache, ref):
    if ref.revision is None or ref.revision == "latest":
        ref.revision = None
        result = cache.get_latest_recipe_revision(ref)
        if result is None:
            raise ConanException(f"'{ref}' not found in cache")
        ref = result
    return ref


def _resolve_latest_pref(cache, pref):
    pref.ref = _resolve_latest_ref(cache, pref.ref)
    if pref.revision is None or pref.revision == "latest":
        pref.revision = None
        result = cache.get_latest_package_revision(pref)
        if result is None:
            raise ConanException(f"'{pref.repr_notime()}' not found in cache")
        pref = result
    return pref


def _check_folder_existence(ref, folder_name, folder_path):
    if not os.path.exists(folder_path):
        raise ConanException(f"'{folder_name}' folder does not exist for the reference {ref}")
    return folder_path


================================================
FILE: conan/api/subapi/command.py
================================================
import os
import shlex

from conan.api.output import ConanOutput
from conan.errors import ConanException


class CommandAPI:

    def __init__(self, conan_api):
        self._conan_api = conan_api
        self.cli = None

    def run(self, cmd):
        if isinstance(cmd, str):
            cmd = shlex.split(cmd)
        if isinstance(cmd, list):
            current_cmd = cmd[0]
            args = cmd[1:]
        else:
            raise ConanException("Input of conan_api.command.run() should be a list or a string")
        commands = getattr(self.cli, "_commands")  # to no make it public to users of Cli class
        try:
            command = commands[current_cmd]
        except KeyError:
            raise ConanException(f"Command {current_cmd} does not exist")
        # Conan has some global state in the ConanOutput class that
        # get redefined when running a command and leak to the calling scope
        # if running from a custom command.
        # Store the old one and restore it after the command execution as a workaround.
        _conan_output_level = ConanOutput._conan_output_level  # noqa
        _silent_warn_tags = ConanOutput._silent_warn_tags  # noqa
        _warnings_as_errors = ConanOutput._warnings_as_errors  # noqa

        try:
            result = command.run_cli(self._conan_api, args)
        finally:
            ConanOutput._conan_output_level = _conan_output_level
            ConanOutput._silent_warn_tags = _silent_warn_tags
            ConanOutput._warnings_as_errors = _warnings_as_errors
        return result

    @staticmethod
    def get_runner(profile_host):
        if profile_host.runner and not os.environ.get("CONAN_RUNNER_ENVIRONMENT"):
            from conan.internal.runner.docker import DockerRunner
            from conan.internal.runner.ssh import SSHRunner
            from conan.internal.runner.wsl import WSLRunner
            try:
                runner_type = profile_host.runner['type'].lower()
            except KeyError:
                raise ConanException(f"Invalid runner configuration. 'type' must be defined")
            runner_instances_map = {
                'docker': DockerRunner,
                # 'ssh': SSHRunner,
                # 'wsl': WSLRunner,
            }
            try:
                runner_instance = runner_instances_map[runner_type]
            except KeyError:
                raise ConanException(f"Invalid runner type '{runner_type}'. "
                                     f"Allowed values: {', '.join(runner_instances_map.keys())}")
            return runner_instance


================================================
FILE: conan/api/subapi/config.py
================================================
import os

from conan.api.output import ConanOutput

from conan.internal.cache.home_paths import HomePaths
from conan.internal.conan_app import ConanApp
from conan.internal.graph.graph import CONTEXT_HOST, RECIPE_VIRTUAL, Node
from conan.internal.graph.graph_builder import DepsGraphBuilder
from conan.internal.graph.profile_node_definer import consumer_definer
from conan.errors import ConanException

from conan.internal.model.conanconfig import loadconanconfig, saveconanconfig, loadconanconfig_yml
from conan.internal.model.conf import BUILT_IN_CONFS
from conan.internal.model.pkg_type import PackageType
from conan.api.model import RecipeReference, Remote
from conan.internal.util.files import rmdir, remove


class ConfigAPI:
    """ This API provides methods to manage the Conan configuration in the Conan home folder.
    It allows installing configurations from various sources, retrieving global configuration
    values, and listing available configurations. It also provides methods to clean the
    Conan home folder, resetting it to a clean state.
    """

    def __init__(self, conan_api, helpers):
        self._conan_api = conan_api
        self._helpers = helpers

    def home(self):
        """ return the current Conan home folder containing the configuration files like
        remotes, settings, profiles, and the packages cache. It is provided for debugging
        purposes. Recall that it is not allowed to write, modify or remove packages in the
        packages cache, and that to automate tasks that uses packages from the cache Conan
        provides mechanisms like deployers or custom commands.
        """
        return self._conan_api.cache_folder

    def install(self, path_or_url: str, verify_ssl, config_type=None, args=None,
                source_folder=None, target_folder=None) -> None:
        """ install Conan configuration from a git repo, from a zip file in an http server
        or a local folder

        Calling this method will cause a reinitilization of the full ConanAPI, with possible
        invalidation of cached information, and references to objects from the ConanAPI might
        become dangling or outdated.

        :param path_or_url: path or url to install. It can be a http://.../somefile.zip, a
            git repository URL, or a local folder
        :param verify_ssl: Argument passed to python-requests library for SSL verification
        :param config_type: type of configuration to install: "git", "dir", "file", "url"
        :param args: additional arguments to pass to git repositories cloning
        :param source_folder: If specified, install files from that folder of the origin only
        :param target_folder: If the files are to be installed in a specific folder in the Conan
            home. For example, if it is desired to install only profiles from a configuration and
            using source_folder="profiles", it might be expected to use target_folder="profiles"
            to keep the correct profile files location in the local home.
        """
        from conan.internal.api.config.config_installer import configuration_install
        cache_folder = self._conan_api.cache_folder
        requester = self._helpers.requester
        configuration_install(cache_folder, requester, path_or_url, verify_ssl,
                              config_type=config_type, args=args,
                              source_folder=source_folder, target_folder=target_folder)
        self._conan_api.reinit()

    def install_package(self, require, lockfile=None, force=False, remotes=None, profile=None):
        """ install Conan configuration from a Conan package

        Calling this method will cause a reinitilization of the full ConanAPI, with possible
        invalidation of cached information, and references to objects from the ConanAPI might
        become dangling or outdated.

        :param require: The package requirement to be installed. It can contain version range
            expressions. If the revision is not specified, as a recipe ``requires``, it will
            also resolve to the latest recipe-revision
        :param lockfile: Lockfile to be used to constrain and lock the versions and recipe-revisions
            from the input requirements, to the exact versions and revisions specified in the
            lockfile
        :param force: If the package has already been installed, nothing will be done unless
            force is True
        :param remotes: Remotes to look for the configuration package
        :param profile: If specified, use that profile to resolve for profile-specific different
            configurations, like depending on different settings.
        :return: list of RecipeReferences of the installed configuration packages
        """
        ConanOutput().warning("The 'conan config install-pkg' is experimental",
                              warn_tag="experimental")
        require = RecipeReference.loads(require)
        required_pkgs = self.fetch_packages([require], lockfile, remotes, profile)
        installed_refs = self._install_pkgs(required_pkgs, force)
        self._conan_api.reinit()
        return installed_refs

    @staticmethod
    def load_conanconfig(path, remotes):
        # Internal, do not document yet.
        if os.path.isdir(path):
            path = os.path.join(path, "conanconfig.yml")
        requested_requires, urls = loadconanconfig_yml(path)
        if urls:
            new_remotes = [Remote(f"config_install_url{'_' + str(i)}", url=url)
                           for i, url in enumerate(urls)]
            remotes = remotes or []
            remotes += new_remotes
        return requested_requires, remotes

    def install_conanconfig(self, path, lockfile=None, force=False, remotes=None, profile=None):
        """ install Conan configuration from a Conan "conanconfig.yml" file

        Calling this method will cause a reinitilization of the full ConanAPI, with possible
        invalidation of cached information, and references to objects from the ConanAPI might
        become dangling or outdated.

        :param path: Path to the conanconfig.yml file containing the configuration packages
            requirement definitions
        :param lockfile: Lockfile to be used to constrain and lock the versions and recipe-revisions
            from the input requirements, to the exact versions and revisions specified in the
            lockfile
        :param force: If the package has already been installed, nothing will be done unless
            force is True
        :param remotes: Remotes to look for the configuration package
        :param profile: If specified, use that profile to resolve for profile-specific different
            configurations, like depending on different settings.
        :return: list of RecipeReferences of the installed configuration packages
        """
        ConanOutput().warning("The 'conan config install-pkg' is experimental",
                              warn_tag="experimental")
        requested_requires, remotes = self.load_conanconfig(path, remotes)
        required_pkgs = self.fetch_packages(requested_requires, lockfile, remotes, profile)
        installed_refs = self._install_pkgs(required_pkgs, force)
        self._conan_api.reinit()
        return installed_refs

    def _install_pkgs(self, required_pkgs, force):
        out = ConanOutput()
        out.title("Configuration packages to install")
        config_version_file = HomePaths(self._conan_api.home_folder).config_version_path
        if not os.path.exists(config_version_file):
            config_versions = []
        else:
            ConanOutput().info(f"Reading existing config-versions file: {config_version_file}")
            config_versions = loadconanconfig(config_version_file)
        config_versions_dict = {r.name: r for r in config_versions}
        if len(config_versions_dict) < len(config_versions):
            raise ConanException("There are multiple requirements for the same package "
                                 f"with different versions: {config_version_file}")

        new_config = config_versions_dict.copy()
        for required_pkg in required_pkgs:
            new_config.pop(required_pkg.ref.name, None)  # To ensure new order
            new_config[required_pkg.ref.name] = required_pkg.ref
        final_config_refs = [r for r in new_config.values()]

        prev_refs = "\n\t".join(repr(r) for r in config_versions)
        out.info(f"Previously installed configuration packages:\n\t{prev_refs}")

        new_refs = "\n\t".join(r.repr_notime() for r in final_config_refs)
        out.info(f"New configuration packages to install:\n\t{new_refs}")

        if list(config_versions_dict) == list(new_config)[:len(config_versions_dict)]:
            # There is no conflict in order, can be done safely
            if final_config_refs == config_versions:
                if force:
                    out.warning("The requested configurations are identical to the already "
                                "installed ones, but forcing re-installation because --force")
                    to_install = required_pkgs
                else:
                    out.info("The requested configurations are identical to the already "
                             "installed ones, skipping re-installation")
                    to_install = []
            else:
                out.info("Installing new or updating configuration packages")
                to_install = required_pkgs
        else:
            # Change in order of existing configuration
            if force:
                out.warning("Installing these configuration packages will break the "
                            "existing order, with possible side effects. "
                            "Forcing the installation because --force was defined", warn_tag="risk")
                to_install = required_pkgs
            else:
                msg = ("Installing these configuration packages will break the "
                       "existing order, with possible side effects, like breaking 'package_ids'.\n"
                       "If you still want to enforce this configuration you can:\n"
                       "   Use 'conan config clean' first to fully reset your configuration.\n"
                       "   Or use 'conan config install-pkg --force' to force installation.")
                raise ConanException(msg)

        out.title("Installing configuration from packages")
        # install things and update the Conan cache "config_versions.json" file
        from conan.internal.api.config.config_installer import configuration_install
        cache_folder = self._conan_api.cache_folder
        requester = self._helpers.requester
        for pkg in to_install:
            out.info(f"Installing configuration from {pkg.ref}")
            configuration_install(cache_folder, requester, uri=pkg.conanfile.package_folder,
                                  verify_ssl=False, config_type="dir",
                                  ignore=["conaninfo.txt", "conanmanifest.txt"])

        saveconanconfig(config_version_file, final_config_refs)
        return final_config_refs

    def fetch_packages(self, requires, lockfile=None, remotes=None, profile=None):
        """ get and download configuration packages into the Conan cache, without installing
        such configuration in the current Conan home.

        This shouldn't be necessary for regular Conan configuration, and used at the moment
        exclusively for the "conan lock upgrade-config" experimental command.
        """
        conan_api = self._conan_api
        remotes = conan_api.remotes.list() if remotes is None else remotes
        profile_host = profile_build = profile or conan_api.profiles.get_profile([])

        app = ConanApp(self._conan_api)
        cache = self._helpers.cache

        ConanOutput().title("Fetching requested configuration packages")
        result = []
        for ref in requires:
            # Computation of a very simple graph that requires "ref"
            # Need to convert input requires to RecipeReference
            conanfile = app.loader.load_virtual(requires=[ref])
            consumer_definer(conanfile, profile_host, profile_build)
            root_node = Node(ref=None, conanfile=conanfile, context=CONTEXT_HOST,
                             recipe=RECIPE_VIRTUAL)
            root_node.is_conf = True
            update = ["*"]
            builder = DepsGraphBuilder(app.proxy, app.loader, app.range_resolver, cache, remotes,
                                       update, update, self._helpers.global_conf)
            deps_graph = builder.load_graph(root_node, profile_host, profile_build, lockfile)

            # Basic checks of the package: correct package_type and no-dependencies
            deps_graph.report_graph_error()
            pkg = deps_graph.root.edges[0].dst
            ConanOutput().info(f"Configuration from package: {pkg}")
            if pkg.conanfile.package_type is not PackageType.CONF:
                raise ConanException(f'{pkg.conanfile} is not of package_type="configuration"')
            if pkg.edges:
                raise ConanException(f"Configuration package {pkg.ref} cannot have dependencies")

            # The computation of the "package_id" and the download of the package is done as usual
            # By default we allow all remotes, and build_mode=None, always updating
            conan_api.graph.analyze_binaries(deps_graph, None, remotes, update=update,
                                             lockfile=lockfile)
            conan_api.install.install_binaries(deps_graph=deps_graph, remotes=remotes)
            result.append(pkg)
        return result

    def get(self, name, default=None, check_type=None):
        """ get the value of a global.conf item

        :param name: configuration value to return
        :param default: default value to return if the configuration doesn't contain a value
        :param check_type: check if value is of type check_type, only if the value is defined
        """
        return self._helpers.global_conf.get(name, default=default, check_type=check_type)

    def show(self, pattern) -> dict:
        """ get the values of global.conf for those configurations that matches the pattern
        that have an actual user definition.

        Values with no user definitions will be skipped from the returned value,
        defaults for those confs won't be shown.

        :param pattern: pattern to match against
        :return: dict of configuration values
        """
        return self._helpers.global_conf.show(pattern)

    @staticmethod
    def conf_list() -> dict:
        """ list all the available built-in configurations

        :return: A sorted dictionary with all possible built-in configurations
        """
        return BUILT_IN_CONFS.copy()

    def clean(self) -> None:
        """ reset the Conan home folder to a clean state, removing all the user
        custom configuration, custom files, and resetting modified files
        """
        contents = os.listdir(self.home())
        packages_folder = (self._helpers.global_conf.get("core.cache:storage_path") or
                           os.path.join(self.home(), "p"))
        for content in contents:
            content_path = os.path.join(self.home(), content)
            if content_path == packages_folder:
                continue
            ConanOutput().debug(f"Removing {content_path}")
            if os.path.isdir(content_path):
                rmdir(content_path)
            else:
                remove(content_path)
        self._conan_api.reinit()
        # CHECK: This also generates a remotes.json that is not there after a conan profile show?
        self._conan_api.migrate()

    @property
    def settings_yml(self):
        """ Get the contents of the settings.yml and user_settings.yml files,
        which define the possible values for settings.

        Note that this is different from the settings present in a conanfile,
        which represent the actual values for a specific package, while this
        property represents the possible values for each setting.

        This is intended to be a **read-only** value, do not try to attempt to modify,
        inject or remove settings with this attribute.

        :returns: A read-only object representing the settings scheme, with a
            ``possible_values()`` method that returns a dictionary with the possible
            values for each setting, and a ``fields`` property that returns an ordered
            list with the fields of each setting.
            Note that it's possible to access nested settings using attribute access,
            such as ``settings_yml.compiler.possible_values()``.
        """

        class SettingsYmlInterface:
            def __init__(self, settings):
                self._settings = settings

            def possible_values(self):
                """ returns a dict with the possible values for each setting """
                return self._settings.possible_values()

            @property
            def fields(self):
                """ returns a dict with the fields of each setting """
                return self._settings.fields

            def __getattr__(self, item):
                return SettingsYmlInterface(getattr(self._settings, item))

            def __str__(self):
                return str(self._settings)

        return SettingsYmlInterface(self._helpers.settings_yml)


================================================
FILE: conan/api/subapi/download.py
================================================
import time
from multiprocessing.pool import ThreadPool
from typing import Optional, List

from conan.api.model import Remote, PackagesList
from conan.api.output import ConanOutput
from conan.errors import ConanException
from conan.api.model import PkgReference
from conan.api.model import RecipeReference


class DownloadAPI:
    """ This API is used to download recipes and packages from a remote server."""

    def __init__(self, conan_api, api_helpers):
        self._conan_api = conan_api
        self._api_helpers = api_helpers

    def recipe(self, ref: RecipeReference, remote: Remote, metadata: Optional[List[str]] = None):
        """Download the recipe specified in the ref from the remote.
        If the recipe is already in the cache it will be skipped,
        but the specified metadata will be downloaded."""
        output = ConanOutput()
        assert ref.revision, f"Reference '{ref}' must have revision"
        try:
            recipe_layout = self._api_helpers.cache.recipe_layout(ref)  # raises if not found
        except ConanException:
            pass
        else:
            output.info(f"Skip recipe {ref.repr_notime()} download, already in cache")
            if metadata:
                self._api_helpers.remote_manager.get_recipe_metadata(recipe_layout, ref, remote,
                                                                     metadata)
            return False

        output.info(f"Downloading recipe '{ref.repr_notime()}'")
        if ref.timestamp is None:  # we didnt obtain the timestamp before (in general it should be)
            # Respect the timestamp of the server, the ``get_recipe()`` doesn't do it internally
            # Best would be that ``get_recipe()`` returns the timestamp in the same call
            server_ref = self._api_helpers.remote_manager.get_recipe_revision(ref, remote)
            assert server_ref == ref
            ref.timestamp = server_ref.timestamp
        recipe_layout = self._api_helpers.remote_manager.get_recipe(ref, remote, metadata)

        # Download the sources too, don't be lazy
        output.info(f"Downloading '{str(ref)}' sources")
        self._api_helpers.remote_manager.get_recipe_sources(ref, recipe_layout, remote)
        return True

    def package(self, pref: PkgReference, remote: Remote, metadata: Optional[List[str]] = None):
        """Download the package specified in the pref from the remote.
        The recipe for this package binary must already exist in the cache.
        If the package is already in the cache it will be skipped,
        but the specified metadata will be downloaded."""
        output = ConanOutput()

        try:
            self._api_helpers.cache.recipe_layout(pref.ref)  # raises if not found
        except ConanException:
            raise ConanException("The recipe of the specified package "
                                 "doesn't exist, download it first")

        skip_download = self._api_helpers.cache.exists_prev(pref)
        if skip_download:
            output.info(f"Skip package {pref.repr_notime()} download, already in cache")
            if metadata:
                self._api_helpers.remote_manager.get_package_metadata(pref, remote, metadata)
            return False

        if pref.timestamp is None:  # we didn't obtain the timestamp before (in general it should be)
            # Respect the timestamp of the server
            server_pref = self._api_helpers.remote_manager.get_package_revision(pref, remote)
            assert server_pref == pref
            pref.timestamp = server_pref.timestamp

        output.info(f"Downloading package '{pref.repr_notime()}'")
        self._api_helpers.remote_manager.get_package(pref, remote, metadata)
        return True

    def download_full(self, package_list: PackagesList, remote: Remote,
                      metadata: Optional[List[str]] = None):
        """Download the recipes and packages specified in the ``package_list`` from the remote,
        parallelized based on ``core.download:parallel``"""
        def _download_pkglist(pkglist):
            for ref, packages in pkglist.items():
                self.recipe(ref, remote, metadata)
                ref_dict = pkglist.recipe_dict(ref)
                ref_dict.pop("files", None)
                ref_dict.pop("upload-urls", None)
                for pref in packages:
                    self.package(pref, remote, metadata)
                    pkg_dict = pkglist.package_dict(pref)
                    pkg_dict.pop("files", None)
                    pkg_dict.pop("upload-urls", None)

        t = time.time()
        parallel = self._api_helpers.global_conf.get("core.download:parallel", default=1,
                                                     check_type=int)
        thread_pool = ThreadPool(parallel) if parallel > 1 else None
        if not thread_pool or len(package_list._data) <= 1:  # FIXME: Iteration when multiple rrevs
            _download_pkglist(package_list)
        else:
            ConanOutput().subtitle(f"Downloading with {parallel} parallel threads")
            thread_pool.map(_download_pkglist, package_list.split())

        if thread_pool:
            thread_pool.close()
            thread_pool.join()

        elapsed = time.time() - t
        ConanOutput().success(f"Download completed in {int(elapsed)}s\n")


================================================
FILE: conan/api/subapi/export.py
================================================
import os
from typing import List, Tuple

from conan import ConanFile
from conan.api.output import ConanOutput
from conan.cli.printers.graph import print_graph_basic
from conan.internal.cache.cache import PkgCache
from conan.internal.conan_app import ConanApp
from conan.internal.api.export import cmd_export
from conan.internal.methods import run_package_method
from conan.internal.graph.graph import BINARY_BUILD, RECIPE_INCACHE
from conan.api.model import PkgReference, Remote, RecipeReference
from conan.internal.util.files import mkdir


class ExportAPI:
    """ This API provides methods to export artifacts, both recipes and pre-compiled package
    binaries from user folders to the Conan cache, as Conan recipes and Conan package binaries
    """

    def __init__(self, conan_api, helpers):
        self._conan_api = conan_api
        self._helpers = helpers

    def export(self, path, name: str = None, version: str = None, user: str = None,
               channel: str = None, lockfile=None,
               remotes: List[Remote] = None) -> Tuple[RecipeReference, ConanFile]:
        """ Exports a ``conanfile.py`` recipe, together with its associated files to the Conan cache.
        A "recipe-revision" will be computed and assigned.

        :param path: Path to the conanfile to be exported
        :param name: Optional package name. Typically not necessary as it is defined by the recipe
            attribute or dynamically with the ``set_name()`` method.
            If it is defined in recipe and as an argument, but they don't match, an error will be raised.
        :param version: Optional version. It can be defined in the recipe with the version
            attribute or dynamically with the 'set_version()' method.
            If it is defined in recipe and as an argument, but they don't match, an error will be raised.
        :param user: Optional user. Can be defined by recipe attribute.
            If it is defined in recipe and as an argument, but they don't match, an error will be raised.
        :param channel: Optional channel. Can be defined by recipe attribute.
            If it is defined in recipe and as an argument, but they don't match, an error will be raised.
        :param lockfile: Optional, only relevant if the recipe has 'python-requires' to be locked
        :param remotes: Optional, only relevant to resolve 'python-requires' in remotes
        :return: A tuple of the exported RecipeReference and a ConanFile object
        """
        ConanOutput().title("Exporting recipe to the cache")
        app = ConanApp(self._conan_api)
        hook_manager = self._helpers.hook_manager
        return cmd_export(app.loader,self._helpers.cache, hook_manager, self._helpers.global_conf, path,
                          name, version, user, channel, graph_lock=lockfile, remotes=remotes)

    def export_pkg_graph(self, path, ref: RecipeReference, profile_host, profile_build,
                         remotes: List[Remote], lockfile=None, is_build_require=False,
                         skip_binaries=False, output_folder=None):
        """Computes a dependency graph for a given configuration, for an already existing (previously
        exported) recipe in the Conan cache. This method computes the full dependency graph, using
        the profiles, lockfile and remotes information as any other install/graph/create command.
        This is necessary in order to compute the "package_id" of the binary being exported
        into the Conan cache.
        The resulting dependency graph can be passed to ``export_pkg()`` method

        :param path: Path to the conanfile.py in the user folder
        :param ref: full RecipeReference, including recipe-revision
        :param profile_host: Profile for the host context
        :param profile_build: Profile for the build context
        :param lockfile: Optional lockfile
        :param remotes: List of Remotes
        :param is_build_require: In case a package intended to be used as a tool-requires
        :param skip_binaries:
        :param output_folder: The folder containing output files, like potential environment scripts
        :return: A Graph object that can be passed to ``export_pkg()`` method
        """
        assert ref.revision, "ref argument must have recipe-revision defined"
        conan_api = self._conan_api
        deps_graph = conan_api.graph.load_graph_consumer(path,
                                                         ref.name, str(ref.version), ref.user,
                                                         ref.channel,
                                                         profile_host=profile_host,
                                                         profile_build=profile_build,
                                                         lockfile=lockfile, remotes=remotes,
                                                         update=None,
                                                         is_build_require=is_build_require)

        print_graph_basic(deps_graph)
        deps_graph.report_graph_error()
        conan_api.graph.analyze_binaries(deps_graph, build_mode=[ref.name], lockfile=lockfile,
                                         remotes=remotes)
        deps_graph.report_graph_error()

        root_node = deps_graph.root
        root_node.ref = ref  # Make sure the root node revision is well defined

        if not skip_binaries:
            # unless the user explicitly opts-out with --skip-binaries, it is necessary to install
            # binaries, in case there are build_requires necessary like tool-requires=cmake
            # and package() method doing ``cmake.install()``
            # for most cases, deps will be in cache already because of a previous "conan install"
            # but if it is not the case, the binaries from remotes will be downloaded
            conan_api.install.install_binaries(deps_graph=deps_graph, remotes=remotes)
        source_folder = os.path.dirname(path)
        conan_api.install.install_consumer(deps_graph=deps_graph, source_folder=source_folder,
                                           output_folder=output_folder)
        return deps_graph

    def export_pkg(self, graph, output_folder=None) -> None:
        """Executes the ``package()`` method of the exported recipe in order to copy the artifacts
        from user folder to the Conan cache package folder

        :param graph: A Graph object
        :param output_folder: Optional folder where generated files like environment scripts
            of dependencies have been installed
        """
        cache = PkgCache(self._conan_api.cache_folder, self._helpers.global_conf)
        hook_manager = self._helpers.hook_manager

        # The graph has to be loaded with build_mode=[ref.name], so that node is not tried
        # to be downloaded from remotes
        # passing here the create_reference=ref argument is useful so the recipe is in "develop",
        # because the "package()" method is in develop=True already
        pkg_node = graph.root
        ref = pkg_node.ref
        source_folder = os.path.dirname(pkg_node.path)
        out = ConanOutput(scope=pkg_node.conanfile.display_name)
        out.info("Exporting binary from user folder to Conan cache")
        conanfile = pkg_node.conanfile

        package_id = pkg_node.package_id
        assert package_id is not None
        out.info("Packaging to %s" % package_id)
        pref = PkgReference(ref, package_id)
        pkg_layout = cache.create_build_pkg_layout(pref)

        conanfile.folders.set_base_folders(source_folder, output_folder)
        dest_package_folder = pkg_layout.package()
        conanfile.folders.set_base_package(dest_package_folder)
        mkdir(pkg_layout.metadata())
        conanfile.folders.set_base_pkg_metadata(pkg_layout.metadata())

        with pkg_layout.set_dirty_context_manager():
            prev = run_package_method(conanfile, package_id, hook_manager, ref)

        pref = PkgReference(pref.ref, pref.package_id, prev)
        pkg_layout.reference = pref
        cache.assign_prev(pkg_layout)
        pkg_node.prev = prev
        pkg_node.pref_timestamp = pref.timestamp  # assigned by assign_prev
        pkg_node.recipe = RECIPE_INCACHE
        pkg_node.binary = BINARY_BUILD
        # Make sure folder is updated
        final_folder = pkg_layout.package()
        conanfile.folders.set_base_package(final_folder)
        out.info(f"Package folder {final_folder}")
        out.success("Exported package binary")


================================================
FILE: conan/api/subapi/graph.py
================================================
from conan.api.output import ConanOutput
from conan.internal.conan_app import ConanApp
from conan.internal.model.recipe_ref import ref_matches
from conan.internal.graph.graph import Node, RECIPE_CONSUMER, CONTEXT_HOST, RECIPE_VIRTUAL, \
    CONTEXT_BUILD, BINARY_MISSING, DepsGraph
from conan.internal.graph.graph_binaries import GraphBinariesAnalyzer
from conan.internal.graph.graph_builder import DepsGraphBuilder
from conan.internal.graph.install_graph import InstallGraph, ProfileArgs
from conan.internal.graph.profile_node_definer import initialize_conanfile_profile, consumer_definer
from conan.errors import ConanException
from conan.api.model import RecipeReference


class GraphAPI:

    def __init__(self, conan_api, helpers):
        self._conan_api = conan_api
        self._helpers = helpers

    def _load_root_consumer_conanfile(self, path, profile_host, profile_build,
                                      name=None, version=None, user=None, channel=None,
                                      update=None, remotes=None, lockfile=None,
                                      is_build_require=False):
        app = ConanApp(self._conan_api)

        if path.endswith(".py"):
            conanfile = app.loader.load_consumer(path,
                                                 name=name,
                                                 version=version,
                                                 user=user,
                                                 channel=channel,
                                                 graph_lock=lockfile,
                                                 remotes=remotes,
                                                 update=update)
            ref = RecipeReference(conanfile.name, conanfile.version,
                                  conanfile.user, conanfile.channel)
            context = CONTEXT_BUILD if is_build_require else CONTEXT_HOST
            # Here, it is always the "host" context because it is the base, not the current node one
            initialize_conanfile_profile(conanfile, profile_build, profile_host, CONTEXT_HOST,
                                         is_build_require, ref)
            if ref.name:
                profile_host.options.scope(ref)
            root_node = Node(ref, conanfile, context=context, recipe=RECIPE_CONSUMER, path=path)
            root_node.should_build = True  # It is a consumer, this is something we are building
        else:
            conanfile = app.loader.load_conanfile_txt(path)
            consumer_definer(conanfile, profile_host, profile_build)
            root_node = Node(None, conanfile, context=CONTEXT_HOST, recipe=RECIPE_CONSUMER,
                             p
Download .txt
gitextract_tvb7y0th/

├── .ci/
│   ├── __init__.py
│   ├── bump_dev_version.py
│   └── docker/
│       └── conan-tests
├── .editorconfig
├── .github/
│   ├── CONTRIBUTING.md
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug.yml
│   │   ├── feature_request.yml
│   │   └── question.yml
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── actions/
│   │   └── test-coverage/
│   │       └── action.yml
│   └── workflows/
│       ├── build-binaries.yml
│       ├── linux-tests.yml
│       ├── main.yml
│       ├── osx-tests.yml
│       └── win-tests.yml
├── .gitignore
├── LICENSE.md
├── MANIFEST.in
├── README.md
├── codecov.yml
├── conan/
│   ├── __init__.py
│   ├── api/
│   │   ├── __init__.py
│   │   ├── conan_api.py
│   │   ├── input.py
│   │   ├── model/
│   │   │   ├── __init__.py
│   │   │   ├── list.py
│   │   │   ├── refs.py
│   │   │   └── remote.py
│   │   ├── output.py
│   │   └── subapi/
│   │       ├── __init__.py
│   │       ├── audit.py
│   │       ├── cache.py
│   │       ├── command.py
│   │       ├── config.py
│   │       ├── download.py
│   │       ├── export.py
│   │       ├── graph.py
│   │       ├── install.py
│   │       ├── list.py
│   │       ├── local.py
│   │       ├── lockfile.py
│   │       ├── new.py
│   │       ├── profiles.py
│   │       ├── remotes.py
│   │       ├── remove.py
│   │       ├── report.py
│   │       ├── upload.py
│   │       └── workspace.py
│   ├── cli/
│   │   ├── __init__.py
│   │   ├── args.py
│   │   ├── cli.py
│   │   ├── command.py
│   │   ├── commands/
│   │   │   ├── __init__.py
│   │   │   ├── audit.py
│   │   │   ├── build.py
│   │   │   ├── cache.py
│   │   │   ├── config.py
│   │   │   ├── create.py
│   │   │   ├── download.py
│   │   │   ├── editable.py
│   │   │   ├── export.py
│   │   │   ├── export_pkg.py
│   │   │   ├── graph.py
│   │   │   ├── inspect.py
│   │   │   ├── install.py
│   │   │   ├── list.py
│   │   │   ├── lock.py
│   │   │   ├── new.py
│   │   │   ├── pkglist.py
│   │   │   ├── profile.py
│   │   │   ├── remote.py
│   │   │   ├── remove.py
│   │   │   ├── report.py
│   │   │   ├── require.py
│   │   │   ├── run.py
│   │   │   ├── search.py
│   │   │   ├── source.py
│   │   │   ├── test.py
│   │   │   ├── upload.py
│   │   │   ├── version.py
│   │   │   └── workspace.py
│   │   ├── exit_codes.py
│   │   ├── formatters/
│   │   │   ├── __init__.py
│   │   │   ├── audit/
│   │   │   │   ├── __init__.py
│   │   │   │   └── vulnerabilities.py
│   │   │   ├── graph/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── build_order_html.py
│   │   │   │   ├── graph.py
│   │   │   │   ├── graph_info_text.py
│   │   │   │   ├── info_graph_dot.py
│   │   │   │   └── info_graph_html.py
│   │   │   ├── list/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── list.py
│   │   │   │   └── search_table_html.py
│   │   │   └── report/
│   │   │       ├── __init__.py
│   │   │       ├── diff.py
│   │   │       └── diff_html.py
│   │   └── printers/
│   │       ├── __init__.py
│   │       └── graph.py
│   ├── cps/
│   │   ├── __init__.py
│   │   └── cps.py
│   ├── errors.py
│   ├── internal/
│   │   ├── __init__.py
│   │   ├── api/
│   │   │   ├── __init__.py
│   │   │   ├── audit/
│   │   │   │   ├── __init__.py
│   │   │   │   └── providers.py
│   │   │   ├── config/
│   │   │   │   ├── __init__.py
│   │   │   │   └── config_installer.py
│   │   │   ├── detect/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── detect_api.py
│   │   │   │   └── detect_vs.py
│   │   │   ├── export.py
│   │   │   ├── install/
│   │   │   │   ├── __init__.py
│   │   │   │   └── generators.py
│   │   │   ├── list/
│   │   │   │   ├── __init__.py
│   │   │   │   └── query_parse.py
│   │   │   ├── local/
│   │   │   │   ├── __init__.py
│   │   │   │   └── editable.py
│   │   │   ├── migrations.py
│   │   │   ├── new/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── alias_new.py
│   │   │   │   ├── autoools_exe.py
│   │   │   │   ├── autotools_lib.py
│   │   │   │   ├── basic.py
│   │   │   │   ├── bazel_7_exe.py
│   │   │   │   ├── bazel_7_lib.py
│   │   │   │   ├── bazel_exe.py
│   │   │   │   ├── bazel_lib.py
│   │   │   │   ├── cmake_exe.py
│   │   │   │   ├── cmake_lib.py
│   │   │   │   ├── header_lib.py
│   │   │   │   ├── local_recipes_index.py
│   │   │   │   ├── meson_exe.py
│   │   │   │   ├── meson_lib.py
│   │   │   │   ├── msbuild_exe.py
│   │   │   │   ├── msbuild_lib.py
│   │   │   │   ├── premake_exe.py
│   │   │   │   ├── premake_lib.py
│   │   │   │   ├── qbs_lib.py
│   │   │   │   └── workspace.py
│   │   │   ├── profile/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── detect.py
│   │   │   │   └── profile_loader.py
│   │   │   ├── remotes/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── encrypt.py
│   │   │   │   └── localdb.py
│   │   │   ├── upload.py
│   │   │   └── uploader.py
│   │   ├── cache/
│   │   │   ├── __init__.py
│   │   │   ├── cache.py
│   │   │   ├── conan_reference_layout.py
│   │   │   ├── db/
│   │   │   │   ├── __init__.py
│   │   │   │   ├── cache_database.py
│   │   │   │   ├── packages_table.py
│   │   │   │   ├── recipes_table.py
│   │   │   │   └── table.py
│   │   │   ├── home_paths.py
│   │   │   └── integrity_check.py
│   │   ├── conan_app.py
│   │   ├── default_settings.py
│   │   ├── deploy.py
│   │   ├── errors.py
│   │   ├── graph/
│   │   │   ├── __init__.py
│   │   │   ├── build_mode.py
│   │   │   ├── compatibility.py
│   │   │   ├── compute_pid.py
│   │   │   ├── graph.py
│   │   │   ├── graph_binaries.py
│   │   │   ├── graph_builder.py
│   │   │   ├── graph_error.py
│   │   │   ├── install_graph.py
│   │   │   ├── installer.py
│   │   │   ├── profile_node_definer.py
│   │   │   ├── provides.py
│   │   │   ├── proxy.py
│   │   │   ├── python_requires.py
│   │   │   └── range_resolver.py
│   │   ├── hook_manager.py
│   │   ├── internal_tools.py
│   │   ├── loader.py
│   │   ├── methods.py
│   │   ├── model/
│   │   │   ├── __init__.py
│   │   │   ├── conan_file.py
│   │   │   ├── conanconfig.py
│   │   │   ├── conanfile_interface.py
│   │   │   ├── conf.py
│   │   │   ├── cpp_info.py
│   │   │   ├── dependencies.py
│   │   │   ├── info.py
│   │   │   ├── layout.py
│   │   │   ├── lockfile.py
│   │   │   ├── manifest.py
│   │   │   ├── options.py
│   │   │   ├── pkg_type.py
│   │   │   ├── profile.py
│   │   │   ├── recipe_ref.py
│   │   │   ├── requires.py
│   │   │   ├── settings.py
│   │   │   ├── version.py
│   │   │   ├── version_range.py
│   │   │   └── workspace.py
│   │   ├── paths.py
│   │   ├── rest/
│   │   │   ├── __init__.py
│   │   │   ├── auth_manager.py
│   │   │   ├── caching_file_downloader.py
│   │   │   ├── client_routes.py
│   │   │   ├── conan_requester.py
│   │   │   ├── download_cache.py
│   │   │   ├── file_downloader.py
│   │   │   ├── file_uploader.py
│   │   │   ├── pkg_sign.py
│   │   │   ├── remote_credentials.py
│   │   │   ├── remote_manager.py
│   │   │   ├── rest_client.py
│   │   │   ├── rest_client_local_recipe_index.py
│   │   │   ├── rest_client_v2.py
│   │   │   └── rest_routes.py
│   │   ├── runner/
│   │   │   ├── __init__.py
│   │   │   ├── docker.py
│   │   │   ├── output.py
│   │   │   ├── ssh.py
│   │   │   └── wsl.py
│   │   ├── source.py
│   │   ├── subsystems.py
│   │   └── util/
│   │       ├── __init__.py
│   │       ├── config_parser.py
│   │       ├── dates.py
│   │       ├── files.py
│   │       └── runners.py
│   ├── test/
│   │   ├── __init__.py
│   │   ├── assets/
│   │   │   ├── __init__.py
│   │   │   ├── autotools.py
│   │   │   ├── cmake.py
│   │   │   ├── genconanfile.py
│   │   │   ├── premake.py
│   │   │   ├── sources.py
│   │   │   └── visual_project_files.py
│   │   └── utils/
│   │       ├── __init__.py
│   │       ├── artifactory.py
│   │       ├── env.py
│   │       ├── file_server.py
│   │       ├── mocks.py
│   │       ├── profiles.py
│   │       ├── scm.py
│   │       ├── server_launcher.py
│   │       ├── test_files.py
│   │       └── tools.py
│   └── tools/
│       ├── __init__.py
│       ├── android/
│       │   ├── __init__.py
│       │   └── utils.py
│       ├── apple/
│       │   ├── __init__.py
│       │   ├── apple.py
│       │   ├── xcodebuild.py
│       │   ├── xcodedeps.py
│       │   └── xcodetoolchain.py
│       ├── build/
│       │   ├── __init__.py
│       │   ├── compiler.py
│       │   ├── cppstd.py
│       │   ├── cpu.py
│       │   ├── cross_building.py
│       │   ├── cstd.py
│       │   ├── flags.py
│       │   └── stdcpp_library.py
│       ├── cmake/
│       │   ├── __init__.py
│       │   ├── cmake.py
│       │   ├── cmakeconfigdeps/
│       │   │   ├── __init__.py
│       │   │   ├── cmakeconfigdeps.py
│       │   │   ├── config.py
│       │   │   ├── config_version.py
│       │   │   ├── target_configuration.py
│       │   │   └── targets.py
│       │   ├── cmakedeps/
│       │   │   ├── __init__.py
│       │   │   ├── cmakedeps.py
│       │   │   └── templates/
│       │   │       ├── __init__.py
│       │   │       ├── config.py
│       │   │       ├── config_version.py
│       │   │       ├── macros.py
│       │   │       ├── target_configuration.py
│       │   │       ├── target_data.py
│       │   │       └── targets.py
│       │   ├── layout.py
│       │   ├── presets.py
│       │   ├── toolchain/
│       │   │   ├── __init__.py
│       │   │   ├── blocks.py
│       │   │   └── toolchain.py
│       │   └── utils.py
│       ├── cps/
│       │   ├── __init__.py
│       │   └── cps_deps.py
│       ├── env/
│       │   ├── __init__.py
│       │   ├── environment.py
│       │   ├── virtualbuildenv.py
│       │   └── virtualrunenv.py
│       ├── files/
│       │   ├── __init__.py
│       │   ├── conandata.py
│       │   ├── copy_pattern.py
│       │   ├── files.py
│       │   ├── patches.py
│       │   └── symlinks/
│       │       ├── __init__.py
│       │       └── symlinks.py
│       ├── gnu/
│       │   ├── __init__.py
│       │   ├── autotools.py
│       │   ├── autotoolsdeps.py
│       │   ├── autotoolstoolchain.py
│       │   ├── get_gnu_triplet.py
│       │   ├── gnudeps_flags.py
│       │   ├── gnutoolchain.py
│       │   ├── makedeps.py
│       │   ├── pkgconfig.py
│       │   └── pkgconfigdeps.py
│       ├── google/
│       │   ├── __init__.py
│       │   ├── bazel.py
│       │   ├── bazeldeps.py
│       │   ├── layout.py
│       │   └── toolchain.py
│       ├── intel/
│       │   ├── __init__.py
│       │   └── intel_cc.py
│       ├── layout/
│       │   └── __init__.py
│       ├── meson/
│       │   ├── __init__.py
│       │   ├── helpers.py
│       │   ├── meson.py
│       │   └── toolchain.py
│       ├── microsoft/
│       │   ├── __init__.py
│       │   ├── layout.py
│       │   ├── msbuild.py
│       │   ├── msbuilddeps.py
│       │   ├── nmakedeps.py
│       │   ├── nmaketoolchain.py
│       │   ├── subsystems.py
│       │   ├── toolchain.py
│       │   └── visual.py
│       ├── premake/
│       │   ├── __init__.py
│       │   ├── constants.py
│       │   ├── premake.py
│       │   ├── premakedeps.py
│       │   └── toolchain.py
│       ├── qbs/
│       │   ├── __init__.py
│       │   ├── common.py
│       │   ├── qbs.py
│       │   ├── qbsdeps.py
│       │   └── qbsprofile.py
│       ├── ros/
│       │   ├── __init__.py
│       │   └── rosenv.py
│       ├── sbom/
│       │   ├── __init__.py
│       │   ├── cyclonedx.py
│       │   └── spdx_licenses.py
│       ├── scm/
│       │   ├── __init__.py
│       │   └── git.py
│       ├── scons/
│       │   ├── __init__.py
│       │   └── sconsdeps.py
│       └── system/
│           ├── __init__.py
│           ├── package_manager.py
│           └── python_manager.py
├── conans/
│   ├── __init__.py
│   ├── conan.py
│   ├── conan_server.py
│   ├── migrations.py
│   ├── requirements.txt
│   ├── requirements_dev.txt
│   ├── requirements_runner.txt
│   ├── requirements_server.txt
│   └── server/
│       ├── __init__.py
│       ├── conf/
│       │   ├── __init__.py
│       │   └── default_server_conf.py
│       ├── crypto/
│       │   ├── __init__.py
│       │   └── jwt/
│       │       ├── __init__.py
│       │       └── jwt_credentials_manager.py
│       ├── launcher.py
│       ├── migrate.py
│       ├── migrations.py
│       ├── plugin_loader.py
│       ├── rest/
│       │   ├── __init__.py
│       │   ├── api_v2.py
│       │   ├── bottle_plugins/
│       │   │   ├── __init__.py
│       │   │   ├── authorization_header.py
│       │   │   ├── http_basic_authentication.py
│       │   │   ├── jwt_authentication.py
│       │   │   └── return_handler.py
│       │   ├── bottle_routes.py
│       │   ├── controller/
│       │   │   ├── __init__.py
│       │   │   └── v2/
│       │   │       ├── __init__.py
│       │   │       ├── conan.py
│       │   │       ├── delete.py
│       │   │       ├── ping.py
│       │   │       ├── revisions.py
│       │   │       ├── search.py
│       │   │       └── users.py
│       │   └── server.py
│       ├── revision_list.py
│       ├── server_launcher.py
│       ├── service/
│       │   ├── __init__.py
│       │   ├── authorize.py
│       │   ├── mime.py
│       │   ├── user_service.py
│       │   └── v2/
│       │       ├── __init__.py
│       │       ├── search.py
│       │       └── service_v2.py
│       ├── store/
│       │   ├── __init__.py
│       │   ├── disk_adapter.py
│       │   └── server_store.py
│       └── utils/
│           ├── __init__.py
│           └── files.py
├── contributors.txt
├── pyinstaller.py
├── pyproject.toml
├── pytest.ini
├── setup.cfg
├── setup.py
├── setup_server.py
└── test/
    ├── .gitignore
    ├── README.md
    ├── __init__.py
    ├── conftest.py
    ├── functional/
    │   ├── __init__.py
    │   ├── command/
    │   │   ├── __init__.py
    │   │   ├── dockerfiles/
    │   │   │   ├── Dockerfile
    │   │   │   ├── Dockerfile_args
    │   │   │   ├── Dockerfile_ninja
    │   │   │   ├── Dockerfile_profile_detect
    │   │   │   └── Dockerfile_test
    │   │   ├── export_test.py
    │   │   ├── profile_test.py
    │   │   ├── report_test.py
    │   │   ├── runner_test.py
    │   │   ├── test_build.py
    │   │   ├── test_config_install.py
    │   │   ├── test_config_install_pkg.py
    │   │   ├── test_custom_symlink_home.py
    │   │   ├── test_install_deploy.py
    │   │   └── test_new.py
    │   ├── conftest.py
    │   ├── layout/
    │   │   ├── __init__.py
    │   │   ├── test_build_system_layout_helpers.py
    │   │   ├── test_editable_cmake.py
    │   │   ├── test_editable_cmake_components.py
    │   │   ├── test_editable_msbuild.py
    │   │   ├── test_exports_sources.py
    │   │   ├── test_in_cache.py
    │   │   ├── test_in_subfolder.py
    │   │   ├── test_local_commands.py
    │   │   └── test_source_folder.py
    │   ├── revisions_test.py
    │   ├── sbom/
    │   │   ├── __init__.py
    │   │   └── test_cyclonedx.py
    │   ├── subsystems_build_test.py
    │   ├── test_local_recipes_index.py
    │   ├── test_profile_detect_api.py
    │   ├── test_third_party_patch_flow.py
    │   ├── toolchains/
    │   │   ├── __init__.py
    │   │   ├── android/
    │   │   │   ├── __init__.py
    │   │   │   └── test_using_cmake.py
    │   │   ├── apple/
    │   │   │   ├── __init__.py
    │   │   │   ├── test_xcodebuild.py
    │   │   │   ├── test_xcodebuild_targets.py
    │   │   │   ├── test_xcodedeps_build_configs.py
    │   │   │   ├── test_xcodedeps_components.py
    │   │   │   └── test_xcodetoolchain.py
    │   │   ├── autotools/
    │   │   │   ├── __init__.py
    │   │   │   └── test_universal_binaries.py
    │   │   ├── cmake/
    │   │   │   ├── __init__.py
    │   │   │   ├── cmakeconfigdeps/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── test_cmakeconfigdeps_aliases.py
    │   │   │   │   ├── test_cmakeconfigdeps_frameworks.py
    │   │   │   │   ├── test_cmakeconfigdeps_new.py
    │   │   │   │   ├── test_cmakeconfigdeps_new_cpp_linkage.py
    │   │   │   │   ├── test_cmakeconfigdeps_new_paths.py
    │   │   │   │   └── test_cmakeconfigdeps_sources.py
    │   │   │   ├── cmakedeps/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── test_apple_frameworks.py
    │   │   │   │   ├── test_build_context_protobuf.py
    │   │   │   │   ├── test_build_context_transitive_build.py
    │   │   │   │   ├── test_cmakedeps.py
    │   │   │   │   ├── test_cmakedeps_aggregator.py
    │   │   │   │   ├── test_cmakedeps_aliases.py
    │   │   │   │   ├── test_cmakedeps_and_linker_flags.py
    │   │   │   │   ├── test_cmakedeps_build_modules.py
    │   │   │   │   ├── test_cmakedeps_components.py
    │   │   │   │   ├── test_cmakedeps_components_names.py
    │   │   │   │   ├── test_cmakedeps_custom_configs.py
    │   │   │   │   ├── test_cmakedeps_find_module_and_config.py
    │   │   │   │   ├── test_cmakedeps_transitivity.py
    │   │   │   │   ├── test_cmakedeps_versions.py
    │   │   │   │   ├── test_conditional_build_type.py
    │   │   │   │   ├── test_link_order.py
    │   │   │   │   └── test_weird_library_names.py
    │   │   │   ├── test_cmake.py
    │   │   │   ├── test_cmake_and_no_soname_flag.py
    │   │   │   ├── test_cmake_extra_variables.py
    │   │   │   ├── test_cmake_find_none.py
    │   │   │   ├── test_cmake_multi.py
    │   │   │   ├── test_cmake_toolchain.py
    │   │   │   ├── test_cmake_toolchain_m1.py
    │   │   │   ├── test_cmake_toolchain_presets.py
    │   │   │   ├── test_cmake_toolchain_win_clang.py
    │   │   │   ├── test_cmake_toolchain_xcode_flags.py
    │   │   │   ├── test_cmake_transitive_rpath.py
    │   │   │   ├── test_cmaketoolchain_paths.py
    │   │   │   ├── test_cps.py
    │   │   │   ├── test_ninja.py
    │   │   │   ├── test_presets_inherit.py
    │   │   │   ├── test_shared_cmake.py
    │   │   │   ├── test_transitive_build_scripts.py
    │   │   │   ├── test_universal_binaries.py
    │   │   │   └── test_v2_cmake_template.py
    │   │   ├── emscripten/
    │   │   │   ├── __init__.py
    │   │   │   └── test_emcc.py
    │   │   ├── env/
    │   │   │   ├── __init__.py
    │   │   │   ├── test_complete.py
    │   │   │   └── test_virtualenv_powershell.py
    │   │   ├── gnu/
    │   │   │   ├── __init__.py
    │   │   │   ├── autotools/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── test_android.py
    │   │   │   │   ├── test_apple_toolchain.py
    │   │   │   │   ├── test_basic.py
    │   │   │   │   ├── test_crossbuild_triplet.py
    │   │   │   │   ├── test_ios.py
    │   │   │   │   └── test_win_bash.py
    │   │   │   ├── test_gnutoolchain_android.py
    │   │   │   ├── test_gnutoolchain_apple.py
    │   │   │   ├── test_makedeps.py
    │   │   │   ├── test_pkg_config.py
    │   │   │   ├── test_pkgconfigdeps.py
    │   │   │   ├── test_pkgconfigdeps_autotools.py
    │   │   │   ├── test_universal_binaries.py
    │   │   │   └── test_v2_autotools_template.py
    │   │   ├── google/
    │   │   │   ├── __init__.py
    │   │   │   ├── test_bazel.py
    │   │   │   └── test_bazeltoolchain_cross_compilation.py
    │   │   ├── intel/
    │   │   │   ├── __init__.py
    │   │   │   ├── test_intel_cc.py
    │   │   │   └── test_using_msbuild.py
    │   │   ├── ios/
    │   │   │   ├── __init__.py
    │   │   │   ├── _utils.py
    │   │   │   └── test_using_cmake.py
    │   │   ├── meson/
    │   │   │   ├── __init__.py
    │   │   │   ├── _base.py
    │   │   │   ├── test_backend.py
    │   │   │   ├── test_cross_compilation.py
    │   │   │   ├── test_install.py
    │   │   │   ├── test_meson.py
    │   │   │   ├── test_meson_and_gnu_deps_flags.py
    │   │   │   ├── test_meson_and_objc.py
    │   │   │   ├── test_meson_native_attribute.py
    │   │   │   ├── test_meson_transitive_rpath_sysroot.py
    │   │   │   ├── test_pkg_config_reuse.py
    │   │   │   ├── test_preprocessor_definitions.py
    │   │   │   ├── test_subproject.py
    │   │   │   ├── test_test.py
    │   │   │   └── test_v2_meson_template.py
    │   │   ├── microsoft/
    │   │   │   ├── __init__.py
    │   │   │   ├── test_msbuild.py
    │   │   │   ├── test_msbuilddeps.py
    │   │   │   ├── test_msbuilddeps_components.py
    │   │   │   ├── test_msbuilddeps_traits.py
    │   │   │   ├── test_msbuildtoolchain.py
    │   │   │   ├── test_v2_msbuild_template.py
    │   │   │   └── test_vcvars.py
    │   │   ├── qbs/
    │   │   │   ├── __init__.py
    │   │   │   ├── test_qbs.py
    │   │   │   ├── test_qbsdeps.py
    │   │   │   ├── test_qbsprofile.py
    │   │   │   └── test_qbsprofile_gen.py
    │   │   ├── scons/
    │   │   │   ├── __init__.py
    │   │   │   └── test_sconsdeps.py
    │   │   ├── test_basic.py
    │   │   ├── test_nmake_toolchain.py
    │   │   └── test_premake.py
    │   ├── tools/
    │   │   ├── __init__.py
    │   │   ├── scm/
    │   │   │   ├── __init__.py
    │   │   │   ├── test_git.py
    │   │   │   ├── test_git_get_commit.py
    │   │   │   └── test_version.py
    │   │   ├── system/
    │   │   │   ├── __init__.py
    │   │   │   ├── package_manager_test.py
    │   │   │   └── python_manager_test.py
    │   │   ├── test_apple_tools.py
    │   │   └── test_files.py
    │   ├── tools_versions_test.py
    │   ├── util/
    │   │   ├── __init__.py
    │   │   ├── test_cmd_args_to_string.py
    │   │   └── tools_test.py
    │   ├── utils.py
    │   └── workspace/
    │       ├── __init__.py
    │       └── test_workspace.py
    ├── integration/
    │   ├── __init__.py
    │   ├── build_requires/
    │   │   ├── __init__.py
    │   │   ├── build_requires_test.py
    │   │   ├── profile_build_requires_test.py
    │   │   ├── test_build_requires_source_method.py
    │   │   ├── test_install_test_build_require.py
    │   │   ├── test_relocatable_toolchain.py
    │   │   └── test_toolchain_packages.py
    │   ├── cache/
    │   │   ├── __init__.py
    │   │   ├── backup_sources_test.py
    │   │   ├── cache2_update_test.py
    │   │   ├── download_cache_test.py
    │   │   ├── rmdir_fail_test.py
    │   │   ├── storage_path_test.py
    │   │   ├── test_home_special_char.py
    │   │   ├── test_package_revisions.py
    │   │   └── test_same_pref_removal.py
    │   ├── command/
    │   │   ├── __init__.py
    │   │   ├── alias_test.py
    │   │   ├── cache/
    │   │   │   ├── __init__.py
    │   │   │   ├── test_cache_clean.py
    │   │   │   ├── test_cache_integrity.py
    │   │   │   ├── test_cache_path.py
    │   │   │   ├── test_cache_save_restore.py
    │   │   │   └── test_cache_sign.py
    │   │   ├── config_test.py
    │   │   ├── create_test.py
    │   │   ├── custom_commands_test.py
    │   │   ├── download/
    │   │   │   ├── __init__.py
    │   │   │   ├── download_parallel_test.py
    │   │   │   ├── download_selected_packages_test.py
    │   │   │   ├── download_test.py
    │   │   │   └── test_download_patterns.py
    │   │   ├── export/
    │   │   │   ├── __init__.py
    │   │   │   ├── export_dirty_test.py
    │   │   │   ├── export_path_test.py
    │   │   │   ├── export_sources_test.py
    │   │   │   ├── export_test.py
    │   │   │   ├── exports_method_test.py
    │   │   │   └── test_export.py
    │   │   ├── export_pkg_test.py
    │   │   ├── help_test.py
    │   │   ├── info/
    │   │   │   ├── __init__.py
    │   │   │   ├── info_options_test.py
    │   │   │   ├── info_test.py
    │   │   │   ├── test_graph_info_graphical.py
    │   │   │   ├── test_info_build_order.py
    │   │   │   └── test_info_folders.py
    │   │   ├── install/
    │   │   │   ├── __init__.py
    │   │   │   ├── install_cascade_test.py
    │   │   │   ├── install_missing_dep_test.py
    │   │   │   ├── install_parallel_test.py
    │   │   │   ├── install_test.py
    │   │   │   ├── install_update_test.py
    │   │   │   ├── test_graph_build_mode.py
    │   │   │   └── test_install_transitive.py
    │   │   ├── list/
    │   │   │   ├── __init__.py
    │   │   │   ├── list_test.py
    │   │   │   ├── search_test.py
    │   │   │   ├── test_combined_pkglist_flows.py
    │   │   │   └── test_list_lru.py
    │   │   ├── remote/
    │   │   │   ├── __init__.py
    │   │   │   ├── remote_test.py
    │   │   │   ├── remote_verify_ssl_test.py
    │   │   │   └── test_remote_users.py
    │   │   ├── remove_empty_dirs_test.py
    │   │   ├── remove_test.py
    │   │   ├── require/
    │   │   │   ├── __init__.py
    │   │   │   └── test_command_require.py
    │   │   ├── source_test.py
    │   │   ├── test_audit.py
    │   │   ├── test_build.py
    │   │   ├── test_forced_download_source.py
    │   │   ├── test_graph_find_binaries.py
    │   │   ├── test_inspect.py
    │   │   ├── test_new.py
    │   │   ├── test_outdated.py
    │   │   ├── test_output.py
    │   │   ├── test_package_test.py
    │   │   ├── test_profile.py
    │   │   ├── test_run.py
    │   │   ├── test_version.py
    │   │   └── upload/
    │   │       ├── __init__.py
    │   │       ├── test_upload_bundle.py
    │   │       ├── test_upload_parallel.py
    │   │       ├── test_upload_patterns.py
    │   │       ├── upload_complete_test.py
    │   │       ├── upload_compression_test.py
    │   │       └── upload_test.py
    │   ├── conan_api/
    │   │   ├── __init__.py
    │   │   ├── exit_with_code_test.py
    │   │   ├── list_test.py
    │   │   ├── test_cli.py
    │   │   ├── test_local_api.py
    │   │   └── test_profile_api.py
    │   ├── conan_v2/
    │   │   ├── __init__.py
    │   │   └── test_legacy_cpp_info.py
    │   ├── conanfile/
    │   │   ├── __init__.py
    │   │   ├── conan_data_test.py
    │   │   ├── conanfile_errors_test.py
    │   │   ├── conanfile_helpers_test.py
    │   │   ├── files/
    │   │   │   ├── .gitattributes
    │   │   │   ├── conanfile_utf16be_with_bom.txt
    │   │   │   ├── conanfile_utf16le_with_bom.txt
    │   │   │   ├── conanfile_utf8.txt
    │   │   │   └── conanfile_utf8_with_bom.txt
    │   │   ├── folders_access_test.py
    │   │   ├── generators_list_test.py
    │   │   ├── init_test.py
    │   │   ├── invalid_configuration_test.py
    │   │   ├── load_requires_file_test.py
    │   │   ├── no_copy_source_test.py
    │   │   ├── required_conan_version_test.py
    │   │   ├── runner_test.py
    │   │   ├── same_userchannel_test.py
    │   │   ├── set_name_version_test.py
    │   │   ├── test_attributes_scope.py
    │   │   ├── test_conanfile_txt_encodings.py
    │   │   ├── test_conanfile_txt_test_requires.py
    │   │   ├── test_cpp_info_serialize.py
    │   │   ├── test_deploy_method.py
    │   │   ├── test_deprecated.py
    │   │   ├── test_exception_printing.py
    │   │   ├── test_finalize_method.py
    │   │   ├── test_print_in_conanfile.py
    │   │   └── test_version_str.py
    │   ├── configuration/
    │   │   ├── __init__.py
    │   │   ├── client_certs_test.py
    │   │   ├── conf/
    │   │   │   ├── __init__.py
    │   │   │   ├── test_auth_source_plugin.py
    │   │   │   ├── test_conf.py
    │   │   │   ├── test_conf_copy.py
    │   │   │   ├── test_conf_from_br.py
    │   │   │   ├── test_conf_package_id.py
    │   │   │   └── test_conf_profile.py
    │   │   ├── custom_setting_test_package_test.py
    │   │   ├── default_profile_test.py
    │   │   ├── invalid_settings_test.py
    │   │   ├── profile_test.py
    │   │   ├── proxies_conf_test.py
    │   │   ├── requester_test.py
    │   │   ├── required_version_test.py
    │   │   ├── test_auth_remote_plugin.py
    │   │   ├── test_custom_symlinked_home.py
    │   │   ├── test_profile_jinja.py
    │   │   ├── test_profile_plugin.py
    │   │   └── test_profile_priority.py
    │   ├── cps/
    │   │   ├── __init__.py
    │   │   └── test_cps.py
    │   ├── cross_building/
    │   │   ├── __init__.py
    │   │   ├── build_requires_from_profile_test.py
    │   │   ├── test_cross_build_options.py
    │   │   └── test_package_test.py
    │   ├── editable/
    │   │   ├── __init__.py
    │   │   ├── editable_add_test.py
    │   │   ├── editable_remove_test.py
    │   │   ├── forbidden_commands_test.py
    │   │   ├── test_editable_envvars.py
    │   │   ├── test_editable_import.py
    │   │   ├── test_editable_layout.py
    │   │   ├── test_editable_ranges.py
    │   │   ├── test_editables_layout.py
    │   │   └── transitive_editable_test.py
    │   ├── environment/
    │   │   ├── __init__.py
    │   │   ├── test_buildenv_profile.py
    │   │   ├── test_env.py
    │   │   └── test_runenv_profile.py
    │   ├── extensions/
    │   │   ├── __init__.py
    │   │   ├── hooks/
    │   │   │   ├── __init__.py
    │   │   │   ├── hook_test.py
    │   │   │   ├── test_post_export.py
    │   │   │   └── test_post_package.py
    │   │   ├── test_cppstd_compat.py
    │   │   ├── test_plugin_cmd_wrapper.py
    │   │   ├── test_profile_plugin.py
    │   │   └── test_profile_plugin_runtime.py
    │   ├── generators/
    │   │   ├── __init__.py
    │   │   ├── generators_test.py
    │   │   ├── order_libs_test.py
    │   │   ├── test_custom_global_generators.py
    │   │   └── test_generators_from_br.py
    │   ├── graph/
    │   │   ├── __init__.py
    │   │   ├── conflict_diamond_test.py
    │   │   ├── core/
    │   │   │   ├── __init__.py
    │   │   │   ├── graph_manager_base.py
    │   │   │   ├── graph_manager_test.py
    │   │   │   ├── test_alias.py
    │   │   │   ├── test_auto_package_type.py
    │   │   │   ├── test_build_require_invalid.py
    │   │   │   ├── test_build_requires.py
    │   │   │   ├── test_options.py
    │   │   │   ├── test_provides.py
    │   │   │   └── test_version_ranges.py
    │   │   ├── require_override_test.py
    │   │   ├── test_dependencies_visit.py
    │   │   ├── test_divergent_cppstd_build_host.py
    │   │   ├── test_platform_requires.py
    │   │   ├── test_pure_runtime_dep.py
    │   │   ├── test_remote_resolution.py
    │   │   ├── test_repackaging.py
    │   │   ├── test_replace_requires.py
    │   │   ├── test_require_same_pkg_versions.py
    │   │   ├── test_skip_binaries.py
    │   │   ├── test_skip_build.py
    │   │   ├── test_subgraph_reports.py
    │   │   ├── test_system_tools.py
    │   │   ├── test_test_requires.py
    │   │   ├── test_validate_build.py
    │   │   ├── ux/
    │   │   │   ├── __init__.py
    │   │   │   └── loop_detection_test.py
    │   │   └── version_ranges/
    │   │       ├── __init__.py
    │   │       ├── test_version_range_conf.py
    │   │       ├── version_range_override_test.py
    │   │       ├── version_ranges_cached_test.py
    │   │       └── version_ranges_diamond_test.py
    │   ├── layout/
    │   │   ├── __init__.py
    │   │   ├── devflow_test.py
    │   │   ├── export_folder_variable_test.py
    │   │   ├── test_cmake_build_folder.py
    │   │   ├── test_layout_generate.py
    │   │   ├── test_layout_paths.py
    │   │   └── test_legacy_cpp_info_and_layout.py
    │   ├── lockfile/
    │   │   ├── __init__.py
    │   │   ├── test_ci.py
    │   │   ├── test_ci_overrides.py
    │   │   ├── test_ci_revisions.py
    │   │   ├── test_compatibility.py
    │   │   ├── test_graph_overrides.py
    │   │   ├── test_lock_alias.py
    │   │   ├── test_lock_build_requires.py
    │   │   ├── test_lock_merge.py
    │   │   ├── test_lock_packages.py
    │   │   ├── test_lock_pyrequires.py
    │   │   ├── test_lock_pyrequires_revisions.py
    │   │   ├── test_lock_requires.py
    │   │   ├── test_lock_requires_revisions.py
    │   │   ├── test_options.py
    │   │   └── test_user_overrides.py
    │   ├── metadata/
    │   │   ├── __init__.py
    │   │   ├── test_metadata_collect.py
    │   │   ├── test_metadata_commands.py
    │   │   ├── test_metadata_deploy.py
    │   │   ├── test_metadata_logs.py
    │   │   └── test_metadata_test_package.py
    │   ├── options/
    │   │   ├── __init__.py
    │   │   ├── options_test.py
    │   │   ├── test_configure_options.py
    │   │   ├── test_options_build_requires.py
    │   │   └── test_package_config_test.py
    │   ├── package_id/
    │   │   ├── __init__.py
    │   │   ├── build_id_test.py
    │   │   ├── compatible_test.py
    │   │   ├── package_id_and_confs_test.py
    │   │   ├── package_id_modes_test.py
    │   │   ├── package_id_requires_modes_test.py
    │   │   ├── package_id_test.py
    │   │   ├── python_requires_package_id_test.py
    │   │   ├── test_cache_compatibles.py
    │   │   ├── test_config_package_id.py
    │   │   ├── test_default_package_id.py
    │   │   ├── test_package_id_test_requires.py
    │   │   ├── test_valid_package_id_values.py
    │   │   ├── test_validate.py
    │   │   ├── transitive_header_only_test.py
    │   │   └── transitive_options_affect_id_test.py
    │   ├── py_requires/
    │   │   ├── __init__.py
    │   │   └── python_requires_test.py
    │   ├── remote/
    │   │   ├── __init__.py
    │   │   ├── auth_bearer_test.py
    │   │   ├── auth_test.py
    │   │   ├── broken_download_test.py
    │   │   ├── download_retries_test.py
    │   │   ├── download_test.py
    │   │   ├── multi_remote_checks_test.py
    │   │   ├── multi_remote_test.py
    │   │   ├── requester_test.py
    │   │   ├── rest_api_test.py
    │   │   ├── retry_test.py
    │   │   ├── selected_remotes_test.py
    │   │   ├── server_error_test.py
    │   │   ├── test_conaninfo_parsing.py
    │   │   ├── test_local_recipes_index.py
    │   │   ├── test_offline.py
    │   │   ├── test_remote_file_credentials.py
    │   │   ├── test_remote_recipes_only.py
    │   │   └── test_request_headers.py
    │   ├── sbom/
    │   │   ├── __init__.py
    │   │   └── test_cyclonedx.py
    │   ├── settings/
    │   │   ├── __init__.py
    │   │   ├── built_type_setting_test.py
    │   │   ├── per_package_settings_test.py
    │   │   ├── remove_subsetting_test.py
    │   │   ├── settings_override_test.py
    │   │   ├── test_disable_settings_assignment.py
    │   │   ├── test_non_defining_settings.py
    │   │   ├── test_settings_possible_values.py
    │   │   └── test_settings_user.py
    │   ├── symlinks/
    │   │   ├── __init__.py
    │   │   └── symlinks_test.py
    │   ├── sysroot_test.py
    │   ├── system_reqs_test.py
    │   ├── test_components.py
    │   ├── test_components_error.py
    │   ├── test_compressions.py
    │   ├── test_db_error.py
    │   ├── test_migrations.py
    │   ├── test_package_python_files.py
    │   ├── test_package_vendor.py
    │   ├── test_pkg_signing.py
    │   ├── test_recipe_policies.py
    │   ├── test_source_download_password.py
    │   ├── test_timestamp_error.py
    │   ├── tgz_macos_dot_files_test.py
    │   ├── toolchains/
    │   │   ├── __init__.py
    │   │   ├── apple/
    │   │   │   ├── __init__.py
    │   │   │   ├── test_xcodedeps.py
    │   │   │   └── test_xcodetoolchain.py
    │   │   ├── cmake/
    │   │   │   ├── __init__.py
    │   │   │   ├── cmakeconfigdeps/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── test_cmakeconfigdeps.py
    │   │   │   │   └── test_cmakeconfigdeps_frameworks.py
    │   │   │   ├── cmakedeps/
    │   │   │   │   ├── __init__.py
    │   │   │   │   ├── test_cmakedeps.py
    │   │   │   │   └── test_cmakedeps_find_module_and_config.py
    │   │   │   ├── test_cmake.py
    │   │   │   ├── test_cmaketoolchain.py
    │   │   │   └── test_cmaketoolchain_blocks.py
    │   │   ├── env/
    │   │   │   ├── __init__.py
    │   │   │   ├── test_buildenv.py
    │   │   │   ├── test_environment.py
    │   │   │   ├── test_virtualenv_default_apply.py
    │   │   │   ├── test_virtualenv_object_access.py
    │   │   │   └── test_virtualenv_winbash.py
    │   │   ├── gnu/
    │   │   │   ├── __init__.py
    │   │   │   ├── test_autotools.py
    │   │   │   ├── test_autotoolsdeps.py
    │   │   │   ├── test_autotoolstoolchain.py
    │   │   │   ├── test_basic_layout.py
    │   │   │   ├── test_gnutoolchain.py
    │   │   │   ├── test_makedeps.py
    │   │   │   └── test_pkgconfigdeps.py
    │   │   ├── google/
    │   │   │   ├── __init__.py
    │   │   │   ├── test_bazeldeps.py
    │   │   │   └── test_bazeltoolchain.py
    │   │   ├── intel/
    │   │   │   ├── __init__.py
    │   │   │   └── test_intel_cc.py
    │   │   ├── meson/
    │   │   │   ├── __init__.py
    │   │   │   └── test_mesontoolchain.py
    │   │   ├── microsoft/
    │   │   │   ├── __init__.py
    │   │   │   ├── test_msbuild_toolchain.py
    │   │   │   ├── test_msbuilddeps.py
    │   │   │   ├── test_msbuildtoolchain.py
    │   │   │   ├── test_nmakedeps.py
    │   │   │   ├── test_nmaketoolchain.py
    │   │   │   ├── test_vs_layout.py
    │   │   │   └── vcvars_test.py
    │   │   ├── premake/
    │   │   │   ├── __init__.py
    │   │   │   ├── test_premake.py
    │   │   │   ├── test_premakedeps.py
    │   │   │   └── test_premaketoolchain.py
    │   │   ├── qbs/
    │   │   │   ├── __init__.py
    │   │   │   ├── test_qbsdeps.py
    │   │   │   └── test_qbsprofile.py
    │   │   ├── scons/
    │   │   │   ├── __init__.py
    │   │   │   └── test_scondeps.py
    │   │   ├── test_raise_on_universal_binaries.py
    │   │   └── test_toolchain_namespaces.py
    │   ├── tools/
    │   │   ├── __init__.py
    │   │   ├── conan_version_test.py
    │   │   ├── cppstd_minimum_version_test.py
    │   │   ├── cpu_count_test.py
    │   │   ├── file_tools_test.py
    │   │   ├── fix_symlinks_test.py
    │   │   ├── ros/
    │   │   │   ├── __init__.py
    │   │   │   └── test_rosenv.py
    │   │   └── system/
    │   │       ├── __init__.py
    │   │       └── package_manager_test.py
    │   └── workspace/
    │       ├── __init__.py
    │       └── test_workspace.py
    ├── performance/
    │   ├── .gitignore
    │   ├── __init__.py
    │   ├── test_compatibility_performance.py
    │   ├── test_db_performance.py
    │   └── test_large_graph.py
    └── unittests/
        ├── __init__.py
        ├── cli/
        │   ├── __init__.py
        │   ├── common_test.py
        │   └── test_cli_ref_matching.py
        ├── client/
        │   ├── __init__.py
        │   ├── build/
        │   │   ├── __init__.py
        │   │   ├── c_std_flags_test.py
        │   │   ├── compiler_flags_test.py
        │   │   └── cpp_std_flags_test.py
        │   ├── command/
        │   │   ├── __init__.py
        │   │   └── parse_arguments_test.py
        │   ├── conan_output_test.py
        │   ├── conanfile_loader_test.py
        │   ├── conf/
        │   │   ├── __init__.py
        │   │   ├── config_installer/
        │   │   │   ├── __init__.py
        │   │   │   └── test_install_folder.py
        │   │   └── detect/
        │   │       ├── __init__.py
        │   │       └── test_gcc_compiler.py
        │   ├── file_copier/
        │   │   ├── __init__.py
        │   │   └── test_report_copied_files.py
        │   ├── graph/
        │   │   ├── __init__.py
        │   │   ├── build_mode_test.py
        │   │   └── deps_graph_test.py
        │   ├── migrations/
        │   │   ├── __init__.py
        │   │   └── test_migrator.py
        │   ├── optimize_conanfile_load_test.py
        │   ├── pkg_sign_test.py
        │   ├── profile_loader/
        │   │   ├── __init__.py
        │   │   ├── compiler_cppstd_test.py
        │   │   └── profile_loader_test.py
        │   ├── remote_manager_test.py
        │   ├── rest/
        │   │   ├── __init__.py
        │   │   ├── downloader_test.py
        │   │   ├── requester_test.py
        │   │   ├── response_test.py
        │   │   ├── rest_client_v2/
        │   │   │   ├── __init__.py
        │   │   │   └── rest_client_v2_test.py
        │   │   └── uploader_test.py
        │   ├── source/
        │   │   └── __init__.py
        │   ├── tools/
        │   │   ├── __init__.py
        │   │   ├── cppstd_required_test.py
        │   │   ├── files/
        │   │   │   ├── __init__.py
        │   │   │   └── rename_test.py
        │   │   └── test_env.py
        │   ├── userio_test.py
        │   └── util/
        │       ├── __init__.py
        │       └── time_test.py
        ├── model/
        │   ├── __init__.py
        │   ├── build_info/
        │   │   ├── __init__.py
        │   │   ├── components_test.py
        │   │   ├── generic_properties_test.py
        │   │   ├── new_build_info_test.py
        │   │   └── test_deduce_locations.py
        │   ├── conanfile_test.py
        │   ├── info_test.py
        │   ├── manifest_test.py
        │   ├── options_test.py
        │   ├── other_settings_test.py
        │   ├── profile_test.py
        │   ├── settings_test.py
        │   ├── test_conf.py
        │   ├── test_list.py
        │   ├── test_package_reference.py
        │   ├── test_recipe_reference.py
        │   ├── version/
        │   │   ├── __init__.py
        │   │   ├── test_version_bump.py
        │   │   ├── test_version_comparison.py
        │   │   ├── test_version_parse.py
        │   │   ├── test_version_range.py
        │   │   └── test_version_range_intersection.py
        │   └── versionrepr_test.py
        ├── paths/
        │   ├── __init__.py
        │   └── user_home_test.py
        ├── search/
        │   ├── __init__.py
        │   ├── cache_db_search_test.py
        │   └── search_query_parse_test.py
        ├── server/
        │   ├── __init__.py
        │   ├── authenticator_plugin_test.py
        │   ├── conan_server_config_parser_test.py
        │   ├── conf_test.py
        │   ├── crypto/
        │   │   ├── __init__.py
        │   │   └── jwt_test.py
        │   ├── revision_list_test.py
        │   ├── service/
        │   │   ├── __init__.py
        │   │   ├── authorizer_test.py
        │   │   └── service_test.py
        │   └── test_utils.py
        ├── source/
        │   ├── __init__.py
        │   └── merge_directories_test.py
        ├── tools/
        │   ├── __init__.py
        │   ├── android/
        │   │   ├── __init__.py
        │   │   └── test_android_tools.py
        │   ├── apple/
        │   │   ├── __init__.py
        │   │   ├── test_apple_tools.py
        │   │   └── test_xcodebuild.py
        │   ├── build/
        │   │   ├── __init__.py
        │   │   ├── test_can_run.py
        │   │   ├── test_compiler.py
        │   │   ├── test_cppstd.py
        │   │   ├── test_cross_building.py
        │   │   ├── test_cstd.py
        │   │   └── test_stdcpp_library.py
        │   ├── cmake/
        │   │   ├── __init__.py
        │   │   ├── test_cmake_cmd_line_args.py
        │   │   ├── test_cmake_install.py
        │   │   ├── test_cmake_presets_definitions.py
        │   │   ├── test_cmake_test.py
        │   │   └── test_cmaketoolchain.py
        │   ├── env/
        │   │   ├── __init__.py
        │   │   ├── test_env.py
        │   │   └── test_env_files.py
        │   ├── files/
        │   │   ├── __init__.py
        │   │   ├── checksums_test.py
        │   │   ├── collect_lib_test.py
        │   │   ├── test_chmod.py
        │   │   ├── test_downloads.py
        │   │   ├── test_file_read_and_write.py
        │   │   ├── test_patches.py
        │   │   ├── test_rename.py
        │   │   ├── test_rm.py
        │   │   ├── test_symlinks.py
        │   │   ├── test_tool_copy.py
        │   │   ├── test_toolchain.py
        │   │   └── test_zipping.py
        │   ├── files_patch_test.py
        │   ├── gnu/
        │   │   ├── __init__.py
        │   │   ├── autotools_test.py
        │   │   ├── autotools_toolchain_test.py
        │   │   ├── autotoolschain_test.py
        │   │   ├── gnudepsflags_test.py
        │   │   ├── test_gnutoolchain.py
        │   │   └── test_triplets.py
        │   ├── google/
        │   │   ├── __init__.py
        │   │   └── test_bazel.py
        │   ├── intel/
        │   │   ├── __init__.py
        │   │   └── test_intel_cc.py
        │   ├── meson/
        │   │   ├── __init__.py
        │   │   └── test_meson.py
        │   ├── microsoft/
        │   │   ├── __init__.py
        │   │   ├── conantoolchain.props
        │   │   ├── conantoolchain_release_x64.props
        │   │   ├── test_check_min_vs.py
        │   │   ├── test_msbuild.py
        │   │   ├── test_msvs_toolset.py
        │   │   └── test_subsystem.py
        │   └── system/
        │       ├── __init__.py
        │       └── python_manager_test.py
        └── util/
            ├── __init__.py
            ├── apple_test.py
            ├── conanfile_tools_test.py
            ├── detect_libc_test.py
            ├── detect_test.py
            ├── detected_architecture_test.py
            ├── file_hashes_test.py
            ├── files/
            │   ├── __init__.py
            │   ├── strip_root_extract_test.py
            │   ├── tar_extract_test.py
            │   ├── test_copy_compat.py
            │   ├── test_dirty.py
            │   └── test_remove.py
            ├── files_extract_wildcard_test.py
            ├── local_db_test.py
            ├── output_test.py
            ├── test_encrypt.py
            ├── tools_test.py
            ├── unix_path_test.py
            ├── xz_test.py
            └── zip_permissions_test.py
Download .txt
Showing preview only (720K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (8187 symbols across 880 files)

FILE: .ci/bump_dev_version.py
  function replace_in_file (line 5) | def replace_in_file(file_path, search, replace):
  function bump_dev (line 15) | def bump_dev():

FILE: conan/api/conan_api.py
  class ConanAPI (line 38) | class ConanAPI:
    method __init__ (line 44) | def __init__(self, cache_folder=None):
    method home_folder (line 95) | def home_folder(self) -> str:
    method reinit (line 103) | def reinit(self):
    method migrate (line 110) | def migrate(self):
    class _ApiHelpers (line 117) | class _ApiHelpers:
      method __init__ (line 119) | def __init__(self, conan_api):
      method set_core_confs (line 131) | def set_core_confs(self, core_confs):
      method _init_global_conf (line 143) | def _init_global_conf(self):
      method reinit (line 151) | def reinit(self):
      method settings_yml (line 160) | def settings_yml(self):
      method remote_manager (line 166) | def remote_manager(self):
      method requester (line 177) | def requester(self):

FILE: conan/api/input.py
  class UserInput (line 7) | class UserInput:
    method __init__ (line 10) | def __init__(self, non_interactive):
    method _raise_if_non_interactive (line 22) | def _raise_if_non_interactive(self):
    method raw_input (line 26) | def raw_input(self):
    method request_login (line 30) | def request_login(self, remote_name, username=None):
    method get_username (line 49) | def get_username(self):
    method get_password (line 54) | def get_password():
    method request_string (line 61) | def request_string(self, msg, default_value=None):
    method request_boolean (line 77) | def request_boolean(self, msg, default_option=None):

FILE: conan/api/model/list.py
  class MultiPackagesList (line 18) | class MultiPackagesList:
    method __init__ (line 20) | def __init__(self):
    method __getitem__ (line 23) | def __getitem__(self, name):
    method add (line 29) | def add(self, name, pkg_list):
    method add_error (line 32) | def add_error(self, remote_name, error):
    method serialize (line 35) | def serialize(self):
    method merge (line 40) | def merge(self, other):
    method load (line 45) | def load(file):
    method load_graph (line 72) | def load_graph(graphfile, graph_recipes=None, graph_binaries=None, con...
    method _define_graph (line 119) | def _define_graph(graph, graph_recipes=None, graph_binaries=None, cont...
    method _filter_exclusive_context (line 185) | def _filter_exclusive_context(mpkglist, graph, context):
  class PackagesList (line 208) | class PackagesList:
    method __init__ (line 210) | def __init__(self):
    method __bool__ (line 213) | def __bool__(self):
    method merge (line 217) | def merge(self, other):
    method split (line 229) | def split(self):
    method only_recipes (line 241) | def only_recipes(self) -> None:
    method add_refs (line 249) | def add_refs(self, refs):
    method add_ref (line 256) | def add_ref(self, ref: RecipeReference) -> None:
    method add_prefs (line 267) | def add_prefs(self, rrev, prefs):
    method add_pref (line 274) | def add_pref(self, pref: PkgReference, pkg_info: dict = None) -> None:
    method add_configurations (line 290) | def add_configurations(self, confs):
    method refs (line 301) | def refs(self):
    method items (line 314) | def items(self) -> Iterable[Tuple[RecipeReference, Dict[PkgReference, ...
    method recipe_dict (line 336) | def recipe_dict(self, ref: RecipeReference):
    method has_rref (line 342) | def has_rref(self, ref: RecipeReference) -> bool:
    method package_dict (line 346) | def package_dict(self, pref: PkgReference):
    method prefs (line 354) | def prefs(ref, recipe_bundle):
    method serialize (line 366) | def serialize(self):
    method deserialize (line 371) | def deserialize(data):
  class ListPattern (line 378) | class ListPattern:
    method __init__ (line 381) | def __init__(self, expression, rrev="latest", package_id=None, prev="l...
    method _only_latest (line 421) | def _only_latest(rev):
    method search_ref (line 425) | def search_ref(self):
    method _version_range (line 433) | def _version_range(self):
    method filter_versions (line 437) | def filter_versions(self, refs, resolve_prereleases=None):
    method is_latest_rrev (line 444) | def is_latest_rrev(self):
    method is_latest_prev (line 448) | def is_latest_prev(self):
    method check_refs (line 451) | def check_refs(self, refs):
    method filter_rrevs (line 455) | def filter_rrevs(self, rrevs):
    method filter_prefs (line 465) | def filter_prefs(self, prefs):
    method filter_prevs (line 473) | def filter_prevs(self, prevs):

FILE: conan/api/model/refs.py
  class RecipeReference (line 12) | class RecipeReference:
    method __init__ (line 19) | def __init__(self, name=None, version=None, user=None, channel=None, r...
    method copy (line 37) | def copy(self):
    method __repr__ (line 42) | def __repr__(self):
    method repr_notime (line 49) | def repr_notime(self):
    method repr_humantime (line 55) | def repr_humantime(self):
    method __str__ (line 61) | def __str__(self):
    method __lt__ (line 73) | def __lt__(self, ref):
    method __eq__ (line 83) | def __eq__(self, ref):
    method __hash__ (line 95) | def __hash__(self):
    method loads (line 100) | def loads(rref):
    method validate_ref (line 132) | def validate_ref(self, allow_uppercase=False):
    method matches (line 170) | def matches(self, pattern, is_consumer):
    method partial_match (line 200) | def partial_match(self, pattern):
  class PkgReference (line 216) | class PkgReference:
    method __init__ (line 218) | def __init__(self, ref=None, package_id=None, revision=None, timestamp...
    method __repr__ (line 224) | def __repr__(self):
    method repr_notime (line 237) | def repr_notime(self):
    method repr_humantime (line 247) | def repr_humantime(self):
    method __str__ (line 253) | def __str__(self):
    method __lt__ (line 262) | def __lt__(self, ref):
    method __eq__ (line 268) | def __eq__(self, other):
    method __hash__ (line 277) | def __hash__(self):
    method loads (line 282) | def loads(pkg_ref):  # TODO: change this default to validate only on e...

FILE: conan/api/model/remote.py
  class Remote (line 4) | class Remote:
    method __init__ (line 8) | def __init__(self, name, url, verify_ssl=True, disabled=False, allowed...
    method __eq__ (line 32) | def __eq__(self, other):
    method __str__ (line 38) | def __str__(self):
    method __repr__ (line 50) | def __repr__(self):
    method invalidate_cache (line 53) | def invalidate_cache(self):

FILE: conan/api/output.py
  class Color (line 22) | class Color:
  function init_colorama (line 53) | def init_colorama(stream):
  function _color_enabled (line 63) | def _color_enabled(stream):
  class ConanOutput (line 87) | class ConanOutput:
    method __init__ (line 106) | def __init__(self, scope: str = ""):
    method define_silence_warnings (line 120) | def define_silence_warnings(cls, warnings):
    method set_warnings_as_errors (line 124) | def set_warnings_as_errors(cls, value):
    method get_output_level (line 128) | def get_output_level(cls):
    method set_output_level (line 132) | def set_output_level(cls, level):
    method valid_log_levels (line 136) | def valid_log_levels(cls):
    method define_log_level (line 151) | def define_log_level(cls, v):
    method level_allowed (line 165) | def level_allowed(cls, level):
    method color (line 169) | def color(self):
    method scope (line 173) | def scope(self):
    method scope (line 177) | def scope(self, out_scope):
    method is_terminal (line 181) | def is_terminal(self):
    method writeln (line 184) | def writeln(self, data, fg=None, bg=None):
    method write (line 187) | def write(self, data, fg=None, bg=None, newline=False):
    method box (line 202) | def box(self, msg: str):
    method login_msg (line 210) | def login_msg(self, msg, newline=False):
    method _write_message (line 215) | def _write_message(self, msg, fg=None, bg=None, newline=True):
    method trace (line 241) | def trace(self, msg: str):
    method debug (line 256) | def debug(self, msg: str, fg: str = Color.MAGENTA, bg: str = None):
    method verbose (line 268) | def verbose(self, msg: str, fg: str = None, bg: str = None):
    method status (line 281) | def status(self, msg: str, fg: str = None, bg: str = None, newline: bo...
    method title (line 292) | def title(self, msg: str):
    method subtitle (line 299) | def subtitle(self, msg: str):
    method highlight (line 306) | def highlight(self, msg: str):
    method success (line 315) | def success(self, msg: str):
    method _warn_tag_matches (line 325) | def _warn_tag_matches(warn_tag, patterns):
    method warning (line 329) | def warning(self, msg: str, warn_tag: str = None):
    method error (line 352) | def error(self, msg: str, error_type: str = None):
    method flush (line 367) | def flush(self):
  function cli_out_write (line 371) | def cli_out_write(data, fg=None, bg=None, endline="\n", indentation=0):
  class TimedOutput (line 390) | class TimedOutput:
    method __init__ (line 391) | def __init__(self, interval, out=None, msg_format=None):
    method info (line 397) | def info(self, msg, *args, **kwargs):

FILE: conan/api/subapi/audit.py
  class AuditAPI (line 16) | class AuditAPI:
    method __init__ (line 21) | def __init__(self, conan_api):
    method scan (line 31) | def scan(deps_graph, provider, context=None):
    method list (line 42) | def list(references, provider):
    method get_provider (line 51) | def get_provider(self, provider_name):
    method list_providers (line 95) | def list_providers(self):
    method add_provider (line 106) | def add_provider(self, name, url, provider_type):
    method remove_provider (line 125) | def remove_provider(self, provider_name):
    method auth_provider (line 137) | def auth_provider(self, provider, token):
  function _load_providers (line 153) | def _load_providers(providers_path):
  function _save_providers (line 166) | def _save_providers(providers_path, providers):

FILE: conan/api/subapi/cache.py
  class CacheAPI (line 28) | class CacheAPI:
    method __init__ (line 37) | def __init__(self, conan_api, api_helpers):
    method export_path (line 41) | def export_path(self, ref: RecipeReference):
    method recipe_metadata_path (line 58) | def recipe_metadata_path(self, ref: RecipeReference):
    method export_source_path (line 75) | def export_source_path(self, ref: RecipeReference):
    method source_path (line 94) | def source_path(self, ref: RecipeReference):
    method build_path (line 113) | def build_path(self, pref: PkgReference):
    method package_metadata_path (line 133) | def package_metadata_path(self, pref: PkgReference):
    method package_path (line 151) | def package_path(self, pref: PkgReference):
    method check_integrity (line 170) | def check_integrity(self, package_list, return_pkg_list=False):
    method sign (line 187) | def sign(self, package_list):
    method verify (line 222) | def verify(self, package_list):
    method clean (line 257) | def clean(self, package_list, source=True, build=True, download=True, ...
    method save (line 310) | def save(self, package_list: PackagesList, path, no_source=False) -> N...
    method restore (line 381) | def restore(self, path) -> PackagesList:
    method get_backup_sources (line 458) | def get_backup_sources(self, package_list=None, exclude=True, only_upl...
    method path_to_ref (line 479) | def path_to_ref(self, path):
  function _resolve_latest_ref (line 490) | def _resolve_latest_ref(cache, ref):
  function _resolve_latest_pref (line 500) | def _resolve_latest_pref(cache, pref):
  function _check_folder_existence (line 511) | def _check_folder_existence(ref, folder_name, folder_path):

FILE: conan/api/subapi/command.py
  class CommandAPI (line 8) | class CommandAPI:
    method __init__ (line 10) | def __init__(self, conan_api):
    method run (line 14) | def run(self, cmd):
    method get_runner (line 44) | def get_runner(profile_host):

FILE: conan/api/subapi/config.py
  class ConfigAPI (line 19) | class ConfigAPI:
    method __init__ (line 26) | def __init__(self, conan_api, helpers):
    method home (line 30) | def home(self):
    method install (line 39) | def install(self, path_or_url: str, verify_ssl, config_type=None, args...
    method install_package (line 67) | def install_package(self, require, lockfile=None, force=False, remotes...
    method load_conanconfig (line 96) | def load_conanconfig(path, remotes):
    method install_conanconfig (line 108) | def install_conanconfig(self, path, lockfile=None, force=False, remote...
    method _install_pkgs (line 135) | def _install_pkgs(self, required_pkgs, force):
    method fetch_packages (line 204) | def fetch_packages(self, requires, lockfile=None, remotes=None, profil...
    method get (line 250) | def get(self, name, default=None, check_type=None):
    method show (line 259) | def show(self, pattern) -> dict:
    method conf_list (line 272) | def conf_list() -> dict:
    method clean (line 279) | def clean(self) -> None:
    method settings_yml (line 300) | def settings_yml(self):

FILE: conan/api/subapi/download.py
  class DownloadAPI (line 12) | class DownloadAPI:
    method __init__ (line 15) | def __init__(self, conan_api, api_helpers):
    method recipe (line 19) | def recipe(self, ref: RecipeReference, remote: Remote, metadata: Optio...
    method package (line 50) | def package(self, pref: PkgReference, remote: Remote, metadata: Option...
    method download_full (line 80) | def download_full(self, package_list: PackagesList, remote: Remote,

FILE: conan/api/subapi/export.py
  class ExportAPI (line 16) | class ExportAPI:
    method __init__ (line 21) | def __init__(self, conan_api, helpers):
    method export (line 25) | def export(self, path, name: str = None, version: str = None, user: st...
    method export_pkg_graph (line 52) | def export_pkg_graph(self, path, ref: RecipeReference, profile_host, p...
    method export_pkg (line 105) | def export_pkg(self, graph, output_folder=None) -> None:

FILE: conan/api/subapi/graph.py
  class GraphAPI (line 14) | class GraphAPI:
    method __init__ (line 16) | def __init__(self, conan_api, helpers):
    method _load_root_consumer_conanfile (line 20) | def _load_root_consumer_conanfile(self, path, profile_host, profile_bu...
    method load_root_test_conanfile (line 52) | def load_root_test_conanfile(self, path, tested_reference, profile_hos...
    method _load_root_virtual_conanfile (line 90) | def _load_root_virtual_conanfile(self, profile_host, profile_build, re...
    method _scope_options (line 107) | def _scope_options(profile, requires, tool_requires):
    method load_graph_requires (line 122) | def load_graph_requires(self, requires, tool_requires, profile_host, p...
    method load_graph_consumer (line 152) | def load_graph_consumer(self, path, name, version, user, channel,
    method load_graph (line 166) | def load_graph(self, root_node, profile_host, profile_build, lockfile=...
    method analyze_binaries (line 197) | def analyze_binaries(self, graph, build_mode=None, remotes=None, updat...
    method find_first_missing_binary (line 226) | def find_first_missing_binary(graph, missing=None):
    method build_order (line 237) | def build_order(deps_graph, order_by="recipe", reduce=False, profile_a...
    method build_order_merge (line 247) | def build_order_merge(files, reduce=False):

FILE: conan/api/subapi/install.py
  class InstallAPI (line 14) | class InstallAPI:
    method __init__ (line 22) | def __init__(self, conan_api, helpers):
    method install_binaries (line 26) | def install_binaries(self, deps_graph, remotes: List[Remote] = None, r...
    method install_system_requires (line 58) | def install_system_requires(self, graph, only_info=False):
    method install_sources (line 76) | def install_sources(self, graph, remotes: List[Remote]):
    method install_consumer (line 97) | def install_consumer(self, deps_graph, generators: List[str] = None, s...
    method deploy (line 150) | def deploy(self, graph, deployer: List[str], deploy_package: List[str]...

FILE: conan/api/subapi/list.py
  function _timelimit (line 19) | def _timelimit(expression):
  class ListAPI (line 45) | class ListAPI:
    method __init__ (line 49) | def __init__(self, conan_api, api_helpers):
    method latest_recipe_revision (line 53) | def latest_recipe_revision(self, ref: RecipeReference, remote: Remote ...
    method recipe_revisions (line 64) | def recipe_revisions(self, ref: RecipeReference, remote: Remote = None):
    method latest_package_revision (line 75) | def latest_package_revision(self, pref: PkgReference, remote=None):
    method package_revisions (line 87) | def package_revisions(self, pref: PkgReference, remote=None):
    method _packages_configurations (line 96) | def _packages_configurations(self, ref: RecipeReference,
    method _filter_packages_configurations (line 108) | def _filter_packages_configurations(pkg_configurations, query):
    method _filter_packages_profile (line 126) | def _filter_packages_profile(packages, profile, ref):
    method select (line 155) | def select(self, pattern: ListPattern, package_query=None, remote: Rem...
    method explain_missing_binaries (line 269) | def explain_missing_binaries(self, ref, conaninfo, remotes):
    method find_remotes (line 310) | def find_remotes(self, package_list, remotes):
    method outdated (line 363) | def outdated(self, deps_graph, remotes):
  class _BinaryDistance (line 408) | class _BinaryDistance:
    method __init__ (line 409) | def __init__(self, pref, binary, expected, remote=None):
    method _requirement_diff (line 434) | def _requirement_diff(binary_requires, expected_requires, item):
    method _calculate_diff (line 457) | def _calculate_diff(binary_confs, expected_confs, item=None):
    method __lt__ (line 476) | def __lt__(self, other):
    method explanation (line 479) | def explanation(self):
    method distance (line 499) | def distance(self):
    method serialize (line 509) | def serialize(self):
  function _get_cache_packages_binary_info (line 521) | def _get_cache_packages_binary_info(cache, prefs) -> Dict[PkgReference, ...
  function _search_recipes (line 549) | def _search_recipes(api_helpers, query: str, remote=None):

FILE: conan/api/subapi/local.py
  class LocalAPI (line 16) | class LocalAPI:
    method __init__ (line 21) | def __init__(self, conan_api, helpers):
    method get_conanfile_path (line 27) | def get_conanfile_path(path, cwd, py):
    method editable_add (line 58) | def editable_add(self, path, name=None, version=None, user=None, chann...
    method editable_remove (line 88) | def editable_remove(self, path=None, requires=None, cwd=None):
    method editable_list (line 104) | def editable_list(self):
    method source (line 107) | def source(self, path, name=None, version=None, user=None, channel=None,
    method build (line 147) | def build(self, conanfile) -> None:
    method test (line 166) | def test(conanfile) -> None:
    method inspect (line 185) | def inspect(self, conanfile_path, remotes, lockfile, name=None, versio...
    method reinit (line 192) | def reinit(self):

FILE: conan/api/subapi/lockfile.py
  class LockfileAPI (line 10) | class LockfileAPI:
    method __init__ (line 12) | def __init__(self, conan_api):
    method get_lockfile (line 16) | def get_lockfile(lockfile=None, conanfile_path=None, cwd=None, partial...
    method update_lockfile_export (line 63) | def update_lockfile_export(self, lockfile, conanfile, ref, is_build_re...
    method update_lockfile (line 81) | def update_lockfile(lockfile, graph, lock_packages=False, clean=False):
    method merge_lockfiles (line 89) | def merge_lockfiles(lockfiles):
    method add_lockfile (line 98) | def add_lockfile(lockfile=None, requires=None, build_requires=None, py...
    method remove_lockfile (line 108) | def remove_lockfile(lockfile, requires=None, build_requires=None, pyth...
    method save_lockfile (line 115) | def save_lockfile(lockfile, lockfile_out, path=None):

FILE: conan/api/subapi/new.py
  class NewAPI (line 13) | class NewAPI:
    method __init__ (line 16) | def __init__(self, conan_api):
    method save_template (line 19) | def save_template(self, template, defines=None, output_folder=None, fo...
    method get_builtin_template (line 83) | def get_builtin_template(template_name):
    method get_template (line 130) | def get_template(self, template_folder):
    method get_home_template (line 136) | def get_home_template(self, template_name):
    method _read_files (line 144) | def _read_files(self, template_folder):
    method render (line 169) | def render(template_files, definitions):

FILE: conan/api/subapi/profiles.py
  class ProfilesAPI (line 15) | class ProfilesAPI:
    method __init__ (line 17) | def __init__(self, conan_api, api_helpers):
    method get_default_host (line 22) | def get_default_host(self):
    method get_default_build (line 41) | def get_default_build(self):
    method get_profiles_from_args (line 60) | def get_profiles_from_args(self, args):
    method get_profile (line 76) | def get_profile(self, profiles, settings=None, options=None, conf=None...
    method _get_profile (line 91) | def _get_profile(self, profiles, settings, options, conf, cwd, cache_s...
    method get_path (line 118) | def get_path(self, profile, cwd=None, exists=True):
    method list (line 128) | def list(self):
    method detect (line 152) | def detect():
    method _load_profile_plugin (line 165) | def _load_profile_plugin(self):

FILE: conan/api/subapi/remotes.py
  class RemotesAPI (line 20) | class RemotesAPI:
    method __init__ (line 30) | def __init__(self, conan_api, api_helpers):
    method list (line 37) | def list(self, pattern=None, only_enabled=True):
    method disable (line 54) | def disable(self, pattern):
    method enable (line 73) | def enable(self, pattern):
    method get (line 92) | def get(self, remote_name):
    method add (line 106) | def add(self, remote: Remote, force=False, index=None):
    method remove (line 139) | def remove(self, pattern):
    method update (line 157) | def update(self, remote_name: str, url=None, secure=None, disabled=Non...
    method rename (line 195) | def rename(self, remote_name: str, new_name: str):
    method user_info (line 212) | def user_info(self, remote: Remote):
    method user_login (line 222) | def user_login(self, remote: Remote, username: str, password: str):
    method login (line 232) | def login(self, remotes, username=None, password=None):
    method user_logout (line 252) | def user_logout(self, remote: Remote):
    method user_set (line 262) | def user_set(self, remote: Remote, username):
    method user_auth (line 269) | def user_auth(self, remote: Remote, with_user=False, force=False):
  function _load (line 284) | def _load(remotes_file):
  function _save (line 303) | def _save(remotes_file, remotes):
  function _filter (line 321) | def _filter(remotes, pattern, only_enabled=True):
  function _validate_url (line 341) | def _validate_url(url):
  function _check_urls (line 358) | def _check_urls(remotes, url, force, current):

FILE: conan/api/subapi/remove.py
  class RemoveAPI (line 8) | class RemoveAPI:
    method __init__ (line 10) | def __init__(self, conan_api, api_helpers):
    method recipe (line 14) | def recipe(self, ref: RecipeReference, remote: Optional[Remote] = None):
    method all_recipe_packages (line 25) | def all_recipe_packages(self, ref: RecipeReference, remote: Optional[R...
    method _remove_all_local_packages (line 35) | def _remove_all_local_packages(self, ref):
    method package (line 42) | def package(self, pref: PkgReference, remote: Optional[Remote]):

FILE: conan/api/subapi/report.py
  class ReportAPI (line 16) | class ReportAPI:
    method __init__ (line 20) | def __init__(self, conan_api, helpers):
    method diff (line 24) | def diff(self, old_reference, new_reference, remotes, old_path=None, n...
  function _configure_source (line 88) | def _configure_source(conan_api, hook_manager, conanfile_path, ref, remo...
  function _get_ref_from_cache_or_remote (line 112) | def _get_ref_from_cache_or_remote(conan_api, reference, enabled_remotes):
  function _export_recipe_from_path (line 146) | def _export_recipe_from_path(conan_api, path_to_conanfile, reference, en...

FILE: conan/api/subapi/upload.py
  class UploadAPI (line 17) | class UploadAPI:
    method __init__ (line 20) | def __init__(self, conan_api, api_helpers):
    method check_upstream (line 24) | def check_upstream(self, package_list: PackagesList, remote: Remote,
    method prepare (line 51) | def prepare(self, package_list: PackagesList, enabled_remotes: List[Re...
    method _upload (line 77) | def _upload(self, package_list, remote):
    method upload_full (line 82) | def upload_full(self, package_list: PackagesList, remote: Remote, enab...
    method upload_backup_sources (line 146) | def upload_backup_sources(self, files: List) -> None:

FILE: conan/api/subapi/workspace.py
  function _find_ws_folder (line 30) | def _find_ws_folder():
  function _load_workspace (line 42) | def _load_workspace(ws_folder, conan_api):
  function _parse_module (line 60) | def _parse_module(conanfile_module, module_id):
  class WorkspaceAPI (line 79) | class WorkspaceAPI:
    method __init__ (line 82) | def __init__(self, conan_api):
    method enable (line 95) | def enable(self, value):
    method name (line 98) | def name(self):
    method folder (line 102) | def folder(self):
    method packages (line 109) | def packages(self):
    method open (line 143) | def open(self, ref, remotes, cwd=None):
    method _check_ws (line 176) | def _check_ws(self):
    method add (line 181) | def add(self, path, name=None, version=None, user=None, channel=None, ...
    method complete (line 208) | def complete(self, profile_host, profile_build, lockfile, remotes, upd...
    method init (line 248) | def init(path):
    method remove (line 271) | def remove(self, path):
    method clean (line 275) | def clean(self):
    method info (line 279) | def info(self):
    method _init_options (line 286) | def _init_options(conanfile, options):
    method super_build_graph (line 304) | def super_build_graph(self, deps_graph, profile_host, profile_build):
    method _check_graph (line 384) | def _check_graph(graph):
    method export (line 397) | def export(self, lockfile=None, remotes=None):
    method select_packages (line 408) | def select_packages(self, packages):
    method build_order (line 422) | def build_order(self, packages, profile_host, profile_build, build_mod...

FILE: conan/cli/__init__.py
  function make_abs_path (line 4) | def make_abs_path(path, cwd=None):

FILE: conan/cli/args.py
  function add_lockfile_args (line 29) | def add_lockfile_args(parser):
  function add_common_install_arguments (line 46) | def add_common_install_arguments(parser):
  function add_profiles_args (line 66) | def add_profiles_args(parser):
  function add_reference_args (line 112) | def add_reference_args(parser):
  function common_graph_args (line 124) | def common_graph_args(subparser):
  function validate_common_graph_args (line 141) | def validate_common_graph_args(args):

FILE: conan/cli/cli.py
  class Cli (line 24) | class Cli:
    method __init__ (line 31) | def __init__(self, conan_api):
    method add_commands (line 39) | def add_commands(self):
    method _add_command (line 91) | def _add_command(self, import_path, method_name, package=None):
    method _print_similar (line 114) | def _print_similar(self, command):
    method _output_help_cli (line 134) | def _output_help_cli(self):
    method run (line 166) | def run(self, *args):
    method _conan2_migrate_recipe_msg (line 204) | def _conan2_migrate_recipe_msg(exception):
    method exception_exit_error (line 219) | def exception_exit_error(exception):
  function _warn_frozen_center (line 239) | def _warn_frozen_center(conan_api):
  function main (line 253) | def main(args):
  function _warn_python_version (line 304) | def _warn_python_version():

FILE: conan/cli/command.py
  class OnceArgument (line 10) | class OnceArgument(argparse.Action):
    method __call__ (line 15) | def __call__(self, parser, namespace, values, option_string=None):
  class SmartFormatter (line 22) | class SmartFormatter(argparse.HelpFormatter):
    method _fill_text (line 24) | def _fill_text(self, text, width, indent):
  class BaseConanCommand (line 29) | class BaseConanCommand:
    method __init__ (line 30) | def __init__(self, method, formatters=None):
    method _init_core_options (line 49) | def _init_core_options(parser):
    method _help_formatters (line 64) | def _help_formatters(self):
    method _init_formatters (line 71) | def _init_formatters(self, parser):
    method name (line 82) | def name(self):
    method method (line 86) | def method(self):
    method doc (line 90) | def doc(self):
    method _format (line 93) | def _format(self, parser, info, *args):
    method _dispatch_errors (line 116) | def _dispatch_errors(info):
  class ConanArgumentParser (line 129) | class ConanArgumentParser(argparse.ArgumentParser):
    method __init__ (line 131) | def __init__(self, conan_api, *args, **kwargs):
    method parse_args (line 135) | def parse_args(self, args=None, namespace=None):
  class ConanCommand (line 154) | class ConanCommand(BaseConanCommand):
    method __init__ (line 155) | def __init__(self, method, group=None, formatters=None):
    method add_subcommand (line 162) | def add_subcommand(self, subcommand):
    method run_cli (line 166) | def run_cli(self, conan_api, *args):
    method run (line 189) | def run(self, conan_api, *args):
    method group (line 217) | def group(self):
  class ConanSubCommand (line 221) | class ConanSubCommand(BaseConanCommand):
    method __init__ (line 222) | def __init__(self, method, formatters=None):
    method run_cli (line 227) | def run_cli(self, conan_api, parent_parser, *args):
    method run (line 230) | def run(self, conan_api, parent_parser, *args):
    method set_name (line 236) | def set_name(self, parent_name):
    method set_parser (line 239) | def set_parser(self, subcommand_parser, conan_api):
  function conan_command (line 247) | def conan_command(group=None, formatters=None):
  function conan_subcommand (line 251) | def conan_subcommand(formatters=None):

FILE: conan/cli/commands/audit.py
  function _add_provider_arg (line 20) | def _add_provider_arg(subparser):
  function _parse_error_threshold (line 24) | def _parse_error_threshold(result: dict, error_level: float) -> None:
  function audit_scan (line 50) | def audit_scan(conan_api: ConanAPI, parser, subparser, *args) -> dict:
  function audit_list (line 111) | def audit_list(conan_api: ConanAPI, parser, subparser, *args):
  function _text_provider_formatter (line 152) | def _text_provider_formatter(providers_action):
  function _json_provider_formatter (line 171) | def _json_provider_formatter(providers_action):
  function audit_provider (line 180) | def audit_provider(conan_api, parser, subparser, *args):
  function audit (line 237) | def audit(conan_api, parser, *args):  # noqa

FILE: conan/cli/commands/build.py
  function build (line 13) | def build(conan_api, parser, *args):

FILE: conan/cli/commands/cache.py
  function _get_package_sign_error (line 14) | def _get_package_sign_error(pkg_list):
  function print_package_sign_text (line 29) | def print_package_sign_text(data):
  function json_export (line 68) | def json_export(data):
  function cache (line 73) | def cache(conan_api: ConanAPI, parser, *args):
  function cache_path (line 81) | def cache_path(conan_api: ConanAPI, parser, subparser, *args):
  function cache_ref (line 122) | def cache_ref(conan_api: ConanAPI, parser, subparser, *args):
  function cache_clean (line 135) | def cache_clean(conan_api: ConanAPI, parser, subparser, *args):
  function print_list_check_integrity_json (line 177) | def print_list_check_integrity_json(data):
  function cache_check_integrity (line 185) | def cache_check_integrity(conan_api: ConanAPI, parser, subparser, *args):
  function cache_sign (line 217) | def cache_sign(conan_api: ConanAPI, parser, subparser, *args):
  function cache_verify (line 255) | def cache_verify(conan_api: ConanAPI, parser, subparser, *args):
  function cache_save (line 293) | def cache_save(conan_api: ConanAPI, parser, subparser, *args):
  function cache_restore (line 327) | def cache_restore(conan_api: ConanAPI, parser, subparser, *args):
  function cache_backup_upload (line 339) | def cache_backup_upload(conan_api: ConanAPI, parser, subparser, *args):

FILE: conan/cli/commands/config.py
  function config (line 12) | def config(conan_api, parser, *args):  # noqa
  function config_install (line 19) | def config_install(conan_api, parser, subparser, *args):
  function config_install_pkg (line 62) | def config_install_pkg(conan_api, parser, subparser, *args):
  function _list_text_formatter (line 116) | def _list_text_formatter(confs):
  function config_home (line 122) | def config_home(conan_api, parser, subparser, *args):  # noqa
  function config_list (line 131) | def config_list(conan_api, parser, subparser, *args):
  function config_show (line 146) | def config_show(conan_api, parser, subparser, *args):
  function config_clean (line 157) | def config_clean(conan_api, parser, subparser, *args):  # noqa

FILE: conan/cli/commands/create.py
  function create (line 15) | def create(conan_api, parser, *args):
  function _check_tested_reference_matches (line 136) | def _check_tested_reference_matches(deps_graph, tested_ref, out):
  function test_package (line 149) | def test_package(conan_api, deps_graph, test_conanfile_path):
  function _get_test_conanfile_path (line 180) | def _get_test_conanfile_path(tf, conanfile_path):

FILE: conan/cli/commands/download.py
  function download (line 12) | def download(conan_api: ConanAPI, parser, *args):

FILE: conan/cli/commands/editable.py
  function editable (line 10) | def editable(conan_api, parser, *args):
  function editable_add (line 17) | def editable_add(conan_api, parser, subparser, *args):
  function editable_remove (line 42) | def editable_remove(conan_api, parser, subparser, *args):
  function print_editables_json (line 66) | def print_editables_json(data):
  function print_editables_text (line 72) | def print_editables_text(data):
  function editable_list (line 81) | def editable_list(conan_api, parser, subparser, *args):

FILE: conan/cli/commands/export.py
  function common_args_export (line 10) | def common_args_export(parser):
  function json_export (line 17) | def json_export(data):
  function pkglist_export (line 21) | def pkglist_export(data):
  function export (line 26) | def export(conan_api, parser, *args):

FILE: conan/cli/commands/export_pkg.py
  function export_pkg (line 13) | def export_pkg(conan_api, parser, *args):

FILE: conan/cli/commands/graph.py
  function explain_formatter_text (line 17) | def explain_formatter_text(data):
  function explain_formatter_json (line 31) | def explain_formatter_json(data):
  function graph (line 37) | def graph(conan_api, parser, *args):  # noqa
  function cli_build_order (line 43) | def cli_build_order(result):
  function json_build_order (line 58) | def json_build_order(result):
  function graph_build_order (line 64) | def graph_build_order(conan_api, parser, subparser, *args):
  function graph_build_order_merge (line 125) | def graph_build_order_merge(conan_api, parser, subparser, *args):  # noqa
  function graph_info (line 151) | def graph_info(conan_api, parser, subparser, *args):
  function graph_explain (line 239) | def graph_explain(conan_api, parser,  subparser, *args):
  function outdated_text_formatter (line 298) | def outdated_text_formatter(result):
  function outdated_json_formatter (line 316) | def outdated_json_formatter(result):
  function graph_outdated (line 327) | def graph_outdated(conan_api, parser, subparser, *args):

FILE: conan/cli/commands/inspect.py
  function inspect_text_formatter (line 8) | def inspect_text_formatter(data):
  function inspect (line 22) | def inspect(conan_api, parser, *args):

FILE: conan/cli/commands/install.py
  function install (line 13) | def install(conan_api, parser, *args):
  function _run_install_command (line 59) | def _run_install_command(conan_api, args, cwd, return_install_error=True):

FILE: conan/cli/commands/list.py
  function _format_timestamp_human (line 22) | def _format_timestamp_human(timestamp):
  function print_serial (line 28) | def print_serial(item, indent=None, color_index=None):
  function print_list_text (line 58) | def print_list_text(results):
  function print_list_compact (line 95) | def print_list_compact(results):
  function prepare_pkglist_compact (line 110) | def prepare_pkglist_compact(pkglist):
  function print_list_json (line 200) | def print_list_json(data):
  function list (line 210) | def list(conan_api: ConanAPI, parser, *args):

FILE: conan/cli/commands/lock.py
  function lock (line 14) | def lock(conan_api, parser, *args):  # noqa
  function lock_create (line 21) | def lock_create(conan_api, parser, subparser, *args):
  function lock_merge (line 65) | def lock_merge(conan_api, parser, subparser, *args): # noqa
  function lock_add (line 81) | def lock_add(conan_api, parser, subparser, *args):
  function lock_remove (line 125) | def lock_remove(conan_api, parser, subparser, *args):
  function lock_update (line 152) | def lock_update(conan_api, parser, subparser, *args):
  function lock_upgrade (line 177) | def lock_upgrade(conan_api, parser, subparser, *args):
  function lock_upgrade_config (line 236) | def lock_upgrade_config(conan_api, parser, subparser, *args):

FILE: conan/cli/commands/new.py
  function new (line 7) | def new(conan_api, parser, *args):

FILE: conan/cli/commands/pkglist.py
  function pkglist (line 10) | def pkglist(conan_api: ConanAPI, parser, *args):  # noqa
  function pkglist_find_remote (line 19) | def pkglist_find_remote(conan_api, parser, subparser, *args):
  function pkglist_merge (line 45) | def pkglist_merge(conan_api, parser, subparser, *args):

FILE: conan/cli/commands/profile.py
  function _print_profiles (line 11) | def _print_profiles(profiles):
  function profiles_list_cli_output (line 20) | def profiles_list_cli_output(profiles):
  function _json_profiles (line 26) | def _json_profiles(profiles):
  function profile_show (line 36) | def profile_show(conan_api, parser, subparser, *args):
  function profile_path (line 53) | def profile_path(conan_api, parser, subparser, *args):
  function profile_detect (line 63) | def profile_detect(conan_api, parser, subparser, *args):
  function profile_list (line 102) | def profile_list(conan_api, parser, subparser, *args):  # noqa
  function profile (line 112) | def profile(conan_api, parser, *args):  # noqa

FILE: conan/cli/commands/remote.py
  function _print_remotes_json (line 15) | def _print_remotes_json(remotes):
  function _print_remote_list (line 26) | def _print_remote_list(remotes):
  function _print_remote_user_list (line 32) | def _print_remote_user_list(results):
  function _print_remote_user_set (line 44) | def _print_remote_user_set(results):
  function _print_remotes_users_json (line 56) | def _print_remotes_users_json(results):
  function remote_list (line 61) | def remote_list(conan_api: ConanAPI, parser, subparser, *args):  # noqa
  function remote_add (line 70) | def remote_add(conan_api, parser, subparser, *args):
  function remote_remove (line 104) | def remote_remove(conan_api, parser, subparser, *args):
  function remote_update (line 117) | def remote_update(conan_api, parser, subparser, *args):
  function remote_rename (line 149) | def remote_rename(conan_api, parser, subparser, *args):
  function remote_enable (line 160) | def remote_enable(conan_api, parser, subparser, *args):
  function remote_disable (line 171) | def remote_disable(conan_api, parser, subparser, *args):
  function remote_list_users (line 184) | def remote_list_users(conan_api, parser, subparser, *args):  # noqa
  function remote_login (line 200) | def remote_login(conan_api, parser, subparser, *args):
  function remote_set_user (line 220) | def remote_set_user(conan_api, parser, subparser, *args):
  function remote_logout (line 244) | def remote_logout(conan_api, parser, subparser, *args):
  function _print_auth (line 264) | def _print_auth(remotes):
  function _print_auth_json (line 274) | def _print_auth_json(results):
  function remote_auth (line 279) | def remote_auth(conan_api, parser, subparser, *args):
  function remote (line 314) | def remote(conan_api, parser, *args):  # noqa

FILE: conan/cli/commands/remove.py
  function summary_remove_list (line 11) | def summary_remove_list(results):
  function remove (line 32) | def remove(conan_api: ConanAPI, parser, *args):

FILE: conan/cli/commands/report.py
  function report (line 9) | def report(conan_api: ConanAPI, parser, *args):
  function report_diff (line 18) | def report_diff(conan_api, parser, subparser, *args):

FILE: conan/cli/commands/require.py
  function require_remove (line 13) | def require_remove(conan_api, parser, subparser, *args):
  function require_add (line 47) | def require_add(conan_api, parser, subparser, *args):
  function require (line 127) | def require(conan_api: ConanAPI, parser, *args):

FILE: conan/cli/commands/run.py
  function run (line 12) | def run(conan_api, parser, *args):

FILE: conan/cli/commands/search.py
  function search (line 12) | def search(conan_api: ConanAPI, parser, *args):

FILE: conan/cli/commands/source.py
  function source (line 8) | def source(conan_api, parser, *args):

FILE: conan/cli/commands/test.py
  function test (line 14) | def test(conan_api, parser, *args):
  function run_test (line 52) | def run_test(conan_api, path, ref, profile_host, profile_build, remotes,...

FILE: conan/cli/commands/upload.py
  function summary_upload_list (line 11) | def summary_upload_list(results):
  function upload (line 43) | def upload(conan_api: ConanAPI, parser, *args):
  function _ask_confirm_upload (line 122) | def _ask_confirm_upload(conan_api, package_list):

FILE: conan/cli/commands/version.py
  function version (line 10) | def version(conan_api, parser, *args):

FILE: conan/cli/commands/workspace.py
  function workspace_root (line 20) | def workspace_root(conan_api: ConanAPI, parser, subparser, *args):  # noqa
  function workspace_open (line 30) | def workspace_open(conan_api: ConanAPI, parser, subparser, *args):
  function workspace_add (line 48) | def workspace_add(conan_api: ConanAPI, parser, subparser, *args):
  function workspace_complete (line 79) | def workspace_complete(conan_api: ConanAPI, parser, subparser, *args):
  function workspace_remove (line 105) | def workspace_remove(conan_api: ConanAPI, parser, subparser, *args):
  function _print_json (line 116) | def _print_json(data):
  function _print_workspace_info (line 122) | def _print_workspace_info(data):
  function workspace_info (line 134) | def workspace_info(conan_api: ConanAPI, parser, subparser, *args):  # noqa
  function workspace_build (line 143) | def workspace_build(conan_api: ConanAPI, parser, subparser, *args):
  function workspace_install (line 151) | def workspace_install(conan_api: ConanAPI, parser, subparser, *args):
  function _install_build (line 158) | def _install_build(conan_api: ConanAPI, parser, subparser, build, *args):
  function workspace_super_install (line 229) | def workspace_super_install(conan_api: ConanAPI, parser, subparser, *args):
  function workspace_clean (line 298) | def workspace_clean(conan_api: ConanAPI, parser, subparser, *args):  # noqa
  function workspace_init (line 307) | def workspace_init(conan_api: ConanAPI, parser, subparser, *args):
  function workspace_create (line 319) | def workspace_create(conan_api: ConanAPI, parser, subparser, *args):
  function workspace_source (line 392) | def workspace_source(conan_api: ConanAPI, parser, subparser, *args):
  function workspace (line 409) | def workspace(conan_api, parser, *args):  # noqa

FILE: conan/cli/formatters/__init__.py
  function default_json_formatter (line 6) | def default_json_formatter(data):

FILE: conan/cli/formatters/audit/vulnerabilities.py
  function text_vuln_formatter (line 16) | def text_vuln_formatter(result):
  function json_vuln_formatter (line 154) | def json_vuln_formatter(result):
  function _render_vulns (line 158) | def _render_vulns(vulns, template):
  function html_vuln_formatter (line 324) | def html_vuln_formatter(result):

FILE: conan/cli/formatters/graph/build_order_html.py
  function _render_build_order (line 264) | def _render_build_order(build_order, template):
  function format_build_order_html (line 270) | def format_build_order_html(result):

FILE: conan/cli/formatters/graph/graph.py
  function _render_graph (line 12) | def _render_graph(graph, template, template_folder):
  function format_graph_html (line 20) | def format_graph_html(result):
  function format_graph_dot (line 33) | def format_graph_dot(result):
  function format_graph_json (line 46) | def format_graph_json(result):

FILE: conan/cli/formatters/graph/graph_info_text.py
  function filter_graph (line 8) | def filter_graph(graph, package_filter=None, field_filter=None):
  function format_graph_info (line 38) | def format_graph_info(result):
  function _serial_pretty_printer (line 54) | def _serial_pretty_printer(data, indent=""):

FILE: conan/cli/formatters/list/list.py
  function list_packages_html (line 11) | def list_packages_html(result):

FILE: conan/cli/formatters/report/diff.py
  function _generate_json (line 11) | def _generate_json(result):
  function _get_filenames (line 27) | def _get_filenames(line, src_prefix, dst_prefix):
  function _render_diff (line 43) | def _render_diff(content, template, template_folder, **kwargs):
  function format_diff_html (line 134) | def format_diff_html(result):
  function format_diff_txt (line 155) | def format_diff_txt(result):
  function format_diff_json (line 160) | def format_diff_json(result):

FILE: conan/cli/printers/__init__.py
  function print_profiles (line 4) | def print_profiles(profile_host, profile_build):

FILE: conan/cli/printers/graph.py
  function print_graph_basic (line 4) | def print_graph_basic(graph):
  function print_graph_packages (line 109) | def print_graph_packages(graph):

FILE: conan/cps/cps.py
  class CPSComponentType (line 9) | class CPSComponentType(Enum):
    method __str__ (line 17) | def __str__(self):
    method __eq__ (line 20) | def __eq__(self, other):
    method from_conan (line 25) | def from_conan(pkg_type):
  class CPSComponent (line 35) | class CPSComponent:
    method __init__ (line 36) | def __init__(self, component_type=None):
    method serialize (line 47) | def serialize(self):
    method deserialize (line 68) | def deserialize(data):
    method from_cpp_info (line 82) | def from_cpp_info(cpp_info, conanfile, libname=None):
    method update (line 126) | def update(self, conf, conf_def):
  class CPS (line 134) | class CPS:
    method __init__ (line 137) | def __init__(self, name=None, version=None):
    method serialize (line 150) | def serialize(self):
    method deserialize (line 177) | def deserialize(data):
    method from_conan (line 193) | def from_conan(dep):
    method to_conan (line 237) | def to_conan(self):
    method save (line 284) | def save(self, folder):
    method load (line 290) | def load(file):

FILE: conan/errors.py
  class ConanException (line 1) | class ConanException(Exception):
    method __init__ (line 3) | def __init__(self, msg=None, remote=None):
    method __str__ (line 7) | def __str__(self):
  class ConanInvalidConfiguration (line 14) | class ConanInvalidConfiguration(ConanException):
  class ConanMigrationError (line 21) | class ConanMigrationError(ConanException):

FILE: conan/internal/__init__.py
  function check_duplicated_generator (line 7) | def check_duplicated_generator(generator, conanfile):

FILE: conan/internal/api/audit/providers.py
  function _build_headers (line 7) | def _build_headers(token):
  class ConanCenterProvider (line 13) | class ConanCenterProvider:
    method __init__ (line 14) | def __init__(self, conan_api, name, provider_data):
    method get_cves (line 22) | def get_cves(self, refs):
  class PrivateProvider (line 108) | class PrivateProvider:
    method __init__ (line 109) | def __init__(self, conan_api, name, provider_data):
    method get_cves (line 117) | def get_cves(self, refs):
    method _build_query (line 138) | def _build_query(ref):
    method _parse_error (line 186) | def _parse_error(errors, ref):
    method _get (line 199) | def _get(self, ref):

FILE: conan/internal/api/config/config_installer.py
  class _ConanIgnoreMatcher (line 18) | class _ConanIgnoreMatcher:
    method __init__ (line 19) | def __init__(self, conanignore_path, ignore=None):
    method matches (line 35) | def matches(self, path):
  function _hide_password (line 52) | def _hide_password(resource):
  function tmp_config_install_folder (line 64) | def tmp_config_install_folder(cache_folder):
  function _process_git_repo (line 76) | def _process_git_repo(config, cache_folder):
  function _process_zip_file (line 89) | def _process_zip_file(config, zippath, cache_folder, tmp_folder, first_r...
  function _filecopy (line 109) | def _filecopy(src, filename, dst):
  function _process_file (line 124) | def _process_file(directory, filename, config, cache_folder, folder):
  function _process_folder (line 147) | def _process_folder(config, folder, cache_folder, ignore=None):
  function _process_download (line 164) | def _process_download(config, cache_folder, requester):
  class _ConfigOrigin (line 180) | class _ConfigOrigin:
    method __init__ (line 181) | def __init__(self, uri, config_type, verify_ssl, args, source_folder, ...
  function _is_compressed_file (line 204) | def _is_compressed_file(filename):
  function configuration_install (line 213) | def configuration_install(cache_folder, requester, uri, verify_ssl, conf...

FILE: conan/internal/api/detect/detect_api.py
  function detect_os (line 14) | def detect_os():
  function detect_arch (line 21) | def detect_arch():
  function _get_solaris_architecture (line 80) | def _get_solaris_architecture():
  function _get_aix_conf (line 91) | def _get_aix_conf(options=None):
  function _get_aix_architecture (line 101) | def _get_aix_architecture():
  function _get_e2k_architecture (line 111) | def _get_e2k_architecture():
  function _parse_gnu_libc (line 126) | def _parse_gnu_libc(ldd_output):
  function _detect_gnu_libc (line 133) | def _detect_gnu_libc(ldd="/usr/bin/ldd"):
  function _parse_musl_libc (line 154) | def _parse_musl_libc(ldd_output):
  function _detect_musl_libc (line 161) | def _detect_musl_libc(ldd="/usr/bin/ldd"):
  function detect_libc (line 194) | def detect_libc(ldd="/usr/bin/ldd"):
  function detect_libcxx (line 212) | def detect_libcxx(compiler, version, compiler_exe=None):
  function default_msvc_runtime (line 279) | def default_msvc_runtime(compiler):
  function detect_msvc_update (line 294) | def detect_msvc_update(version):
  function default_cppstd (line 299) | def default_cppstd(compiler, compiler_version):
  function detect_cppstd (line 340) | def detect_cppstd(compiler, compiler_version):
  function default_cstd (line 350) | def default_cstd(compiler, compiler_version):
  function detect_default_compiler (line 399) | def detect_default_compiler():
  function default_msvc_ide_version (line 464) | def default_msvc_ide_version(version):
  function _detect_vs_ide_version (line 470) | def _detect_vs_ide_version():
  function _cc_compiler (line 482) | def _cc_compiler(compiler_exe="cc"):
  function detect_gcc_compiler (line 504) | def detect_gcc_compiler(compiler_exe="gcc"):
  function detect_compiler (line 525) | def detect_compiler():
  function detect_intel_compiler (line 532) | def detect_intel_compiler(compiler_exe="icx"):
  function detect_suncc_compiler (line 546) | def detect_suncc_compiler(compiler_exe="cc"):
  function detect_clang_compiler (line 562) | def detect_clang_compiler(compiler_exe="clang"):
  function detect_msvc_compiler (line 581) | def detect_msvc_compiler():
  function detect_cl_compiler (line 594) | def detect_cl_compiler(compiler_exe="cl"):
  function detect_emcc_compiler (line 618) | def detect_emcc_compiler(compiler_exe="emcc"):
  function default_compiler_version (line 633) | def default_compiler_version(compiler, version):
  function detect_sdk_version (line 666) | def detect_sdk_version(sdk):

FILE: conan/internal/api/detect/detect_vs.py
  function vs_installation_path (line 9) | def vs_installation_path(version):
  function vs_detect_update (line 13) | def vs_detect_update(version):
  function _vs_installation_path (line 21) | def _vs_installation_path(version):
  function vswhere (line 57) | def vswhere(all_=False, prerelease=True, products=None, requires=None, v...

FILE: conan/internal/api/export.py
  function cmd_export (line 15) | def cmd_export(loader, cache, hook_manager, global_conf, conanfile_path,
  function _calc_revision (line 110) | def _calc_revision(scoped_output, path, manifest, revision_mode, conanfi...
  function _classify_patterns (line 140) | def _classify_patterns(patterns):
  function _export_source (line 152) | def _export_source(conanfile, destination_source_folder):
  function _export_recipe (line 169) | def _export_recipe(conanfile, destination_folder):
  function _run_method (line 194) | def _run_method(conanfile, method):

FILE: conan/internal/api/install/generators.py
  function _get_generator_class (line 43) | def _get_generator_class(generator_name):
  function load_cache_generators (line 61) | def load_cache_generators(path):
  function write_generators (line 77) | def write_generators(conanfile, hook_manager, home_folder, envs_generati...
  function _receive_conf (line 149) | def _receive_conf(conanfile):
  function _receive_generators (line 162) | def _receive_generators(conanfile):
  function relativize_path (line 175) | def relativize_path(path, conanfile, placeholder, normalize=True):

FILE: conan/internal/api/list/query_parse.py
  function filter_package_configs (line 4) | def filter_package_configs(pkg_configurations, query):
  function _evaluate_postfix_with_info (line 13) | def _evaluate_postfix_with_info(postfix, binary_info):
  function _evaluate (line 27) | def _evaluate(prop_name, prop_value, binary_info):
  function _is_operator (line 47) | def _is_operator(el):
  function _parse_expression (line 51) | def _parse_expression(subexp):
  function _evaluate_postfix (line 78) | def _evaluate_postfix(postfix, evaluator):
  function _infix_to_postfix (line 114) | def _infix_to_postfix(exp):

FILE: conan/internal/api/local/editable.py
  class EditablePackages (line 14) | class EditablePackages:
    method __init__ (line 15) | def __init__(self, cache_folder=None):
    method update_copy (line 28) | def update_copy(self, ws_editables):
    method edited_refs (line 40) | def edited_refs(self):
    method save (line 43) | def save(self):
    method get (line 47) | def get(self, ref):
    method get_path (line 52) | def get_path(self, ref):
    method add (line 57) | def add(self, ref, path, output_folder=None):
    method remove (line 64) | def remove(self, path, requires):

FILE: conan/internal/api/migrations.py
  function update_file (line 12) | def update_file(file_path, new_content):
  class ClientMigrator (line 35) | class ClientMigrator(Migrator):
    method __init__ (line 37) | def __init__(self, cache_folder, current_version):
    method _apply_migrations (line 41) | def _apply_migrations(self, old_version):
  function _migrate_default_compatibility (line 59) | def _migrate_default_compatibility(cache_folder):

FILE: conan/internal/api/new/basic.py
  function inject_get_or_else (line 1) | def inject_get_or_else(variable, default):

FILE: conan/internal/api/new/bazel_7_lib.py
  function _get_bazel_build (line 131) | def _get_bazel_build():

FILE: conan/internal/api/new/bazel_lib.py
  function _get_bazel_build (line 135) | def _get_bazel_build():

FILE: conan/internal/api/profile/detect.py
  function detect_defaults_settings (line 6) | def detect_defaults_settings():

FILE: conan/internal/api/profile/profile_loader.py
  function _unquote (line 22) | def _unquote(text):
  class ProfileLoader (line 79) | class ProfileLoader:
    method __init__ (line 80) | def __init__(self, cache_folder):
    method from_cli_args (line 83) | def from_cli_args(self, profiles, settings, options, conf, cwd, contex...
    method load_profile (line 99) | def load_profile(self, profile_name, cwd=None, context=None):
    method _load_profile (line 105) | def _load_profile(self, profile_name, cwd, context, root_profile_name):
    method _recurse_load_profile (line 146) | def _recurse_load_profile(self, text, profile_path, context, root_prof...
    method get_profile_path (line 171) | def get_profile_path(profiles_path, profile_name, cwd, exists=True):
  class _ProfileParser (line 197) | class _ProfileParser:
    method __init__ (line 199) | def __init__(self, text):
  class _ProfileValueParser (line 224) | class _ProfileValueParser:
    method get_profile (line 229) | def get_profile(profile_text, base_profile=None):
    method _parse_key_value (line 325) | def _parse_key_value(raw_info):
    method _parse_tool_requires (line 334) | def _parse_tool_requires(doc):
    method _parse_settings (line 354) | def _parse_settings(doc):
  function _profile_parse_args (line 389) | def _profile_parse_args(settings, options, conf):
  function migrate_profile_plugin (line 442) | def migrate_profile_plugin(cache_folder):

FILE: conan/internal/api/remotes/encrypt.py
  function _ascii_key (line 6) | def _ascii_key(key):
  function encode (line 12) | def encode(text, key):
  function decode (line 27) | def decode(text, key):

FILE: conan/internal/api/remotes/localdb.py
  class LocalDB (line 15) | class LocalDB:
    method __init__ (line 17) | def __init__(self, dbfolder):
    method _encode (line 37) | def _encode(self, value):
    method _decode (line 42) | def _decode(self, value):
    method clean (line 47) | def clean(self, remote_url=None):
    method _connect (line 65) | def _connect(self):
    method get_login (line 73) | def get_login(self, remote_url):
    method get_username (line 90) | def get_username(self, remote_url):
    method store (line 93) | def store(self, user, token, refresh_token, remote_url):

FILE: conan/internal/api/upload.py
  function add_urls (line 5) | def add_urls(package_list, remote):

FILE: conan/internal/api/uploader.py
  class UploadUpstreamChecker (line 23) | class UploadUpstreamChecker:
    method __init__ (line 29) | def __init__(self, remote_manager):
    method check (line 32) | def check(self, package_list, remote, force):
    method _check_upstream_recipe (line 40) | def _check_upstream_recipe(self, ref, ref_bundle, remote, force):
    method _check_upstream_package (line 61) | def _check_upstream_package(self, pref, prev_bundle, remote, force):
  function get_compress_level (line 84) | def get_compress_level(compressformat, global_conf):
  class PackagePreparator (line 106) | class PackagePreparator:
    method __init__ (line 107) | def __init__(self, app: ConanApp, cache, remote_manager, global_conf):
    method prepare (line 118) | def prepare(self, pkg_list, enabled_remotes, metadata, force=False):
    method _prepare_recipe (line 153) | def _prepare_recipe(self, recipe_layout, ref, ref_bundle, conanfile, r...
    method _compress_recipe_files (line 166) | def _compress_recipe_files(self, layout, ref):
    method _prepare_package (line 201) | def _prepare_package(self, pref, prev_bundle, metadata, force=False):
    method _compressed_file (line 221) | def _compressed_file(self, filename, files, download_folder, ref):
    method _compress_package_files (line 252) | def _compress_package_files(self, layout, pref):
  class UploadExecutor (line 280) | class UploadExecutor:
    method __init__ (line 285) | def __init__(self, remote_manager):
    method upload (line 288) | def upload(self, upload_data, remote):
    method upload_recipe (line 298) | def upload_recipe(self, ref, bundle, remote):
    method upload_package (line 311) | def upload_package(self, pref, prev_bundle, remote):
  function gzopen_without_timestamps (line 325) | def gzopen_without_timestamps(name, fileobj, compresslevel=None):
  function compress_files (line 340) | def compress_files(files, name, dest_dir, compresslevel=None, scope=None...
  function _total_size (line 373) | def _total_size(cache_files):
  function _metadata_files (line 381) | def _metadata_files(folder, metadata):

FILE: conan/internal/cache/cache.py
  class PkgCache (line 21) | class PkgCache:
    method __init__ (line 25) | def __init__(self, cache_folder, global_conf):
    method store (line 39) | def store(self):
    method temp_folder (line 43) | def temp_folder(self):
    method builds_folder (line 50) | def builds_folder(self):
    method _create_path (line 53) | def _create_path(self, relative_path, remove_contents=True):
    method _full_path (line 59) | def _full_path(self, relative_path):
    method _short_hash_path (line 66) | def _short_hash_path(h):
    method _get_path (line 77) | def _get_path(ref):
    method _get_path_pref (line 81) | def _get_path_pref(pref):
    method create_export_recipe_layout (line 84) | def create_export_recipe_layout(self, ref: RecipeReference):
    method create_build_pkg_layout (line 98) | def create_build_pkg_layout(self, pref: PkgReference):
    method recipe_layout (line 111) | def recipe_layout(self, ref: RecipeReference):
    method recipe_layout_latest (line 123) | def recipe_layout_latest(self, ref: RecipeReference):
    method get_latest_recipe_revision (line 134) | def get_latest_recipe_revision(self, ref: RecipeReference) -> RecipeRe...
    method get_recipe_revisions (line 139) | def get_recipe_revisions(self, ref: RecipeReference):
    method pkg_layout (line 144) | def pkg_layout(self, pref: PkgReference):
    method pkg_layout_latest (line 156) | def pkg_layout_latest(self, pref: PkgReference):
    method create_ref_layout (line 173) | def create_ref_layout(self, ref: RecipeReference):
    method create_pkg_layout (line 184) | def create_pkg_layout(self, pref: PkgReference):
    method update_recipe_timestamp (line 197) | def update_recipe_timestamp(self, ref: RecipeReference):
    method search_recipes (line 204) | def search_recipes(self, pattern=None, ignorecase=True):
    method exists_prev (line 214) | def exists_prev(self, pref):
    method get_latest_package_revision (line 218) | def get_latest_package_revision(self, pref: PkgReference) -> PkgRefere...
    method get_package_references (line 223) | def get_package_references(self, ref: RecipeReference,
    method get_package_revisions (line 228) | def get_package_revisions(self, pref: PkgReference) -> List[PkgReferen...
    method get_matching_build_id (line 231) | def get_matching_build_id(self, ref, build_id):
    method remove_recipe_layout (line 234) | def remove_recipe_layout(self, layout: RecipeLayout):
    method remove_package_layout (line 239) | def remove_package_layout(self, layout: PackageLayout):
    method remove_build_id (line 243) | def remove_build_id(self, pref):
    method assign_prev (line 246) | def assign_prev(self, layout: PackageLayout):
    method assign_rrev (line 270) | def assign_rrev(self, layout: RecipeLayout):
    method get_recipe_lru (line 303) | def get_recipe_lru(self, ref):
    method update_recipes_lru (line 307) | def update_recipes_lru(self, refs):
    method get_package_lru (line 312) | def get_package_lru(self, pref):
    method path_to_ref (line 316) | def path_to_ref(self, path):

FILE: conan/internal/cache/conan_reference_layout.py
  class LayoutBase (line 20) | class LayoutBase:
    method __init__ (line 21) | def __init__(self, ref, base_folder):
    method base_folder (line 26) | def base_folder(self):
    method remove (line 29) | def remove(self):
  class BasicLayout (line 33) | class BasicLayout(LayoutBase):
    method conanfile (line 35) | def conanfile(self):
    method metadata (line 40) | def metadata(self):
  class RecipeLayout (line 46) | class RecipeLayout(LayoutBase):
    method conanfile_write_lock (line 49) | def conanfile_write_lock(self, output):
    method export (line 52) | def export(self):
    method export_sources (line 55) | def export_sources(self):
    method metadata (line 58) | def metadata(self):
    method download_export (line 61) | def download_export(self):
    method source (line 64) | def source(self):
    method conanfile (line 67) | def conanfile(self):
    method conandata (line 70) | def conandata(self):
    method recipe_manifests (line 73) | def recipe_manifests(self):
    method sources_remove (line 81) | def sources_remove(self):
  class PackageLayout (line 86) | class PackageLayout(LayoutBase):
    method __init__ (line 88) | def __init__(self, ref, base_folder):
    method package_lock (line 94) | def package_lock(self):
    method build (line 97) | def build(self):
    method package (line 100) | def package(self):
    method finalize (line 103) | def finalize(self):
    method download_package (line 106) | def download_package(self):
    method metadata (line 109) | def metadata(self):
    method package_manifests (line 112) | def package_manifests(self):
    method set_dirty_context_manager (line 119) | def set_dirty_context_manager(self):
    method package_is_dirty (line 125) | def package_is_dirty(self):
    method build_remove (line 128) | def build_remove(self):
    method package_remove (line 132) | def package_remove(self):

FILE: conan/internal/cache/db/cache_database.py
  class CacheDatabase (line 12) | class CacheDatabase:
    method __init__ (line 14) | def __init__(self, filename):
    method exists_prev (line 24) | def exists_prev(self, ref):
    method get_latest_package_reference (line 27) | def get_latest_package_reference(self, pref):
    method get_latest_package_reference_data (line 31) | def get_latest_package_reference_data(self, pref):
    method update_recipe_timestamp (line 37) | def update_recipe_timestamp(self, ref):
    method update_package_timestamp (line 40) | def update_package_timestamp(self, pref: PkgReference, path: str, buil...
    method remove_recipe (line 43) | def remove_recipe(self, ref: RecipeReference):
    method remove_package (line 48) | def remove_package(self, ref: PkgReference):
    method remove_build_id (line 52) | def remove_build_id(self, pref):
    method get_matching_build_id (line 55) | def get_matching_build_id(self, ref, build_id):
    method get_recipe (line 61) | def get_recipe(self, ref: RecipeReference):
    method get_latest_recipe (line 65) | def get_latest_recipe(self, ref: RecipeReference):
    method get_recipe_revisions_references (line 69) | def get_recipe_revisions_references(self, ref: RecipeReference):
    method try_get_package (line 72) | def try_get_package(self, ref: PkgReference):
    method create_recipe (line 77) | def create_recipe(self, path, ref: RecipeReference):
    method create_package (line 80) | def create_package(self, path, ref: PkgReference, build_id):
    method list_references (line 83) | def list_references(self, pattern=None):
    method get_package_revisions_references (line 89) | def get_package_revisions_references(self, pref: PkgReference):
    method get_package_references (line 94) | def get_package_references(self, ref: RecipeReference, only_latest_pre...
    method path_to_ref (line 98) | def path_to_ref(self, path):

FILE: conan/internal/cache/db/packages_table.py
  class PackagesDBTable (line 10) | class PackagesDBTable(BaseDbTable):
    method _as_dict (line 23) | def _as_dict(row):
    method _where_clause (line 34) | def _where_clause(self, pref: PkgReference):
    method _set_clause (line 45) | def _set_clause(self, pref: PkgReference, path=None, build_id=None):
    method get (line 58) | def get(self, pref: PkgReference):
    method create (line 72) | def create(self, path, pref: PkgReference, build_id):
    method update_timestamp (line 89) | def update_timestamp(self, pref: PkgReference, path: str, build_id: str):
    method remove_build_id (line 103) | def remove_build_id(self, pref):
    method remove_recipe (line 114) | def remove_recipe(self, ref: RecipeReference):
    method remove (line 122) | def remove(self, pref: PkgReference):
    method get_package_revisions_references (line 129) | def get_package_revisions_references(self, pref: PkgReference, only_la...
    method get_package_revisions_reference_exists (line 162) | def get_package_revisions_reference_exists(self, pref: PkgReference):
    method get_package_references (line 178) | def get_package_references(self, ref: RecipeReference, only_latest_pre...
    method get_package_references_with_build_id_match (line 206) | def get_package_references_with_build_id_match(self, ref: RecipeRefere...
    method path_to_ref (line 232) | def path_to_ref(self, path):

FILE: conan/internal/cache/db/recipes_table.py
  class RecipesDBTable (line 9) | class RecipesDBTable(BaseDbTable):
    method _as_dict (line 19) | def _as_dict(row):
    method _where_clause (line 29) | def _where_clause(self, ref):
    method create (line 39) | def create(self, path, ref: RecipeReference):
    method update_timestamp (line 53) | def update_timestamp(self, ref: RecipeReference):
    method remove (line 63) | def remove(self, ref: RecipeReference):
    method all_references (line 71) | def all_references(self):
    method get_recipe (line 79) | def get_recipe(self, ref: RecipeReference):
    method get_latest_recipe (line 91) | def get_latest_recipe(self, ref: RecipeReference):
    method get_recipe_revisions_references (line 109) | def get_recipe_revisions_references(self, ref: RecipeReference):
    method path_to_ref (line 121) | def path_to_ref(self, path):

FILE: conan/internal/cache/db/table.py
  class BaseDbTable (line 12) | class BaseDbTable:
    method __init__ (line 21) | def __init__(self, filename):
    method db_connection (line 29) | def db_connection(self):
    method create_table (line 44) | def create_table(self):

FILE: conan/internal/cache/home_paths.py
  class HomePaths (line 9) | class HomePaths:
    method __init__ (line 12) | def __init__(self, home_folder):
    method local_recipes_index_path (line 16) | def local_recipes_index_path(self):
    method global_conf_path (line 20) | def global_conf_path(self):
    method deployers_path (line 24) | def deployers_path(self):
    method custom_generators_path (line 33) | def custom_generators_path(self):
    method hooks_path (line 37) | def hooks_path(self):
    method wrapper_path (line 41) | def wrapper_path(self):
    method profiles_path (line 45) | def profiles_path(self):
    method profile_plugin_path (line 49) | def profile_plugin_path(self):
    method auth_remote_plugin_path (line 53) | def auth_remote_plugin_path(self):
    method auth_source_plugin_path (line 57) | def auth_source_plugin_path(self):
    method sign_plugin_path (line 61) | def sign_plugin_path(self):
    method remotes_path (line 65) | def remotes_path(self):
    method providers_path (line 69) | def providers_path(self):
    method compatibility_plugin_path (line 73) | def compatibility_plugin_path(self):
    method default_sources_backup_folder (line 77) | def default_sources_backup_folder(self):
    method settings_path (line 81) | def settings_path(self):
    method settings_path_user (line 85) | def settings_path_user(self):
    method config_version_path (line 89) | def config_version_path(self):

FILE: conan/internal/cache/integrity_check.py
  class IntegrityChecker (line 9) | class IntegrityChecker:
    method __init__ (line 20) | def __init__(self, cache):
    method check (line 23) | def check(self, pkg_list) -> PackagesList:
    method _recipe_corrupted (line 39) | def _recipe_corrupted(self, ref: RecipeReference):
    method _package_corrupted (line 63) | def _package_corrupted(self, ref: PkgReference):

FILE: conan/internal/conan_app.py
  class CmdWrapper (line 14) | class CmdWrapper:
    method __init__ (line 15) | def __init__(self, wrapper):
    method wrap (line 22) | def wrap(self, cmd, conanfile, **kwargs):
  class ConanFileHelpers (line 28) | class ConanFileHelpers:
    method __init__ (line 29) | def __init__(self, requester, cmd_wrapper, global_conf, cache, home_fo...
  class ConanBasicApp (line 38) | class ConanBasicApp:
    method __init__ (line 39) | def __init__(self, conan_api):
  class ConanApp (line 56) | class ConanApp(ConanBasicApp):
    method __init__ (line 57) | def __init__(self, conan_api):
  class LocalRecipesIndexApp (line 75) | class LocalRecipesIndexApp:
    method __init__ (line 82) | def __init__(self, cache_folder):

FILE: conan/internal/default_settings.py
  function migrate_settings_file (line 189) | def migrate_settings_file(cache_folder):

FILE: conan/internal/deploy.py
  function _find_deployer (line 14) | def _find_deployer(d, cache_deploy_folder):
  function do_deploys (line 49) | def do_deploys(home_folder, graph, deploy, deploy_package, deploy_folder):
  function full_deploy (line 81) | def full_deploy(graph, output_folder):
  function runtime_deploy (line 102) | def runtime_deploy(graph, output_folder):
  function cyclonedx_1_4 (line 140) | def cyclonedx_1_4(graph, output_folder):
  function cyclonedx_1_6 (line 147) | def cyclonedx_1_6(graph, output_folder):
  function _flatten_directory (line 154) | def _flatten_directory(dep, src_dir, output_dir, symlinks, extension_fil...
  function _deploy_single (line 200) | def _deploy_single(dep, conanfile, output_folder, folder_name):
  function direct_deploy (line 215) | def direct_deploy(graph, output_folder):

FILE: conan/internal/errors.py
  function conanfile_remove_attr (line 8) | def conanfile_remove_attr(conanfile, names, method):
  function conanfile_exception_formatter (line 30) | def conanfile_exception_formatter(conanfile, funcname):
  function scoped_traceback (line 48) | def scoped_traceback(header_msg, exception, scope):
  class ConanReferenceDoesNotExistInDB (line 84) | class ConanReferenceDoesNotExistInDB(ConanException):
  class ConanReferenceAlreadyExistsInDB (line 89) | class ConanReferenceAlreadyExistsInDB(ConanException):
  class ConanConnectionError (line 94) | class ConanConnectionError(ConanException):
  class InternalErrorException (line 98) | class InternalErrorException(ConanException):
  class RequestErrorException (line 105) | class RequestErrorException(ConanException):
  class AuthenticationException (line 112) | class AuthenticationException(ConanException):  # 401
  class ForbiddenException (line 119) | class ForbiddenException(ConanException):  # 403
  class NotFoundException (line 126) | class NotFoundException(ConanException):  # 404
  class RecipeNotFoundException (line 133) | class RecipeNotFoundException(NotFoundException):
    method __init__ (line 135) | def __init__(self, ref):
  class PackageNotFoundException (line 139) | class PackageNotFoundException(NotFoundException):
    method __init__ (line 141) | def __init__(self, pref):

FILE: conan/internal/graph/build_mode.py
  class BuildMode (line 6) | class BuildMode:
    method __init__ (line 12) | def __init__(self, params):
    method editable (line 67) | def editable(self):
    method forced (line 71) | def forced(self, conan_file, ref, with_deps_to_build=False):
    method allowed (line 98) | def allowed(self, conan_file):
    method allowed_compatible (line 113) | def allowed_compatible(self, conanfile):
    method should_build_missing (line 124) | def should_build_missing(self, conanfile):

FILE: conan/internal/graph/compatibility.py
  function migrate_compatibility_files (line 87) | def migrate_compatibility_files(cache_folder):
  class BinaryCompatibility (line 110) | class BinaryCompatibility:
    method __init__ (line 112) | def __init__(self, compatibility_plugin_folder, hook_manager):
    method compatibles (line 121) | def compatibles(self, conanfile):
    method _compatible_infos (line 162) | def _compatible_infos(conanfile, compatibles):

FILE: conan/internal/graph/compute_pid.py
  function compute_package_id (line 11) | def compute_package_id(node, modes, config_version, hook_manager):
  function run_validate_package_id (line 77) | def run_validate_package_id(conanfile, hook_manager):

FILE: conan/internal/graph/graph.py
  class TransitiveRequirement (line 36) | class TransitiveRequirement:
    method __init__ (line 37) | def __init__(self, require, node):
    method __repr__ (line 41) | def __repr__(self):
  class Node (line 45) | class Node:
    method __init__ (line 47) | def __init__(self, ref, conanfile, context, recipe=None, path=None, te...
    method dependencies (line 76) | def dependencies(self):
    method subgraph (line 82) | def subgraph(self):
    method __lt__ (line 99) | def __lt__(self, other):
    method propagate_closing_loop (line 106) | def propagate_closing_loop(self, require, prev_node, visibility_confli...
    method propagate_downstream (line 116) | def propagate_downstream(self, require, node, visibility_conflicts, sr...
    method check_downstream_exists (line 174) | def check_downstream_exists(self, require):
    method check_loops (line 224) | def check_loops(self, new_node, count=0):
    method package_id (line 237) | def package_id(self):
    method package_id (line 241) | def package_id(self, pkg_id):
    method name (line 246) | def name(self):
    method pref (line 250) | def pref(self):
    method add_edge (line 254) | def add_edge(self, edge):
    method neighbors (line 260) | def neighbors(self):
    method inverse_neighbors (line 263) | def inverse_neighbors(self):
    method __repr__ (line 266) | def __repr__(self):
    method serialize (line 269) | def serialize(self):
    method overrides (line 296) | def overrides(self):
  class Edge (line 314) | class Edge:
    method __init__ (line 315) | def __init__(self, src, dst, require):
  class Overrides (line 321) | class Overrides:
    method __init__ (line 322) | def __init__(self):
    method __bool__ (line 325) | def __bool__(self):
    method __repr__ (line 328) | def __repr__(self):
    method create (line 332) | def create(nodes):
    method get (line 351) | def get(self, require):
    method update (line 354) | def update(self, other):
    method items (line 361) | def items(self):
    method serialize (line 364) | def serialize(self):
    method deserialize (line 370) | def deserialize(data):
  class DepsGraph (line 378) | class DepsGraph:
    method __init__ (line 379) | def __init__(self):
    method lockfile (line 388) | def lockfile(self):
    method overrides (line 392) | def overrides(self):
    method __repr__ (line 395) | def __repr__(self):
    method root (line 399) | def root(self):
    method add_node (line 402) | def add_node(self, node):
    method add_edge (line 406) | def add_edge(src, dst, require):
    method ordered_iterate (line 411) | def ordered_iterate(self):
    method by_levels (line 417) | def by_levels(self):
    method report_graph_error (line 443) | def report_graph_error(self):
    method serialize (line 447) | def serialize(self):

FILE: conan/internal/graph/graph_binaries.py
  class GraphBinariesAnalyzer (line 22) | class GraphBinariesAnalyzer:
    method __init__ (line 24) | def __init__(self, cache, remote_manager, home_folder, global_conf, ho...
    method _evaluate_build (line 44) | def _evaluate_build(node, build_mode):
    method _evaluate_clean_pkg_folder_dirty (line 59) | def _evaluate_clean_pkg_folder_dirty(node, package_layout):
    method _get_package_from_remotes (line 72) | def _get_package_from_remotes(self, node, remotes, update):
    method _evaluate_is_cached (line 102) | def _evaluate_is_cached(self, node):
    method _compatible_get_packages (line 124) | def _compatible_get_packages(self, node):
    method _compatible_found (line 137) | def _compatible_found(conanfile, pkg_id, compatible_pkg):
    method _compatible_find_existing_binaries (line 152) | def _compatible_find_existing_binaries(self, node, compatibles, remote...
    method _compatible_cache_latest_prev (line 241) | def _compatible_cache_latest_prev(self, node):
    method _binary_in_cache (line 257) | def _binary_in_cache(node, cache_latest_prev):
    method _compatible_get_packages_from_remotes (line 264) | def _compatible_get_packages_from_remotes(self, ref, remotes):
    method _compatible_find_build_binary (line 285) | def _compatible_find_build_binary(self, node, compatibles):
    method _evaluate_node (line 297) | def _evaluate_node(self, node, build_mode, remotes, update):
    method _process_node (line 343) | def _process_node(self, node, build_mode, remotes, update):
    method _process_locked_node (line 386) | def _process_locked_node(self, node, build_mode, locked_prev):
    method _evaluate_download (line 412) | def _evaluate_download(self, node, remotes, update):
    method _evaluate_cache_update (line 420) | def _evaluate_cache_update(self, cache_latest_prev, node, remotes, upd...
    method _config_version (line 442) | def _config_version(self):
    method _evaluate_package_id (line 456) | def _evaluate_package_id(self, node, config_version):
    method evaluate_graph (line 467) | def evaluate_graph(self, deps_graph, build_mode, lockfile, remotes, up...
    method _skip_binaries (line 533) | def _skip_binaries(graph):

FILE: conan/internal/graph/graph_builder.py
  class DepsGraphBuilder (line 23) | class DepsGraphBuilder:
    method __init__ (line 26) | def __init__(self, proxy, loader, resolver, cache, remotes, update, ch...
    method load_graph (line 36) | def load_graph(self, root_node, profile_host, profile_build, graph_loc...
    method _expand_require (line 78) | def _expand_require(self, require, node, graph, profile_host, profile_...
    method _save_options_conflicts (line 121) | def _save_options_conflicts(self, node, require, prev_node, graph):
    method _conflicting_version (line 142) | def _conflicting_version(require, node,
    method _prepare_node (line 176) | def _prepare_node(node, profile_host, profile_build, down_options, def...
    method _initialize_requires (line 210) | def _initialize_requires(self, node, graph, graph_lock, profile_build,...
    method _resolve_alias (line 238) | def _resolve_alias(self, node, require, alias, graph):
    method _resolve_recipe (line 277) | def _resolve_recipe(self, ref, graph_lock):
    method _resolved_system (line 287) | def _resolved_system(node, require, profile_build, profile_host, resol...
    method _resolve_replace_requires (line 316) | def _resolve_replace_requires(self, node, require, profile_build, prof...
    method _deduce_host_version (line 364) | def _deduce_host_version(require, node):
    method _create_new_node (line 382) | def _create_new_node(self, node, require, graph, profile_host, profile...
    method _compute_down_options (line 434) | def _compute_down_options(node, require, new_ref):
    method _remove_overrides (line 459) | def _remove_overrides(dep_graph):
    method _remove_orphans (line 466) | def _remove_orphans(dep_graph):

FILE: conan/internal/graph/graph_error.py
  class GraphError (line 4) | class GraphError(ConanException):
    method serialize (line 5) | def serialize(self):
  class GraphConflictError (line 9) | class GraphConflictError(GraphError):
    method __init__ (line 11) | def __init__(self, node, require, prev_node, prev_require, base_previo...
    method serialize (line 18) | def serialize(self):
    method __str__ (line 27) | def __str__(self):
  class GraphLoopError (line 39) | class GraphLoopError(GraphError):
    method __init__ (line 41) | def __init__(self, node, require, ancestor):
    method serialize (line 46) | def serialize(self):
    method __str__ (line 53) | def __str__(self):
  class GraphMissingError (line 60) | class GraphMissingError(GraphError):
    method __init__ (line 62) | def __init__(self, node, require, missing_error):
    method serialize (line 67) | def serialize(self):
    method __str__ (line 73) | def __str__(self):
  class GraphProvidesError (line 78) | class GraphProvidesError(GraphError):
    method __init__ (line 80) | def __init__(self, node, conflicting_node):
    method serialize (line 85) | def serialize(self):
    method __str__ (line 92) | def __str__(self):

FILE: conan/internal/graph/install_graph.py
  class _InstallPackageReference (line 14) | class _InstallPackageReference:
    method __init__ (line 20) | def __init__(self):
    method pref (line 38) | def pref(self):
    method conanfile (line 42) | def conanfile(self):
    method create (line 46) | def create(node):
    method add (line 60) | def add(self, node):
    method _build_args (line 68) | def _build_args(self):
    method serialize (line 81) | def serialize(self):
    method deserialize (line 94) | def deserialize(data, filename, ref):
  class _InstallRecipeReference (line 109) | class _InstallRecipeReference:
    method __init__ (line 114) | def __init__(self):
    method __str__ (line 120) | def __str__(self):
    method need_build (line 124) | def need_build(self):
    method reduce (line 130) | def reduce(self):
    method node (line 140) | def node(self):
    method create (line 144) | def create(node):
    method merge (line 151) | def merge(self, other):
    method add (line 166) | def add(self, node):
    method _install_order (line 181) | def _install_order(self):
    method serialize (line 202) | def serialize(self):
    method deserialize (line 209) | def deserialize(data, filename):
  class _InstallConfiguration (line 221) | class _InstallConfiguration:
    method __init__ (line 227) | def __init__(self):
    method __str__ (line 241) | def __str__(self):
    method need_build (line 245) | def need_build(self):
    method reduce (line 248) | def reduce(self):
    method pref (line 252) | def pref(self):
    method conanfile (line 256) | def conanfile(self):
    method create (line 260) | def create(node):
    method add (line 279) | def add(self, node):
    method _build_args (line 292) | def _build_args(self):
    method serialize (line 305) | def serialize(self):
    method deserialize (line 321) | def deserialize(data, filename):
    method merge (line 335) | def merge(self, other):
  class ProfileArgs (line 348) | class ProfileArgs:
    method __init__ (line 349) | def __init__(self, args):
    method from_args (line 353) | def from_args(args):
    method __str__ (line 362) | def __str__(self):
    method deserialize (line 366) | def deserialize(data):
    method serialize (line 369) | def serialize(self):
  class InstallGraph (line 373) | class InstallGraph:
    method __init__ (line 377) | def __init__(self, deps_graph, order_by=None, profile_args=None):
    method load (line 391) | def load(filename):
    method merge (line 398) | def merge(self, other):
    method deserialize (line 421) | def deserialize(data, filename):
    method _initialize_deps_graph (line 437) | def _initialize_deps_graph(self, deps_graph):
    method reduce (line 450) | def reduce(self):
    method install_order (line 466) | def install_order(self, flat=False):
    method _raise_loop_detected (line 491) | def _raise_loop_detected(nodes):
    method install_build_order (line 506) | def install_build_order(self):
    method _get_missing_invalid_packages (line 519) | def _get_missing_invalid_packages(self):
    method raise_errors (line 536) | def raise_errors(self):
    method get_errors (line 543) | def get_errors(self):
    method _raise_invalid (line 561) | def _raise_invalid(invalid):
    method _raise_missing (line 572) | def _raise_missing(self, missing):

FILE: conan/internal/graph/installer.py
  function build_id (line 22) | def build_id(conan_file):
  class _PackageBuilder (line 35) | class _PackageBuilder:
    method __init__ (line 37) | def __init__(self, cache, remote_manager, cache_folder, hook_manager):
    method _get_build_folder (line 43) | def _get_build_folder(self, conanfile, package_layout):
    method _copy_sources (line 81) | def _copy_sources(conanfile, source_folder, build_folder):
    method _build (line 91) | def _build(self, conanfile, pref):
    method _package (line 106) | def _package(self, conanfile, pref):
    method build_package (line 118) | def build_package(self, node, recipe_layout, package_layout):
  class BinaryInstaller (line 163) | class BinaryInstaller:
    method __init__ (line 168) | def __init__(self, api, global_conf, editable_packages, hook_manager):
    method _install_source (line 177) | def _install_source(self, node, remotes, need_conf=False):
    method install_system_requires (line 201) | def install_system_requires(graph, only_info=False, install_order=None):
    method install_sources (line 230) | def install_sources(self, graph, remotes):
    method install (line 239) | def install(self, deps_graph, remotes, install_order=None):
    method _download_bulk (line 264) | def _download_bulk(self, install_order):
    method _download_pkg (line 292) | def _download_pkg(self, package):
    method _handle_package (line 298) | def _handle_package(self, recipe_layout, package, install_reference, h...
    method _handle_node_editable (line 350) | def _handle_node_editable(self, install_node):
    method _handle_node_build (line 386) | def _handle_node_build(self, package, recipe_layout, pkg_layout):
    method _call_package_info (line 412) | def _call_package_info(self, conanfile, package_folder, is_editable):
    method _call_finalize_method (line 479) | def _call_finalize_method(conanfile, finalize_folder):

FILE: conan/internal/graph/profile_node_definer.py
  function initialize_conanfile_profile (line 6) | def initialize_conanfile_profile(conanfile, profile_build, profile_host,...
  function _per_package_settings (line 54) | def _per_package_settings(conanfile, profile, ref):
  function _initialize_conanfile (line 74) | def _initialize_conanfile(conanfile, profile, settings, ref):
  function consumer_definer (line 88) | def consumer_definer(conanfile, profile_host, profile_build):

FILE: conan/internal/graph/provides.py
  function check_graph_provides (line 5) | def check_graph_provides(dep_graph):

FILE: conan/internal/graph/proxy.py
  class ConanProxy (line 10) | class ConanProxy:
    method __init__ (line 11) | def __init__(self, cache, remote_manager, editable_packages, legacy_up...
    method get_recipe (line 19) | def get_recipe(self, ref, remotes, update, check_update):
    method _get_recipe (line 32) | def _get_recipe(self, reference, remotes, update, check_update):
    method _find_newest_recipe_in_remotes (line 102) | def _find_newest_recipe_in_remotes(self, reference, remotes, update, c...
    method _download_recipe (line 151) | def _download_recipe(self, ref, remotes, scoped_output, update, check_...
    method _download (line 165) | def _download(self, ref, remote):
  function should_update_reference (line 174) | def should_update_reference(reference, update):

FILE: conan/internal/graph/python_requires.py
  class PyRequire (line 8) | class PyRequire:
    method __init__ (line 9) | def __init__(self, module, conanfile, ref, path, recipe_status, remote):
    method serialize (line 17) | def serialize(self):
  class PyRequires (line 23) | class PyRequires:
    method __init__ (line 25) | def __init__(self):
    method serialize (line 28) | def serialize(self):
    method all_refs (line 31) | def all_refs(self):
    method info_requires (line 34) | def info_requires(self):
    method items (line 38) | def items(self):
    method __getitem__ (line 41) | def __getitem__(self, item):
    method add_pyrequire (line 47) | def add_pyrequire(self, py_require):
  class PyRequireLoader (line 67) | class PyRequireLoader:
    method __init__ (line 68) | def __init__(self, proxy, range_resolver, global_conf):
    method load_py_requires (line 74) | def load_py_requires(self, conanfile, loader, graph_lock, remotes, upd...
    method _resolve_py_requires (line 93) | def _resolve_py_requires(self, py_requires_refs, graph_lock, loader, r...
    method _resolve_ref (line 111) | def _resolve_ref(self, requirement, graph_lock, remotes, update):
    method _load_pyreq_conanfile (line 122) | def _load_pyreq_conanfile(self, loader, graph_lock, ref, remotes, upda...

FILE: conan/internal/graph/range_resolver.py
  class RangeResolver (line 8) | class RangeResolver:
    method __init__ (line 10) | def __init__(self, cache, remote_manager, global_conf, editable_packag...
    method resolve (line 19) | def resolve(self, require, base_conanref, remotes, update):
    method _resolve_local (line 62) | def _resolve_local(self, search_ref, version_range):
    method _search_remote_recipes (line 78) | def _search_remote_recipes(self, remote, search_ref):
    method _resolve_remote (line 93) | def _resolve_remote(self, search_ref, version_range, remotes, update):
    method _resolve_version (line 110) | def _resolve_version(version_range, refs_found, resolve_prereleases):

FILE: conan/internal/hook_manager.py
  class HookManager (line 16) | class HookManager:
    method __init__ (line 18) | def __init__(self, hooks_folder):
    method execute (line 25) | def execute(self, method_name, conanfile):
    method _load_hooks (line 45) | def _load_hooks(self):
    method _load_hook (line 60) | def _load_hook(self, hook_path, hook_name):
    method reinit (line 70) | def reinit(self):

FILE: conan/internal/internal_tools.py
  function is_universal_arch (line 6) | def is_universal_arch(settings_value, valid_definitions):
  function raise_on_universal_arch (line 22) | def raise_on_universal_arch(conanfile):

FILE: conan/internal/loader.py
  class ConanFileLoader (line 30) | class ConanFileLoader:
    method __init__ (line 32) | def __init__(self, pyreq_loader=None, conanfile_helpers=None):
    method load_basic (line 38) | def load_basic(self, conanfile_path, graph_lock=None, display="", remo...
    method load_basic_module (line 45) | def load_basic_module(self, conanfile_path, graph_lock=None, display="...
    method _load_data (line 92) | def _load_data(conanfile_path):
    method load_named (line 104) | def load_named(self, conanfile_path, name, version, user, channel, gra...
    method load_export (line 148) | def load_export(self, conanfile_path, name, version, user, channel, gr...
    method load_consumer (line 164) | def load_consumer(self, conanfile_path, name=None, version=None, user=...
    method load_conanfile (line 182) | def load_conanfile(self, conanfile_path, ref, graph_lock=None, remotes...
    method load_conanfile_txt (line 199) | def load_conanfile_txt(self, conan_txt_path):
    method _parse_conan_txt (line 215) | def _parse_conan_txt(contents, path, display_name):
    method load_virtual (line 252) | def load_virtual(self, requires=None, tool_requires=None, python_requi...
  function _parse_module (line 278) | def _parse_module(conanfile_module, module_id):
  function _parse_conanfile (line 305) | def _parse_conanfile(conanfile_path):
  function load_python_file (line 315) | def load_python_file(conan_file_path):
  function _load_python_file (line 323) | def _load_python_file(conan_file_path):
  function _get_required_conan_version_without_loading (line 391) | def _get_required_conan_version_without_loading(conan_file_path):
  class ConanFileTextLoader (line 408) | class ConanFileTextLoader:
    method __init__ (line 411) | def __init__(self, input_text):
    method layout (line 419) | def layout(self):
    method requirements (line 428) | def requirements(self):
    method tool_requirements (line 435) | def tool_requirements(self):
    method test_requirements (line 443) | def test_requirements(self):
    method options (line 451) | def options(self):
    method generators (line 455) | def generators(self):

FILE: conan/internal/methods.py
  function run_source_method (line 14) | def run_source_method(conanfile, hook_manager):
  function run_build_method (line 26) | def run_build_method(conanfile, hook_manager):
  function run_package_method (line 45) | def run_package_method(conanfile, package_id, hook_manager, ref):
  function run_configure_method (line 85) | def run_configure_method(conanfile, down_options, profile_options, ref):
  function auto_shared_fpic_config_options (line 136) | def auto_shared_fpic_config_options(conanfile):
  function auto_shared_fpic_configure (line 141) | def auto_shared_fpic_configure(conanfile):
  function auto_header_only_package_id (line 149) | def auto_header_only_package_id(conanfile):
  function auto_language (line 154) | def auto_language(conanfile):

FILE: conan/internal/model/conan_file.py
  class ConanFile (line 17) | class ConanFile:
    method __init__ (line 81) | def __init__(self, display_name=""):
    method serialize (line 132) | def serialize(self):
    method output (line 186) | def output(self):
    method context (line 194) | def context(self):
    method subgraph (line 198) | def subgraph(self):
    method dependencies (line 202) | def dependencies(self):
    method ref (line 209) | def ref(self):
    method pref (line 213) | def pref(self):
    method buildenv (line 217) | def buildenv(self):
    method runenv (line 226) | def runenv(self):
    method cpp_info (line 235) | def cpp_info(self):
    method cpp_info (line 243) | def cpp_info(self, value):
    method source_folder (line 247) | def source_folder(self):
    method source_path (line 258) | def source_path(self) -> Path:
    method export_sources_folder (line 265) | def export_sources_folder(self):
    method export_sources_path (line 280) | def export_sources_path(self) -> Path:
    method export_folder (line 287) | def export_folder(self):
    method export_path (line 291) | def export_path(self) -> Path:
    method build_folder (line 299) | def build_folder(self):
    method recipe_metadata_folder (line 310) | def recipe_metadata_folder(self):
    method package_metadata_folder (line 314) | def package_metadata_folder(self):
    method build_path (line 318) | def build_path(self) -> Path:
    method package_folder (line 325) | def package_folder(self):
    method immutable_package_folder (line 335) | def immutable_package_folder(self):
    method generators_folder (line 339) | def generators_folder(self):
    method package_path (line 343) | def package_path(self) -> Path:
    method generators_path (line 351) | def generators_path(self) -> Path:
    method run (line 357) | def run(self, command: str, stdout=None, cwd=None, ignore_errors=False...
    method __repr__ (line 405) | def __repr__(self):
    method set_deploy_folder (line 408) | def set_deploy_folder(self, deploy_folder):

FILE: conan/internal/model/conanconfig.py
  function loadconanconfig (line 10) | def loadconanconfig(filename):
  function loadconanconfig_yml (line 20) | def loadconanconfig_yml(filename):
  function saveconanconfig (line 31) | def saveconanconfig(filename, config_versions):

FILE: conan/internal/model/conanfile_interface.py
  class ConanFileInterface (line 6) | class ConanFileInterface:
    method __str__ (line 13) | def __str__(self):
    method __init__ (line 16) | def __init__(self, conanfile):
    method __eq__ (line 19) | def __eq__(self, other):
    method __hash__ (line 26) | def __hash__(self):
    method options (line 30) | def options(self):
    method recipe_folder (line 34) | def recipe_folder(self):
    method recipe_metadata_folder (line 38) | def recipe_metadata_folder(self):
    method package_folder (line 42) | def package_folder(self):
    method immutable_package_folder (line 46) | def immutable_package_folder(self):
    method package_metadata_folder (line 50) | def package_metadata_folder(self):
    method package_path (line 54) | def package_path(self) -> Path:
    method ref (line 59) | def ref(self):
    method pref (line 63) | def pref(self):
    method buildenv_info (line 67) | def buildenv_info(self):
    method runenv_info (line 71) | def runenv_info(self):
    method cpp_info (line 75) | def cpp_info(self):
    method settings (line 79) | def settings(self):
    method settings_build (line 83) | def settings_build(self):
    method context (line 87) | def context(self):
    method conf_info (line 91) | def conf_info(self):
    method generator_info (line 95) | def generator_info(self):
    method dependencies (line 99) | def dependencies(self):
    method folders (line 103) | def folders(self):
    method is_build_context (line 107) | def is_build_context(self):
    method package_type (line 111) | def package_type(self):
    method languages (line 115) | def languages(self):
    method info (line 119) | def info(self):
    method set_deploy_folder (line 122) | def set_deploy_folder(self, deploy_folder):
    method conan_data (line 126) | def conan_data(self):
    method license (line 130) | def license(self):
    method description (line 134) | def description(self):
    method author (line 138) | def author(self):
    method homepage (line 142) | def homepage(self):
    method url (line 146) | def url(self):
    method extension_properties (line 150) | def extension_properties(self):
    method recipe (line 154) | def recipe(self) -> str:
    method conf (line 159) | def conf(self):

FILE: conan/internal/model/conf.py
  function _is_profile_module (line 178) | def _is_profile_module(module_name):
  class _ConfVarPlaceHolder (line 185) | class _ConfVarPlaceHolder:
  class _ConfValue (line 189) | class _ConfValue:
    method __init__ (line 191) | def __init__(self, name, value, path=False, update=None, important=Fal...
    method parse (line 200) | def parse(name, value, path=False, update=None):
    method __repr__ (line 208) | def __repr__(self):
    method value (line 212) | def value(self):
    method copy (line 219) | def copy(self):
    method dumps (line 224) | def dumps(self):
    method serialize (line 235) | def serialize(self):
    method update (line 247) | def update(self, value):
    method remove (line 252) | def remove(self, value):
    method append (line 258) | def append(self, value):
    method prepend (line 269) | def prepend(self, value):
    method compose_conf_value (line 280) | def compose_conf_value(self, other):
    method set_relative_base_folder (line 328) | def set_relative_base_folder(self, folder):
  class Conf (line 340) | class Conf:
    method __init__ (line 345) | def __init__(self):
    method __bool__ (line 349) | def __bool__(self):
    method __repr__ (line 352) | def __repr__(self):
    method __eq__ (line 355) | def __eq__(self, other):
    method clear (line 361) | def clear(self):
    method validate (line 364) | def validate(self):
    method items (line 368) | def items(self):
    method get (line 373) | def get(self, conf_name, default=None, check_type=None, choices=None):
    method pop (line 412) | def pop(self, conf_name, default=None):
    method show (line 424) | def show(self, fnpattern, pattern=""):
    method copy (line 429) | def copy(self):
    method filter_core (line 434) | def filter_core(self):
    method dumps (line 440) | def dumps(self):
    method serialize (line 446) | def serialize(self):
    method define (line 455) | def define(self, name, value):
    method define_path (line 465) | def define_path(self, name, value):
    method unset (line 469) | def unset(self, name):
    method update (line 478) | def update(self, name, value):
    method update_path (line 489) | def update_path(self, name, value):
    method append (line 493) | def append(self, name, value):
    method append_path (line 503) | def append_path(self, name, value):
    method prepend (line 507) | def prepend(self, name, value):
    method prepend_path (line 517) | def prepend_path(self, name, value):
    method remove (line 521) | def remove(self, name, value):
    method compose_conf (line 534) | def compose_conf(self, other):
    method copy_conaninfo_conf (line 547) | def copy_conaninfo_conf(self):
    method set_relative_base_folder (line 582) | def set_relative_base_folder(self, folder):
    method _check_conf_name (line 587) | def _check_conf_name(conf):
  class ConfDefinition (line 596) | class ConfDefinition:
    method __init__ (line 601) | def __init__(self):
    method __repr__ (line 604) | def __repr__(self):
    method __bool__ (line 607) | def __bool__(self):
    method get (line 610) | def get(self, conf_name, default=None, check_type=None, choices=None):
    method show (line 618) | def show(self, fnpattern):
    method pop (line 636) | def pop(self, conf_name, default=None):
    method _split_pattern_name (line 644) | def _split_pattern_name(pattern_name):
    method get_conanfile_conf (line 651) | def get_conanfile_conf(self, ref, is_consumer=False):
    method update_conf_definition (line 663) | def update_conf_definition(self, other):
    method _update_conf_definition (line 671) | def _update_conf_definition(self, pattern, conf):
    method rebase_conf_definition (line 678) | def rebase_conf_definition(self, global_conf):
    method update (line 691) | def update(self, key, value, profile=False, method="define"):
    method dumps (line 717) | def dumps(self):
    method serialize (line 729) | def serialize(self):
    method _get_evaluated_value (line 740) | def _get_evaluated_value(_v):
    method loads (line 755) | def loads(self, text, profile=False):
    method validate (line 776) | def validate(self):
    method clear (line 780) | def clear(self):
  function load_global_conf (line 784) | def load_global_conf(home_folder):

FILE: conan/internal/model/cpp_info.py
  class MockInfoProperty (line 21) | class MockInfoProperty:
    method __init__ (line 29) | def __init__(self, name):
    method message (line 33) | def message():
    method __getitem__ (line 42) | def __getitem__(self, key):
    method __setitem__ (line 46) | def __setitem__(self, key, value):
    method __getattr__ (line 49) | def __getattr__(self, attr):
    method __setattr__ (line 53) | def __setattr__(self, attr, value):
  class _Component (line 59) | class _Component:
    method __init__ (line 61) | def __init__(self, set_defaults=False):
    method serialize (line 107) | def serialize(self):
    method deserialize (line 137) | def deserialize(contents):
    method clone (line 148) | def clone(self):
    method includedirs (line 157) | def includedirs(self):
    method includedirs (line 163) | def includedirs(self, value):
    method srcdirs (line 167) | def srcdirs(self):
    method srcdirs (line 173) | def srcdirs(self, value):
    method libdirs (line 177) | def libdirs(self):
    method libdirs (line 183) | def libdirs(self, value):
    method resdirs (line 187) | def resdirs(self):
    method resdirs (line 193) | def resdirs(self, value):
    method bindirs (line 197) | def bindirs(self):
    method bindirs (line 203) | def bindirs(self, value):
    method builddirs (line 207) | def builddirs(self):
    method builddirs (line 213) | def builddirs(self, value):
    method bindir (line 217) | def bindir(self):
    method libdir (line 226) | def libdir(self):
    method includedir (line 235) | def includedir(self):
    method system_libs (line 244) | def system_libs(self):
    method system_libs (line 250) | def system_libs(self, value):
    method package_framework (line 254) | def package_framework(self):
    method package_framework (line 258) | def package_framework(self, value):
    method frameworks (line 262) | def frameworks(self):
    method frameworks (line 268) | def frameworks(self, value):
    method frameworkdirs (line 272) | def frameworkdirs(self):
    method frameworkdirs (line 278) | def frameworkdirs(self, value):
    method libs (line 282) | def libs(self):
    method libs (line 288) | def libs(self, value):
    method exe (line 292) | def exe(self):
    method exe (line 296) | def exe(self, value):
    method type (line 300) | def type(self):
    method type (line 304) | def type(self, value):
    method location (line 308) | def location(self):
    method location (line 312) | def location(self, value):
    method link_location (line 316) | def link_location(self):
    method link_location (line 320) | def link_location(self, value):
    method languages (line 324) | def languages(self):
    method languages (line 328) | def languages(self, value):
    method defines (line 332) | def defines(self):
    method defines (line 338) | def defines(self, value):
    method cflags (line 342) | def cflags(self):
    method cflags (line 348) | def cflags(self, value):
    method cxxflags (line 352) | def cxxflags(self):
    method cxxflags (line 358) | def cxxflags(self, value):
    method sharedlinkflags (line 362) | def sharedlinkflags(self):
    method sharedlinkflags (line 368) | def sharedlinkflags(self, value):
    method exelinkflags (line 372) | def exelinkflags(self):
    method exelinkflags (line 378) | def exelinkflags(self, value):
    method objects (line 382) | def objects(self):
    method objects (line 388) | def objects(self, value):
    method sources (line 392) | def sources(self):
    method sources (line 398) | def sources(self, value):
    method sysroot (line 402) | def sysroot(self):
    method sysroot (line 408) | def sysroot(self, value):
    method requires (line 412) | def requires(self):
    method requires (line 418) | def requires(self, value):
    method required_component_names (line 422) | def required_component_names(self):
    method set_property (line 428) | def set_property(self, property_name, value):
    method get_property (line 433) | def get_property(self, property_name, check_type=None):
    method get_init (line 445) | def get_init(self, attribute, default):
    method merge (line 453) | def merge(self, other, overwrite=False):
    method set_relative_base_folder (line 489) | def set_relative_base_folder(self, folder):
    method deploy_base_folder (line 501) | def deploy_base_folder(self, package_folder, deploy_folder):
    method parsed_requires (line 520) | def parsed_requires(self):
    method _auto_deduce_locations (line 523) | def _auto_deduce_locations(self, conanfile, library_name):
    method deduce_locations (line 632) | def deduce_locations(self, conanfile, component_name=""):
  class CppInfo (line 674) | class CppInfo:
    method __init__ (line 676) | def __init__(self, set_defaults=False):
    method __getattr__ (line 681) | def __getattr__(self, attr):
    method __setattr__ (line 685) | def __setattr__(self, attr, value):
    method serialize (line 691) | def serialize(self):
    method deserialize (line 699) | def deserialize(self, content):
    method save (line 706) | def save(self, path):
    method load (line 709) | def load(self, path):
    method has_components (line 714) | def has_components(self):
    method merge (line 717) | def merge(self, other, overwrite=False):
    method set_relative_base_folder (line 733) | def set_relative_base_folder(self, folder):
    method deploy_base_folder (line 739) | def deploy_base_folder(self, package_folder, deploy_folder):
    method get_sorted_components (line 745) | def get_sorted_components(self):
    method aggregated_components (line 770) | def aggregated_components(self):
    method check_component_requires (line 793) | def check_component_requires(self, conanfile):
    method required_components (line 833) | def required_components(self):
    method deduce_full_cpp_info (line 847) | def deduce_full_cpp_info(self, conanfile):

FILE: conan/internal/model/dependencies.py
  class UserRequirementsDict (line 9) | class UserRequirementsDict:
    method __init__ (line 12) | def __init__(self, data, require_filter=None):
    method filter (line 16) | def filter(self, require_filter):
    method __bool__ (line 25) | def __bool__(self):
    method get (line 28) | def get(self, ref, build=None, **kwargs):
    method _get (line 31) | def _get(self, ref, build=None, **kwargs):
    method __getitem__ (line 63) | def __getitem__(self, name):
    method __delitem__ (line 66) | def __delitem__(self, name):
    method items (line 70) | def items(self):
    method values (line 73) | def values(self):
    method __contains__ (line 76) | def __contains__(self, item):
  class ConanFileDependencies (line 88) | class ConanFileDependencies(UserRequirementsDict):
    method from_node (line 91) | def from_node(node):
    method filter (line 110) | def filter(self, require_filter, remove_system=True):
    method transitive_requires (line 123) | def transitive_requires(self, other):
    method topological_sort (line 135) | def topological_sort(self):
    method direct_host (line 154) | def direct_host(self):
    method direct_build (line 158) | def direct_build(self):
    method host (line 162) | def host(self):
    method test (line 166) | def test(self):
    method build (line 172) | def build(self):
  function get_transitive_requires (line 176) | def get_transitive_requires(consumer, dependency):

FILE: conan/internal/model/info.py
  class _VersionRepr (line 10) | class _VersionRepr:
    method __init__ (line 13) | def __init__(self, version):
    method stable (line 16) | def stable(self):
    method major (line 22) | def major(self):
    method minor (line 29) | def minor(self):
    method patch (line 39) | def patch(self):
    method pre (line 50) | def pre(self):
    method build (line 65) | def build(self):
  class RequirementInfo (line 69) | class RequirementInfo:
    method __init__ (line 71) | def __init__(self, ref, package_id, default_package_id_mode):
    method copy (line 86) | def copy(self):
    method pref (line 93) | def pref(self):
    method dumps (line 97) | def dumps(self):
    method unrelated_mode (line 100) | def unrelated_mode(self):
    method semver_mode (line 104) | def semver_mode(self):
    method full_version_mode (line 112) | def full_version_mode(self):
    method patch_mode (line 120) | def patch_mode(self):
    method minor_mode (line 128) | def minor_mode(self):
    method major_mode (line 136) | def major_mode(self):
    method full_package_mode (line 144) | def full_package_mode(self):
    method revision_mode (line 152) | def revision_mode(self):
    method full_mode (line 160) | def full_mode(self):
  class RequirementsInfo (line 172) | class RequirementsInfo(UserRequirementsDict):
    method copy (line 174) | def copy(self):
    method serialize (line 179) | def serialize(self):
    method __bool__ (line 182) | def __bool__(self):
    method clear (line 185) | def clear(self):
    method remove (line 188) | def remove(self, *args):
    method pkg_names (line 193) | def pkg_names(self):
    method dumps (line 196) | def dumps(self):
    method unrelated_mode (line 204) | def unrelated_mode(self):
    method semver_mode (line 207) | def semver_mode(self):
    method patch_mode (line 211) | def patch_mode(self):
    method minor_mode (line 215) | def minor_mode(self):
    method major_mode (line 219) | def major_mode(self):
    method full_version_mode (line 223) | def full_version_mode(self):
    method full_recipe_mode (line 227) | def full_recipe_mode(self):
    method full_package_mode (line 231) | def full_package_mode(self):
    method revision_mode (line 235) | def revision_mode(self):
    method full_mode (line 239) | def full_mode(self):
  class PythonRequiresInfo (line 246) | class PythonRequiresInfo:
    method __init__ (line 248) | def __init__(self, refs, default_package_id_mode):
    method copy (line 257) | def copy(self):
    method serialize (line 262) | def serialize(self):
    method __bool__ (line 265) | def __bool__(self):
    method clear (line 268) | def clear(self):
    method dumps (line 271) | def dumps(self):
    method unrelated_mode (line 274) | def unrelated_mode(self):
    method semver_mode (line 277) | def semver_mode(self):
    method patch_mode (line 281) | def patch_mode(self):
    method minor_mode (line 285) | def minor_mode(self):
    method major_mode (line 289) | def major_mode(self):
    method full_version_mode (line 293) | def full_version_mode(self):
    method full_recipe_mode (line 297) | def full_recipe_mode(self):
    method revision_mode (line 301) | def revision_mode(self):
    method full_mode (line 305) | def full_mode(self):
  function load_binary_info (line 312) | def load_binary_info(text):
  class ConanInfo (line 326) | class ConanInfo:
    method __init__ (line 328) | def __init__(self, settings=None, options=None, reqs_info=None, build_...
    method clone (line 342) | def clone(self):
    method serialize (line 357) | def serialize(self):
    method dumps (line 388) | def dumps(self):
    method summarize_compact (line 434) | def summarize_compact(self):
    method dump_diff (line 446) | def dump_diff(self, compatible):
    method package_id (line 455) | def package_id(self):
    method clear (line 467) | def clear(self):
    method validate (line 477) | def validate(self):

FILE: conan/internal/model/layout.py
  class Infos (line 7) | class Infos:
    method __init__ (line 9) | def __init__(self):
  class PartialLayout (line 15) | class PartialLayout:
    method __init__ (line 16) | def __init__(self):
    method set_relative_base_folder (line 22) | def set_relative_base_folder(self, folder):
  class Layouts (line 28) | class Layouts:
    method __init__ (line 29) | def __init__(self):
  class Folders (line 35) | class Folders:
    method __init__ (line 37) | def __init__(self):
    method set_base_folders (line 63) | def set_base_folders(self, conanfile_folder, output_folder):
    method source_folder (line 87) | def source_folder(self):
    method base_source (line 96) | def base_source(self):
    method set_base_source (line 99) | def set_base_source(self, folder):
    method build_folder (line 103) | def build_folder(self):
    method recipe_metadata_folder (line 111) | def recipe_metadata_folder(self):
    method set_base_recipe_metadata (line 114) | def set_base_recipe_metadata(self, folder):
    method package_metadata_folder (line 118) | def package_metadata_folder(self):
    method set_base_pkg_metadata (line 121) | def set_base_pkg_metadata(self, folder):
    method base_build (line 125) | def base_build(self):
    method set_base_build (line 128) | def set_base_build(self, folder):
    method base_package (line 132) | def base_package(self):
    method set_base_package (line 135) | def set_base_package(self, folder):
    method package_folder (line 139) | def package_folder(self):
    method set_finalize_folder (line 143) | def set_finalize_folder(self, folder):
    method immutable_package_folder (line 148) | def immutable_package_folder(self):
    method generators_folder (line 152) | def generators_folder(self):
    method set_base_generators (line 159) | def set_base_generators(self, folder):
    method base_export (line 163) | def base_export(self):
    method set_base_export (line 166) | def set_base_export(self, folder):
    method base_export_sources (line 170) | def base_export_sources(self):
    method set_base_export_sources (line 173) | def set_base_export_sources(self, folder):

FILE: conan/internal/model/lockfile.py
  class _LockRequires (line 17) | class _LockRequires:
    method __init__ (line 23) | def __init__(self):
    method refs (line 26) | def refs(self):
    method get (line 29) | def get(self, item):
    method serialize (line 32) | def serialize(self):
    method deserialize (line 42) | def deserialize(data):
    method add (line 51) | def add(self, ref, package_ids=None):
    method remove (line 66) | def remove(self, pattern):
    method update (line 83) | def update(self, refs, name):
    method sort (line 98) | def sort(self):
    method merge (line 101) | def merge(self, other):
  class Lockfile (line 115) | class Lockfile:
    method __init__ (line 117) | def __init__(self, deps_graph=None, lock_packages=False):
    method update_lock (line 131) | def update_lock(self, deps_graph, lock_packages=False):
    method load (line 157) | def load(path):
    method loads (line 169) | def loads(content):
    method dumps (line 172) | def dumps(self):
    method save (line 175) | def save(self, path):
    method merge (line 178) | def merge(self, other):
    method add (line 189) | def add(self, requires=None, build_requires=None, python_requires=None...
    method remove (line 212) | def remove(self, requires=None, build_requires=None, python_requires=N...
    method update (line 226) | def update(self, requires=None, build_requires=None, python_requires=N...
    method deserialize (line 233) | def deserialize(data):
    method serialize (line 256) | def serialize(self):
    method resolve_locked (line 275) | def resolve_locked(self, node, require, resolve_prereleases):
    method resolve_overrides (line 296) | def resolve_overrides(self, require, context):
    method resolve_prev (line 313) | def resolve_prev(self, node):
    method _resolve (line 321) | def _resolve(self, require, locked_refs, resolve_prereleases, kind):
    method replace_alias (line 348) | def replace_alias(self, require, alias):
    method resolve_locked_pyrequires (line 356) | def resolve_locked_pyrequires(self, require, resolve_prereleases=None):

FILE: conan/internal/model/manifest.py
  class FileTreeManifest (line 10) | class FileTreeManifest:
    method __init__ (line 12) | def __init__(self, the_time, file_sums):
    method files (line 17) | def files(self):
    method summary_hash (line 21) | def summary_hash(self):
    method loads (line 27) | def loads(text):
    method load (line 40) | def load(folder):
    method __repr__ (line 44) | def __repr__(self):
    method __str__ (line 53) | def __str__(self):
    method save (line 64) | def save(self, folder, filename=CONAN_MANIFEST):
    method report_summary (line 68) | def report_summary(self, output, suffix="Copied"):
    method create (line 89) | def create(cls, folder, exports_sources_folder=None):
    method __eq__ (line 118) | def __eq__(self, other):
    method difference (line 123) | def difference(self, other):

FILE: conan/internal/model/options.py
  function option_not_exist_msg (line 7) | def option_not_exist_msg(option_name, existing_options):
  class _PackageOption (line 16) | class _PackageOption:
    method __init__ (line 17) | def __init__(self, name, value, possible_values=None):
    method dumps (line 28) | def dumps(self, scope=None):
    method copy_conaninfo_option (line 37) | def copy_conaninfo_option(self):
    method __bool__ (line 42) | def __bool__(self):
    method __str__ (line 47) | def __str__(self):
    method __int__ (line 50) | def __int__(self):
    method _check_valid_value (line 53) | def _check_valid_value(self, value):
    method __eq__ (line 66) | def __eq__(self, other):
    method name (line 78) | def name(self):
    method value (line 82) | def value(self):
    method value (line 86) | def value(self, v):
    method validate (line 91) | def validate(self):
  class _PackageOptions (line 99) | class _PackageOptions:
    method __init__ (line 100) | def __init__(self, recipe_options_definition=None):
    method dumps (line 110) | def dumps(self, scope=None):
    method possible_values (line 119) | def possible_values(self):
    method update (line 122) | def update(self, options):
    method clear (line 130) | def clear(self):
    method freeze (line 134) | def freeze(self):
    method __contains__ (line 137) | def __contains__(self, option):
    method get_safe (line 140) | def get_safe(self, field, default=None):
    method rm_safe (line 143) | def rm_safe(self, field):
    method validate (line 147) | def validate(self):
    method copy_conaninfo_options (line 151) | def copy_conaninfo_options(self):
    method _ensure_exists (line 158) | def _ensure_exists(self, field):
    method __getattr__ (line 162) | def __getattr__(self, field):
    method __delattr__ (line 169) | def __delattr__(self, field):
    method __setattr__ (line 177) | def __setattr__(self, field, value):
    method __setitem__ (line 182) | def __setitem__(self, item, value):
    method _set (line 185) | def _set(self, item, value):
    method items (line 201) | def items(self):
    method update_options (line 207) | def update_options(self, other, is_pattern=False):
  class Options (line 218) | class Options:
    method __init__ (line 220) | def __init__(self, options=None, options_values=None):
    method __repr__ (line 256) | def __repr__(self):
    method possible_values (line 260) | def possible_values(self):
    method dumps (line 263) | def dumps(self):
    method loads (line 281) | def loads(text):
    method serialize (line 297) | def serialize(self):
    method clear (line 309) | def clear(self):
    method __contains__ (line 314) | def __contains__(self, option):
    method __getattr__ (line 317) | def __getattr__(self, attr):
    method __setattr__ (line 320) | def __setattr__(self, attr, value):
    method __delattr__ (line 325) | def __delattr__(self, field):
    method __getitem__ (line 328) | def __getitem__(self, item):
    method scope (line 334) | def scope(self, ref):
    method copy_conaninfo_options (line 342) | def copy_conaninfo_options(self):
    method update (line 353) | def update(self, options=None, options_values=None):
    method update_options (line 360) | def update_options(self, other):
    method apply_downstream (line 369) | def apply_downstream(self, down_options, profile_options, own_ref, is_...
    method get_upstream_options (line 394) | def get_upstream_options(self, down_options, own_ref, is_consumer):

FILE: conan/internal/model/pkg_type.py
  class PackageType (line 6) | class PackageType(Enum):
    method __str__ (line 17) | def __str__(self):
    method __eq__ (line 20) | def __eq__(self, other):
    method compute_package_type (line 25) | def compute_package_type(conanfile):

FILE: conan/internal/model/profile.py
  class Profile (line 11) | class Profile:
    method __init__ (line 15) | def __init__(self):
    method __repr__ (line 34) | def __repr__(self):
    method serialize (line 37) | def serialize(self):
    method package_settings_values (line 66) | def package_settings_values(self):
    method process_settings (line 73) | def process_settings(self, cache_settings):
    method dumps (line 78) | def dumps(self):
    method compose_profile (line 131) | def compose_profile(self, other):
    method update_settings (line 172) | def update_settings(self, new_settings):
    method update_package_settings (line 194) | def update_package_settings(self, package_settings):

FILE: conan/internal/model/recipe_ref.py
  function ref_matches (line 4) | def ref_matches(ref, pattern, is_consumer):

FILE: conan/internal/model/requires.py
  class Requirement (line 7) | class Requirement:
    method __init__ (line 10) | def __init__(self, ref, *, headers=None, libs=None, build=False, run=N...
    method files (line 42) | def files(self):  # require needs some files in dependency package
    method _default_if_none (line 46) | def _default_if_none(field, default_value):
    method headers (line 50) | def headers(self):
    method headers (line 54) | def headers(self, value):
    method libs (line 58) | def libs(self):
    method libs (line 62) | def libs(self, value):
    method visible (line 66) | def visible(self):
    method visible (line 70) | def visible(self, value):
    method test (line 74) | def test(self):
    method test (line 78) | def test(self, value):
    method force (line 82) | def force(self):
    method force (line 86) | def force(self, value):
    method override (line 90) | def override(self):
    method override (line 94) | def override(self, value):
    method direct (line 98) | def direct(self):
    method direct (line 102) | def direct(self, value):
    method build (line 106) | def build(self):
    method build (line 110) | def build(self, value):
    method run (line 114) | def run(self):
    method run (line 118) | def run(self, value):
    method transitive_headers (line 122) | def transitive_headers(self):
    method transitive_headers (line 126) | def transitive_headers(self, value):
    method transitive_libs (line 130) | def transitive_libs(self):
    method transitive_libs (line 134) | def transitive_libs(self, value):
    method package_id_mode (line 138) | def package_id_mode(self):
    method package_id_mode (line 142) | def package_id_mode(self, value):
    method __repr__ (line 145) | def __repr__(self):
    method __str__ (line 148) | def __str__(self):
    method serialize (line 154) | def serialize(self):
    method copy_requirement (line 164) | def copy_requirement(self):
    method version_range (line 171) | def version_range(self):
    method alias (line 180) | def alias(self):
    method process_package_type (line 186) | def process_package_type(self, src_node, node):
    method __hash__ (line 220) | def __hash__(self):
    method __eq__ (line 223) | def __eq__(self, other):
    method aggregate (line 235) | def aggregate(self, other):
    method transform_downstream (line 267) | def transform_downstream(self, pkg_type, require, dep_pkg_type):
    method deduce_package_id_mode (line 360) | def deduce_package_id_mode(self, pkg_type, dep_node, non_embed_mode, e...
  class BuildRequirements (line 404) | class BuildRequirements:
    method __init__ (line 406) | def __init__(self, requires):
    method __call__ (line 409) | def __call__(self, ref, package_id_mode=None, visible=False, run=None,...
  class ToolRequirements (line 416) | class ToolRequirements:
    method __init__ (line 418) | def __init__(self, requires):
    method __call__ (line 421) | def __call__(self, ref, package_id_mode=None, visible=False, run=True,...
  class TestRequirements (line 428) | class TestRequirements:
    method __init__ (line 430) | def __init__(self, requires):
    method __call__ (line 433) | def __call__(self, ref, run=None, options=None, force=None):
  class Requirements (line 437) | class Requirements:
    method __init__ (line 440) | def __init__(self, declared=None, declared_build=None, declared_test=N...
    method reindex (line 488) | def reindex(self, require, new_name):
    method values (line 500) | def values(self):
    method __call__ (line 504) | def __call__(self, str_ref, **kwargs):
    method build_require (line 514) | def build_require(self, ref, raise_if_duplicated=True, package_id_mode...
    method test_require (line 537) | def test_require(self, ref, run=None, options=None, force=None):
    method tool_require (line 558) | def tool_require(self, ref, raise_if_duplicated=True, package_id_mode=...
    method __repr__ (line 578) | def __repr__(self):
    method serialize (line 581) | def serialize(self):
    method __len__ (line 584) | def __len__(self):

FILE: conan/internal/model/settings.py
  function bad_value_msg (line 12) | def bad_value_msg(name, value, value_range):
  function undefined_field (line 19) | def undefined_field(name, field, fields=None, value=None):
  class SettingsItem (line 26) | class SettingsItem:
    method __init__ (line 32) | def __init__(self, definition, name, value):
    method new (line 38) | def new(definition, name):
    method __contains__ (line 53) | def __contains__(self, value):
    method copy (line 56) | def copy(self):
    method copy_conaninfo_settings (line 65) | def copy_conaninfo_settings(self):
    method __bool__ (line 86) | def __bool__(self):
    method __str__ (line 91) | def __str__(self):
    method __eq__ (line 94) | def __eq__(self, other):
    method __delattr__ (line 100) | def __delattr__(self, item):
    method _validate (line 107) | def _validate(self, value):
    method _get_child (line 114) | def _get_child(self, item):
    method _get_definition (line 121) | def _get_definition(self):
    method __getattr__ (line 126) | def __getattr__(self, item):
    method __setattr__ (line 131) | def __setattr__(self, item, value):
    method value (line 140) | def value(self):
    method value (line 144) | def value(self, v):
    method values_range (line 148) | def values_range(self):
    method values_list (line 153) | def values_list(self):
    method validate (line 164) | def validate(self):
    method possible_values (line 170) | def possible_values(self):
    method rm_safe (line 178) | def rm_safe(self, name):
  class Settings (line 188) | class Settings:
    method __init__ (line 189) | def __init__(self, definition=None, name="settings", parent_value="set...
    method serialize (line 201) | def serialize(self):
    method get_safe (line 211) | def get_safe(self, name, default=None):
    method rm_safe (line 228) | def rm_safe(self, name):
    method copy (line 245) | def copy(self):
    method copy_conaninfo_settings (line 252) | def copy_conaninfo_settings(self):
    method loads (line 258) | def loads(text):
    method validate (line 264) | def validate(self):
    method fields (line 269) | def fields(self):
    method clear (line 272) | def clear(self):
    method _check_field (line 275) | def _check_field(self, field):
    method __getattr__ (line 279) | def __getattr__(self, field):
    method __delattr__ (line 284) | def __delattr__(self, field):
    method __setattr__ (line 289) | def __setattr__(self, field, value):
    method values_list (line 299) | def values_list(self):
    method items (line 307) | def items(self):
    method update_values (line 310) | def update_values(self, values, raise_undefined=True):
    method constrained (line 329) | def constrained(self, constraint_def):
    method dumps (line 346) | def dumps(self):
    method possible_values (line 360) | def possible_values(self):
  function load_settings_yml (line 369) | def load_settings_yml(home_folder):

FILE: conan/internal/model/version.py
  class _VersionItem (line 8) | class _VersionItem:
    method __init__ (line 12) | def __init__(self, item):
    method value (line 19) | def value(self):
    method __str__ (line 22) | def __str__(self):
    method __add__ (line 25) | def __add__(self, other):
    method __eq__ (line 29) | def __eq__(self, other):
    method __hash__ (line 34) | def __hash__(self):
    method __lt__ (line 37) | def __lt__(self, other):
  class Version (line 50) | class Version:
    method __init__ (line 55) | def __init__(self, value, qualifier=False):
    method bump (line 81) | def bump(self, index):
    method upper_bound (line 105) | def upper_bound(self, index):
    method pre (line 117) | def pre(self):
    method build (line 121) | def build(self):
    method main (line 125) | def main(self):
    method major (line 129) | def major(self):
    method minor (line 136) | def minor(self):
    method patch (line 143) | def patch(self):
    method micro (line 150) | def micro(self):
    method __str__ (line 156) | def __str__(self):
    method __repr__ (line 159) | def __repr__(self):
    method __eq__ (line 162) | def __eq__(self, other):
    method __hash__ (line 171) | def __hash__(self):
    method __lt__ (line 174) | def __lt__(self, other):
    method in_range (line 198) | def in_range(self, version_range: str, resolve_prerelease: Optional[bo...

FILE: conan/internal/model/version_range.py
  class _Condition (line 9) | class _Condition:
    method __init__ (line 10) | def __init__(self, operator, version):
    method __str__ (line 19) | def __str__(self):
    method __repr__ (line 22) | def __repr__(self):
    method __hash__ (line 25) | def __hash__(self):
    method __lt__ (line 28) | def __lt__(self, other):
    method __eq__ (line 59) | def __eq__(self, other):
  class _ConditionSet (line 64) | class _ConditionSet:
    method __init__ (line 66) | def __init__(self, expression, prerelease):
    method _parse_expression (line 79) | def _parse_expression(expression):
    method valid (line 124) | def valid(self, version, conf_resolve_prepreleases):
  class VersionRange (line 155) | class VersionRange:
    method __init__ (line 156) | def __init__(self, expression):
    method __str__ (line 181) | def __str__(self):
    method contains (line 184) | def contains(self, version: Version, resolve_prerelease: Optional[bool]):
    method intersection (line 200) | def intersection(self, other):
    method version (line 233) | def version(self):
  function validate_conan_version (line 237) | def validate_conan_version(required_range):

FILE: conan/internal/model/workspace.py
  class Workspace (line 18) | class Workspace:
    method __init__ (line 23) | def __init__(self, folder, conan_api):
    method __getattribute__ (line 29) | def __getattribute__(self, item):
    method name (line 46) | def name(self):
    method _conan_load_data (line 49) | def _conan_load_data(self):
    method add (line 59) | def add(self, ref, path, output_folder):
    method remove (line 79) | def remove(self, path):
    method clean (line 89) | def clean(self):
    method _conan_rel_path (line 103) | def _conan_rel_path(self, path):
    method packages (line 111) | def packages(self):
    method load_conanfile (line 114) | def load_conanfile(self, conanfile_path):
    method root_conanfile (line 127) | def root_conanfile(self):  # noqa
    method build_order (line 130) | def build_order(self, order):  # noqa

FILE: conan/internal/paths.py
  function _conan_expand_user (line 8) | def _conan_expand_user(path):
  function find_file_walk_up (line 37) | def find_file_walk_up(start, filename, end=None):
  function get_conan_user_home (line 52) | def get_conan_user_home():

FILE: conan/internal/rest/__init__.py
  function response_to_str (line 4) | def response_to_str(response):

FILE: conan/internal/rest/auth_manager.py
  class _RemoteCreds (line 22) | class _RemoteCreds:
    method __init__ (line 23) | def __init__(self, localdb):
    method get (line 26) | def get(self, remote, msg=True):
    method set (line 37) | def set(self, remote, user, token):
  class ConanApiAuthManager (line 43) | class ConanApiAuthManager:
    method __init__ (line 45) | def __init__(self, requester, cache_folder, localdb, global_conf):
    method call_rest_api_method (line 51) | def call_rest_api_method(self, remote, method_name, *args, **kwargs):
    method _get_credentials_and_authenticate (line 72) | def _get_credentials_and_authenticate(self, rest_client, user, remote):
    method _authenticate (line 93) | def _authenticate(self, rest_client, remote, user, password):

FILE: conan/internal/rest/caching_file_downloader.py
  class SourcesCachingDownloader (line 16) | class SourcesCachingDownloader:
    method __init__ (line 20) | def __init__(self, conanfile):
    method download (line 29) | def download(self, urls, file_path,
    method _caching_download (line 44) | def _caching_download(self, urls, file_path,
    method _origin_download (line 88) | def _origin_download(self, urls, cached_path, retry, retry_wait,
    method _backup_download (line 107) | def _backup_download(self, backup_url, backups_urls, sha256, cached_pa...
    method _download_from_urls (line 128) | def _download_from_urls(self, urls, file_path, retry, retry_wait, veri...
  class ConanInternalCacheDownloader (line 155) | class ConanInternalCacheDownloader:
    method __init__ (line 158) | def __init__(self, requester, config, scope=None):
    method download (line 165) | def download(self, url, file_path, auth, verify_ssl, retry, retry_wait...

FILE: conan/internal/rest/client_routes.py
  function _format_ref (line 7) | def _format_ref(url, ref):
  function _format_pref (line 13) | def _format_pref(url, pref):
  class ClientV2Router (line 21) | class ClientV2Router:
    method __init__ (line 24) | def __init__(self, root_url):
    method ping (line 29) | def ping(self):
    method search (line 33) | def search(self, pattern, ignorecase):
    method search_packages (line 45) | def search_packages(self, ref, list_only):
    method common_authenticate (line 55) | def common_authenticate(self):
    method common_check_credentials (line 58) | def common_check_credentials(self):
    method recipe_file (line 61) | def recipe_file(self, ref, path):
    method package_file (line 65) | def package_file(self, pref, path):
    method remove_recipe (line 69) | def remove_recipe(self, ref):
    method recipe_revisions (line 73) | def recipe_revisions(self, ref):
    method remove_package (line 77) | def remove_package(self, pref):
    method remove_all_packages (line 82) | def remove_all_packages(self, ref):
    method recipe_snapshot (line 86) | def recipe_snapshot(self, ref):
    method package_snapshot (line 90) | def package_snapshot(self, pref):
    method package_revisions (line 94) | def package_revisions(self, pref):
    method package_latest (line 98) | def package_latest(self, pref):
    method recipe_latest (line 103) | def recipe_latest(self, ref):
    method _for_package_file (line 108) | def _for_package_file(self, pref, path):
    method _for_package_files (line 114) | def _for_package_files(self, pref):
    method _for_recipe_file (line 120) | def _for_recipe_file(self, ref, path):
    method _for_recipe_files (line 125) | def _for_recipe_files(self, ref):
    method _for_recipe (line 130) | def _for_recipe(self, ref):
    method _for_packages (line 135) | def _for_packages(self, ref):
    method _for_package (line 139) | def _for_package(self, pref):
    method _format_ref_path (line 144) | def _format_ref_path(url, ref, path):
    method _format_pref_path (line 150) | def _format_pref_path(url, pref, path):

FILE: conan/internal/rest/conan_requester.py
  class _SourceURLCredentials (line 32) | class _SourceURLCredentials:
    method __init__ (line 36) | def __init__(self, cache_folder):
    method add_auth (line 61) | def add_auth(self, url, kwargs):
  class ConanRequester (line 95) | class ConanRequester:
    method __init__ (line 97) | def __init__(self, config, cache_folder=None):
    method _get_retries (line 117) | def _get_retries(max_retries):
    method _should_skip_proxy (line 136) | def _should_skip_proxy(self, url):
    method _add_kwargs (line 143) | def _add_kwargs(self, url, kwargs):
    method get (line 168) | def get(self, url, **kwargs):
    method head (line 171) | def head(self, url, **kwargs):
    method put (line 174) | def put(self, url, **kwargs):
    method delete (line 177) | def delete(self, url, **kwargs):
    method post (line 180) | def post(self, url, **kwargs):
    method _call_method (line 183) | def _call_method(self, method, url, **kwargs):
  function _load_auth_source_plugin (line 202) | def _load_auth_source_plugin(auth_source_plugin_path):

FILE: conan/internal/rest/download_cache.py
  class DownloadCache (line 14) | class DownloadCache:
    method __init__ (line 24) | def __init__(self, path: str):
    method source_path (line 27) | def source_path(self, sha256):
    method cached_path (line 30) | def cached_path(self, url):
    method lock (line 39) | def lock(self, lock_id):
    method get_backup_sources_files (line 51) | def get_backup_sources_files(self, excluded_urls, package_list=None, o...
    method update_backup_sources_json (line 114) | def update_backup_sources_json(cached_path, conanfile, urls):

FILE: conan/internal/rest/file_downloader.py
  class FileDownloader (line 14) | class FileDownloader:
    method __init__ (line 16) | def __init__(self, requester, scope=None, source_credentials=None):
    method download (line 21) | def download(self, url, file_path, retry=2, retry_wait=0, verify_ssl=T...
    method check_checksum (line 60) | def check_checksum(file_path, md5, sha1, sha256):
    method _download_file (line 68) | def _download_file(self, url, auth, headers, file_path, verify_ssl, tr...

FILE: conan/internal/rest/file_uploader.py
  class FileUploader (line 13) | class FileUploader:
    method __init__ (line 15) | def __init__(self, requester, verify, config, source_credentials=None):
    method _handle_400_response (line 22) | def _handle_400_response(response, auth):
    method _dedup (line 34) | def _dedup(self, url, headers, auth):
    method exists (line 51) | def exists(self, url, auth):
    method upload (line 56) | def upload(self, url, abs_path, auth=None, dedup=False, retry=None, re...
    method _upload_file (line 84) | def _upload_file(self, url, abs_path, headers, auth, ref):
  class FileProgress (line 99) | class FileProgress(io.FileIO):
    method __init__ (line 100) | def __init__(self, path: str, msg: str = "Uploading", interval: float ...
    method read (line 109) | def read(self, size: int = -1) -> bytes:

FILE: conan/internal/rest/pkg_sign.py
  function _save_manifest (line 16) | def _save_manifest(artifacts_folder, signature_folder):
  function _save_signatures (line 46) | def _save_signatures(signature_folder, signatures):
  function _verify_files_checksums (line 65) | def _verify_files_checksums(signature_folder, files):
  class PkgSignaturesPlugin (line 97) | class PkgSignaturesPlugin:
    method __init__ (line 98) | def __init__(self, cache, home_folder):
    method is_sign_configured (line 109) | def is_sign_configured(self):
    method is_verify_configured (line 113) | def is_verify_configured(self):
    method sign_pkg (line 116) | def sign_pkg(self, ref, files, folder):
    method sign (line 134) | def sign(self, upload_data):
    method verify (line 149) | def verify(self, ref, folder, metadata_folder, files):

FILE: conan/internal/rest/remote_credentials.py
  class RemoteCredentials (line 17) | class RemoteCredentials:
    method __init__ (line 18) | def __init__(self, cache_folder, global_conf):
    method auth (line 37) | def auth(self, remote, user=None):
    method _get_env (line 70) | def _get_env(remote, user):
  function _load_auth_remote_plugin (line 85) | def _load_auth_remote_plugin(auth_remote_plugin_path):

FILE: conan/internal/rest/remote_manager.py
  class RemoteManager (line 26) | class RemoteManager:
    method __init__ (line 31) | def __init__(self, cache, auth_manager, home_folder):
    method _local_folder_remote (line 37) | def _local_folder_remote(self, remote):
    method check_credentials (line 41) | def check_credentials(self, remote, force_auth=False):
    method upload_recipe (line 44) | def upload_recipe(self, ref, files_to_upload, remote):
    method upload_package (line 50) | def upload_package(self, pref, files_to_upload, remote):
    method get_recipe (line 56) | def get_recipe(self, ref, remote, metadata=None):
    method _download_recipe (line 75) | def _download_recipe(self, layout, ref, remote, metadata):
    method get_recipe_metadata (line 107) | def get_recipe_metadata(self, recipe_layout, ref, remote, metadata):
    method get_recipe_sources (line 123) | def get_recipe_sources(self, ref, layout, remote):
    method get_package (line 141) | def get_package(self, pref, remote, metadata=None):
    method get_package_metadata (line 152) | def get_package_metadata(self, pref, remote, metadata):
    method _get_package (line 172) | def _get_package(self, layout, pref, remote, scoped_output, metadata):
    method search_recipes (line 210) | def search_recipes(self, remote, pattern):
    method search_packages (line 220) | def search_packages(self, remote, ref, list_only=False):
    method remove_recipe (line 234) | def remove_recipe(self, ref, remote):
    method remove_packages (line 238) | def remove_packages(self, prefs, remote):
    method remove_all_packages (line 242) | def remove_all_packages(self, ref, remote):
    method authenticate (line 246) | def authenticate(self, remote, name, password):
    method get_recipe_revisions (line 249) | def get_recipe_revisions(self, ref: RecipeReference, remote: Remote) -...
    method get_recipe_revision (line 255) | def get_recipe_revision(self, ref: RecipeReference, remote: Remote) ->...
    method get_latest_recipe_revision (line 262) | def get_latest_recipe_revision(self, ref: RecipeReference, remote: Rem...
    method get_package_revisions (line 268) | def get_package_revisions(self, pref: PkgReference, remote: Remote) ->...
    method get_package_revision (line 275) | def get_package_revision(self, pref: PkgReference, remote: Remote) -> ...
    method get_latest_package_revision (line 281) | def get_latest_package_revision(self, pref: PkgReference, remote: Remote,
    method _call_remote (line 321) | def _call_remote(self, remote, method, *args, **kwargs):
  function uncompress_file (line 345) | def uncompress_file(src_path, dest_folder, scope=None):

FILE: conan/internal/rest/rest_client.py
  class RestApiClient (line 8) | class RestApiClient:
    method __init__ (line 13) | def __init__(self, remote, token, requester, config):
    method _capable (line 21) | def _capable(self, capability):
    method _get_api (line 31) | def _get_api(self):
    method get_recipe (line 43) | def get_recipe(self, ref, dest_folder, metadata, only_metadata):
    method get_recipe_sources (line 46) | def get_recipe_sources(self, ref, dest_folder):
    method get_package (line 49) | def get_package(self, pref, dest_folder, metadata, only_metadata):
    method upload_recipe (line 52) | def upload_recipe(self, ref, files_to_upload):
    method upload_package (line 55) | def upload_package(self, pref, files_to_upload):
    method authenticate (line 58) | def authenticate(self, user, password):
    method check_credentials (line 65) | def check_credentials(self, force_auth=False):
    method search (line 68) | def search(self, pattern=None, ignorecase=True):
    method search_packages (line 71) | def search_packages(self, reference, list_only=False):
    method remove_recipe (line 74) | def remove_recipe(self, ref):
    method remove_all_packages (line 77) | def remove_all_packages(self, ref):
    method remove_packages (line 80) | def remove_packages(self, prefs):
    method get_recipe_revisions_references (line 83) | def get_recipe_revisions_references(self, ref):
    method get_package_revisions_references (line 86) | def get_package_revisions_references(self, pref):
    method get_latest_recipe_reference (line 89) | def get_latest_recipe_reference(self, ref):
    method get_latest_package_reference (line 92) | def get_latest_package_reference(self, pref, headers):
    method get_recipe_revision_reference (line 95) | def get_recipe_revision_reference(self, ref):
    method get_package_revision_reference (line 98) | def get_package_revision_reference(self, pref):

FILE: conan/internal/rest/rest_client_local_recipe_index.py
  function add_local_recipes_index_remote (line 23) | def add_local_recipes_index_remote(home_folder, remote):
  function remove_local_recipes_index_remote (line 46) | def remove_local_recipes_index_remote(home_folder, remote):
  class RestApiClientLocalRecipesIndex (line 55) | class RestApiClientLocalRecipesIndex:
    method __init__ (line 61) | def __init__(self, remote, home_folder):
    method call_method (line 72) | def call_method(self, method_name, *args, **kwargs):
    method get_recipe (line 75) | def get_recipe(self, ref, dest_folder):
    method get_recipe_sources (line 79) | def get_recipe_sources(self, ref, dest_folder):
    method get_package (line 90) | def get_package(self, pref, dest_folder, metadata, only_metadata):
    method upload_recipe (line 94) | def upload_recipe(self, ref, files_to_upload):
    method upload_package (line 97) | def upload_package(self, pref, files_to_upload):
    method authenticate (line 100) | def authenticate(self, user, password):
    method check_credentials (line 104) | def check_credentials(self, force_auth=False):
    method search (line 107) | def search(self, pattern=None):
    method search_packages (line 110) | def search_packages(self, reference, _=False):
    method remove_recipe (line 114) | def remove_recipe(self, ref):
    method remove_all_packages (line 117) | def remove_all_packages(self, ref):
    method remove_packages (line 120) | def remove_packages(self, prefs):
    method get_recipe_revisions_references (line 123) | def get_recipe_revisions_references(self, ref):
    method get_package_revisions_references (line 127) | def get_package_revisions_references(self, pref):
    method get_latest_recipe_reference (line 130) | def get_latest_recipe_reference(self, ref):
    method get_latest_package_reference (line 134) | def get_latest_package_reference(self, pref, headers):
    method get_recipe_revision_reference (line 137) | def get_recipe_revision_reference(self, ref):
    method get_package_revision_reference (line 141) | def get_package_revision_reference(self, pref):
    method _export_recipe (line 145) | def _export_recipe(self, ref):
    method _copy_files (line 173) | def _copy_files(source_folder, dest_folder):
  class _LocalRecipesIndexLayout (line 185) | class _LocalRecipesIndexLayout:
    method __init__ (line 187) | def __init__(self, base_folder):
    method _get_base_folder (line 190) | def _get_base_folder(self, recipe_name):
    method _load_config_yml (line 194) | def _load_config_yml(folder):
    method get_recipes_references (line 200) | def get_recipes_references(self, pattern):
    method get_recipe_folder (line 262) | def get_recipe_folder(self, ref):

FILE: conan/internal/rest/rest_client_v2.py
  class ExceptionThread (line 27) | class ExceptionThread(Thread):
    method run (line 28) | def run(self):
    method join (line 35) | def join(self, timeout=None):
    method raise_errors (line 38) | def raise_errors(self):
  class JWTAuth (line 43) | class JWTAuth(AuthBase):
    method __init__ (line 46) | def __init__(self, token):
    method __call__ (line 49) | def __call__(self, request):
  function _raise_exception_from_error (line 55) | def _raise_exception_from_error(error_code, text):
  function _get_mac_digest (line 64) | def _get_mac_digest():  # To avoid re-hashing all the time the same mac
  class RestV2Methods (line 75) | class RestV2Methods:
    method __init__ (line 77) | def __init__(self, remote_url, token, requester, config, verify_ssl, c...
    method _check_error_response (line 88) | def _check_error_response(ret):
    method authenticate (line 96) | def authenticate(self, user, password):
    method check_credentials (line 109) | def check_credentials(self, force_auth=False):
    method server_capabilities (line 126) | def server_capabilities(self):
    method _get_json (line 143) | def _get_json(self, url, headers=None):
    method upload_recipe (line 167) | def upload_recipe(self, ref, files_to_upload):
    method upload_package (line 173) | def upload_package(self, pref, files_to_upload):
    method search (line 178) | def search(self, pattern=None, ignorecase=True):
    method search_packages (line 195) | def search_packages(self, ref, list_only):
    method _get_file_list_json (line 201) | def _get_file_list_json(self, url):
    method get_recipe (line 208) | def get_recipe(self, ref, dest_folder, metadata, only_metadata):
    method get_recipe_sources (line 232) | def get_recipe_sources(self, ref, dest_folder):
    method _find_compressed_file (line 249) | def _find_compressed_file(ref, server_files, artifact, exists=False):
    method get_package (line 261) | def get_package(self, pref, dest_folder, metadata, only_metadata):
    method _upload_files (line 285) | def _upload_files(self, files, urls, ref):
    method _download_and_save_files (line 307) | def _download_and_save_files(self, urls, dest_folder, files, parallel=...
    method remove_all_packages (line 336) | def remove_all_packages(self, ref):
    method remove_packages (line 357) | def remove_packages(self, prefs):
    method remove_recipe (line 375) | def remove_recipe(self, ref):
    method get_recipe_revision_reference (line 395) | def get_recipe_revision_reference(self, ref):
    method get_package_revision_reference (line 409) | def get_package_revision_reference(self, pref):
    method get_recipe_revisions_references (line 423) | def get_recipe_revisions_references(self, ref):
    method get_latest_recipe_reference (line 435) | def get_latest_recipe_reference(self, ref):
    method get_package_revisions_references (line 443) | def get_package_revisions_references(self, pref):
    method get_latest_package_reference (line 451) | def get_latest_package_reference(self, pref: PkgReference, headers):

FILE: conan/internal/rest/rest_routes.py
  class RestRoutes (line 1) | class RestRoutes:
    method __init__ (line 7) | def __init__(self):
    method recipe (line 11) | def recipe(self):
    method recipe_latest (line 15) | def recipe_latest(self):
    method recipe_revision (line 19) | def recipe_revision(self):
    method recipe_revision_files (line 23) | def recipe_revision_files(self):
    method recipe_revisions (line 27) | def recipe_revisions(self):
    method recipe_revision_file (line 31) | def recipe_revision_file(self):
    method packages_revision (line 35) | def packages_revision(self):
    method package_recipe_revision (line 39) | def package_recipe_revision(self):
    method package_revisions (line 44) | def package_revisions(self):
    method package_revision (line 48) | def package_revision(self):
    method package_revision_files (line 52) | def package_revision_files(self):
    method package_revision_latest (line 56) | def package_revision_latest(self):
    method package_revision_file (line 60) | def package_revision_file(self):
    method common_search_packages (line 64) | def common_search_packages(self):
    method common_search_packages_revision (line 68) | def common_search_packages_revision(self):

FILE: conan/internal/runner/__init__.py
  class RunnerException (line 1) | class RunnerException(Exception):
    method __init__ (line 2) | def __init__(self, *args, **kwargs):

FILE: conan/internal/runner/docker.py
  class _ContainerConfig (line 22) | class _ContainerConfig(NamedTuple):
    class Build (line 23) | class Build(NamedTuple):
    class Run (line 30) | class Run(NamedTuple):
    method load (line 45) | def load(file_path: Optional[str]) -> '_ContainerConfig':
  class DockerRunner (line 79) | class DockerRunner:
    method __init__ (line 80) | def __init__(self, conan_api: ConanAPI, command: str, host_profile: Pr...
    method run (line 109) | def run(self) -> None:
    method _initialize_docker_client (line 131) | def _initialize_docker_client(self):
    method _get_abs_host_path (line 155) | def _get_abs_host_path(self, path: str) -> Path:
    method _build_image (line 161) | def _build_image(self) -> None:
    method _start_container (line 187) | def _start_container(self) -> None:
    method _run_command (line 218) | def _run_command(self, command: str, workdir: Optional[str] = None, ve...
    method _get_volumes_and_docker_path (line 247) | def _get_volumes_and_docker_path(self) -> tuple[dict, str]:
    method _create_runner_environment (line 271) | def _create_runner_environment(self) -> tuple[dict, dict]:
    method _init_container (line 313) | def _init_container(self) -> None:
    method _update_local_cache (line 329) | def _update_local_cache(self) -> None:

FILE: conan/internal/runner/output.py
  class RunnerOutput (line 4) | class RunnerOutput(ConanOutput):
    method __init__ (line 5) | def __init__(self, runner_info: str):
    method _write_message (line 10) | def _write_message(self, msg, fg=None, bg=None, newline=True):

FILE: conan/internal/runner/ssh.py
  function ssh_info (line 12) | def ssh_info(msg, error=False):
  class SSHRunner (line 20) | class SSHRunner:
    method __init__ (line 22) | def __init__(self, conan_api, command, host_profile, build_profile, ar...
    method run (line 59) | def run(self, use_cache=True):
    method ensure_runner_environment (line 91) | def ensure_runner_environment(self):
    method _copy_profiles (line 195) | def _copy_profiles(self):
    method copy_working_conanfile_path (line 213) | def copy_working_conanfile_path(self):
    method _run_command (line 242) | def _run_command(self, command):
    method update_local_cache (line 259) | def update_local_cache(self, json_result):

FILE: conan/internal/runner/wsl.py
  function wsl_info (line 10) | def wsl_info(msg, error=False):
  class WSLRunner (line 19) | class WSLRunner:
    method __init__ (line 20) | def __init__(self, conan_api, command, host_profile, build_profile, ar...
    method run (line 42) | def run(self):
    method ensure_runner_environment (line 73) | def ensure_runner_environment(self):
    method _copy_profiles (line 122) | def _copy_profiles(self):

FILE: conan/internal/source.py
  function _try_get_sources (line 11) | def _try_get_sources(ref, remote_manager, recipe_layout, remote):
  function retrieve_exports_sources (line 24) | def retrieve_exports_sources(remote_manager, recipe_layout, conanfile, r...
  function config_source (line 49) | def config_source(export_source_folder, conanfile, hook_manager):

FILE: conan/internal/subsystems.py
  function command_env_wrapper (line 36) | def command_env_wrapper(conanfile, command, envfiles, envfiles_folder, s...
  function _windows_bash_wrapper (line 61) | def _windows_bash_wrapper(conanfile, command, env, envfiles_folder):
  function _escape_windows_cmd (line 110) | def _escape_windows_cmd(command):
  function deduce_subsystem (line 121) | def deduce_subsystem(conanfile, scope):
  function subsystem_path (line 164) | def subsystem_path(subsystem, path):
  function get_cased_path (line 194) | def get_cased_path(name):

FILE: conan/internal/util/__init__.py
  function cpu_count (line 8) | def cpu_count():

FILE: conan/internal/util/config_parser.py
  class TextINIParse (line 6) | class TextINIParse:
    method __init__ (line 12) | def __init__(self, text, allowed_fields=None, strip_comments=False):
    method line_items (line 42) | def line_items(self):
    method __getattr__ (line 46) | def __getattr__(self, name):

FILE: conan/internal/util/dates.py
  function from_timestamp_to_iso8601 (line 8) | def from_timestamp_to_iso8601(timestamp):
  function _from_iso8601_to_datetime (line 13) | def _from_iso8601_to_datetime(iso_str):
  function from_iso8601_to_timestamp (line 17) | def from_iso8601_to_timestamp(iso_str):
  function timestamp_now (line 23) | def timestamp_now():
  function revision_timestamp_now (line 29) | def revision_timestamp_now():
  function timestamp_to_str (line 33) | def timestamp_to_str(timestamp):

FILE: conan/internal/util/files.py
  function set_dirty (line 19) | def set_dirty(folder):
  function clean_dirty (line 25) | def clean_dirty(folder):
  function is_dirty (line 30) | def is_dirty(folder):
  function remove_if_dirty (line 35) | def remove_if_dirty(item):
  function set_dirty_context_manager (line 52) | def set_dirty_context_manager(folder):
  function chdir (line 59) | def chdir(newdir):
  function md5 (line 68) | def md5(content):
  function md5sum (line 81) | def md5sum(file_path):
  function sha1sum (line 85) | def sha1sum(file_path):
  function sha256sum (line 89) | def sha256sum(file_path):
  function _generic_algorithm_sum (line 93) | def _generic_algorithm_sum(file_path, algorithm_name):
  function check_with_algorithm_sum (line 108) | def check_with_algorithm_sum(algorithm_name, file_path, provided_hash):
  function save (line 119) | def save(path, content, encoding="utf-8"):
  function save_files (line 135) | def save_files(path, files, encoding="utf-8"):
  function load (line 140) | def load(path, encoding="utf-8"):
  function load_user_encoded (line 147) | def load_user_encoded(path):
  function _change_permissions (line 178) | def _change_permissions(func, path, exc_info):
  function rmdir (line 187) | def rmdir(path):
  function renamedir (line 205) | def renamedir(old_path, new_path):
  function rmdir (line 220) | def rmdir(path):
  function renamedir (line 230) | def renamedir(old_path, new_path):
  function remove (line 240) | def remove(path):
  function mkdir (line 252) | def mkdir(path):
  function tar_extract (line 259) | def tar_extract(fileobj, destination_dir):
  function merge_directories (line 269) | def merge_directories(src, dst):
  function gather_files (line 274) | def gather_files(folder):
  function human_size (line 297) | def human_size(size_bytes):
  function copytree_compat (line 325) | def copytree_compat(source_folder, dest_folder):

FILE: conan/internal/util/runners.py
  function pyinstaller_bundle_env_cleaned (line 20) | def pyinstaller_bundle_env_cleaned():
  function pyinstaller_bundle_env_cleaned (line 31) | def pyinstaller_bundle_env_cleaned():
  function conan_run (line 35) | def conan_run(command, stdout=None, stderr=None, cwd=None, shell=True):
  function detect_runner (line 65) | def detect_runner(command):
  function check_output_runner (line 82) | def check_output_runner(cmd, stderr=None, ignore_error=False):

FILE: conan/test/assets/autotools.py
  function gen_makefile_am (line 22) | def gen_makefile_am(**context):
  function gen_configure_ac (line 40) | def gen_configure_ac(**context):
  function gen_makefile (line 45) | def gen_makefile(**context):

FILE: conan/test/assets/cmake.py
  function gen_cmakelists (line 6) | def gen_cmakelists(language="CXX", verify=True, project="project", libna...

FILE: conan/test/assets/genconanfile.py
  class GenConanfile (line 4) | class GenConanfile:
    method __init__ (line 18) | def __init__(self, name=None, version=None):
    method with_package_type (line 54) | def with_package_type(self, value):
    method with_name (line 58) | def with_name(self, name):
    method with_version (line 62) | def with_version(self, version):
    method with_provides (line 66) | def with_provides(self, provides):
    method with_deprecated (line 71) | def with_deprecated(self, deprecated):
    method with_revision_mode (line 75) | def with_revision_mode(self, revision_mode):
    method with_generator (line 79) | def with_generator(self, generator):
    method with_exports_sources (line 84) | def with_exports_sources(self, *exports):
    method with_exports (line 90) | def with_exports(self, *exports):
    method with_require (line 96) | def with_require(self, ref):
    method with_requires (line 102) | def with_requires(self, *refs):
    method _get_full_ref_str (line 108) | def _get_full_ref_str(ref):
    method with_requirement (line 115) | def with_requirement(self, ref, **kwargs):
    method with_build_requires (line 121) | def with_build_requires(self, *refs):
    method with_python_requires (line 128) | def with_python_requires(self, *refs):
    method with_tool_requires (line 135) | def with_tool_requires(self, *refs):
    method with_test_requires (line 142) | def with_test_requires(self, *refs):
    method with_test_reference_as_build_require (line 149) | def with_test_reference_as_build_require(self):
    method with_build_requirement (line 153) | def with_build_requirement(self, ref, **kwargs):
    method with_tool_requirement (line 159) | def with_tool_requirement(self, ref, **kwargs):
    method with_test_requirement (line 165) | def with_test_requirement(self, ref, **kwargs):
    method with_import (line 171) | def with_import(self, *imports):
    method with_setting (line 177) | def with_setting(self, setting):
    method with_settings (line 182) | def with_settings(self, *settings):
    method with_option (line 187) | def with_option(self, option_name, values, default=None):
    method with_default_option (line 194) | def with_default_option(self, option_name, value):
    method with_shared_option (line 199) | def with_shared_option(self, default=False):
    method with_package_file (line 202) | def with_package_file(self, file_name, contents=None, env_var=None):
    method with_package (line 215) | def with_package(self, *lines):
    method with_finalize (line 221) | def with_finalize(self, *lines):
    method with_build_msg (line 227) | def with_build_msg(self, msg):
    method with_package_info (line 232) | def with_package_info(self, cpp_info=None):
    method with_package_id (line 239) | def with_package_id(self, *lines):
    method with_test (line 245) | def with_test(self, *lines):
    method with_cmake_build (line 251) | def with_cmake_build(self):
    method with_class_attribute (line 260) | def with_class_attribute(self, attr):
    method _name_render (line 267) | def _name_render(self):
    method _version_render (line 271) | def _version_render(self):
    method _package_type_render (line 275) | def _package_type_render(self):
    method _provides_render (line 279) | def _provides_render(self):
    method _deprecated_render (line 284) | def _deprecated_render(self):
    method _generators_render (line 288) | def _generators_render(self):
    method _revision_mode_render (line 293) | def _revision_mode_render(self):
    method _settings_render (line 298) | def _settings_render(self):
    method _options_render (line 303) | def _options_render(self):
    method _default_options_render (line 309) | def _default_options_render(self):
    method _build_requires_render (line 315) | def _build_requires_render(self):
    method _python_requires_render (line 321) | def _python_requires_render(self):
    method _tool_requires_render (line 327) | def _tool_requires_render(self):
    method _requires_render (line 333) | def _requires_render(self):
    method _test_requires_render (line 340) | def _test_requires_render(self):
    method _requirements_render (line 346) | def _requirements_render(self):
    method _package_method (line 371) | def _package_method(self):
    method _finalize_method (line 375) | def _finalize_method(self):
    method _package_method_render (line 379) | def _package_method_render(self):
    method _finalize_method_render (line 398) | def _finalize_method_render(self):
    method _build_render (line 409) | def _build_render(self):
    method _package_info_render (line 425) | def _package_info_render(self):
    method _package_id_lines_render (line 443) | def _package_id_lines_render(self):
    method _test_lines_render (line 451) | def _test_lines_render(self):
    method _exports_sources_render (line 469) | def _exports_sources_render(self):
    method _exports_render (line 474) | def _exports_render(self):
    method _class_attributes_render (line 479) | def _class_attributes_render(self):
    method __repr__ (line 483) | def __repr__(self):

FILE: conan/test/assets/premake.py
  function gen_premake5 (line 6) | def gen_premake5(workspace, projects, includedirs=None, configurations=N...

FILE: conan/test/assets/sources.py
  function gen_function_cpp (line 118) | def gen_function_cpp(**context):
  function gen_function_c (line 242) | def gen_function_c(**context):
  function gen_function_h (line 263) | def gen_function_h(**context):

FILE: conan/test/assets/visual_project_files.py
  function get_vs_project_files (line 247) | def get_vs_project_files():

FILE: conan/test/utils/artifactory.py
  class _ArtifactoryServerStore (line 15) | class _ArtifactoryServerStore:
    method __init__ (line 17) | def __init__(self, repo_url, user, password):
    method _auth (line 23) | def _auth(self):
    method _root_recipe (line 27) | def _root_recipe(ref):
    method _ref_index (line 31) | def _ref_index(ref):
    method _pref_index (line 35) | def _pref_index(pref):
    method get_recipe_revisions_references (line 39) | def get_recipe_revisions_references(self, ref):
    method get_package_revisions_references (line 50) | def get_package_revisions_references(self, pref):
    method get_last_revision (line 61) | def get_last_revision(self, ref):
    method get_last_package_revision (line 65) | def get_last_package_revision(self, ref):
  class ArtifactoryServer (line 70) | class ArtifactoryServer:
    method __init__ (line 72) | def __init__(self, *args, **kwargs):
    method _auth (line 81) | def _auth(self):
    method repo_url (line 85) | def repo_url(self):
    method repo_api_url (line 89) | def repo_api_url(self):
    method package_revision_time (line 92) | def package_revision_time(self, pref):
    method create_repository (line 99) | def create_repository(self):
    method package_exists (line 105) | def package_exists(self, pref):
    method recipe_exists (line 117) | def recipe_exists(self, ref):

FILE: conan/test/utils/env.py
  function environment_update (line 6) | def environment_update(env_vars):

FILE: conan/test/utils/file_server.py
  class TestFileServer (line 11) | class TestFileServer:
    method __init__ (line 14) | def __init__(self, store=None):
    method _attach_to (line 23) | def _attach_to(app, store):
    method __repr__ (line 76) | def __repr__(self):

FILE: conan/test/utils/mocks.py
  class RedirectedInputStream (line 12) | class RedirectedInputStream:
    method __init__ (line 18) | def __init__(self, answers: list):
    method readline (line 21) | def readline(self):
  class MockSettings (line 30) | class MockSettings:
    method __init__ (line 32) | def __init__(self, values):
    method get_safe (line 35) | def get_safe(self, value, default=None):
    method __getattr__ (line 38) | def __getattr__(self, name):
    method rm_safe (line 44) | def rm_safe(self, name):
    method possible_values (line 47) | def possible_values(self):
  class ConanFileMock (line 51) | class ConanFileMock(ConanFile):
    method __init__ (line 52) | def __init__(self, settings=None, options=None, runner=None, display_n...
    method run (line 77) | def run(self, *args, **kwargs):
    method commands (line 86) | def commands(self):
  class RedirectedTestOutput (line 95) | class RedirectedTestOutput(StringIO):
    method __init__ (line 96) | def __init__(self):
    method clear (line 100) | def clear(self):
    method __repr__ (line 104) | def __repr__(self):
    method __str__ (line 107) | def __str__(self, *args, **kwargs):
    method __eq__ (line 110) | def __eq__(self, value):
    method __contains__ (line 113) | def __contains__(self, value):

FILE: conan/test/utils/profiles.py
  function create_profile (line 8) | def create_profile(folder, name, settings=None, package_settings=None, o...

FILE: conan/test/utils/scm.py
  function git_create_bare_repo (line 8) | def git_create_bare_repo(folder=None, reponame="repo.git"):
  function create_local_git_repo (line 19) | def create_local_git_repo(files=None, branch=None, submodules=None, fold...
  function git_add_changes_commit (line 55) | def git_add_changes_commit(folder, msg="fix"):

FILE: conan/test/utils/server_launcher.py
  class TestServerLauncher (line 20) | class TestServerLauncher:
    method __init__ (line 22) | def __init__(self, base_path=None, read_permissions=None,
    method start (line 69) | def start(self, daemon=True):
    method stop (line 95) | def stop(self):
    method clean (line 99) | def clean(self):

FILE: conan/test/utils/test_files.py
  function wait_until_removed (line 17) | def wait_until_removed(folder):
  function temp_folder (line 35) | def temp_folder(path_with_spaces=True, create_dir=True):
  function uncompress_packaged_files (line 53) | def uncompress_packaged_files(paths, pref):
  function scan_folder (line 68) | def scan_folder(folder):
  function tgz_with_contents (line 82) | def tgz_with_contents(files, output_path=None):

FILE: conan/test/utils/tools.py
  class TestingResponse (line 84) | class TestingResponse:
    method __init__ (line 91) | def __init__(self, test_response):
    method close (line 94) | def close(self):
    method headers (line 98) | def headers(self):
    method ok (line 102) | def ok(self):
    method raise_for_status (line 105) | def raise_for_status(self):
    method content (line 118) | def content(self):
    method charset (line 122) | def charset(self):
    method charset (line 126) | def charset(self, newcharset):
    method text (line 130) | def text(self):
    method iter_content (line 133) | def iter_content(self, chunk_size=1):  # @UnusedVariable
    method status_code (line 137) | def status_code(self):
    method json (line 140) | def json(self):
  class TestRequester (line 147) | class TestRequester:
    method __init__ (line 151) | def __init__(self, test_servers):
    method _get_url_path (line 157) | def _get_url_path(url):
    method _get_wsgi_app (line 163) | def _get_wsgi_app(self, url):
    method get (line 170) | def get(self, url, **kwargs):
    method put (line 178) | def put(self, url, **kwargs):
    method head (line 186) | def head(self, url, **kwargs):
    method delete (line 194) | def delete(self, url, **kwargs):
    method post (line 202) | def post(self, url, **kwargs):
    method _prepare_call (line 210) | def _prepare_call(self, url, kwargs):
    method _set_auth_headers (line 242) | def _set_auth_headers(kwargs):
    method mount (line 253) | def mount(self, *args, **kwargs):
    method Session (line 256) | def Session(self):
    method codes (line 260) | def codes(self):
  class TestServer (line 264) | class TestServer:
    method __init__ (line 267) | def __init__(self, read_permissions=None,
    method server_store (line 302) | def server_store(self):
    method __repr__ (line 305) | def __repr__(self):
    method __str__ (line 308) | def __str__(self):
    method recipe_exists (line 311) | def recipe_exists(self, ref):
    method package_exists (line 321) | def package_exists(self, pref):
    method latest_recipe (line 331) | def latest_recipe(self, ref):
    method latest_package (line 335) | def latest_package(self, pref):
    method package_revision_time (line 343) | def package_revision_time(self, pref):
  function redirect_output (line 355) | def redirect_output(stderr, stdout=None):
  function redirect_input (line 371) | def redirect_input(target):
  class TestClient (line 380) | class TestClient:
    method __init__ (line 387) | def __init__(self, cache_folder=None, current_folder=None, servers=Non...
    method load (line 441) | def load(self, filename):
    method load_home (line 444) | def load_home(self, filename):
    method open (line 450) | def open(self, filename):
    method open_home (line 463) | def open_home(self, filename):
    method cache (line 467) | def cache(self) -> PkgCache:
    method paths (line 472) | def paths(self):
    method base_folder (line 476) | def base_folder(self):
    method storage_folder (line 481) | def storage_folder(self):
    method update_servers (line 484) | def update_servers(self):
    method update_providers (line 496) | def update_providers(self):
    method chdir (line 506) | def chdir(self, newdir):
    method mocked_servers (line 518) | def mocked_servers(self, requester=None):
    method mocked_io (line 524) | def mocked_io(self):
    method _run_cli (line 533) | def _run_cli(self, command_line, assert_error=False):
    method run (line 564) | def run(self, command_line, assert_error=False, redirect_stdout=None, ...
    method run_command (line 600) | def run_command(self, command, cwd=None, assert_error=False):
    method _handle_cli_result (line 615) | def _handle_cli_result(self, command, assert_error, error, trace=None):
    method save (line 631) | def save(self, files, path=None, clean_first=False):
    method save_home (line 643) | def save_home(self, files):
    method remove_all (line 647) | def remove_all(self):
    method export (line 650) | def export(self, ref, conanfile=GenConanfile(), args=None):
    method alias (line 666) | def alias(self, source, target):
    method init_git_repo (line 681) | def init_git_repo(self, files=None, branch=None, submodules=None, fold...
    method get_latest_package_reference (line 691) | def get_latest_package_reference(self, ref, package_id=None) -> PkgRef...
    method get_latest_pkg_layout (line 706) | def get_latest_pkg_layout(self, pref: PkgReference) -> PackageLayout:
    method get_latest_ref_layout (line 713) | def get_latest_ref_layout(self, ref) -> RecipeLayout:
    method get_default_host_profile (line 720) | def get_default_host_profile(self):
    method get_default_build_profile (line 724) | def get_default_build_profile(self):
    method recipe_exists (line 728) | def recipe_exists(self, ref):
    method package_exists (line 732) | def package_exists(self, pref):
    method assert_listed_require (line 736) | def assert_listed_require(self, requires, build=False, python=False, t...
    method assert_overrides (line 762) | def assert_overrides(self, overrides):
    method assert_listed_binary (line 778) | def assert_listed_binary(self, requires, build=False, test=False, test...
    method created_test_build_folder (line 805) | def created_test_build_folder(self, ref):
    method created_package_id (line 810) | def created_package_id(self, ref):
    method created_package_revision (line 815) | def created_package_revision(self, ref):
    method created_package_reference (line 820) | def created_package_reference(self, ref):
    method exported_recipe_revision (line 825) | def exported_recipe_revision(self):
    method exported_layout (line 828) | def exported_layout(self):
    method created_layout (line 833) | def created_layout(self):
  function get_free_port (line 839) | def get_free_port():
  function zipdir (line 847) | def zipdir(path, zipfilename):

FILE: conan/tools/__init__.py
  function CppInfo (line 4) | def CppInfo(conanfile):

FILE: conan/tools/android/utils.py
  function android_abi (line 4) | def android_abi(conanfile, context="host"):

FILE: conan/tools/apple/apple.py
  function is_apple_os (line 10) | def is_apple_os(conanfile, build_context=False):
  function _to_apple_arch (line 16) | def _to_apple_arch(arch, default=None):
  function to_apple_arch (line 28) | def to_apple_arch(conanfile, default=None):
  function apple_sdk_path (line 34) | def apple_sdk_path(conanfile, is_cross_building=True):
  function get_apple_sdk_fullname (line 47) | def get_apple_sdk_fullname(conanfile):
  function apple_min_version_flag (line 65) | def apple_min_version_flag(conanfile):
  function resolve_apple_flags (line 89) | def resolve_apple_flags(conanfile, is_cross_building=False, is_universal...
  function xcodebuild_deployment_target_key (line 124) | def xcodebuild_deployment_target_key(os_name):
  class XCRun (line 134) | class XCRun:
    method __init__ (line 139) | def __init__(self, conanfile, sdk=None, use_settings_target=False):
    method _invoke (line 158) | def _invoke(self, args):
    method find (line 168) | def find(self, tool):
    method sdk_path (line 173) | def sdk_path(self):
    method sdk_version (line 178) | def sdk_version(self):
    method sdk_platform_path (line 183) | def sdk_platform_path(self):
    method sdk_platform_version (line 188) | def sdk_platform_version(self):
    method cc (line 193) | def cc(self):
    method cxx (line 198) | def cxx(self):
    method ar (line 203) | def ar(self):
    method ranlib (line 208) | def ranlib(self):
    method strip (line 213) | def strip(self):
    method libtool (line 218) | def libtool(self):
    method otool (line 223) | def otool(self):
    method install_name_tool (line 228) | def install_name_tool(self):
  function _get_dylib_install_name (line 233) | def _get_dylib_install_name(otool, path_to_dylib):
  function fix_apple_shared_install_name (line 244) | def fix_apple_shared_install_name(conanfile):
  function apple_extra_flags (line 360) | def apple_extra_flags(conanfile):

FILE: conan/tools/apple/xcodebuild.py
  class XcodeBuild (line 5) | class XcodeBuild:
    method __init__ (line 6) | def __init__(self, conanfile):
    method _verbosity (line 16) | def _verbosity(self):
    method _sdkroot (line 23) | def _sdkroot(self):
    method build (line 32) | def build(self, xcodeproj, target=None, configuration=None, cli_args=N...

FILE: conan/tools/apple/xcodedeps.py
  function _format_name (line 23) | def _format_name(name):
  function _xcconfig_settings_filename (line 27) | def _xcconfig_settings_filename(settings, configuration):
  function _xcconfig_conditional (line 38) | def _xcconfig_conditional(settings, configuration):
  function _add_includes_to_file_or_create (line 49) | def _add_includes_to_file_or_create(filename, template, files_to_include):
  class XcodeDeps (line 62) | class XcodeDeps:
    method __init__ (line 108) | def __init__(self, conanfile):
    method generate (line 117) | def generate(self):
    method _conf_xconfig_file (line 127) | def _conf_xconfig_file(self, require, pkg_name, comp_name, package_fol...
    method _dep_xconfig_file (line 175) | def _dep_xconfig_file(self, pkg_name, comp_name, name_general, dep_xco...
    method _all_xconfig_file (line 202) | def _all_xconfig_file(self, deps, content):
    method _pkg_xconfig_file (line 214) | def _pkg_xconfig_file(self, components):
    method _global_xconfig_content (line 225) | def _global_xconfig_content(self):
    method get_content_for_component (line 230) | def get_content_for_component(self, require, pkg_name, component_name,...
    method _content (line 245) | def _content(self):

FILE: conan/tools/apple/xcodetoolchain.py
  class XcodeToolchain (line 10) | class XcodeToolchain:
    method __init__ (line 35) | def __init__(self, conanfile):
    method generate (line 49) | def generate(self):
    method _cppstd (line 58) | def _cppstd(self):
    method _apple_deployment_target (line 66) | def _apple_deployment_target(self):
    method _clang_cxx_library (line 73) | def _clang_cxx_library(self):
    method _clang_cxx_language_standard (line 79) | def _clang_cxx_language_standard(self):
    method _vars_xconfig_filename (line 84) | def _vars_xconfig_filename(self):
    method _vars_xconfig_content (line 90) | def _vars_xconfig_content(self):
    method _agreggated_xconfig_content (line 97) | def _agreggated_xconfig_content(self):
    method _global_xconfig_content (line 103) | def _global_xconfig_content(self):
    method _agreggated_xconfig_filename (line 112) | def _agreggated_xconfig_filename(self):
    method _check_if_extra_flags (line 116) | def _check_if_extra_flags(self):
    method _flags_xcconfig_content (line 120) | def _flags_xcconfig_content(self):
    method _flags_xcconfig_filename (line 129) | def _flags_xcconfig_filename(self):

FILE: conan/tools/build/__init__.py
  function use_win_mingw (line 21) | def use_win_mingw(conanfile):
  function cmd_args_to_string (line 33) | def cmd_args_to_string(args):
  function _unix_cmd_args_to_string (line 42) | def _unix_cmd_args_to_string(args):
  function _windows_cmd_args_to_string (line 47) | def _windows_cmd_args_to_string(args):
  function load_toolchain_args (line 67) | def load_toolchain_args(generators_folder=None, namespace=None):
  function save_toolchain_args (line 92) | def save_toolchain_args(content, generators_folder=None, namespace=None):

FILE: conan/tools/build/compiler.py
  function check_min_compiler_version (line 5) | def check_min_compiler_version(conanfile, compiler_restrictions):

FILE: conan/tools/build/cppstd.py
  function check_min_cppstd (line 8) | def check_min_cppstd(conanfile, cppstd, gnu_extensions=False):
  function check_max_cppstd (line 23) | def check_max_cppstd(conanfile, cppstd, gnu_extensions=False):
  function valid_min_cppstd (line 38) | def valid_min_cppstd(conanfile, cppstd, gnu_extensions=False):
  function valid_max_cppstd (line 53) | def valid_max_cppstd(conanfile, cppstd, gnu_extensions=False):
  function default_cppstd (line 68) | def default_cppstd(conanfile, compiler=None, compiler_version=None):
  function supported_cppstd (line 85) | def supported_cppstd(conanfile, compiler=None, compiler_version=None):
  function _check_cppstd (line 114) | def _check_cppstd(conanfile, cppstd, comparator, gnu_extensions):
  function _apple_clang_supported_cppstd (line 154) | def _apple_clang_supported_cppstd(version):
  function _gcc_supported_cppstd (line 178) | def _gcc_supported_cppstd(version):
  function _msvc_supported_cppstd (line 203) | def _msvc_supported_cppstd(version):
  function _clang_supported_cppstd (line 223) | def _clang_supported_cppstd(version):
  function _mcst_lcc_supported_cppstd (line 245) | def _mcst_lcc_supported_cppstd(version):
  function _qcc_supported_cppstd (line 262) | def _qcc_supported_cppstd(version):
  function _emcc_supported_cppstd (line 275) | def _emcc_supported_cppstd(version):

FILE: conan/tools/build/cpu.py
  function build_jobs (line 4) | def build_jobs(conanfile):

FILE: conan/tools/build/cross_building.py
  function cross_building (line 2) | def cross_building(conanfile=None, skip_x64_x86=False):
  function can_run (line 36) | def can_run(conanfile):

FILE: conan/tools/build/cstd.py
  function check_min_cstd (line 8) | def check_min_cstd(conanfile, cstd, gnu_extensions=False):
  function check_max_cstd (line 28) | def check_max_cstd(conanfile, cstd, gnu_extensions=False):
  function valid_min_cstd (line 48) | def valid_min_cstd(conanfile, cstd, gnu_extensions=False):
  function valid_max_cstd (line 63) | def valid_max_cstd(conanfile, cstd, gnu_extensions=False):
  function default_cstd (line 78) | def default_cstd(conanfile, compiler=None, compiler_version=None):
  function supported_cstd (line 95) | def supported_cstd(conanfile, compiler=None, compiler_version=None):
  function _check_cstd (line 122) | def _check_cstd(conanfile, cstd, comparator, gnu_extensions):
  function _apple_clang_supported_cstd (line 167) | def _apple_clang_supported_cstd(version):
  function _gcc_supported_cstd (line 172) | def _gcc_supported_cstd(version):
  function _msvc_supported_cstd (line 182) | def _msvc_supported_cstd(version):
  function _clang_supported_cstd (line 188) | def _clang_supported_cstd(version):
  function _emcc_supported_cstd (line 198) | def _emcc_supported_cstd(version):

FILE: conan/tools/build/flags.py
  function disable_flag (line 5) | def disable_flag(conanfile, flag):
  function architecture_flag (line 17) | def architecture_flag(conanfile):
  function architecture_link_flag (line 90) | def architecture_link_flag(conanfile):
  function libcxx_flags (line 106) | def libcxx_flags(conanfile):
  function build_type_link_flags (line 141) | def build_type_link_flags(settings):
  function build_type_flags (line 160) | def build_type_flags(conanfile):
  function threads_flags (line 220) | def threads_flags(conanfile):
  function llvm_clang_front (line 236) | def llvm_clang_front(conanfile):
  function cppstd_flag (line 248) | def cppstd_flag(conanfile) -> str:
  function cppstd_msvc_flag (line 286) | def cppstd_msvc_flag(visual_version, cppstd):
  function _cppstd_msvc (line 308) | def _cppstd_msvc(visual_version, cppstd):
  function _cppstd_apple_clang (line 313) | def _cppstd_apple_clang(clang_version, cppstd):
  function _cppstd_clang (line 371) | def _cppstd_clang(clang_version, cppstd):
  function _cppstd_gcc (line 434) | def _cppstd_gcc(gcc_version, cppstd):
  function _cppstd_mcst_lcc (line 491) | def _cppstd_mcst_lcc(mcst_lcc_version, cppstd):
  function _cppstd_intel_cc (line 518) | def _cppstd_intel_cc(_, cppstd):
  function cstd_flag (line 551) | def cstd_flag(conanfile) -> str:
  function _cstd_gcc (line 585) | def _cstd_gcc(gcc_version, cstd):
  function _cstd_clang (line 594) | def _cstd_clang(gcc_version, cstd):
  function _cstd_apple_clang (line 603) | def _cstd_apple_clang(gcc_version, cstd):
  function cstd_msvc_flag (line 612) | def cstd_msvc_flag(visual_version, cstd):
  function _cstd_msvc (line 622) | def _cstd_msvc(visual_version, cstd):

FILE: conan/tools/build/stdcpp_library.py
  function stdcpp_library (line 2) | def stdcpp_library(conanfile):

FILE: conan/tools/cmake/__init__.py
  function CMakeDeps (line 7) | def CMakeDeps(conanfile):  # noqa

FILE: conan/tools/cmake/cmake.py
  function _cmake_cmd_line_args (line 11) | def _cmake_cmd_line_args(conanfile, generator):
  class CMake (line 39) | class CMake:
    method __init__ (line 42) | def __init__(self, conanfile):
    method is_multi_configuration (line 60) | def is_multi_configuration(self):
    method configure (line 63) | def configure(self, variables=None, build_script_folder=None, cli_args...
    method _config_arg (line 134) | def _config_arg(self, build_type):
    method _build (line 152) | def _build(self, build_type=None, target=None, cli_args=None, build_to...
    method build (line 181) | def build(self, build_type=None, target=None, cli_args=None, build_too...
    method install (line 206) | def install(self, build_type=None, component=None, cli_args=None, stdo...
    method test (line 261) | def test(self, build_type=None, target=None, cli_args=None, build_tool...
    method ctest (line 290) | def ctest(self, cli_args=None, env="", stdout=None, stderr=None):
    method _compilation_verbosity_arg (line 332) | def _compilation_verbosity_arg(self):
    method _cmake_log_levels_args (line 342) | def _cmake_log_levels_args(self):

FILE: conan/tools/cmake/cmakeconfigdeps/cmakeconfigdeps.py
  class CMakeConfigDeps (line 26) | class CMakeConfigDeps:
    method __init__ (line 28) | def __init__(self, conanfile):
    method build_context_activated (line 45) | def build_context_activated(self):
    method build_context_activated (line 49) | def build_context_activated(self, value):
    method build_context_build_modules (line 55) | def build_context_build_modules(self):
    method build_context_build_modules (line 59) | def build_context_build_modules(self, value):
    method build_context_suffix (line 65) | def build_context_suffix(self):
    method build_context_suffix (line 69) | def build_context_suffix(self, value):
    method check_components_exist (line 75) | def check_components_exist(self):
    method check_components_exist (line 79) | def check_components_exist(self, value):
    method generate (line 84) | def generate(self):
    method _content (line 98) | def _content(self):
    method _print_help (line 135) | def _print_help(self, direct_deps):
    method set_property (line 150) | def set_property(self, dep, prop, value, build_context=False):
    method get_property (line 166) | def get_property(self, prop, dep, comp_name=None, check_type=None):
    method get_cmake_filename (line 189) | def get_cmake_filename(self, dep):
    method _get_find_mode (line 198) | def _get_find_mode(self, dep):
    method get_transitive_requires (line 204) | def get_transitive_requires(self, conanfile):
  function _join_paths (line 210) | def _join_paths(conanfile, paths):
  class _PathGenerator (line 216) | class _PathGenerator:
    method __init__ (line 219) | def __init__(self, cmakedeps, conanfile):
    method _get_cmake_paths (line 223) | def _get_cmake_paths(self, requirements, dirs_name):
    method generate (line 245) | def generate(self):
    method _get_host_runtime_dirs (line 384) | def _get_host_runtime_dirs(self):

FILE: conan/tools/cmake/cmakeconfigdeps/config.py
  class ConfigTemplate2 (line 9) | class ConfigTemplate2:
    method __init__ (line 14) | def __init__(self, cmakedeps, require, conanfile, full_cpp_info):
    method content (line 20) | def content(self):
    method filename (line 26) | def filename(self):
    method _context (line 31) | def _context(self):
    method _get_legacy_vars (line 85) | def _get_legacy_vars(self):
    method _template (line 112) | def _template(self):

FILE: conan/tools/cmake/cmakeconfigdeps/config_version.py
  class ConfigVersionTemplate2 (line 9) | class ConfigVersionTemplate2:
    method __init__ (line 13) | def __init__(self, cmakedeps, conanfile):
    method content (line 17) | def content(self):
    method filename (line 23) | def filename(self):
    method _context (line 28) | def _context(self):
    method _template (line 40) | def _template(self):

FILE: conan/tools/cmake/cmakeconfigdeps/target_configuration.py
  class TargetConfigurationTemplate2 (line 14) | class TargetConfigurationTemplate2:
    method __init__ (line 18) | def __init__(self, cmakedeps, conanfile, require, full_cpp_info):
    method content (line 24) | def content(self):
    method filename (line 37) | def filename(self):
    method _requires (line 45) | def _requires(self, info, components):
    method _context (line 123) | def _context(self):
    method _get_libs (line 171) | def _get_libs(self, cpp_info, pkg_name, pkg_folder, pkg_folder_var) ->...
    method _get_cmake_lib (line 194) | def _get_cmake_lib(self, info, components, pkg_folder, pkg_folder_var,...
    method _get_aliases (line 259) | def _get_aliases(self, comp_name=None):
    method _add_root_lib_target (line 264) | def _add_root_lib_target(self, libs, pkg_name, cpp_info):
    method _get_exes (line 300) | def _get_exes(self, cpp_info, pkg_name, pkg_folder, pkg_folder_var):
    method _get_dependencies (line 320) | def _get_dependencies(self):
    method _path (line 333) | def _path(p, pkg_folder, pkg_folder_var):
    method _template (line 346) | def _template(self):

FILE: conan/tools/cmake/cmakeconfigdeps/targets.py
  class TargetsTemplate2 (line 7) | class TargetsTemplate2:
    method __init__ (line 11) | def __init__(self, cmakedeps, conanfile):
    method content (line 15) | def content(self):
    method filename (line 21) | def filename(self):
    method _context (line 26) | def _context(self):
    method _template (line 33) | def _template(self):

FILE: conan/tools/cmake/cmakedeps/cmakedeps.py
  class CMakeDeps (line 21) | class CMakeDeps:
    method __init__ (line 23) | def __init__(self, conanfile):
    method generate (line 40) | def generate(self):
    method content (line 53) | def content(self):
    method _generate_files (line 115) | def _generate_files(self, require, dep, ret, find_module_mode):
    method set_property (line 135) | def set_property(self, dep, prop, value, build_context=False):
    method get_property (line 154) | def get_property(self, prop, dep, comp_name=None, check_type=None):
    method get_cmake_package_name (line 169) | def get_cmake_package_name(self, dep, module_mode=None):
    method get_find_mode (line 182) | def get_find_mode(self, dep):
    method generate_aggregator (line 192) | def generate_aggregator(self):
    method get_transitive_requires (line 226) | def get_transitive_requires(self, conanfile):

FILE: conan/tools/cmake/cmakedeps/templates/__init__.py
  class CMakeDepsFileTemplate (line 7) | class CMakeDepsFileTemplate:
    method __init__ (line 9) | def __init__(self, cmakedeps, require, conanfile, generating_module=Fa...
    method pkg_name (line 16) | def pkg_name(self):
    method root_target_name (line 20) | def root_target_name(self):
    method file_name (line 24) | def file_name(self):
    method suffix (line 28) | def suffix(self):
    method render (line 33) | def render(self):
    method context (line 48) | def context(self):
    method template (line 52) | def template(self):
    method filename (line 56) | def filename(self):
    method configuration (line 60) | def configuration(self):
    method arch (line 64) | def arch(self):
    method config_suffix (line 68) | def config_suffix(self):
    method _get_target_default_name (line 72) | def _get_target_default_name(req, component_name="", suffix=""):
    method get_root_target_name (line 76) | def get_root_target_name(self, req, suffix=""):
    method get_component_alias (line 84) | def get_component_alias(self, req, comp_name):

FILE: conan/tools/cmake/cmakedeps/templates/config.py
  class ConfigTemplate (line 13) | class ConfigTemplate(CMakeDepsFileTemplate):
    method filename (line 16) | def filename(self):
    method additional_variables_prefixes (line 26) | def additional_variables_prefixes(self):
    method parsed_extra_variables (line 32) | def parsed_extra_variables(self):
    method context (line 49) | def context(self):
    method template (line 63) | def template(self):

FILE: conan/tools/cmake/cmakedeps/templates/config_version.py
  class ConfigVersionTemplate (line 12) | class ConfigVersionTemplate(CMakeDepsFileTemplate):
    method filename (line 15) | def filename(self):
    method context (line 22) | def context(self):
    method template (line 34) | def template(self):

FILE: conan/tools/cmake/cmakedeps/templates/macros.py
  class MacrosTemplate (line 12) | class MacrosTemplate(CMakeDepsFileTemplate):
    method __init__ (line 15) | def __init__(self):
    method filename (line 19) | def filename(self):
    method context (l
Condensed preview — 1135 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (8,176K chars).
[
  {
    "path": ".ci/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": ".ci/bump_dev_version.py",
    "chars": 670,
    "preview": "import os\nimport time\n\n\ndef replace_in_file(file_path, search, replace):\n    with open(file_path, \"r\") as handle:\n      "
  },
  {
    "path": ".ci/docker/conan-tests",
    "chars": 8182,
    "preview": "FROM ubuntu:24.04\n\nLABEL maintainer=\"Conan.io <info@conan.io>\"\n\nENV DEBIAN_FRONTEND=noninteractive\n\nENV PY37=3.7.9 \\\n   "
  },
  {
    "path": ".editorconfig",
    "chars": 257,
    "preview": "# https://editorconfig.org/\n\nroot = true\n\n[*]\nindent_style = space\nindent_size = 4\ninsert_final_newline = true\ntrim_trai"
  },
  {
    "path": ".github/CONTRIBUTING.md",
    "chars": 6674,
    "preview": "Contributing to Conan\n=====================\n\nThe following summarizes the process for contributing to the Conan project."
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug.yml",
    "chars": 756,
    "preview": "name: Bug Report\ndescription: Report a bug, something does not work as it's supposed to\ntitle: '[bug]'\nbody:\n  - type: t"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.yml",
    "chars": 874,
    "preview": "name: Feature Request\ndescription: Request a new feature or suggest a change\ntitle: '[feature] SHORT DESCRIPTION'\nbody:\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/question.yml",
    "chars": 848,
    "preview": "name: Question\ndescription: If something needs clarification\ntitle: '[question] SHORT DESCRIPTION'\nbody:\n  - type: markd"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "chars": 559,
    "preview": "Changelog: (Feature | Fix | Bugfix): Describe here your pull request\nDocs: https://github.com/conan-io/docs/pull/XXXX\n\n-"
  },
  {
    "path": ".github/actions/test-coverage/action.yml",
    "chars": 1533,
    "preview": "\ndescription: 'Run tests enabling coverage in certain conditions and upload coverage artifacts for later process'\n\ninput"
  },
  {
    "path": ".github/workflows/build-binaries.yml",
    "chars": 2476,
    "preview": "name: Build Conan Binaries\nrun-name: Build Conan Binaries - v${{ inputs.conan_version }} - ${{ inputs.target_sha }} - ${"
  },
  {
    "path": ".github/workflows/linux-tests.yml",
    "chars": 4737,
    "preview": "name: Linux tests\n\non:\n  workflow_call:\n    inputs:\n      python-versions:\n        required: true\n        type: string\n "
  },
  {
    "path": ".github/workflows/main.yml",
    "chars": 5889,
    "preview": "name: Main Workflow\non:\n  push:\n    branches:\n      - develop2\n      - release/*\n      - '*'\n  pull_request:\n    branche"
  },
  {
    "path": ".github/workflows/osx-tests.yml",
    "chars": 6840,
    "preview": "name: OSX Tests\n\non:\n  workflow_call:\n    inputs:\n      python-versions:\n        required: true\n        type: string\n   "
  },
  {
    "path": ".github/workflows/win-tests.yml",
    "chars": 10914,
    "preview": "name: Windows Tests\n\non:\n  workflow_call:\n    inputs:\n      python-versions:\n        required: true\n        type: string"
  },
  {
    "path": ".gitignore",
    "chars": 1373,
    "preview": "# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n\n# C extensions\n*.so\n\n# Distribution / packaging\n.Python\n"
  },
  {
    "path": "LICENSE.md",
    "chars": 1084,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2019 JFrog LTD\n\n\n\nPermission is hereby granted, free of charge, to any person obtai"
  },
  {
    "path": "MANIFEST.in",
    "chars": 18,
    "preview": "include LICENSE.md"
  },
  {
    "path": "README.md",
    "chars": 6208,
    "preview": "<picture>\n  <!-- These are also used for https://github.com/conan-io/.github/blob/main/profile/README.md -->\n  <source m"
  },
  {
    "path": "codecov.yml",
    "chars": 399,
    "preview": "comment: false # Disable codecov PR comments -> leave only the checks\ncoverage:\n    status:\n        project:\n           "
  },
  {
    "path": "conan/__init__.py",
    "chars": 221,
    "preview": "from conan.internal.model.conan_file import ConanFile\nfrom conan.internal.model.workspace import Workspace\nfrom conan.in"
  },
  {
    "path": "conan/api/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "conan/api/conan_api.py",
    "chars": 8287,
    "preview": "import os\nimport sys\n\nfrom conan.api.output import init_colorama\nfrom conan.api.subapi.audit import AuditAPI\nfrom conan."
  },
  {
    "path": "conan/api/input.py",
    "chars": 3227,
    "preview": "import getpass\nimport sys\n\nfrom conan.errors import ConanException\n\n\nclass UserInput:\n    \"\"\"Class to interact with the "
  },
  {
    "path": "conan/api/model/__init__.py",
    "chars": 204,
    "preview": "from conan.api.model.remote import Remote, LOCAL_RECIPES_INDEX\nfrom conan.api.model.refs import RecipeReference, PkgRefe"
  },
  {
    "path": "conan/api/model/list.py",
    "chars": 21437,
    "preview": "import copy\nimport fnmatch\nimport json\nimport os\nfrom json import JSONDecodeError\nfrom typing import Iterable, Tuple, Di"
  },
  {
    "path": "conan/api/model/refs.py",
    "chars": 12820,
    "preview": "\nimport fnmatch\nimport re\nfrom functools import total_ordering\n\nfrom conan.errors import ConanException\nfrom conan.inter"
  },
  {
    "path": "conan/api/model/remote.py",
    "chars": 2935,
    "preview": "LOCAL_RECIPES_INDEX = \"local-recipes-index\"\n\n\nclass Remote:\n    \"\"\"\n    The ``Remote`` class represents a remote registr"
  },
  {
    "path": "conan/api/output.py",
    "chars": 15678,
    "preview": "import fnmatch\nimport os\nimport sys\nimport time\nfrom threading import Lock\n\nimport colorama\nfrom colorama import Fore, S"
  },
  {
    "path": "conan/api/subapi/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "conan/api/subapi/audit.py",
    "chars": 6068,
    "preview": "import binascii\nimport json\nimport os\nimport base64\n\nfrom conan.internal.api.audit.providers import ConanCenterProvider,"
  },
  {
    "path": "conan/api/subapi/cache.py",
    "chars": 27298,
    "preview": "import json\nimport os\nimport shutil\nimport tarfile\nimport tempfile\n\nfrom conan.api.model import PackagesList\nfrom conan."
  },
  {
    "path": "conan/api/subapi/command.py",
    "chars": 2578,
    "preview": "import os\nimport shlex\n\nfrom conan.api.output import ConanOutput\nfrom conan.errors import ConanException\n\n\nclass Command"
  },
  {
    "path": "conan/api/subapi/config.py",
    "chars": 17550,
    "preview": "import os\n\nfrom conan.api.output import ConanOutput\n\nfrom conan.internal.cache.home_paths import HomePaths\nfrom conan.in"
  },
  {
    "path": "conan/api/subapi/download.py",
    "chars": 5336,
    "preview": "import time\nfrom multiprocessing.pool import ThreadPool\nfrom typing import Optional, List\n\nfrom conan.api.model import R"
  },
  {
    "path": "conan/api/subapi/export.py",
    "chars": 8524,
    "preview": "import os\nfrom typing import List, Tuple\n\nfrom conan import ConanFile\nfrom conan.api.output import ConanOutput\nfrom cona"
  },
  {
    "path": "conan/api/subapi/graph.py",
    "chars": 14596,
    "preview": "from conan.api.output import ConanOutput\nfrom conan.internal.conan_app import ConanApp\nfrom conan.internal.model.recipe_"
  },
  {
    "path": "conan/api/subapi/install.py",
    "chars": 8542,
    "preview": "import os\nfrom typing import List\n\nfrom conan.api.model import Remote\nfrom conan.internal.api.install.generators import "
  },
  {
    "path": "conan/api/subapi/list.py",
    "chars": 26743,
    "preview": "import os\nfrom collections import OrderedDict\nfrom typing import Dict\n\nfrom conan.api.model import PackagesList, MultiPa"
  },
  {
    "path": "conan/api/subapi/local.py",
    "chars": 10207,
    "preview": "import os\nfrom typing import List\n\nfrom conan.cli import make_abs_path\nfrom conan.internal.conan_app import ConanApp\nfro"
  },
  {
    "path": "conan/api/subapi/lockfile.py",
    "chars": 5204,
    "preview": "import os\n\nfrom conan.api.output import ConanOutput\nfrom conan.cli import make_abs_path\nfrom conan.internal.graph.graph "
  },
  {
    "path": "conan/api/subapi/new.py",
    "chars": 10585,
    "preview": "import fnmatch\nimport os\nimport shutil\n\nfrom jinja2 import Template, StrictUndefined, UndefinedError, Environment, meta\n"
  },
  {
    "path": "conan/api/subapi/profiles.py",
    "chars": 8641,
    "preview": "import os\n\nfrom conan.api.output import ConanOutput\nfrom conan.internal.cache.home_paths import HomePaths\n\nfrom conan.in"
  },
  {
    "path": "conan/api/subapi/remotes.py",
    "chars": 15382,
    "preview": "import fnmatch\nimport json\nimport os\nfrom collections import OrderedDict\nfrom urllib.parse import urlparse\n\nfrom conan.a"
  },
  {
    "path": "conan/api/subapi/remove.py",
    "chars": 2231,
    "preview": "from typing import Optional\n\nfrom conan.api.model import Remote\nfrom conan.api.model import PkgReference\nfrom conan.api."
  },
  {
    "path": "conan/api/subapi/report.py",
    "chars": 7431,
    "preview": "import base64\nimport os\nfrom io import StringIO\n\nfrom conan.api.output import ConanOutput\nfrom conan.errors import Conan"
  },
  {
    "path": "conan/api/subapi/upload.py",
    "chars": 10511,
    "preview": "import os\nimport time\nfrom multiprocessing.pool import ThreadPool\nfrom typing import List\n\nfrom conan.api.model import P"
  },
  {
    "path": "conan/api/subapi/workspace.py",
    "chars": 20673,
    "preview": "import inspect\nimport os\nimport shutil\nimport textwrap\nfrom pathlib import Path\n\nfrom conan import ConanFile\nfrom conan."
  },
  {
    "path": "conan/cli/__init__.py",
    "chars": 397,
    "preview": "import os\n\n\ndef make_abs_path(path, cwd=None):\n    \"\"\"convert 'path' to absolute if necessary (could be already absolute"
  },
  {
    "path": "conan/cli/args.py",
    "chars": 8254,
    "preview": "import argparse\n\nfrom conan.cli.command import OnceArgument\nfrom conan.errors import ConanException\n\n_help_build_policie"
  },
  {
    "path": "conan/cli/cli.py",
    "chars": 13116,
    "preview": "import importlib\nimport os\nimport pkgutil\nimport re\nimport signal\nimport sys\nimport textwrap\nimport traceback\nfrom colle"
  },
  {
    "path": "conan/cli/command.py",
    "chars": 10082,
    "preview": "import argparse\nimport os\nimport textwrap\nfrom contextlib import redirect_stdout\n\nfrom conan.api.output import ConanOutp"
  },
  {
    "path": "conan/cli/commands/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "conan/cli/commands/audit.py",
    "chars": 11143,
    "preview": "import json\nimport os\n\nfrom conan.api.conan_api import ConanAPI\nfrom conan.api.input import UserInput\nfrom conan.api.mod"
  },
  {
    "path": "conan/cli/commands/build.py",
    "chars": 4419,
    "preview": "import os\n\nfrom conan.api.output import ConanOutput\nfrom conan.cli.command import conan_command\nfrom conan.cli.formatter"
  },
  {
    "path": "conan/cli/commands/cache.py",
    "chars": 14952,
    "preview": "import json\n\nfrom conan.api.conan_api import ConanAPI\nfrom conan.api.model import ListPattern, MultiPackagesList\nfrom co"
  },
  {
    "path": "conan/cli/commands/config.py",
    "chars": 7320,
    "preview": "import os\n\nfrom conan.api.model import Remote\nfrom conan.api.output import cli_out_write\nfrom conan.cli import make_abs_"
  },
  {
    "path": "conan/cli/commands/create.py",
    "chars": 10553,
    "preview": "import os\nimport shutil\n\nfrom conan.api.output import ConanOutput\nfrom conan.cli.args import add_lockfile_args, add_comm"
  },
  {
    "path": "conan/cli/commands/download.py",
    "chars": 3247,
    "preview": "from conan.api.conan_api import ConanAPI\nfrom conan.api.model import ListPattern, MultiPackagesList\nfrom conan.api.outpu"
  },
  {
    "path": "conan/cli/commands/editable.py",
    "chars": 3377,
    "preview": "import json\nimport os\n\nfrom conan.api.output import ConanOutput, cli_out_write\nfrom conan.cli.args import add_reference_"
  },
  {
    "path": "conan/cli/commands/export.py",
    "chars": 3137,
    "preview": "import json\nimport os\n\nfrom conan.api.model import MultiPackagesList, PackagesList\nfrom conan.api.output import cli_out_"
  },
  {
    "path": "conan/cli/commands/export_pkg.py",
    "chars": 5115,
    "preview": "import os\n\nfrom conan.api.output import ConanOutput\nfrom conan.cli import make_abs_path\nfrom conan.cli.args import add_l"
  },
  {
    "path": "conan/cli/commands/graph.py",
    "chars": 19602,
    "preview": "import json\nimport os\n\nfrom conan.api.output import ConanOutput, cli_out_write, Color\nfrom conan.cli import make_abs_pat"
  },
  {
    "path": "conan/cli/commands/inspect.py",
    "chars": 2614,
    "preview": "import os\n\nfrom conan.api.output import cli_out_write\nfrom conan.cli.command import conan_command, OnceArgument\nfrom con"
  },
  {
    "path": "conan/cli/commands/install.py",
    "chars": 5888,
    "preview": "import os\n\nfrom conan.api.output import ConanOutput\nfrom conan.cli import make_abs_path\nfrom conan.cli.args import commo"
  },
  {
    "path": "conan/cli/commands/list.py",
    "chars": 14464,
    "preview": "import json\nimport datetime\n\nfrom conan.api.conan_api import ConanAPI\nfrom conan.api.model import ListPattern, MultiPack"
  },
  {
    "path": "conan/cli/commands/lock.py",
    "chars": 13996,
    "preview": "import os\n\nfrom conan.api.output import ConanOutput\nfrom conan.cli.command import conan_command, OnceArgument, conan_sub"
  },
  {
    "path": "conan/cli/commands/new.py",
    "chars": 1510,
    "preview": "import os\n\nfrom conan.cli.command import conan_command\n\n\n@conan_command(group=\"Creator\")\ndef new(conan_api, parser, *arg"
  },
  {
    "path": "conan/cli/commands/pkglist.py",
    "chars": 2453,
    "preview": "from conan.api.conan_api import ConanAPI\nfrom conan.api.model import MultiPackagesList\nfrom conan.cli import make_abs_pa"
  },
  {
    "path": "conan/cli/commands/profile.py",
    "chars": 4165,
    "preview": "import json\nimport os\n\nfrom conan.api.output import ConanOutput, cli_out_write\nfrom conan.cli.command import conan_comma"
  },
  {
    "path": "conan/cli/commands/remote.py",
    "chars": 14092,
    "preview": "import json\nimport os\nfrom collections import OrderedDict\n\nfrom conan.api.conan_api import ConanAPI\nfrom conan.api.model"
  },
  {
    "path": "conan/cli/commands/remove.py",
    "chars": 6485,
    "preview": "from conan.api.conan_api import ConanAPI\nfrom conan.api.model import ListPattern, MultiPackagesList, PackagesList\nfrom c"
  },
  {
    "path": "conan/cli/commands/report.py",
    "chars": 2731,
    "preview": "import os\n\nfrom conan.cli.formatters.report import format_diff_html, format_diff_txt, format_diff_json\nfrom conan.api.co"
  },
  {
    "path": "conan/cli/commands/require.py",
    "chars": 6742,
    "preview": "import os\nimport re\n\nfrom conan.api.conan_api import ConanAPI\nfrom conan.api.model import ListPattern, RecipeReference\nf"
  },
  {
    "path": "conan/cli/commands/run.py",
    "chars": 2583,
    "preview": "import os\nimport tempfile\n\nfrom conan.api.output import ConanOutput, LEVEL_STATUS, Color, LEVEL_ERROR, LEVEL_QUIET\nfrom "
  },
  {
    "path": "conan/cli/commands/search.py",
    "chars": 1691,
    "preview": "from collections import OrderedDict\n\nfrom conan.api.conan_api import ConanAPI\nfrom conan.api.model import ListPattern\nfr"
  },
  {
    "path": "conan/cli/commands/source.py",
    "chars": 872,
    "preview": "import os\n\nfrom conan.cli.command import conan_command\nfrom conan.cli.args import add_reference_args\n\n\n@conan_command(gr"
  },
  {
    "path": "conan/cli/commands/test.py",
    "chars": 4173,
    "preview": "import os\n\nfrom conan.api.output import ConanOutput\nfrom conan.cli.command import conan_command, OnceArgument\nfrom conan"
  },
  {
    "path": "conan/cli/commands/upload.py",
    "chars": 6768,
    "preview": "from conan.api.conan_api import ConanAPI\nfrom conan.api.model import ListPattern, MultiPackagesList, PackagesList\nfrom c"
  },
  {
    "path": "conan/cli/commands/version.py",
    "chars": 1172,
    "preview": "from conan.cli.commands.list import print_serial\nfrom conan.cli.command import conan_command\nfrom conan.cli.formatters i"
  },
  {
    "path": "conan/cli/commands/workspace.py",
    "chars": 20563,
    "preview": "import json\nimport os\n\nfrom conan.api.conan_api import ConanAPI\nfrom conan.api.model import RecipeReference\nfrom conan.a"
  },
  {
    "path": "conan/cli/exit_codes.py",
    "chars": 490,
    "preview": "# Exit codes for conan command:\nSUCCESS = 0                             # 0: Success (done)\nERROR_GENERAL = 1           "
  },
  {
    "path": "conan/cli/formatters/__init__.py",
    "chars": 158,
    "preview": "import json\n\nfrom conan.api.output import cli_out_write\n\n\ndef default_json_formatter(data):\n    myjson = json.dumps(data"
  },
  {
    "path": "conan/cli/formatters/audit/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "conan/cli/formatters/audit/vulnerabilities.py",
    "chars": 16574,
    "preview": "import json\n\nfrom jinja2 import select_autoescape, Template\n\nfrom conan.api.output import cli_out_write, Color\n\n\nseverit"
  },
  {
    "path": "conan/cli/formatters/graph/__init__.py",
    "chars": 110,
    "preview": "from .graph import format_graph_html\nfrom .graph import format_graph_dot\nfrom .graph import format_graph_json\n"
  },
  {
    "path": "conan/cli/formatters/graph/build_order_html.py",
    "chars": 10933,
    "preview": "from jinja2 import select_autoescape, Template\nfrom conan.api.output import cli_out_write\n\nbuild_order_html = r\"\"\"\n<html"
  },
  {
    "path": "conan/cli/formatters/graph/graph.py",
    "chars": 1999,
    "preview": "import json\nimport os\n\nfrom jinja2 import Template, select_autoescape\n\nfrom conan.api.output import cli_out_write\nfrom c"
  },
  {
    "path": "conan/cli/formatters/graph/graph_info_text.py",
    "chars": 2477,
    "preview": "import fnmatch\nfrom collections import OrderedDict\n\nfrom conan.api.model import RecipeReference\nfrom conan.api.output im"
  },
  {
    "path": "conan/cli/formatters/graph/info_graph_dot.py",
    "chars": 334,
    "preview": "\ngraph_info_dot = \"\"\"\\\ndigraph {\n    {%- for node_id, node in deps_graph[\"nodes\"].items() %}\n        {%- for dep_id, dep"
  },
  {
    "path": "conan/cli/formatters/graph/info_graph_html.py",
    "chars": 21642,
    "preview": "graph_info_html = r\"\"\"\n<html lang=\"en\">\n    <head>\n        <script src=\"https://cdnjs.cloudflare.com/ajax/libs/vis-netwo"
  },
  {
    "path": "conan/cli/formatters/list/__init__.py",
    "chars": 37,
    "preview": "from .list import list_packages_html\n"
  },
  {
    "path": "conan/cli/formatters/list/list.py",
    "chars": 978,
    "preview": "import json\nimport os\n\nfrom jinja2 import Template, select_autoescape\n\nfrom conan.api.output import cli_out_write\nfrom c"
  },
  {
    "path": "conan/cli/formatters/list/search_table_html.py",
    "chars": 12834,
    "preview": "list_packages_html_template = r\"\"\"\n<!DOCTYPE html>\n<html lang=\"en\">\n\n<head>\n    <title>conan list results</title>\n    <l"
  },
  {
    "path": "conan/cli/formatters/report/__init__.py",
    "chars": 70,
    "preview": "from .diff import format_diff_html, format_diff_txt, format_diff_json\n"
  },
  {
    "path": "conan/cli/formatters/report/diff.py",
    "chars": 6219,
    "preview": "import json\nimport os\nimport base64\n\nfrom jinja2 import Template\n\nfrom conan.api.output import cli_out_write\nfrom conan."
  },
  {
    "path": "conan/cli/formatters/report/diff_html.py",
    "chars": 36203,
    "preview": "diff_html = r\"\"\"\n{% macro render_sidebar_folder(folder, folder_info) %}\n    {%- for name, sub_folder_info in folder_info"
  },
  {
    "path": "conan/cli/printers/__init__.py",
    "chars": 331,
    "preview": "from conan.api.output import ConanOutput, Color\n\n\ndef print_profiles(profile_host, profile_build):\n    out = ConanOutput"
  },
  {
    "path": "conan/cli/printers/graph.py",
    "chars": 7880,
    "preview": "from conan.api.output import ConanOutput, Color, LEVEL_VERBOSE, LEVEL_DEBUG\n\n\ndef print_graph_basic(graph):\n    # I am e"
  },
  {
    "path": "conan/cps/__init__.py",
    "chars": 30,
    "preview": "from conan.cps.cps import CPS\n"
  },
  {
    "path": "conan/cps/cps.py",
    "chars": 12089,
    "preview": "import json\nimport os\nfrom enum import Enum\n\nfrom conan.internal.model.cpp_info import CppInfo\nfrom conan.internal.util."
  },
  {
    "path": "conan/errors.py",
    "chars": 542,
    "preview": "class ConanException(Exception):\n    \"\"\" Generic conan exception \"\"\"\n    def __init__(self, msg=None, remote=None):\n    "
  },
  {
    "path": "conan/internal/__init__.py",
    "chars": 459,
    "preview": "from conan.errors import ConanException\n\n\nREVISIONS = \"revisions\"  # capability\n\n\ndef check_duplicated_generator(generat"
  },
  {
    "path": "conan/internal/api/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "conan/internal/api/audit/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "conan/internal/api/audit/providers.py",
    "chars": 10525,
    "preview": "import textwrap\nfrom urllib.parse import urljoin\nfrom conan.api.output import Color, ConanOutput\nfrom conan.errors impor"
  },
  {
    "path": "conan/internal/api/config/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "conan/internal/api/config/config_installer.py",
    "chars": 9285,
    "preview": "import os\nimport shutil\nimport fnmatch\nimport zipfile\n\nfrom urllib.parse import urlparse, urlsplit\nfrom contextlib impor"
  },
  {
    "path": "conan/internal/api/detect/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "conan/internal/api/detect/detect_api.py",
    "chars": 24715,
    "preview": "import os\nimport platform\nimport re\nimport tempfile\nimport textwrap\n\nfrom conan.api.output import ConanOutput\nfrom conan"
  },
  {
    "path": "conan/internal/api/detect/detect_vs.py",
    "chars": 4593,
    "preview": "import json\nimport os\nfrom shutil import which\n\nfrom conan.tools.build import cmd_args_to_string\nfrom conan.errors impor"
  },
  {
    "path": "conan/internal/api/export.py",
    "chars": 9433,
    "preview": "import os\nimport shutil\n\nfrom conan.tools.files import copy\nfrom conan.api.output import ConanOutput\nfrom conan.tools.sc"
  },
  {
    "path": "conan/internal/api/install/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "conan/internal/api/install/generators.py",
    "chars": 8733,
    "preview": "import importlib\nimport inspect\nimport os\nimport traceback\n\nfrom conan.errors import ConanException\nfrom conan.internal."
  },
  {
    "path": "conan/internal/api/list/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "conan/internal/api/list/query_parse.py",
    "chars": 5379,
    "preview": "from collections import OrderedDict\n\n\ndef filter_package_configs(pkg_configurations, query):\n    postfix = _infix_to_pos"
  },
  {
    "path": "conan/internal/api/local/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "conan/internal/api/local/editable.py",
    "chars": 2498,
    "preview": "import copy\nimport fnmatch\nimport json\nimport os\nfrom os.path import join, normpath\n\nfrom conan.api.model import RecipeR"
  },
  {
    "path": "conan/internal/api/migrations.py",
    "chars": 2487,
    "preview": "import os\nimport textwrap\n\nfrom conan.api.output import ConanOutput\nfrom conan.internal.default_settings import migrate_"
  },
  {
    "path": "conan/internal/api/new/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "conan/internal/api/new/alias_new.py",
    "chars": 293,
    "preview": "_conanfile = '''\\\nfrom conan import ConanFile\n\nclass AliasConanfile(ConanFile):\n    name = \"{{name}}\"\n    {% if version "
  },
  {
    "path": "conan/internal/api/new/autoools_exe.py",
    "chars": 2921,
    "preview": "from conan.internal.api.new.autotools_lib import makefile_am\nfrom conan.internal.api.new.cmake_lib import source_cpp, te"
  },
  {
    "path": "conan/internal/api/new/autotools_lib.py",
    "chars": 3850,
    "preview": "from conan.internal.api.new.cmake_lib import source_cpp, source_h, test_main\n\n\nconanfile_sources_v2 = \"\"\"\nimport os\n\nfro"
  },
  {
    "path": "conan/internal/api/new/basic.py",
    "chars": 4370,
    "preview": "def inject_get_or_else(variable, default):\n    return variable + ' = \"{% if ' + variable + \" is defined %}{{ \" + variabl"
  },
  {
    "path": "conan/internal/api/new/bazel_7_exe.py",
    "chars": 2187,
    "preview": "from conan.internal.api.new.cmake_lib import source_cpp, source_h, test_main\n\n\nconanfile_exe = \"\"\"\nimport os\nfrom conan "
  },
  {
    "path": "conan/internal/api/new/bazel_7_lib.py",
    "chars": 4979,
    "preview": "from conan.internal.api.new.cmake_lib import source_cpp, source_h, test_main\n\nconanfile_sources_v2 = \"\"\"\nimport os\nfrom "
  },
  {
    "path": "conan/internal/api/new/bazel_exe.py",
    "chars": 2460,
    "preview": "from conan.internal.api.new.cmake_lib import source_cpp, source_h, test_main\n\n\nconanfile_exe = \"\"\"\nimport os\nfrom conan "
  },
  {
    "path": "conan/internal/api/new/bazel_lib.py",
    "chars": 5155,
    "preview": "from conan.internal.api.new.cmake_lib import source_cpp, source_h, test_main\n\nconanfile_sources_v2 = \"\"\"\nimport os\nfrom "
  },
  {
    "path": "conan/internal/api/new/cmake_exe.py",
    "chars": 2932,
    "preview": "from conan.internal.api.new.cmake_lib import source_cpp, source_h, test_main\n\nconanfile_exe = '''from conan import Conan"
  },
  {
    "path": "conan/internal/api/new/cmake_lib.py",
    "chars": 8087,
    "preview": "conanfile_sources_v2 = '''from conan import ConanFile\nfrom conan.tools.cmake import CMakeToolchain, CMake, cmake_layout,"
  },
  {
    "path": "conan/internal/api/new/header_lib.py",
    "chars": 3079,
    "preview": "conanfile_sources_v2 = '''from conan import ConanFile\nfrom conan.tools.layout import basic_layout\nfrom conan.tools.files"
  },
  {
    "path": "conan/internal/api/new/local_recipes_index.py",
    "chars": 3213,
    "preview": "from conan.internal.api.new.cmake_lib import test_conanfile_v2, test_cmake_v2\n\nconfig_yml = \"\"\"\\\nversions:\n  \"{{version}"
  },
  {
    "path": "conan/internal/api/new/meson_exe.py",
    "chars": 2334,
    "preview": "from conan.internal.api.new.cmake_lib import source_cpp, source_h, test_main\n\nconanfile_exe = \"\"\"from conan import Conan"
  },
  {
    "path": "conan/internal/api/new/meson_lib.py",
    "chars": 3148,
    "preview": "from conan.internal.api.new.cmake_lib import source_cpp, source_h, test_main\n\nconanfile_sources_v2 = \"\"\"import os\nfrom c"
  },
  {
    "path": "conan/internal/api/new/msbuild_exe.py",
    "chars": 2207,
    "preview": "from conan.internal.api.new.msbuild_lib import vcxproj, sln_file\n\ntest_main = \"\"\"#include \"{{name}}.h\"\n\nint main() {\n   "
  },
  {
    "path": "conan/internal/api/new/msbuild_lib.py",
    "chars": 12307,
    "preview": "from conan.internal.api.new.cmake_lib import source_cpp, source_h, test_main\n\nsln_file = r\"\"\"\nMicrosoft Visual Studio So"
  },
  {
    "path": "conan/internal/api/new/premake_exe.py",
    "chars": 2949,
    "preview": "from conan.internal.api.new.cmake_lib import source_cpp, source_h, test_main\n\nconanfile_exe = \"\"\"import os\nfrom conan im"
  },
  {
    "path": "conan/internal/api/new/premake_lib.py",
    "chars": 4375,
    "preview": "from conan.internal.api.new.cmake_lib import source_cpp, source_h, test_main\n\nconanfile_sources = \"\"\"import os\nfrom cona"
  },
  {
    "path": "conan/internal/api/new/qbs_lib.py",
    "chars": 2780,
    "preview": "from conan.internal.api.new.cmake_lib import source_cpp, source_h, test_main\n\n\nconanfile_sources = '''\nimport os\n\nfrom c"
  },
  {
    "path": "conan/internal/api/new/workspace.py",
    "chars": 2981,
    "preview": "from conan.api.subapi.new import NewAPI\nfrom conan.internal.api.new.cmake_exe import cmake_exe_files\nfrom conan.internal"
  },
  {
    "path": "conan/internal/api/profile/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "conan/internal/api/profile/detect.py",
    "chars": 1426,
    "preview": "from conan.api.output import ConanOutput\nfrom conan.internal.api.detect.detect_api import detect_os, detect_arch, defaul"
  },
  {
    "path": "conan/internal/api/profile/profile_loader.py",
    "chars": 20364,
    "preview": "import os\nimport platform\nimport subprocess\nfrom collections import OrderedDict, defaultdict\n\nfrom jinja2 import Environ"
  },
  {
    "path": "conan/internal/api/remotes/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "conan/internal/api/remotes/encrypt.py",
    "chars": 1301,
    "preview": "\n# WARNING: These functions implements a Vigenere cypher, they are NO WAY OK FOR SECURITY!\nCHARS = [c for c in (chr(i) f"
  },
  {
    "path": "conan/internal/api/remotes/localdb.py",
    "chars": 4288,
    "preview": "import os\nimport sqlite3\nfrom contextlib import contextmanager\nfrom sqlite3 import OperationalError\n\nfrom conan.errors i"
  },
  {
    "path": "conan/internal/api/upload.py",
    "chars": 805,
    "preview": "from conan.internal.rest.client_routes import ClientV2Router\nfrom conan.internal.util.files import sha1sum\n\n\ndef add_url"
  },
  {
    "path": "conan/internal/api/uploader.py",
    "chars": 18815,
    "preview": "import fnmatch\nimport gzip\nimport os\nimport shutil\nimport sys\nimport tarfile\nimport time\n\nfrom conan.internal.conan_app "
  },
  {
    "path": "conan/internal/cache/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "conan/internal/cache/cache.py",
    "chars": 14726,
    "preview": "import hashlib\nimport os\nimport re\nimport shutil\nimport uuid\nfrom fnmatch import translate\nfrom typing import List\n\nfrom"
  },
  {
    "path": "conan/internal/cache/conan_reference_layout.py",
    "chars": 3925,
    "preview": "import os\nfrom contextlib import contextmanager\n\nfrom conan.internal.model.manifest import FileTreeManifest\nfrom conan.i"
  },
  {
    "path": "conan/internal/cache/db/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "conan/internal/cache/db/cache_database.py",
    "chars": 4242,
    "preview": "import os\nimport sqlite3\n\nfrom conan.api.output import ConanOutput\nfrom conan.internal.cache.db.packages_table import Pa"
  },
  {
    "path": "conan/internal/cache/db/packages_table.py",
    "chars": 11274,
    "preview": "import sqlite3\n\nfrom conan.internal.cache.db.table import BaseDbTable\nfrom conan.internal.errors import ConanReferenceDo"
  },
  {
    "path": "conan/internal/cache/db/recipes_table.py",
    "chars": 5195,
    "preview": "import sqlite3\n\nfrom conan.internal.cache.db.table import BaseDbTable\nfrom conan.internal.errors import ConanReferenceDo"
  },
  {
    "path": "conan/internal/cache/db/table.py",
    "chars": 2471,
    "preview": "import sqlite3\nimport threading\nimport traceback\nfrom collections import defaultdict, namedtuple\nfrom contextlib import "
  },
  {
    "path": "conan/internal/cache/home_paths.py",
    "chars": 2703,
    "preview": "import os\n\nfrom conan.api.output import ConanOutput\n\n_EXTENSIONS_FOLDER = \"extensions\"\n_PLUGINS = \"plugins\"\n\n\nclass Home"
  },
  {
    "path": "conan/internal/cache/integrity_check.py",
    "chars": 3736,
    "preview": "import os\n\nfrom conan.api.model.list import PackagesList\nfrom conan.api.output import ConanOutput\nfrom conan.api.model i"
  },
  {
    "path": "conan/internal/conan_app.py",
    "chars": 4166,
    "preview": "import os\n\nfrom conan.internal.api.local.editable import EditablePackages\nfrom conan.internal.cache.cache import PkgCach"
  },
  {
    "path": "conan/internal/default_settings.py",
    "chars": 10128,
    "preview": "import os\n\ndefault_settings_yml = \"\"\"\\\n# This file was generated by Conan. Remove this comment if you edit this file or "
  },
  {
    "path": "conan/internal/deploy.py",
    "chars": 10173,
    "preview": "import filecmp\nimport os\nimport shutil\nimport fnmatch\n\nfrom conan.internal.cache.home_paths import HomePaths\nfrom conan."
  },
  {
    "path": "conan/internal/errors.py",
    "chars": 4511,
    "preview": "import traceback\nfrom contextlib import contextmanager\n\nfrom conan.errors import ConanException, ConanInvalidConfigurati"
  },
  {
    "path": "conan/internal/graph/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "conan/internal/graph/build_mode.py",
    "chars": 5774,
    "preview": "from conan.api.output import ConanOutput\nfrom conan.errors import ConanException\nfrom conan.internal.model.recipe_ref im"
  },
  {
    "path": "conan/internal/graph/compatibility.py",
    "chars": 7815,
    "preview": "import os\nfrom collections import OrderedDict\n\nfrom conan.api.output import ConanOutput\nfrom conan.internal.cache.home_p"
  },
  {
    "path": "conan/internal/graph/compute_pid.py",
    "chars": 5850,
    "preview": "from collections import OrderedDict\n\nfrom conan.internal.errors import conanfile_remove_attr, conanfile_exception_format"
  },
  {
    "path": "conan/internal/graph/graph.py",
    "chars": 18239,
    "preview": "from collections import OrderedDict\n\nfrom conan.internal.graph.graph_error import GraphError, GraphConflictError\nfrom co"
  },
  {
    "path": "conan/internal/graph/graph_binaries.py",
    "chars": 30221,
    "preview": "import os\n\nfrom conan.api.output import ConanOutput, Color\nfrom conan.internal.cache.home_paths import HomePaths\nfrom co"
  },
  {
    "path": "conan/internal/graph/graph_builder.py",
    "chars": 26385,
    "preview": "import os\nfrom collections import deque\n\nfrom conan.internal.cache.conan_reference_layout import BasicLayout\nfrom conan."
  },
  {
    "path": "conan/internal/graph/graph_error.py",
    "chars": 3646,
    "preview": "from conan.errors import ConanException\n\n\nclass GraphError(ConanException):\n    def serialize(self):\n        return\n\n\ncl"
  },
  {
    "path": "conan/internal/graph/install_graph.py",
    "chars": 25008,
    "preview": "import json\nimport os\nimport textwrap\n\nfrom conan.api.output import ConanOutput\nfrom conan.internal.graph.graph import R"
  },
  {
    "path": "conan/internal/graph/installer.py",
    "chars": 24056,
    "preview": "import os\nimport shutil\nfrom multiprocessing.pool import ThreadPool\n\nfrom conan.api.output import ConanOutput, Color\nfro"
  },
  {
    "path": "conan/internal/graph/profile_node_definer.py",
    "chars": 5327,
    "preview": "from conan.internal.graph.graph import CONTEXT_BUILD\nfrom conan.errors import ConanException\nfrom conan.internal.model.r"
  },
  {
    "path": "conan/internal/graph/provides.py",
    "chars": 1888,
    "preview": "from conan.internal.graph.graph_error import GraphProvidesError\nfrom conan.api.model import RecipeReference\n\n\ndef check_"
  },
  {
    "path": "conan/internal/graph/proxy.py",
    "chars": 8817,
    "preview": "from conan.api.output import ConanOutput\nfrom conan.internal.cache.conan_reference_layout import BasicLayout\nfrom conan."
  },
  {
    "path": "conan/internal/graph/python_requires.py",
    "chars": 6447,
    "preview": "import os\n\nfrom conan.errors import ConanException\nfrom conan.api.model import RecipeReference\nfrom conan.internal.model"
  },
  {
    "path": "conan/internal/graph/range_resolver.py",
    "chars": 6022,
    "preview": "from conan.api.output import ConanOutput\nfrom conan.internal.graph.proxy import should_update_reference\nfrom conan.error"
  },
  {
    "path": "conan/internal/hook_manager.py",
    "chars": 3237,
    "preview": "import os\n\nfrom conan.internal.loader import load_python_file\nfrom conan.errors import ConanException, ConanInvalidConfi"
  },
  {
    "path": "conan/internal/internal_tools.py",
    "chars": 935,
    "preview": "from conan.errors import ConanException\n\nuniversal_arch_separator = '|'\n\n\ndef is_universal_arch(settings_value, valid_de"
  },
  {
    "path": "conan/internal/loader.py",
    "chars": 19089,
    "preview": "import traceback\nfrom importlib import invalidate_caches, util as imp_util\nimport inspect\nimport os\nimport re\nimport sys"
  },
  {
    "path": "conan/internal/methods.py",
    "chars": 7170,
    "preview": "import os\n\nfrom conan.api.output import ConanOutput\nfrom conan.errors import ConanException\nfrom conan.internal.errors i"
  },
  {
    "path": "conan/internal/model/__init__.py",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "conan/internal/model/conan_file.py",
    "chars": 16182,
    "preview": "import os\nimport subprocess\nfrom pathlib import Path\n\nfrom conan.api.output import ConanOutput, Color, LEVEL_QUIET\nfrom "
  },
  {
    "path": "conan/internal/model/conanconfig.py",
    "chars": 1243,
    "preview": "import json\n\nimport yaml\n\nfrom conan.api.model import RecipeReference\nfrom conan.errors import ConanException\nfrom conan"
  },
  {
    "path": "conan/internal/model/conanfile_interface.py",
    "chars": 3730,
    "preview": "from pathlib import Path\n\nfrom conan.internal.graph.graph import CONTEXT_BUILD\n\n\nclass ConanFileInterface:\n    \"\"\"\n    T"
  },
  {
    "path": "conan/internal/model/conf.py",
    "chars": 41095,
    "preview": "import copy\nimport hashlib\nimport numbers\nimport platform\nimport re\nimport os\nimport fnmatch\nimport textwrap\n\nfrom colle"
  },
  {
    "path": "conan/internal/model/cpp_info.py",
    "chars": 35191,
    "preview": "import copy\nimport glob\nimport json\nimport os\nimport re\nfrom collections import OrderedDict, defaultdict\n\nfrom conan.api"
  },
  {
    "path": "conan/internal/model/dependencies.py",
    "chars": 7078,
    "preview": "from collections import OrderedDict\n\nfrom conan.api.model import RecipeReference\nfrom conan.errors import ConanException"
  },
  {
    "path": "conan/internal/model/info.py",
    "chars": 16748,
    "preview": "import hashlib\n\nfrom conan.errors import ConanException\nfrom conan.internal.model.dependencies import UserRequirementsDi"
  },
  {
    "path": "conan/internal/model/layout.py",
    "chars": 5659,
    "preview": "import os\n\nfrom conan.internal.model.cpp_info import CppInfo\nfrom conan.internal.model.conf import Conf\n\n\nclass Infos:\n\n"
  },
  {
    "path": "conan/internal/model/lockfile.py",
    "chars": 14532,
    "preview": "import fnmatch\nimport json\nimport os\nfrom collections import OrderedDict\n\nfrom conan.api.output import ConanOutput\nfrom "
  },
  {
    "path": "conan/internal/model/manifest.py",
    "chars": 4992,
    "preview": "import os\nfrom collections import defaultdict\n\nfrom conan.internal.paths import CONAN_MANIFEST, COMPRESSIONS, PACKAGE_FI"
  },
  {
    "path": "conan/internal/model/options.py",
    "chars": 18466,
    "preview": "from conan.errors import ConanException\nfrom conan.internal.model.recipe_ref import ref_matches\n\n_falsey_options = [\"fal"
  },
  {
    "path": "conan/internal/model/pkg_type.py",
    "chars": 2822,
    "preview": "from enum import Enum\n\nfrom conan.errors import ConanException\n\n\nclass PackageType(Enum):\n    LIBRARY = \"library\"  # abs"
  },
  {
    "path": "conan/internal/model/profile.py",
    "chars": 8650,
    "preview": "import copy\nfrom collections import OrderedDict, defaultdict\n\nfrom conan.errors import ConanException\nfrom conan.tools.e"
  },
  {
    "path": "conan/internal/model/recipe_ref.py",
    "chars": 264,
    "preview": "from conan.api.model import RecipeReference\n\n\ndef ref_matches(ref, pattern, is_consumer):\n    if not ref or not str(ref)"
  },
  {
    "path": "conan/internal/model/requires.py",
    "chars": 25635,
    "preview": "from conan.errors import ConanException\nfrom conan.internal.model.pkg_type import PackageType\nfrom conan.api.model impor"
  },
  {
    "path": "conan/internal/model/settings.py",
    "chars": 15892,
    "preview": "import os\n\nimport yaml\n\nfrom conan.internal.cache.home_paths import HomePaths\nfrom conan.internal.default_settings impor"
  },
  {
    "path": "conan/internal/model/version.py",
    "chars": 6527,
    "preview": "from functools import total_ordering\nfrom typing import Optional\n\nfrom conan.errors import ConanException\n\n\n@total_order"
  },
  {
    "path": "conan/internal/model/version_range.py",
    "chars": 9900,
    "preview": "from functools import total_ordering\nfrom typing import Optional\n\nfrom conan.internal.model.version import Version\nfrom "
  }
]

// ... and 935 more files (download for full content)

About this extraction

This page contains the full source code of the conan-io/conan GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1135 files (7.3 MB), approximately 2.0M tokens, and a symbol index with 8187 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!