conan 2.22.2__tar.gz → 2.23.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 (351) hide show
  1. {conan-2.22.2/conan.egg-info → conan-2.23.0}/PKG-INFO +2 -2
  2. {conan-2.22.2 → conan-2.23.0}/README.md +1 -1
  3. {conan-2.22.2 → conan-2.23.0}/conan/__init__.py +1 -1
  4. {conan-2.22.2 → conan-2.23.0}/conan/api/conan_api.py +0 -1
  5. {conan-2.22.2 → conan-2.23.0}/conan/api/input.py +1 -1
  6. {conan-2.22.2 → conan-2.23.0}/conan/api/model/remote.py +14 -2
  7. {conan-2.22.2 → conan-2.23.0}/conan/api/output.py +11 -3
  8. {conan-2.22.2 → conan-2.23.0}/conan/api/subapi/audit.py +10 -8
  9. {conan-2.22.2 → conan-2.23.0}/conan/api/subapi/cache.py +9 -5
  10. {conan-2.22.2 → conan-2.23.0}/conan/api/subapi/graph.py +12 -7
  11. {conan-2.22.2 → conan-2.23.0}/conan/api/subapi/install.py +15 -6
  12. {conan-2.22.2 → conan-2.23.0}/conan/api/subapi/list.py +37 -15
  13. {conan-2.22.2 → conan-2.23.0}/conan/api/subapi/new.py +1 -1
  14. {conan-2.22.2 → conan-2.23.0}/conan/api/subapi/remotes.py +6 -3
  15. {conan-2.22.2 → conan-2.23.0}/conan/api/subapi/report.py +2 -1
  16. {conan-2.22.2 → conan-2.23.0}/conan/api/subapi/workspace.py +18 -14
  17. {conan-2.22.2 → conan-2.23.0}/conan/cli/cli.py +1 -0
  18. {conan-2.22.2 → conan-2.23.0}/conan/cli/command.py +10 -4
  19. {conan-2.22.2 → conan-2.23.0}/conan/cli/commands/create.py +7 -3
  20. {conan-2.22.2 → conan-2.23.0}/conan/cli/commands/install.py +33 -14
  21. {conan-2.22.2 → conan-2.23.0}/conan/cli/commands/remote.py +8 -6
  22. conan-2.23.0/conan/cli/commands/run.py +55 -0
  23. {conan-2.22.2 → conan-2.23.0}/conan/cli/commands/workspace.py +17 -1
  24. {conan-2.22.2 → conan-2.23.0}/conan/cli/formatters/audit/vulnerabilities.py +137 -28
  25. {conan-2.22.2 → conan-2.23.0}/conan/cli/formatters/graph/info_graph_html.py +20 -0
  26. {conan-2.22.2 → conan-2.23.0}/conan/cli/formatters/report/diff.py +28 -5
  27. {conan-2.22.2 → conan-2.23.0}/conan/cli/formatters/report/diff_html.py +200 -13
  28. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/audit/providers.py +20 -6
  29. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/config/config_installer.py +1 -0
  30. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/detect/detect_vs.py +1 -0
  31. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/export.py +3 -1
  32. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/new/basic.py +1 -0
  33. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/new/bazel_7_exe.py +1 -1
  34. {conan-2.22.2 → conan-2.23.0}/conan/internal/cache/db/packages_table.py +1 -1
  35. {conan-2.22.2 → conan-2.23.0}/conan/internal/cache/db/recipes_table.py +1 -1
  36. {conan-2.22.2 → conan-2.23.0}/conan/internal/cache/db/table.py +6 -20
  37. {conan-2.22.2 → conan-2.23.0}/conan/internal/default_settings.py +12 -12
  38. {conan-2.22.2 → conan-2.23.0}/conan/internal/graph/graph_binaries.py +67 -7
  39. {conan-2.22.2 → conan-2.23.0}/conan/internal/graph/graph_error.py +7 -0
  40. {conan-2.22.2 → conan-2.23.0}/conan/internal/graph/installer.py +14 -6
  41. {conan-2.22.2 → conan-2.23.0}/conan/internal/loader.py +2 -1
  42. {conan-2.22.2 → conan-2.23.0}/conan/internal/model/conan_file.py +6 -2
  43. {conan-2.22.2 → conan-2.23.0}/conan/internal/model/conf.py +3 -7
  44. {conan-2.22.2 → conan-2.23.0}/conan/internal/model/workspace.py +20 -2
  45. {conan-2.22.2 → conan-2.23.0}/conan/internal/paths.py +1 -0
  46. {conan-2.22.2 → conan-2.23.0}/conan/internal/rest/client_routes.py +5 -2
  47. {conan-2.22.2 → conan-2.23.0}/conan/internal/rest/conan_requester.py +8 -13
  48. {conan-2.22.2 → conan-2.23.0}/conan/internal/rest/remote_manager.py +12 -6
  49. {conan-2.22.2 → conan-2.23.0}/conan/internal/rest/rest_client.py +2 -2
  50. {conan-2.22.2 → conan-2.23.0}/conan/internal/rest/rest_client_local_recipe_index.py +1 -1
  51. {conan-2.22.2 → conan-2.23.0}/conan/internal/rest/rest_client_v2.py +3 -3
  52. {conan-2.22.2 → conan-2.23.0}/conan/internal/runner/docker.py +2 -1
  53. {conan-2.22.2 → conan-2.23.0}/conan/internal/runner/output.py +1 -0
  54. {conan-2.22.2 → conan-2.23.0}/conan/test/assets/premake.py +3 -2
  55. {conan-2.22.2 → conan-2.23.0}/conan/test/assets/visual_project_files.py +0 -2
  56. {conan-2.22.2 → conan-2.23.0}/conan/test/utils/tools.py +3 -3
  57. {conan-2.22.2 → conan-2.23.0}/conan/tools/android/utils.py +2 -1
  58. {conan-2.22.2 → conan-2.23.0}/conan/tools/build/cstd.py +2 -0
  59. {conan-2.22.2 → conan-2.23.0}/conan/tools/build/flags.py +0 -37
  60. {conan-2.22.2 → conan-2.23.0}/conan/tools/cmake/cmake.py +33 -20
  61. {conan-2.22.2 → conan-2.23.0}/conan/tools/cmake/cmakedeps2/target_configuration.py +12 -9
  62. {conan-2.22.2 → conan-2.23.0}/conan/tools/cmake/toolchain/blocks.py +21 -4
  63. {conan-2.22.2 → conan-2.23.0}/conan/tools/cmake/toolchain/toolchain.py +18 -9
  64. {conan-2.22.2 → conan-2.23.0}/conan/tools/google/bazeldeps.py +17 -2
  65. {conan-2.22.2 → conan-2.23.0}/conan/tools/meson/meson.py +7 -2
  66. {conan-2.22.2 → conan-2.23.0}/conan/tools/meson/toolchain.py +0 -2
  67. {conan-2.22.2 → conan-2.23.0}/conan/tools/microsoft/toolchain.py +4 -2
  68. {conan-2.22.2 → conan-2.23.0}/conan/tools/microsoft/visual.py +11 -8
  69. {conan-2.22.2 → conan-2.23.0}/conan/tools/premake/premake.py +5 -2
  70. {conan-2.22.2 → conan-2.23.0}/conan/tools/system/package_manager.py +4 -4
  71. {conan-2.22.2 → conan-2.23.0}/conan/tools/system/pip_manager.py +26 -14
  72. {conan-2.22.2 → conan-2.23.0/conan.egg-info}/PKG-INFO +2 -2
  73. {conan-2.22.2 → conan-2.23.0}/conan.egg-info/SOURCES.txt +1 -0
  74. {conan-2.22.2 → conan-2.23.0}/conan.egg-info/requires.txt +1 -3
  75. {conan-2.22.2 → conan-2.23.0}/conans/requirements.txt +1 -1
  76. {conan-2.22.2 → conan-2.23.0}/conans/requirements_dev.txt +0 -1
  77. {conan-2.22.2 → conan-2.23.0}/LICENSE.md +0 -0
  78. {conan-2.22.2 → conan-2.23.0}/MANIFEST.in +0 -0
  79. {conan-2.22.2 → conan-2.23.0}/conan/api/__init__.py +0 -0
  80. {conan-2.22.2 → conan-2.23.0}/conan/api/model/__init__.py +0 -0
  81. {conan-2.22.2 → conan-2.23.0}/conan/api/model/list.py +0 -0
  82. {conan-2.22.2 → conan-2.23.0}/conan/api/model/refs.py +0 -0
  83. {conan-2.22.2 → conan-2.23.0}/conan/api/subapi/__init__.py +0 -0
  84. {conan-2.22.2 → conan-2.23.0}/conan/api/subapi/command.py +0 -0
  85. {conan-2.22.2 → conan-2.23.0}/conan/api/subapi/config.py +0 -0
  86. {conan-2.22.2 → conan-2.23.0}/conan/api/subapi/download.py +0 -0
  87. {conan-2.22.2 → conan-2.23.0}/conan/api/subapi/export.py +0 -0
  88. {conan-2.22.2 → conan-2.23.0}/conan/api/subapi/local.py +0 -0
  89. {conan-2.22.2 → conan-2.23.0}/conan/api/subapi/lockfile.py +0 -0
  90. {conan-2.22.2 → conan-2.23.0}/conan/api/subapi/profiles.py +0 -0
  91. {conan-2.22.2 → conan-2.23.0}/conan/api/subapi/remove.py +0 -0
  92. {conan-2.22.2 → conan-2.23.0}/conan/api/subapi/upload.py +0 -0
  93. {conan-2.22.2 → conan-2.23.0}/conan/cli/__init__.py +0 -0
  94. {conan-2.22.2 → conan-2.23.0}/conan/cli/args.py +0 -0
  95. {conan-2.22.2 → conan-2.23.0}/conan/cli/commands/__init__.py +0 -0
  96. {conan-2.22.2 → conan-2.23.0}/conan/cli/commands/audit.py +0 -0
  97. {conan-2.22.2 → conan-2.23.0}/conan/cli/commands/build.py +0 -0
  98. {conan-2.22.2 → conan-2.23.0}/conan/cli/commands/cache.py +0 -0
  99. {conan-2.22.2 → conan-2.23.0}/conan/cli/commands/config.py +0 -0
  100. {conan-2.22.2 → conan-2.23.0}/conan/cli/commands/download.py +0 -0
  101. {conan-2.22.2 → conan-2.23.0}/conan/cli/commands/editable.py +0 -0
  102. {conan-2.22.2 → conan-2.23.0}/conan/cli/commands/export.py +0 -0
  103. {conan-2.22.2 → conan-2.23.0}/conan/cli/commands/export_pkg.py +0 -0
  104. {conan-2.22.2 → conan-2.23.0}/conan/cli/commands/graph.py +0 -0
  105. {conan-2.22.2 → conan-2.23.0}/conan/cli/commands/inspect.py +0 -0
  106. {conan-2.22.2 → conan-2.23.0}/conan/cli/commands/list.py +0 -0
  107. {conan-2.22.2 → conan-2.23.0}/conan/cli/commands/lock.py +0 -0
  108. {conan-2.22.2 → conan-2.23.0}/conan/cli/commands/new.py +0 -0
  109. {conan-2.22.2 → conan-2.23.0}/conan/cli/commands/pkglist.py +0 -0
  110. {conan-2.22.2 → conan-2.23.0}/conan/cli/commands/profile.py +0 -0
  111. {conan-2.22.2 → conan-2.23.0}/conan/cli/commands/remove.py +0 -0
  112. {conan-2.22.2 → conan-2.23.0}/conan/cli/commands/report.py +0 -0
  113. {conan-2.22.2 → conan-2.23.0}/conan/cli/commands/search.py +0 -0
  114. {conan-2.22.2 → conan-2.23.0}/conan/cli/commands/source.py +0 -0
  115. {conan-2.22.2 → conan-2.23.0}/conan/cli/commands/test.py +0 -0
  116. {conan-2.22.2 → conan-2.23.0}/conan/cli/commands/upload.py +0 -0
  117. {conan-2.22.2 → conan-2.23.0}/conan/cli/commands/version.py +0 -0
  118. {conan-2.22.2 → conan-2.23.0}/conan/cli/exit_codes.py +0 -0
  119. {conan-2.22.2 → conan-2.23.0}/conan/cli/formatters/__init__.py +0 -0
  120. {conan-2.22.2 → conan-2.23.0}/conan/cli/formatters/audit/__init__.py +0 -0
  121. {conan-2.22.2 → conan-2.23.0}/conan/cli/formatters/graph/__init__.py +0 -0
  122. {conan-2.22.2 → conan-2.23.0}/conan/cli/formatters/graph/build_order_html.py +0 -0
  123. {conan-2.22.2 → conan-2.23.0}/conan/cli/formatters/graph/graph.py +0 -0
  124. {conan-2.22.2 → conan-2.23.0}/conan/cli/formatters/graph/graph_info_text.py +0 -0
  125. {conan-2.22.2 → conan-2.23.0}/conan/cli/formatters/graph/info_graph_dot.py +0 -0
  126. {conan-2.22.2 → conan-2.23.0}/conan/cli/formatters/list/__init__.py +0 -0
  127. {conan-2.22.2 → conan-2.23.0}/conan/cli/formatters/list/list.py +0 -0
  128. {conan-2.22.2 → conan-2.23.0}/conan/cli/formatters/list/search_table_html.py +0 -0
  129. {conan-2.22.2 → conan-2.23.0}/conan/cli/formatters/report/__init__.py +0 -0
  130. {conan-2.22.2 → conan-2.23.0}/conan/cli/printers/__init__.py +0 -0
  131. {conan-2.22.2 → conan-2.23.0}/conan/cli/printers/graph.py +0 -0
  132. {conan-2.22.2 → conan-2.23.0}/conan/cps/__init__.py +0 -0
  133. {conan-2.22.2 → conan-2.23.0}/conan/cps/cps.py +0 -0
  134. {conan-2.22.2 → conan-2.23.0}/conan/errors.py +0 -0
  135. {conan-2.22.2 → conan-2.23.0}/conan/internal/__init__.py +0 -0
  136. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/__init__.py +0 -0
  137. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/audit/__init__.py +0 -0
  138. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/config/__init__.py +0 -0
  139. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/detect/__init__.py +0 -0
  140. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/detect/detect_api.py +0 -0
  141. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/install/__init__.py +0 -0
  142. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/install/generators.py +0 -0
  143. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/list/__init__.py +0 -0
  144. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/list/query_parse.py +0 -0
  145. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/local/__init__.py +0 -0
  146. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/local/editable.py +0 -0
  147. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/migrations.py +0 -0
  148. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/new/__init__.py +0 -0
  149. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/new/alias_new.py +0 -0
  150. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/new/autoools_exe.py +0 -0
  151. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/new/autotools_lib.py +0 -0
  152. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/new/bazel_7_lib.py +0 -0
  153. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/new/bazel_exe.py +0 -0
  154. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/new/bazel_lib.py +0 -0
  155. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/new/cmake_exe.py +0 -0
  156. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/new/cmake_lib.py +0 -0
  157. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/new/header_lib.py +0 -0
  158. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/new/local_recipes_index.py +0 -0
  159. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/new/meson_exe.py +0 -0
  160. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/new/meson_lib.py +0 -0
  161. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/new/msbuild_exe.py +0 -0
  162. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/new/msbuild_lib.py +0 -0
  163. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/new/premake_exe.py +0 -0
  164. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/new/premake_lib.py +0 -0
  165. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/new/qbs_lib.py +0 -0
  166. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/new/workspace.py +0 -0
  167. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/profile/__init__.py +0 -0
  168. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/profile/detect.py +0 -0
  169. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/profile/profile_loader.py +0 -0
  170. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/remotes/__init__.py +0 -0
  171. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/remotes/encrypt.py +0 -0
  172. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/remotes/localdb.py +0 -0
  173. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/upload.py +0 -0
  174. {conan-2.22.2 → conan-2.23.0}/conan/internal/api/uploader.py +0 -0
  175. {conan-2.22.2 → conan-2.23.0}/conan/internal/cache/__init__.py +0 -0
  176. {conan-2.22.2 → conan-2.23.0}/conan/internal/cache/cache.py +0 -0
  177. {conan-2.22.2 → conan-2.23.0}/conan/internal/cache/conan_reference_layout.py +0 -0
  178. {conan-2.22.2 → conan-2.23.0}/conan/internal/cache/db/__init__.py +0 -0
  179. {conan-2.22.2 → conan-2.23.0}/conan/internal/cache/db/cache_database.py +0 -0
  180. {conan-2.22.2 → conan-2.23.0}/conan/internal/cache/home_paths.py +0 -0
  181. {conan-2.22.2 → conan-2.23.0}/conan/internal/cache/integrity_check.py +0 -0
  182. {conan-2.22.2 → conan-2.23.0}/conan/internal/conan_app.py +0 -0
  183. {conan-2.22.2 → conan-2.23.0}/conan/internal/deploy.py +0 -0
  184. {conan-2.22.2 → conan-2.23.0}/conan/internal/errors.py +0 -0
  185. {conan-2.22.2 → conan-2.23.0}/conan/internal/graph/__init__.py +0 -0
  186. {conan-2.22.2 → conan-2.23.0}/conan/internal/graph/build_mode.py +0 -0
  187. {conan-2.22.2 → conan-2.23.0}/conan/internal/graph/compatibility.py +0 -0
  188. {conan-2.22.2 → conan-2.23.0}/conan/internal/graph/compute_pid.py +0 -0
  189. {conan-2.22.2 → conan-2.23.0}/conan/internal/graph/graph.py +0 -0
  190. {conan-2.22.2 → conan-2.23.0}/conan/internal/graph/graph_builder.py +0 -0
  191. {conan-2.22.2 → conan-2.23.0}/conan/internal/graph/install_graph.py +0 -0
  192. {conan-2.22.2 → conan-2.23.0}/conan/internal/graph/profile_node_definer.py +0 -0
  193. {conan-2.22.2 → conan-2.23.0}/conan/internal/graph/provides.py +0 -0
  194. {conan-2.22.2 → conan-2.23.0}/conan/internal/graph/proxy.py +0 -0
  195. {conan-2.22.2 → conan-2.23.0}/conan/internal/graph/python_requires.py +0 -0
  196. {conan-2.22.2 → conan-2.23.0}/conan/internal/graph/range_resolver.py +0 -0
  197. {conan-2.22.2 → conan-2.23.0}/conan/internal/hook_manager.py +0 -0
  198. {conan-2.22.2 → conan-2.23.0}/conan/internal/internal_tools.py +0 -0
  199. {conan-2.22.2 → conan-2.23.0}/conan/internal/methods.py +0 -0
  200. {conan-2.22.2 → conan-2.23.0}/conan/internal/model/__init__.py +0 -0
  201. {conan-2.22.2 → conan-2.23.0}/conan/internal/model/conanfile_interface.py +0 -0
  202. {conan-2.22.2 → conan-2.23.0}/conan/internal/model/cpp_info.py +0 -0
  203. {conan-2.22.2 → conan-2.23.0}/conan/internal/model/dependencies.py +0 -0
  204. {conan-2.22.2 → conan-2.23.0}/conan/internal/model/info.py +0 -0
  205. {conan-2.22.2 → conan-2.23.0}/conan/internal/model/layout.py +0 -0
  206. {conan-2.22.2 → conan-2.23.0}/conan/internal/model/lockfile.py +0 -0
  207. {conan-2.22.2 → conan-2.23.0}/conan/internal/model/manifest.py +0 -0
  208. {conan-2.22.2 → conan-2.23.0}/conan/internal/model/options.py +0 -0
  209. {conan-2.22.2 → conan-2.23.0}/conan/internal/model/pkg_type.py +0 -0
  210. {conan-2.22.2 → conan-2.23.0}/conan/internal/model/profile.py +0 -0
  211. {conan-2.22.2 → conan-2.23.0}/conan/internal/model/recipe_ref.py +0 -0
  212. {conan-2.22.2 → conan-2.23.0}/conan/internal/model/requires.py +0 -0
  213. {conan-2.22.2 → conan-2.23.0}/conan/internal/model/settings.py +0 -0
  214. {conan-2.22.2 → conan-2.23.0}/conan/internal/model/version.py +0 -0
  215. {conan-2.22.2 → conan-2.23.0}/conan/internal/model/version_range.py +0 -0
  216. {conan-2.22.2 → conan-2.23.0}/conan/internal/rest/__init__.py +0 -0
  217. {conan-2.22.2 → conan-2.23.0}/conan/internal/rest/auth_manager.py +0 -0
  218. {conan-2.22.2 → conan-2.23.0}/conan/internal/rest/caching_file_downloader.py +0 -0
  219. {conan-2.22.2 → conan-2.23.0}/conan/internal/rest/download_cache.py +0 -0
  220. {conan-2.22.2 → conan-2.23.0}/conan/internal/rest/file_downloader.py +0 -0
  221. {conan-2.22.2 → conan-2.23.0}/conan/internal/rest/file_uploader.py +0 -0
  222. {conan-2.22.2 → conan-2.23.0}/conan/internal/rest/pkg_sign.py +0 -0
  223. {conan-2.22.2 → conan-2.23.0}/conan/internal/rest/remote_credentials.py +0 -0
  224. {conan-2.22.2 → conan-2.23.0}/conan/internal/rest/rest_routes.py +0 -0
  225. {conan-2.22.2 → conan-2.23.0}/conan/internal/runner/__init__.py +0 -0
  226. {conan-2.22.2 → conan-2.23.0}/conan/internal/runner/ssh.py +0 -0
  227. {conan-2.22.2 → conan-2.23.0}/conan/internal/runner/wsl.py +0 -0
  228. {conan-2.22.2 → conan-2.23.0}/conan/internal/source.py +0 -0
  229. {conan-2.22.2 → conan-2.23.0}/conan/internal/subsystems.py +0 -0
  230. {conan-2.22.2 → conan-2.23.0}/conan/internal/util/__init__.py +0 -0
  231. {conan-2.22.2 → conan-2.23.0}/conan/internal/util/config_parser.py +0 -0
  232. {conan-2.22.2 → conan-2.23.0}/conan/internal/util/dates.py +0 -0
  233. {conan-2.22.2 → conan-2.23.0}/conan/internal/util/files.py +0 -0
  234. {conan-2.22.2 → conan-2.23.0}/conan/internal/util/runners.py +0 -0
  235. {conan-2.22.2 → conan-2.23.0}/conan/test/__init__.py +0 -0
  236. {conan-2.22.2 → conan-2.23.0}/conan/test/assets/__init__.py +0 -0
  237. {conan-2.22.2 → conan-2.23.0}/conan/test/assets/autotools.py +0 -0
  238. {conan-2.22.2 → conan-2.23.0}/conan/test/assets/cmake.py +0 -0
  239. {conan-2.22.2 → conan-2.23.0}/conan/test/assets/genconanfile.py +0 -0
  240. {conan-2.22.2 → conan-2.23.0}/conan/test/assets/sources.py +0 -0
  241. {conan-2.22.2 → conan-2.23.0}/conan/test/utils/__init__.py +0 -0
  242. {conan-2.22.2 → conan-2.23.0}/conan/test/utils/artifactory.py +0 -0
  243. {conan-2.22.2 → conan-2.23.0}/conan/test/utils/env.py +0 -0
  244. {conan-2.22.2 → conan-2.23.0}/conan/test/utils/file_server.py +0 -0
  245. {conan-2.22.2 → conan-2.23.0}/conan/test/utils/mocks.py +0 -0
  246. {conan-2.22.2 → conan-2.23.0}/conan/test/utils/profiles.py +0 -0
  247. {conan-2.22.2 → conan-2.23.0}/conan/test/utils/scm.py +0 -0
  248. {conan-2.22.2 → conan-2.23.0}/conan/test/utils/server_launcher.py +0 -0
  249. {conan-2.22.2 → conan-2.23.0}/conan/test/utils/test_files.py +0 -0
  250. {conan-2.22.2 → conan-2.23.0}/conan/tools/__init__.py +0 -0
  251. {conan-2.22.2 → conan-2.23.0}/conan/tools/android/__init__.py +0 -0
  252. {conan-2.22.2 → conan-2.23.0}/conan/tools/apple/__init__.py +0 -0
  253. {conan-2.22.2 → conan-2.23.0}/conan/tools/apple/apple.py +0 -0
  254. {conan-2.22.2 → conan-2.23.0}/conan/tools/apple/xcodebuild.py +0 -0
  255. {conan-2.22.2 → conan-2.23.0}/conan/tools/apple/xcodedeps.py +0 -0
  256. {conan-2.22.2 → conan-2.23.0}/conan/tools/apple/xcodetoolchain.py +0 -0
  257. {conan-2.22.2 → conan-2.23.0}/conan/tools/build/__init__.py +0 -0
  258. {conan-2.22.2 → conan-2.23.0}/conan/tools/build/compiler.py +0 -0
  259. {conan-2.22.2 → conan-2.23.0}/conan/tools/build/cppstd.py +0 -0
  260. {conan-2.22.2 → conan-2.23.0}/conan/tools/build/cpu.py +0 -0
  261. {conan-2.22.2 → conan-2.23.0}/conan/tools/build/cross_building.py +0 -0
  262. {conan-2.22.2 → conan-2.23.0}/conan/tools/build/stdcpp_library.py +0 -0
  263. {conan-2.22.2 → conan-2.23.0}/conan/tools/cmake/__init__.py +0 -0
  264. {conan-2.22.2 → conan-2.23.0}/conan/tools/cmake/cmakedeps/__init__.py +0 -0
  265. {conan-2.22.2 → conan-2.23.0}/conan/tools/cmake/cmakedeps/cmakedeps.py +0 -0
  266. {conan-2.22.2 → conan-2.23.0}/conan/tools/cmake/cmakedeps/templates/__init__.py +0 -0
  267. {conan-2.22.2 → conan-2.23.0}/conan/tools/cmake/cmakedeps/templates/config.py +0 -0
  268. {conan-2.22.2 → conan-2.23.0}/conan/tools/cmake/cmakedeps/templates/config_version.py +0 -0
  269. {conan-2.22.2 → conan-2.23.0}/conan/tools/cmake/cmakedeps/templates/macros.py +0 -0
  270. {conan-2.22.2 → conan-2.23.0}/conan/tools/cmake/cmakedeps/templates/target_configuration.py +0 -0
  271. {conan-2.22.2 → conan-2.23.0}/conan/tools/cmake/cmakedeps/templates/target_data.py +0 -0
  272. {conan-2.22.2 → conan-2.23.0}/conan/tools/cmake/cmakedeps/templates/targets.py +0 -0
  273. {conan-2.22.2 → conan-2.23.0}/conan/tools/cmake/cmakedeps2/__init__.py +0 -0
  274. {conan-2.22.2 → conan-2.23.0}/conan/tools/cmake/cmakedeps2/cmakedeps.py +0 -0
  275. {conan-2.22.2 → conan-2.23.0}/conan/tools/cmake/cmakedeps2/config.py +0 -0
  276. {conan-2.22.2 → conan-2.23.0}/conan/tools/cmake/cmakedeps2/config_version.py +0 -0
  277. {conan-2.22.2 → conan-2.23.0}/conan/tools/cmake/cmakedeps2/targets.py +0 -0
  278. {conan-2.22.2 → conan-2.23.0}/conan/tools/cmake/layout.py +0 -0
  279. {conan-2.22.2 → conan-2.23.0}/conan/tools/cmake/presets.py +0 -0
  280. {conan-2.22.2 → conan-2.23.0}/conan/tools/cmake/toolchain/__init__.py +0 -0
  281. {conan-2.22.2 → conan-2.23.0}/conan/tools/cmake/utils.py +0 -0
  282. {conan-2.22.2 → conan-2.23.0}/conan/tools/cps/__init__.py +0 -0
  283. {conan-2.22.2 → conan-2.23.0}/conan/tools/cps/cps_deps.py +0 -0
  284. {conan-2.22.2 → conan-2.23.0}/conan/tools/env/__init__.py +0 -0
  285. {conan-2.22.2 → conan-2.23.0}/conan/tools/env/environment.py +0 -0
  286. {conan-2.22.2 → conan-2.23.0}/conan/tools/env/virtualbuildenv.py +0 -0
  287. {conan-2.22.2 → conan-2.23.0}/conan/tools/env/virtualrunenv.py +0 -0
  288. {conan-2.22.2 → conan-2.23.0}/conan/tools/files/__init__.py +0 -0
  289. {conan-2.22.2 → conan-2.23.0}/conan/tools/files/conandata.py +0 -0
  290. {conan-2.22.2 → conan-2.23.0}/conan/tools/files/copy_pattern.py +0 -0
  291. {conan-2.22.2 → conan-2.23.0}/conan/tools/files/files.py +0 -0
  292. {conan-2.22.2 → conan-2.23.0}/conan/tools/files/patches.py +0 -0
  293. {conan-2.22.2 → conan-2.23.0}/conan/tools/files/symlinks/__init__.py +0 -0
  294. {conan-2.22.2 → conan-2.23.0}/conan/tools/files/symlinks/symlinks.py +0 -0
  295. {conan-2.22.2 → conan-2.23.0}/conan/tools/gnu/__init__.py +0 -0
  296. {conan-2.22.2 → conan-2.23.0}/conan/tools/gnu/autotools.py +0 -0
  297. {conan-2.22.2 → conan-2.23.0}/conan/tools/gnu/autotoolsdeps.py +0 -0
  298. {conan-2.22.2 → conan-2.23.0}/conan/tools/gnu/autotoolstoolchain.py +0 -0
  299. {conan-2.22.2 → conan-2.23.0}/conan/tools/gnu/get_gnu_triplet.py +0 -0
  300. {conan-2.22.2 → conan-2.23.0}/conan/tools/gnu/gnudeps_flags.py +0 -0
  301. {conan-2.22.2 → conan-2.23.0}/conan/tools/gnu/gnutoolchain.py +0 -0
  302. {conan-2.22.2 → conan-2.23.0}/conan/tools/gnu/makedeps.py +0 -0
  303. {conan-2.22.2 → conan-2.23.0}/conan/tools/gnu/pkgconfig.py +0 -0
  304. {conan-2.22.2 → conan-2.23.0}/conan/tools/gnu/pkgconfigdeps.py +0 -0
  305. {conan-2.22.2 → conan-2.23.0}/conan/tools/google/__init__.py +0 -0
  306. {conan-2.22.2 → conan-2.23.0}/conan/tools/google/bazel.py +0 -0
  307. {conan-2.22.2 → conan-2.23.0}/conan/tools/google/layout.py +0 -0
  308. {conan-2.22.2 → conan-2.23.0}/conan/tools/google/toolchain.py +0 -0
  309. {conan-2.22.2 → conan-2.23.0}/conan/tools/intel/__init__.py +0 -0
  310. {conan-2.22.2 → conan-2.23.0}/conan/tools/intel/intel_cc.py +0 -0
  311. {conan-2.22.2 → conan-2.23.0}/conan/tools/layout/__init__.py +0 -0
  312. {conan-2.22.2 → conan-2.23.0}/conan/tools/meson/__init__.py +0 -0
  313. {conan-2.22.2 → conan-2.23.0}/conan/tools/meson/helpers.py +0 -0
  314. {conan-2.22.2 → conan-2.23.0}/conan/tools/microsoft/__init__.py +0 -0
  315. {conan-2.22.2 → conan-2.23.0}/conan/tools/microsoft/layout.py +0 -0
  316. {conan-2.22.2 → conan-2.23.0}/conan/tools/microsoft/msbuild.py +0 -0
  317. {conan-2.22.2 → conan-2.23.0}/conan/tools/microsoft/msbuilddeps.py +0 -0
  318. {conan-2.22.2 → conan-2.23.0}/conan/tools/microsoft/nmakedeps.py +0 -0
  319. {conan-2.22.2 → conan-2.23.0}/conan/tools/microsoft/nmaketoolchain.py +0 -0
  320. {conan-2.22.2 → conan-2.23.0}/conan/tools/microsoft/subsystems.py +0 -0
  321. {conan-2.22.2 → conan-2.23.0}/conan/tools/premake/__init__.py +0 -0
  322. {conan-2.22.2 → conan-2.23.0}/conan/tools/premake/constants.py +0 -0
  323. {conan-2.22.2 → conan-2.23.0}/conan/tools/premake/premakedeps.py +0 -0
  324. {conan-2.22.2 → conan-2.23.0}/conan/tools/premake/toolchain.py +0 -0
  325. {conan-2.22.2 → conan-2.23.0}/conan/tools/qbs/__init__.py +0 -0
  326. {conan-2.22.2 → conan-2.23.0}/conan/tools/qbs/common.py +0 -0
  327. {conan-2.22.2 → conan-2.23.0}/conan/tools/qbs/qbs.py +0 -0
  328. {conan-2.22.2 → conan-2.23.0}/conan/tools/qbs/qbsdeps.py +0 -0
  329. {conan-2.22.2 → conan-2.23.0}/conan/tools/qbs/qbsprofile.py +0 -0
  330. {conan-2.22.2 → conan-2.23.0}/conan/tools/ros/__init__.py +0 -0
  331. {conan-2.22.2 → conan-2.23.0}/conan/tools/ros/rosenv.py +0 -0
  332. {conan-2.22.2 → conan-2.23.0}/conan/tools/sbom/__init__.py +0 -0
  333. {conan-2.22.2 → conan-2.23.0}/conan/tools/sbom/cyclonedx.py +0 -0
  334. {conan-2.22.2 → conan-2.23.0}/conan/tools/sbom/spdx_licenses.py +0 -0
  335. {conan-2.22.2 → conan-2.23.0}/conan/tools/scm/__init__.py +0 -0
  336. {conan-2.22.2 → conan-2.23.0}/conan/tools/scm/git.py +0 -0
  337. {conan-2.22.2 → conan-2.23.0}/conan/tools/scons/__init__.py +0 -0
  338. {conan-2.22.2 → conan-2.23.0}/conan/tools/scons/sconsdeps.py +0 -0
  339. {conan-2.22.2 → conan-2.23.0}/conan/tools/system/__init__.py +0 -0
  340. {conan-2.22.2 → conan-2.23.0}/conan.egg-info/dependency_links.txt +0 -0
  341. {conan-2.22.2 → conan-2.23.0}/conan.egg-info/entry_points.txt +0 -0
  342. {conan-2.22.2 → conan-2.23.0}/conan.egg-info/top_level.txt +0 -0
  343. {conan-2.22.2 → conan-2.23.0}/conans/__init__.py +0 -0
  344. {conan-2.22.2 → conan-2.23.0}/conans/conan.py +0 -0
  345. {conan-2.22.2 → conan-2.23.0}/conans/conan_server.py +0 -0
  346. {conan-2.22.2 → conan-2.23.0}/conans/migrations.py +0 -0
  347. {conan-2.22.2 → conan-2.23.0}/conans/requirements_runner.txt +0 -0
  348. {conan-2.22.2 → conan-2.23.0}/conans/requirements_server.txt +0 -0
  349. {conan-2.22.2 → conan-2.23.0}/pyproject.toml +0 -0
  350. {conan-2.22.2 → conan-2.23.0}/setup.cfg +0 -0
  351. {conan-2.22.2 → conan-2.23.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.23.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.23.0'
6
6
  conan_version = Version(__version__)
@@ -150,4 +150,3 @@ class ConanAPI:
150
150
  @property
151
151
  def requester(self):
152
152
  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)
@@ -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
@@ -104,7 +105,8 @@ class CacheAPI:
104
105
  if not os.path.exists(manifest) or not os.path.exists(info):
105
106
  rmdir(folder)
106
107
  if backup_sources:
107
- backup_files = self._conan_api.cache.get_backup_sources(package_list, exclude=False, only_upload=False)
108
+ backup_files = self._conan_api.cache.get_backup_sources(package_list, exclude=False,
109
+ only_upload=False)
108
110
  ConanOutput().verbose(f"Cleaning {len(backup_files)} backup sources")
109
111
  for f in backup_files:
110
112
  remove(f)
@@ -175,7 +177,8 @@ class CacheAPI:
175
177
  pkglist_path = os.path.join(tempfile.gettempdir(), "pkglist.json")
176
178
  save(pkglist_path, serialized)
177
179
  tar_files["pkglist.json"] = pkglist_path
178
- compress_files(tar_files, os.path.basename(tgz_path), os.path.dirname(tgz_path), compresslevel, recursive=True)
180
+ compress_files(tar_files, os.path.basename(tgz_path), os.path.dirname(tgz_path),
181
+ compresslevel, recursive=True)
179
182
  remove(pkglist_path)
180
183
 
181
184
  def restore(self, path):
@@ -260,7 +263,8 @@ class CacheAPI:
260
263
  download_cache_path = config.get("core.sources:download_cache")
261
264
  download_cache_path = download_cache_path or HomePaths(
262
265
  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 []
266
+ excluded_urls = config.get("core.sources:exclude_urls",
267
+ check_type=list, default=[]) if exclude else []
264
268
  download_cache = DownloadCache(download_cache_path)
265
269
  return download_cache.get_backup_sources_files(excluded_urls, package_list, only_upload)
266
270
 
@@ -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)
@@ -164,8 +165,8 @@ class GraphAPI:
164
165
  """ Compute the dependency graph, starting from a root package, evaluation the graph with
165
166
  the provided configuration in profile_build, and profile_host. The resulting graph is a
166
167
  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
168
+ result. The result might have errors, like version or configuration conflicts, but it is
169
+ still possible to inspect it. Only trying to install such graph will fail
169
170
 
170
171
  :param root_node: the starting point, an already initialized Node structure, as
171
172
  returned by the "load_root_node" api
@@ -189,8 +190,8 @@ class GraphAPI:
189
190
  deps_graph = builder.load_graph(root_node, profile_host, profile_build, lockfile)
190
191
  return deps_graph
191
192
 
192
- def analyze_binaries(self, graph, build_mode=None, remotes=None, update=None, lockfile=None,
193
- build_modes_test=None, tested_graph=None):
193
+ def analyze_binaries(self, graph, build_mode=None, remotes=None, update=None,
194
+ lockfile=None, build_modes_test=None, tested_graph=None):
194
195
  """ Given a dependency graph, will compute the package_ids of all recipes in the graph, and
195
196
  evaluate if they should be built from sources, downloaded from a remote server, of if the
196
197
  packages are already in the local Conan cache
@@ -199,8 +200,12 @@ class GraphAPI:
199
200
  :param graph: a Conan dependency graph, as returned by "load_graph()"
200
201
  :param build_mode: TODO: Discuss if this should be a BuildMode object or list of arguments
201
202
  :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
203
+ :param update: (``False`` by default), if Conan should look for newer versions or
204
+ revisions for already existing recipes in the Conan cache. It also accepts an array of
205
+ reference patterns to limit the update to those references if any of the items match.
206
+ Eg. ``False``, ``None`` or ``[]`` *means no update*,
207
+ ``True`` or ``["*"]`` *means update all*,
208
+ and ``["pkgA/*", "pkgB/1.0@user/channel"]`` *means to update only specific packages*.
204
209
  :param build_modes_test: the --build-test argument
205
210
  :param tested_graph: In case of a "test_package", the graph being tested
206
211
  """
@@ -6,7 +6,7 @@ from conan.internal.deploy import do_deploys
6
6
 
7
7
  from conan.internal.graph.install_graph import InstallGraph
8
8
  from conan.internal.graph.installer import BinaryInstaller
9
- from conan.errors import ConanInvalidConfiguration
9
+ from conan.errors import ConanInvalidConfiguration, ConanException
10
10
 
11
11
 
12
12
  class InstallAPI:
@@ -15,10 +15,11 @@ class InstallAPI:
15
15
  self._conan_api = conan_api
16
16
  self._helpers = helpers
17
17
 
18
- def install_binaries(self, deps_graph, remotes=None):
18
+ def install_binaries(self, deps_graph, remotes=None, return_install_error=False):
19
19
  """ Install binaries for dependency graph
20
20
  :param deps_graph: Dependency graph to intall packages for
21
21
  :param remotes:
22
+ :param return_install_error: If True, do not raise an exception, but return it
22
23
  """
23
24
  app = ConanBasicApp(self._conan_api)
24
25
  installer = BinaryInstaller(app, self._helpers.global_conf, app.editable_packages,
@@ -27,7 +28,14 @@ class InstallAPI:
27
28
  install_graph.raise_errors()
28
29
  install_order = install_graph.install_order()
29
30
  installer.install_system_requires(deps_graph, install_order=install_order)
30
- installer.install(deps_graph, remotes, install_order=install_order)
31
+ try: # To be able to capture the output, report or save graph.json, then raise later
32
+ installer.install(deps_graph, remotes, install_order=install_order)
33
+ except ConanException as e:
34
+ # If true, allows to return the exception, so progress can be reported like the
35
+ # already built binaries to upload them
36
+ if not return_install_error:
37
+ raise
38
+ return e
31
39
 
32
40
  def install_system_requires(self, graph, only_info=False):
33
41
  """ Install binaries for dependency graph
@@ -52,7 +60,8 @@ class InstallAPI:
52
60
 
53
61
  # TODO: Look for a better name
54
62
  def install_consumer(self, deps_graph, generators=None, source_folder=None, output_folder=None,
55
- deploy=False, deploy_package=None, deploy_folder=None, envs_generation=None):
63
+ deploy=False, deploy_package=None, deploy_folder=None,
64
+ envs_generation=None):
56
65
  """ Once a dependency graph has been installed, there are things to be done, like invoking
57
66
  generators for the root consumer.
58
67
  This is necessary for example for conanfile.txt/py, or for "conan install <ref> -g
@@ -93,5 +102,5 @@ class InstallAPI:
93
102
  envs_generation=envs_generation)
94
103
 
95
104
  def deploy(self, graph, deployer, deploy_package=None, deploy_folder=None):
96
- return do_deploys(self._conan_api.home_folder, graph, deployer, deploy_package=deploy_package,
97
- deploy_folder=deploy_folder)
105
+ return do_deploys(self._conan_api.home_folder, graph, deployer,
106
+ deploy_package=deploy_package, deploy_folder=deploy_folder)
@@ -1,4 +1,3 @@
1
- import copy
2
1
  import os
3
2
  from collections import OrderedDict
4
3
  from typing import Dict
@@ -318,27 +317,50 @@ class ListAPI:
318
317
  (Experimental) Find the remotes where the current package lists can be found
319
318
  """
320
319
  result = MultiPackagesList()
320
+ app = ConanBasicApp(self._conan_api)
321
321
  for r in remotes:
322
322
  result_pkg_list = PackagesList()
323
- for ref, packages in package_list.items():
324
- ref_no_rev = copy.copy(ref) # TODO: Improve ugly API
325
- ref_no_rev.revision = None
323
+ for ref, ref_contents in package_list.serialize().items():
324
+ ref = RecipeReference.loads(ref)
326
325
  try:
327
- revs = self.recipe_revisions(ref_no_rev, remote=r)
326
+ remote_rrevs = app.remote_manager.get_recipe_revisions(ref, remote=r)
328
327
  except NotFoundException:
329
328
  continue
330
- if ref not in revs: # not found
329
+ revisions = ref_contents.get("revisions")
330
+ if revisions is None: # This is a package list just with name/version
331
+ if remote_rrevs:
332
+ result_pkg_list.add_ref(ref)
331
333
  continue
332
- result_pkg_list.add_ref(ref)
333
- for pref, pkg_info in packages.items():
334
- pref_no_rev = copy.copy(pref) # TODO: Improve ugly API
335
- pref_no_rev.revision = None
336
- try:
337
- prevs = self.package_revisions(pref_no_rev, remote=r)
338
- except NotFoundException:
334
+
335
+ for revision, rev_content in revisions.items():
336
+ ref.revision = revision
337
+ # We look for the value of revision in server, to return timestamp too
338
+ found = next((r for r in remote_rrevs if r == ref), None)
339
+ if not found:
339
340
  continue
340
- if pref in prevs:
341
- result_pkg_list.add_pref(pref, pkg_info)
341
+ result_pkg_list.add_ref(found)
342
+ packages = rev_content.get("packages")
343
+ if packages is None:
344
+ continue
345
+ for pkgid, pkgcontent in packages.items():
346
+ pref = PkgReference(ref, pkgid)
347
+ try:
348
+ remote_prefs = app.remote_manager.get_package_revisions(pref, remote=r)
349
+ except NotFoundException:
350
+ continue
351
+ pkg_revisions = pkgcontent.get("revisions")
352
+ if pkg_revisions is None: # This is a package_id, no prevs
353
+ if remote_prefs:
354
+ result_pkg_list.add_pref(pref, pkgcontent.get("info"))
355
+ continue
356
+ for pkg_revision, prev_content in pkg_revisions.items():
357
+ pref.revision = pkg_revision
358
+ # We look for the value of revision in server, to return timestamp too
359
+ pfound = next((r for r in remote_prefs if r == pref), None)
360
+ if not pfound:
361
+ continue
362
+ result_pkg_list.add_pref(pfound, pkgcontent.get("info"))
363
+
342
364
  if result_pkg_list:
343
365
  result.add(r.name, result_pkg_list)
344
366
  return result
@@ -166,7 +166,7 @@ class NewAPI:
166
166
  @staticmethod
167
167
  def render(template_files, definitions):
168
168
  result = {}
169
- name = definitions.get("name", "pkg")
169
+ name = definitions.get("name", "mypkg")
170
170
  if isinstance(name, list):
171
171
  raise ConanException(f"name argument can't be multiple: {name}")
172
172
  if name != name.lower():
@@ -58,7 +58,8 @@ class RemotesAPI:
58
58
 
59
59
  :param pattern: single ``str`` or list of ``str``. If the pattern is an exact name without
60
60
  wildcards like "*" and no remote is found matching that exact name, it will raise an error.
61
- :return: the list of disabled :ref:`Remote <conan.api.model.Remote>` objects (even if they were already disabled)
61
+ :return: the list of disabled :ref:`Remote <conan.api.model.Remote>` objects (even if they
62
+ were already disabled)
62
63
  """
63
64
  remotes = _load(self._remotes_file)
64
65
  disabled = _filter(remotes, pattern, only_enabled=False)
@@ -76,7 +77,8 @@ class RemotesAPI:
76
77
 
77
78
  :param pattern: single ``str`` or list of ``str``. If the pattern is an exact name without
78
79
  wildcards like "*" and no remote is found matching that exact name, it will raise an error.
79
- :return: the list of enabled :ref:`Remote <conan.api.model.Remote>` objects (even if they were already enabled)
80
+ :return: the list of enabled :ref:`Remote <conan.api.model.Remote>` objects (even if they
81
+ were already enabled)
80
82
  """
81
83
  remotes = _load(self._remotes_file)
82
84
  enabled = _filter(remotes, pattern, only_enabled=False)
@@ -93,7 +95,8 @@ class RemotesAPI:
93
95
  Obtain a :ref:`Remote <conan.api.model.Remote>` object
94
96
 
95
97
  :param remote_name: the exact name of the remote to be returned
96
- :return: the :ref:`Remote <conan.api.model.Remote>` object, or raise an Exception if the remote does not exist.
98
+ :return: the :ref:`Remote <conan.api.model.Remote>` object, or raise an Exception if the
99
+ remote does not exist.
97
100
  """
98
101
  remotes = _load(self._remotes_file)
99
102
  try:
@@ -41,7 +41,6 @@ class ReportAPI:
41
41
  remotes)
42
42
  return export_ref, cache_path
43
43
 
44
-
45
44
  old_export_ref, old_cache_path = _source(old_path, old_reference)
46
45
  new_export_ref, new_cache_path = _source(new_path, new_reference)
47
46
 
@@ -79,6 +78,7 @@ class ReportAPI:
79
78
  "dst_prefix": dst_prefix,
80
79
  }
81
80
 
81
+
82
82
  def _configure_source(conan_api, hook_manager, conanfile_path, ref, remotes):
83
83
  app = ConanApp(conan_api)
84
84
  conanfile = app.loader.load_consumer(conanfile_path, name=ref.name, version=str(ref.version),
@@ -101,6 +101,7 @@ def _configure_source(conan_api, hook_manager, conanfile_path, ref, remotes):
101
101
  conanfile.folders.set_base_recipe_metadata(recipe_layout.metadata())
102
102
  config_source(export_source_folder, conanfile, hook_manager)
103
103
 
104
+
104
105
  def _get_ref_from_cache_or_remote(conan_api, reference, enabled_remotes):
105
106
  ref = RecipeReference.loads(reference)
106
107
  full_ref, matching_remote = None, False
@@ -18,8 +18,8 @@ from conan.internal.methods import auto_language, auto_shared_fpic_config_option
18
18
  from conan.internal.model.options import Options
19
19
  from conan.internal.model.workspace import Workspace, WORKSPACE_YML, WORKSPACE_PY, WORKSPACE_FOLDER
20
20
  from conan.tools.scm import Git
21
- from conan.internal.graph.graph import RECIPE_EDITABLE, DepsGraph, CONTEXT_HOST, RECIPE_VIRTUAL, Node, \
22
- RECIPE_CONSUMER
21
+ from conan.internal.graph.graph import (RECIPE_EDITABLE, DepsGraph, CONTEXT_HOST, RECIPE_VIRTUAL,
22
+ Node, RECIPE_CONSUMER)
23
23
  from conan.internal.graph.graph import TransitiveRequirement
24
24
  from conan.internal.graph.profile_node_definer import consumer_definer, initialize_conanfile_profile
25
25
  from conan.internal.loader import load_python_file
@@ -95,7 +95,6 @@ class WorkspaceAPI:
95
95
  def enable(self, value):
96
96
  self._enabled = value
97
97
 
98
- @property
99
98
  def name(self):
100
99
  self._check_ws()
101
100
  return self._ws.name()
@@ -118,7 +117,7 @@ class WorkspaceAPI:
118
117
  rel_path = editable_info["path"]
119
118
  path = os.path.normpath(os.path.join(self._folder, rel_path, "conanfile.py"))
120
119
  if not os.path.isfile(path):
121
- raise ConanException(f"Workspace editable not found: {path}")
120
+ raise ConanException(f"Workspace package not found: {path}")
122
121
  ref = editable_info.get("ref")
123
122
  try:
124
123
  if ref is None:
@@ -128,12 +127,12 @@ class WorkspaceAPI:
128
127
  else:
129
128
  reference = RecipeReference.loads(ref)
130
129
  reference.validate_ref(reference)
131
- except:
132
- raise ConanException(f"Workspace editable reference could not be deduced by"
130
+ except Exception as e:
131
+ raise ConanException(f"Workspace package reference could not be deduced by"
133
132
  f" {rel_path}/conanfile.py or it is not"
134
- f" correctly defined in the conanws.yml file.")
133
+ f" correctly defined in the conanws.yml file: {e}")
135
134
  if reference in packages:
136
- raise ConanException(f"Workspace editable reference '{str(reference)}' already exists.")
135
+ raise ConanException(f"Workspace package '{str(reference)}' already exists.")
137
136
  packages[reference] = {"path": path}
138
137
  if editable_info.get("output_folder"):
139
138
  packages[reference]["output_folder"] = (
@@ -238,7 +237,7 @@ class WorkspaceAPI:
238
237
 
239
238
  def info(self):
240
239
  self._check_ws()
241
- return {"name": self.name,
240
+ return {"name": self._ws.name(),
242
241
  "folder": self._folder,
243
242
  "packages": self._ws.packages()}
244
243
 
@@ -281,17 +280,20 @@ class WorkspaceAPI:
281
280
  root_class = self._ws.root_conanfile()
282
281
  if root_class is not None:
283
282
  conanfile = root_class(f"{WORKSPACE_PY} base project Conanfile")
283
+ # To inject things like cmd_wrapper to the consumer conanfile, so self.run() works
284
+ helpers = ConanApp(self._conan_api).loader._conanfile_helpers # noqa
285
+ conanfile._conan_helpers = helpers
284
286
  initialize_conanfile_profile(conanfile, profile_build, profile_host, CONTEXT_HOST,
285
287
  is_build_require=False)
286
288
  # consumer_definer(conanfile, profile_host, profile_build)
287
289
  self._init_options(conanfile, profile_host.options)
288
- root = Node(None, conanfile, context=CONTEXT_HOST, recipe=RECIPE_CONSUMER,
289
- path=self._folder) # path lets use the conanws.py folder
290
- root.should_build = True # It is a consumer, this is something we are building
291
290
  for field in ("requires", "build_requires", "test_requires", "requirements", "build",
292
291
  "source", "package"):
293
292
  if getattr(conanfile, field, None):
294
293
  raise ConanException(f"Conanfile in conanws.py shouldn't have '{field}'")
294
+ root = Node(None, conanfile, context=CONTEXT_HOST, recipe=RECIPE_CONSUMER,
295
+ path=self._folder) # path lets use the conanws.py folder
296
+ root.should_build = True # It is a consumer, this is something we are building
295
297
  else:
296
298
  ConanOutput().info(f"Workspace {WORKSPACE_PY} not found in the workspace folder, "
297
299
  "using default behavior")
@@ -301,7 +303,7 @@ class WorkspaceAPI:
301
303
 
302
304
  result = DepsGraph() # TODO: We might need to copy more information from the original graph
303
305
  result.add_node(root)
304
- conanfile.workspace_packages_options = {}
306
+ conanfile.workspace_packages = {}
305
307
  for node in deps_graph.nodes[1:]: # Exclude the current root
306
308
  if node.recipe != RECIPE_EDITABLE:
307
309
  # sanity check, a pacakge in the cache cannot have dependencies to the workspace
@@ -313,7 +315,9 @@ class WorkspaceAPI:
313
315
  f"in the workspace: {deps_edit}")
314
316
  result.add_node(node)
315
317
  continue
316
- conanfile.workspace_packages_options[node.ref] = node.conanfile.options.serialize()
318
+ # At the moment we are exposing the full conanfile, docs will warn against usage of
319
+ # non pure functions
320
+ conanfile.workspace_packages[node.ref] = node.conanfile
317
321
  for r, t in node.transitive_deps.items():
318
322
  if t.node.recipe == RECIPE_EDITABLE:
319
323
  continue
@@ -95,6 +95,7 @@ class Cli:
95
95
  if command_wrapper.doc:
96
96
  name = f"{package}:{command_wrapper.name}" if package else command_wrapper.name
97
97
  self._commands[name] = command_wrapper
98
+ command_wrapper._prog = name # set the program name with possible package, if any
98
99
  # Avoiding duplicated command help messages
99
100
  if name not in self._groups[command_wrapper.group]:
100
101
  self._groups[command_wrapper.group].append(name)
@@ -49,7 +49,7 @@ class BaseConanCommand:
49
49
  def _init_core_options(parser):
50
50
  # Define possible levels, including "" for verbose
51
51
  possible_levels = list(ConanOutput.valid_log_levels().keys())
52
- possible_levels[possible_levels.index(None)] = ""
52
+ possible_levels.pop(possible_levels.index(None))
53
53
  parser.add_argument("-v", default="status", nargs='?',
54
54
  help="Level of detail of the output. Valid options from less verbose "
55
55
  "to more verbose: -vquiet, -verror, -vwarning, -vnotice, -vstatus, "
@@ -116,7 +116,12 @@ class BaseConanCommand:
116
116
  def _dispatch_errors(info):
117
117
  if info and isinstance(info, dict):
118
118
  if info.get("conan_error"):
119
- raise ConanException(info["conan_error"])
119
+ e = info["conan_error"]
120
+ # Storing and launching an exception is better than the string, as it keeps
121
+ # the correct backtrace for debugging.
122
+ if isinstance(e, Exception):
123
+ raise e
124
+ raise ConanException(e)
120
125
  if info.get("conan_warning"):
121
126
  ConanOutput().warning(info["conan_warning"])
122
127
 
@@ -152,6 +157,7 @@ class ConanCommand(BaseConanCommand):
152
157
  self._subcommands = {}
153
158
  self._group = group or "Other"
154
159
  self._name = method.__name__.replace("_", "-")
160
+ self._prog = self._name
155
161
 
156
162
  def add_subcommand(self, subcommand):
157
163
  subcommand.set_name(self.name)
@@ -159,7 +165,7 @@ class ConanCommand(BaseConanCommand):
159
165
 
160
166
  def run_cli(self, conan_api, *args):
161
167
  parser = ConanArgumentParser(conan_api, description=self._doc,
162
- prog="conan {}".format(self._name),
168
+ prog="conan {}".format(self._prog),
163
169
  formatter_class=SmartFormatter)
164
170
  self._init_formatters(parser)
165
171
  self._init_core_options(parser)
@@ -182,7 +188,7 @@ class ConanCommand(BaseConanCommand):
182
188
 
183
189
  def run(self, conan_api, *args):
184
190
  parser = ConanArgumentParser(conan_api, description=self._doc,
185
- prog="conan {}".format(self._name),
191
+ prog="conan {}".format(self._prog),
186
192
  formatter_class=SmartFormatter)
187
193
  self._init_formatters(parser)
188
194
  self._init_core_options(parser)
@@ -68,6 +68,7 @@ def create(conan_api, parser, *args):
68
68
  if args.build is not None and args.build_test is None:
69
69
  args.build_test = args.build
70
70
 
71
+ install_error = None
71
72
  if is_python_require:
72
73
  deps_graph = conan_api.graph.load_graph_requires([], [],
73
74
  profile_host=profile_host,
@@ -98,7 +99,9 @@ def create(conan_api, parser, *args):
98
99
  update=args.update, lockfile=lockfile)
99
100
  print_graph_packages(deps_graph)
100
101
 
101
- conan_api.install.install_binaries(deps_graph=deps_graph, remotes=remotes)
102
+ install_error = conan_api.install.install_binaries(deps_graph=deps_graph, remotes=remotes,
103
+ return_install_error=True)
104
+
102
105
  # We update the lockfile, so it will be updated for later ``test_package``
103
106
  lockfile = conan_api.lockfile.update_lockfile(lockfile, deps_graph, args.lockfile_packages,
104
107
  clean=args.lockfile_clean)
@@ -111,7 +114,7 @@ def create(conan_api, parser, *args):
111
114
  and deps_graph.root.edges[0].dst.binary != "Build":
112
115
  test_conanfile_path = None # disable it
113
116
 
114
- if test_conanfile_path:
117
+ if test_conanfile_path and not install_error:
115
118
  # TODO: We need arguments for:
116
119
  # - decide update policy "--test_package_update"
117
120
  # If it is a string, it will be injected always, if it is a RecipeReference, then it will
@@ -126,7 +129,8 @@ def create(conan_api, parser, *args):
126
129
 
127
130
  conan_api.lockfile.save_lockfile(lockfile, args.lockfile_out, cwd)
128
131
  return {"graph": deps_graph,
129
- "conan_api": conan_api}
132
+ "conan_api": conan_api,
133
+ "conan_error": install_error}
130
134
 
131
135
 
132
136
  def _check_tested_reference_matches(deps_graph, tested_ref, out):