conan 2.22.2__tar.gz → 2.24.0__tar.gz

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