conan 2.14.0__tar.gz → 2.15.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (346) hide show
  1. {conan-2.14.0/conan.egg-info → conan-2.15.1}/PKG-INFO +1 -1
  2. {conan-2.14.0 → conan-2.15.1}/conan/__init__.py +1 -1
  3. {conan-2.14.0 → conan-2.15.1}/conan/api/model/list.py +49 -4
  4. {conan-2.14.0 → conan-2.15.1}/conan/api/subapi/audit.py +6 -3
  5. {conan-2.14.0 → conan-2.15.1}/conan/api/subapi/command.py +27 -3
  6. {conan-2.14.0 → conan-2.15.1}/conan/api/subapi/list.py +79 -2
  7. {conan-2.14.0 → conan-2.15.1}/conan/cli/cli.py +2 -2
  8. {conan-2.14.0 → conan-2.15.1}/conan/cli/commands/audit.py +11 -8
  9. {conan-2.14.0 → conan-2.15.1}/conan/cli/commands/create.py +5 -22
  10. {conan-2.14.0 → conan-2.15.1}/conan/cli/commands/graph.py +5 -50
  11. {conan-2.14.0 → conan-2.15.1}/conan/cli/commands/list.py +5 -2
  12. {conan-2.14.0 → conan-2.15.1}/conan/cli/commands/pkglist.py +4 -34
  13. conan-2.15.1/conan/cli/formatters/graph/graph.py +62 -0
  14. {conan-2.14.0 → conan-2.15.1}/conan/cli/formatters/list/list.py +4 -2
  15. {conan-2.14.0 → conan-2.15.1}/conan/cli/printers/graph.py +10 -6
  16. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/audit/providers.py +20 -23
  17. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/detect/detect_api.py +5 -2
  18. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/install/generators.py +15 -10
  19. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/uploader.py +1 -1
  20. {conan-2.14.0 → conan-2.15.1}/conan/internal/cache/home_paths.py +4 -4
  21. {conan-2.14.0 → conan-2.15.1}/conan/internal/default_settings.py +13 -11
  22. {conan-2.14.0 → conan-2.15.1}/conan/internal/model/conan_file.py +2 -1
  23. {conan-2.14.0 → conan-2.15.1}/conan/internal/model/conf.py +7 -9
  24. {conan-2.14.0 → conan-2.15.1}/conan/internal/model/cpp_info.py +11 -12
  25. {conan-2.14.0 → conan-2.15.1}/conan/internal/model/version_range.py +8 -1
  26. {conan-2.14.0 → conan-2.15.1}/conan/test/utils/tools.py +13 -0
  27. {conan-2.14.0 → conan-2.15.1}/conan/tools/apple/apple.py +3 -3
  28. {conan-2.14.0 → conan-2.15.1}/conan/tools/cmake/cmakedeps2/target_configuration.py +6 -3
  29. {conan-2.14.0 → conan-2.15.1}/conan/tools/files/__init__.py +1 -1
  30. {conan-2.14.0 → conan-2.15.1}/conan/tools/files/files.py +86 -7
  31. {conan-2.14.0 → conan-2.15.1}/conan/tools/meson/helpers.py +11 -0
  32. {conan-2.14.0 → conan-2.15.1}/conan/tools/meson/toolchain.py +13 -0
  33. {conan-2.14.0 → conan-2.15.1}/conan/tools/microsoft/msbuilddeps.py +9 -4
  34. {conan-2.14.0 → conan-2.15.1}/conan/tools/sbom/cyclonedx.py +15 -15
  35. {conan-2.14.0 → conan-2.15.1/conan.egg-info}/PKG-INFO +1 -1
  36. {conan-2.14.0 → conan-2.15.1}/conans/client/downloaders/download_cache.py +3 -2
  37. {conan-2.14.0 → conan-2.15.1}/conans/client/graph/graph.py +0 -7
  38. {conan-2.14.0 → conan-2.15.1}/conans/client/graph/proxy.py +1 -1
  39. {conan-2.14.0 → conan-2.15.1}/conans/client/graph/python_requires.py +1 -1
  40. {conan-2.14.0 → conan-2.15.1}/conans/client/installer.py +1 -4
  41. conan-2.14.0/conan/cli/formatters/graph/graph.py +0 -148
  42. {conan-2.14.0 → conan-2.15.1}/LICENSE.md +0 -0
  43. {conan-2.14.0 → conan-2.15.1}/MANIFEST.in +0 -0
  44. {conan-2.14.0 → conan-2.15.1}/README.md +0 -0
  45. {conan-2.14.0 → conan-2.15.1}/conan/api/__init__.py +0 -0
  46. {conan-2.14.0 → conan-2.15.1}/conan/api/conan_api.py +0 -0
  47. {conan-2.14.0 → conan-2.15.1}/conan/api/input.py +0 -0
  48. {conan-2.14.0 → conan-2.15.1}/conan/api/model/__init__.py +0 -0
  49. {conan-2.14.0 → conan-2.15.1}/conan/api/model/refs.py +0 -0
  50. {conan-2.14.0 → conan-2.15.1}/conan/api/model/remote.py +0 -0
  51. {conan-2.14.0 → conan-2.15.1}/conan/api/output.py +0 -0
  52. {conan-2.14.0 → conan-2.15.1}/conan/api/subapi/__init__.py +0 -0
  53. {conan-2.14.0 → conan-2.15.1}/conan/api/subapi/cache.py +0 -0
  54. {conan-2.14.0 → conan-2.15.1}/conan/api/subapi/config.py +0 -0
  55. {conan-2.14.0 → conan-2.15.1}/conan/api/subapi/download.py +0 -0
  56. {conan-2.14.0 → conan-2.15.1}/conan/api/subapi/export.py +0 -0
  57. {conan-2.14.0 → conan-2.15.1}/conan/api/subapi/graph.py +0 -0
  58. {conan-2.14.0 → conan-2.15.1}/conan/api/subapi/install.py +0 -0
  59. {conan-2.14.0 → conan-2.15.1}/conan/api/subapi/local.py +0 -0
  60. {conan-2.14.0 → conan-2.15.1}/conan/api/subapi/lockfile.py +0 -0
  61. {conan-2.14.0 → conan-2.15.1}/conan/api/subapi/new.py +0 -0
  62. {conan-2.14.0 → conan-2.15.1}/conan/api/subapi/profiles.py +0 -0
  63. {conan-2.14.0 → conan-2.15.1}/conan/api/subapi/remotes.py +0 -0
  64. {conan-2.14.0 → conan-2.15.1}/conan/api/subapi/remove.py +0 -0
  65. {conan-2.14.0 → conan-2.15.1}/conan/api/subapi/search.py +0 -0
  66. {conan-2.14.0 → conan-2.15.1}/conan/api/subapi/upload.py +0 -0
  67. {conan-2.14.0 → conan-2.15.1}/conan/api/subapi/workspace.py +0 -0
  68. {conan-2.14.0 → conan-2.15.1}/conan/cli/__init__.py +0 -0
  69. {conan-2.14.0 → conan-2.15.1}/conan/cli/args.py +0 -0
  70. {conan-2.14.0 → conan-2.15.1}/conan/cli/command.py +0 -0
  71. {conan-2.14.0 → conan-2.15.1}/conan/cli/commands/__init__.py +0 -0
  72. {conan-2.14.0 → conan-2.15.1}/conan/cli/commands/build.py +0 -0
  73. {conan-2.14.0 → conan-2.15.1}/conan/cli/commands/cache.py +0 -0
  74. {conan-2.14.0 → conan-2.15.1}/conan/cli/commands/config.py +0 -0
  75. {conan-2.14.0 → conan-2.15.1}/conan/cli/commands/download.py +0 -0
  76. {conan-2.14.0 → conan-2.15.1}/conan/cli/commands/editable.py +0 -0
  77. {conan-2.14.0 → conan-2.15.1}/conan/cli/commands/export.py +0 -0
  78. {conan-2.14.0 → conan-2.15.1}/conan/cli/commands/export_pkg.py +0 -0
  79. {conan-2.14.0 → conan-2.15.1}/conan/cli/commands/inspect.py +0 -0
  80. {conan-2.14.0 → conan-2.15.1}/conan/cli/commands/install.py +0 -0
  81. {conan-2.14.0 → conan-2.15.1}/conan/cli/commands/lock.py +0 -0
  82. {conan-2.14.0 → conan-2.15.1}/conan/cli/commands/new.py +0 -0
  83. {conan-2.14.0 → conan-2.15.1}/conan/cli/commands/profile.py +0 -0
  84. {conan-2.14.0 → conan-2.15.1}/conan/cli/commands/remote.py +0 -0
  85. {conan-2.14.0 → conan-2.15.1}/conan/cli/commands/remove.py +0 -0
  86. {conan-2.14.0 → conan-2.15.1}/conan/cli/commands/search.py +0 -0
  87. {conan-2.14.0 → conan-2.15.1}/conan/cli/commands/source.py +0 -0
  88. {conan-2.14.0 → conan-2.15.1}/conan/cli/commands/test.py +0 -0
  89. {conan-2.14.0 → conan-2.15.1}/conan/cli/commands/upload.py +0 -0
  90. {conan-2.14.0 → conan-2.15.1}/conan/cli/commands/version.py +0 -0
  91. {conan-2.14.0 → conan-2.15.1}/conan/cli/commands/workspace.py +0 -0
  92. {conan-2.14.0 → conan-2.15.1}/conan/cli/exit_codes.py +0 -0
  93. {conan-2.14.0 → conan-2.15.1}/conan/cli/formatters/__init__.py +0 -0
  94. {conan-2.14.0 → conan-2.15.1}/conan/cli/formatters/audit/__init__.py +0 -0
  95. {conan-2.14.0 → conan-2.15.1}/conan/cli/formatters/audit/vulnerabilities.py +0 -0
  96. {conan-2.14.0 → conan-2.15.1}/conan/cli/formatters/graph/__init__.py +0 -0
  97. {conan-2.14.0 → conan-2.15.1}/conan/cli/formatters/graph/build_order_html.py +0 -0
  98. {conan-2.14.0 → conan-2.15.1}/conan/cli/formatters/graph/graph_info_text.py +0 -0
  99. {conan-2.14.0 → conan-2.15.1}/conan/cli/formatters/graph/info_graph_dot.py +0 -0
  100. {conan-2.14.0 → conan-2.15.1}/conan/cli/formatters/graph/info_graph_html.py +0 -0
  101. {conan-2.14.0 → conan-2.15.1}/conan/cli/formatters/list/__init__.py +0 -0
  102. {conan-2.14.0 → conan-2.15.1}/conan/cli/formatters/list/search_table_html.py +0 -0
  103. {conan-2.14.0 → conan-2.15.1}/conan/cli/printers/__init__.py +0 -0
  104. {conan-2.14.0 → conan-2.15.1}/conan/cps/__init__.py +0 -0
  105. {conan-2.14.0 → conan-2.15.1}/conan/cps/cps.py +0 -0
  106. {conan-2.14.0 → conan-2.15.1}/conan/errors.py +0 -0
  107. {conan-2.14.0 → conan-2.15.1}/conan/internal/__init__.py +0 -0
  108. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/__init__.py +0 -0
  109. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/audit/__init__.py +0 -0
  110. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/config/__init__.py +0 -0
  111. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/config/config_installer.py +0 -0
  112. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/detect/__init__.py +0 -0
  113. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/detect/detect_vs.py +0 -0
  114. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/export.py +0 -0
  115. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/install/__init__.py +0 -0
  116. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/list/__init__.py +0 -0
  117. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/list/query_parse.py +0 -0
  118. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/local/__init__.py +0 -0
  119. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/local/editable.py +0 -0
  120. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/new/__init__.py +0 -0
  121. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/new/alias_new.py +0 -0
  122. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/new/autoools_exe.py +0 -0
  123. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/new/autotools_lib.py +0 -0
  124. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/new/basic.py +0 -0
  125. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/new/bazel_7_exe.py +0 -0
  126. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/new/bazel_7_lib.py +0 -0
  127. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/new/bazel_exe.py +0 -0
  128. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/new/bazel_lib.py +0 -0
  129. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/new/cmake_exe.py +0 -0
  130. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/new/cmake_lib.py +0 -0
  131. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/new/local_recipes_index.py +0 -0
  132. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/new/meson_exe.py +0 -0
  133. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/new/meson_lib.py +0 -0
  134. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/new/msbuild_exe.py +0 -0
  135. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/new/msbuild_lib.py +0 -0
  136. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/new/qbs_lib.py +0 -0
  137. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/new/workspace.py +0 -0
  138. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/profile/__init__.py +0 -0
  139. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/profile/detect.py +0 -0
  140. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/profile/profile_loader.py +0 -0
  141. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/remotes/__init__.py +0 -0
  142. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/remotes/encrypt.py +0 -0
  143. {conan-2.14.0 → conan-2.15.1}/conan/internal/api/remotes/localdb.py +0 -0
  144. {conan-2.14.0 → conan-2.15.1}/conan/internal/cache/__init__.py +0 -0
  145. {conan-2.14.0 → conan-2.15.1}/conan/internal/cache/cache.py +0 -0
  146. {conan-2.14.0 → conan-2.15.1}/conan/internal/cache/conan_reference_layout.py +0 -0
  147. {conan-2.14.0 → conan-2.15.1}/conan/internal/cache/db/__init__.py +0 -0
  148. {conan-2.14.0 → conan-2.15.1}/conan/internal/cache/db/cache_database.py +0 -0
  149. {conan-2.14.0 → conan-2.15.1}/conan/internal/cache/db/packages_table.py +0 -0
  150. {conan-2.14.0 → conan-2.15.1}/conan/internal/cache/db/recipes_table.py +0 -0
  151. {conan-2.14.0 → conan-2.15.1}/conan/internal/cache/db/table.py +0 -0
  152. {conan-2.14.0 → conan-2.15.1}/conan/internal/cache/integrity_check.py +0 -0
  153. {conan-2.14.0 → conan-2.15.1}/conan/internal/conan_app.py +0 -0
  154. {conan-2.14.0 → conan-2.15.1}/conan/internal/deploy.py +0 -0
  155. {conan-2.14.0 → conan-2.15.1}/conan/internal/errors.py +0 -0
  156. {conan-2.14.0 → conan-2.15.1}/conan/internal/internal_tools.py +0 -0
  157. {conan-2.14.0 → conan-2.15.1}/conan/internal/methods.py +0 -0
  158. {conan-2.14.0 → conan-2.15.1}/conan/internal/model/__init__.py +0 -0
  159. {conan-2.14.0 → conan-2.15.1}/conan/internal/model/conanfile_interface.py +0 -0
  160. {conan-2.14.0 → conan-2.15.1}/conan/internal/model/dependencies.py +0 -0
  161. {conan-2.14.0 → conan-2.15.1}/conan/internal/model/info.py +0 -0
  162. {conan-2.14.0 → conan-2.15.1}/conan/internal/model/layout.py +0 -0
  163. {conan-2.14.0 → conan-2.15.1}/conan/internal/model/lockfile.py +0 -0
  164. {conan-2.14.0 → conan-2.15.1}/conan/internal/model/manifest.py +0 -0
  165. {conan-2.14.0 → conan-2.15.1}/conan/internal/model/options.py +0 -0
  166. {conan-2.14.0 → conan-2.15.1}/conan/internal/model/pkg_type.py +0 -0
  167. {conan-2.14.0 → conan-2.15.1}/conan/internal/model/profile.py +0 -0
  168. {conan-2.14.0 → conan-2.15.1}/conan/internal/model/recipe_ref.py +0 -0
  169. {conan-2.14.0 → conan-2.15.1}/conan/internal/model/requires.py +0 -0
  170. {conan-2.14.0 → conan-2.15.1}/conan/internal/model/settings.py +0 -0
  171. {conan-2.14.0 → conan-2.15.1}/conan/internal/model/version.py +0 -0
  172. {conan-2.14.0 → conan-2.15.1}/conan/internal/model/workspace.py +0 -0
  173. {conan-2.14.0 → conan-2.15.1}/conan/internal/paths.py +0 -0
  174. {conan-2.14.0 → conan-2.15.1}/conan/internal/runner/__init__.py +0 -0
  175. {conan-2.14.0 → conan-2.15.1}/conan/internal/runner/docker.py +0 -0
  176. {conan-2.14.0 → conan-2.15.1}/conan/internal/runner/output.py +0 -0
  177. {conan-2.14.0 → conan-2.15.1}/conan/internal/runner/ssh.py +0 -0
  178. {conan-2.14.0 → conan-2.15.1}/conan/internal/runner/wsl.py +0 -0
  179. {conan-2.14.0 → conan-2.15.1}/conan/test/__init__.py +0 -0
  180. {conan-2.14.0 → conan-2.15.1}/conan/test/assets/__init__.py +0 -0
  181. {conan-2.14.0 → conan-2.15.1}/conan/test/assets/autotools.py +0 -0
  182. {conan-2.14.0 → conan-2.15.1}/conan/test/assets/cmake.py +0 -0
  183. {conan-2.14.0 → conan-2.15.1}/conan/test/assets/genconanfile.py +0 -0
  184. {conan-2.14.0 → conan-2.15.1}/conan/test/assets/sources.py +0 -0
  185. {conan-2.14.0 → conan-2.15.1}/conan/test/assets/visual_project_files.py +0 -0
  186. {conan-2.14.0 → conan-2.15.1}/conan/test/utils/__init__.py +0 -0
  187. {conan-2.14.0 → conan-2.15.1}/conan/test/utils/artifactory.py +0 -0
  188. {conan-2.14.0 → conan-2.15.1}/conan/test/utils/env.py +0 -0
  189. {conan-2.14.0 → conan-2.15.1}/conan/test/utils/file_server.py +0 -0
  190. {conan-2.14.0 → conan-2.15.1}/conan/test/utils/mocks.py +0 -0
  191. {conan-2.14.0 → conan-2.15.1}/conan/test/utils/profiles.py +0 -0
  192. {conan-2.14.0 → conan-2.15.1}/conan/test/utils/scm.py +0 -0
  193. {conan-2.14.0 → conan-2.15.1}/conan/test/utils/server_launcher.py +0 -0
  194. {conan-2.14.0 → conan-2.15.1}/conan/test/utils/test_files.py +0 -0
  195. {conan-2.14.0 → conan-2.15.1}/conan/tools/__init__.py +0 -0
  196. {conan-2.14.0 → conan-2.15.1}/conan/tools/android/__init__.py +0 -0
  197. {conan-2.14.0 → conan-2.15.1}/conan/tools/android/utils.py +0 -0
  198. {conan-2.14.0 → conan-2.15.1}/conan/tools/apple/__init__.py +0 -0
  199. {conan-2.14.0 → conan-2.15.1}/conan/tools/apple/xcodebuild.py +0 -0
  200. {conan-2.14.0 → conan-2.15.1}/conan/tools/apple/xcodedeps.py +0 -0
  201. {conan-2.14.0 → conan-2.15.1}/conan/tools/apple/xcodetoolchain.py +0 -0
  202. {conan-2.14.0 → conan-2.15.1}/conan/tools/build/__init__.py +0 -0
  203. {conan-2.14.0 → conan-2.15.1}/conan/tools/build/cppstd.py +0 -0
  204. {conan-2.14.0 → conan-2.15.1}/conan/tools/build/cpu.py +0 -0
  205. {conan-2.14.0 → conan-2.15.1}/conan/tools/build/cross_building.py +0 -0
  206. {conan-2.14.0 → conan-2.15.1}/conan/tools/build/cstd.py +0 -0
  207. {conan-2.14.0 → conan-2.15.1}/conan/tools/build/flags.py +0 -0
  208. {conan-2.14.0 → conan-2.15.1}/conan/tools/build/stdcpp_library.py +0 -0
  209. {conan-2.14.0 → conan-2.15.1}/conan/tools/cmake/__init__.py +0 -0
  210. {conan-2.14.0 → conan-2.15.1}/conan/tools/cmake/cmake.py +0 -0
  211. {conan-2.14.0 → conan-2.15.1}/conan/tools/cmake/cmakedeps/__init__.py +0 -0
  212. {conan-2.14.0 → conan-2.15.1}/conan/tools/cmake/cmakedeps/cmakedeps.py +0 -0
  213. {conan-2.14.0 → conan-2.15.1}/conan/tools/cmake/cmakedeps/templates/__init__.py +0 -0
  214. {conan-2.14.0 → conan-2.15.1}/conan/tools/cmake/cmakedeps/templates/config.py +0 -0
  215. {conan-2.14.0 → conan-2.15.1}/conan/tools/cmake/cmakedeps/templates/config_version.py +0 -0
  216. {conan-2.14.0 → conan-2.15.1}/conan/tools/cmake/cmakedeps/templates/macros.py +0 -0
  217. {conan-2.14.0 → conan-2.15.1}/conan/tools/cmake/cmakedeps/templates/target_configuration.py +0 -0
  218. {conan-2.14.0 → conan-2.15.1}/conan/tools/cmake/cmakedeps/templates/target_data.py +0 -0
  219. {conan-2.14.0 → conan-2.15.1}/conan/tools/cmake/cmakedeps/templates/targets.py +0 -0
  220. {conan-2.14.0 → conan-2.15.1}/conan/tools/cmake/cmakedeps2/__init__.py +0 -0
  221. {conan-2.14.0 → conan-2.15.1}/conan/tools/cmake/cmakedeps2/cmakedeps.py +0 -0
  222. {conan-2.14.0 → conan-2.15.1}/conan/tools/cmake/cmakedeps2/config.py +0 -0
  223. {conan-2.14.0 → conan-2.15.1}/conan/tools/cmake/cmakedeps2/config_version.py +0 -0
  224. {conan-2.14.0 → conan-2.15.1}/conan/tools/cmake/cmakedeps2/targets.py +0 -0
  225. {conan-2.14.0 → conan-2.15.1}/conan/tools/cmake/layout.py +0 -0
  226. {conan-2.14.0 → conan-2.15.1}/conan/tools/cmake/presets.py +0 -0
  227. {conan-2.14.0 → conan-2.15.1}/conan/tools/cmake/toolchain/__init__.py +0 -0
  228. {conan-2.14.0 → conan-2.15.1}/conan/tools/cmake/toolchain/blocks.py +0 -0
  229. {conan-2.14.0 → conan-2.15.1}/conan/tools/cmake/toolchain/toolchain.py +0 -0
  230. {conan-2.14.0 → conan-2.15.1}/conan/tools/cmake/utils.py +0 -0
  231. {conan-2.14.0 → conan-2.15.1}/conan/tools/cps/__init__.py +0 -0
  232. {conan-2.14.0 → conan-2.15.1}/conan/tools/cps/cps_deps.py +0 -0
  233. {conan-2.14.0 → conan-2.15.1}/conan/tools/env/__init__.py +0 -0
  234. {conan-2.14.0 → conan-2.15.1}/conan/tools/env/environment.py +0 -0
  235. {conan-2.14.0 → conan-2.15.1}/conan/tools/env/virtualbuildenv.py +0 -0
  236. {conan-2.14.0 → conan-2.15.1}/conan/tools/env/virtualrunenv.py +0 -0
  237. {conan-2.14.0 → conan-2.15.1}/conan/tools/files/conandata.py +0 -0
  238. {conan-2.14.0 → conan-2.15.1}/conan/tools/files/copy_pattern.py +0 -0
  239. {conan-2.14.0 → conan-2.15.1}/conan/tools/files/packager.py +0 -0
  240. {conan-2.14.0 → conan-2.15.1}/conan/tools/files/patches.py +0 -0
  241. {conan-2.14.0 → conan-2.15.1}/conan/tools/files/symlinks/__init__.py +0 -0
  242. {conan-2.14.0 → conan-2.15.1}/conan/tools/files/symlinks/symlinks.py +0 -0
  243. {conan-2.14.0 → conan-2.15.1}/conan/tools/gnu/__init__.py +0 -0
  244. {conan-2.14.0 → conan-2.15.1}/conan/tools/gnu/autotools.py +0 -0
  245. {conan-2.14.0 → conan-2.15.1}/conan/tools/gnu/autotoolsdeps.py +0 -0
  246. {conan-2.14.0 → conan-2.15.1}/conan/tools/gnu/autotoolstoolchain.py +0 -0
  247. {conan-2.14.0 → conan-2.15.1}/conan/tools/gnu/get_gnu_triplet.py +0 -0
  248. {conan-2.14.0 → conan-2.15.1}/conan/tools/gnu/gnudeps_flags.py +0 -0
  249. {conan-2.14.0 → conan-2.15.1}/conan/tools/gnu/gnutoolchain.py +0 -0
  250. {conan-2.14.0 → conan-2.15.1}/conan/tools/gnu/makedeps.py +0 -0
  251. {conan-2.14.0 → conan-2.15.1}/conan/tools/gnu/pkgconfig.py +0 -0
  252. {conan-2.14.0 → conan-2.15.1}/conan/tools/gnu/pkgconfigdeps.py +0 -0
  253. {conan-2.14.0 → conan-2.15.1}/conan/tools/google/__init__.py +0 -0
  254. {conan-2.14.0 → conan-2.15.1}/conan/tools/google/bazel.py +0 -0
  255. {conan-2.14.0 → conan-2.15.1}/conan/tools/google/bazeldeps.py +0 -0
  256. {conan-2.14.0 → conan-2.15.1}/conan/tools/google/layout.py +0 -0
  257. {conan-2.14.0 → conan-2.15.1}/conan/tools/google/toolchain.py +0 -0
  258. {conan-2.14.0 → conan-2.15.1}/conan/tools/intel/__init__.py +0 -0
  259. {conan-2.14.0 → conan-2.15.1}/conan/tools/intel/intel_cc.py +0 -0
  260. {conan-2.14.0 → conan-2.15.1}/conan/tools/layout/__init__.py +0 -0
  261. {conan-2.14.0 → conan-2.15.1}/conan/tools/meson/__init__.py +0 -0
  262. {conan-2.14.0 → conan-2.15.1}/conan/tools/meson/meson.py +0 -0
  263. {conan-2.14.0 → conan-2.15.1}/conan/tools/microsoft/__init__.py +0 -0
  264. {conan-2.14.0 → conan-2.15.1}/conan/tools/microsoft/layout.py +0 -0
  265. {conan-2.14.0 → conan-2.15.1}/conan/tools/microsoft/msbuild.py +0 -0
  266. {conan-2.14.0 → conan-2.15.1}/conan/tools/microsoft/nmakedeps.py +0 -0
  267. {conan-2.14.0 → conan-2.15.1}/conan/tools/microsoft/nmaketoolchain.py +0 -0
  268. {conan-2.14.0 → conan-2.15.1}/conan/tools/microsoft/subsystems.py +0 -0
  269. {conan-2.14.0 → conan-2.15.1}/conan/tools/microsoft/toolchain.py +0 -0
  270. {conan-2.14.0 → conan-2.15.1}/conan/tools/microsoft/visual.py +0 -0
  271. {conan-2.14.0 → conan-2.15.1}/conan/tools/premake/__init__.py +0 -0
  272. {conan-2.14.0 → conan-2.15.1}/conan/tools/premake/premake.py +0 -0
  273. {conan-2.14.0 → conan-2.15.1}/conan/tools/premake/premakedeps.py +0 -0
  274. {conan-2.14.0 → conan-2.15.1}/conan/tools/qbs/__init__.py +0 -0
  275. {conan-2.14.0 → conan-2.15.1}/conan/tools/qbs/common.py +0 -0
  276. {conan-2.14.0 → conan-2.15.1}/conan/tools/qbs/qbs.py +0 -0
  277. {conan-2.14.0 → conan-2.15.1}/conan/tools/qbs/qbsdeps.py +0 -0
  278. {conan-2.14.0 → conan-2.15.1}/conan/tools/qbs/qbsprofile.py +0 -0
  279. {conan-2.14.0 → conan-2.15.1}/conan/tools/ros/__init__.py +0 -0
  280. {conan-2.14.0 → conan-2.15.1}/conan/tools/ros/rosenv.py +0 -0
  281. {conan-2.14.0 → conan-2.15.1}/conan/tools/sbom/__init__.py +0 -0
  282. {conan-2.14.0 → conan-2.15.1}/conan/tools/scm/__init__.py +0 -0
  283. {conan-2.14.0 → conan-2.15.1}/conan/tools/scm/git.py +0 -0
  284. {conan-2.14.0 → conan-2.15.1}/conan/tools/scons/__init__.py +0 -0
  285. {conan-2.14.0 → conan-2.15.1}/conan/tools/scons/sconsdeps.py +0 -0
  286. {conan-2.14.0 → conan-2.15.1}/conan/tools/system/__init__.py +0 -0
  287. {conan-2.14.0 → conan-2.15.1}/conan/tools/system/package_manager.py +0 -0
  288. {conan-2.14.0 → conan-2.15.1}/conan.egg-info/SOURCES.txt +0 -0
  289. {conan-2.14.0 → conan-2.15.1}/conan.egg-info/dependency_links.txt +0 -0
  290. {conan-2.14.0 → conan-2.15.1}/conan.egg-info/entry_points.txt +0 -0
  291. {conan-2.14.0 → conan-2.15.1}/conan.egg-info/requires.txt +0 -0
  292. {conan-2.14.0 → conan-2.15.1}/conan.egg-info/top_level.txt +0 -0
  293. {conan-2.14.0 → conan-2.15.1}/conans/__init__.py +0 -0
  294. {conan-2.14.0 → conan-2.15.1}/conans/client/__init__.py +0 -0
  295. {conan-2.14.0 → conan-2.15.1}/conans/client/downloaders/__init__.py +0 -0
  296. {conan-2.14.0 → conan-2.15.1}/conans/client/downloaders/caching_file_downloader.py +0 -0
  297. {conan-2.14.0 → conan-2.15.1}/conans/client/downloaders/file_downloader.py +0 -0
  298. {conan-2.14.0 → conan-2.15.1}/conans/client/graph/__init__.py +0 -0
  299. {conan-2.14.0 → conan-2.15.1}/conans/client/graph/build_mode.py +0 -0
  300. {conan-2.14.0 → conan-2.15.1}/conans/client/graph/compatibility.py +0 -0
  301. {conan-2.14.0 → conan-2.15.1}/conans/client/graph/compute_pid.py +0 -0
  302. {conan-2.14.0 → conan-2.15.1}/conans/client/graph/graph_binaries.py +0 -0
  303. {conan-2.14.0 → conan-2.15.1}/conans/client/graph/graph_builder.py +0 -0
  304. {conan-2.14.0 → conan-2.15.1}/conans/client/graph/graph_error.py +0 -0
  305. {conan-2.14.0 → conan-2.15.1}/conans/client/graph/install_graph.py +0 -0
  306. {conan-2.14.0 → conan-2.15.1}/conans/client/graph/profile_node_definer.py +0 -0
  307. {conan-2.14.0 → conan-2.15.1}/conans/client/graph/provides.py +0 -0
  308. {conan-2.14.0 → conan-2.15.1}/conans/client/graph/range_resolver.py +0 -0
  309. {conan-2.14.0 → conan-2.15.1}/conans/client/hook_manager.py +0 -0
  310. {conan-2.14.0 → conan-2.15.1}/conans/client/loader.py +0 -0
  311. {conan-2.14.0 → conan-2.15.1}/conans/client/loader_txt.py +0 -0
  312. {conan-2.14.0 → conan-2.15.1}/conans/client/migrations.py +0 -0
  313. {conan-2.14.0 → conan-2.15.1}/conans/client/pkg_sign.py +0 -0
  314. {conan-2.14.0 → conan-2.15.1}/conans/client/remote_manager.py +0 -0
  315. {conan-2.14.0 → conan-2.15.1}/conans/client/rest/__init__.py +0 -0
  316. {conan-2.14.0 → conan-2.15.1}/conans/client/rest/auth_manager.py +0 -0
  317. {conan-2.14.0 → conan-2.15.1}/conans/client/rest/client_routes.py +0 -0
  318. {conan-2.14.0 → conan-2.15.1}/conans/client/rest/conan_requester.py +0 -0
  319. {conan-2.14.0 → conan-2.15.1}/conans/client/rest/file_uploader.py +0 -0
  320. {conan-2.14.0 → conan-2.15.1}/conans/client/rest/remote_credentials.py +0 -0
  321. {conan-2.14.0 → conan-2.15.1}/conans/client/rest/rest_client.py +0 -0
  322. {conan-2.14.0 → conan-2.15.1}/conans/client/rest/rest_client_v2.py +0 -0
  323. {conan-2.14.0 → conan-2.15.1}/conans/client/rest/rest_routes.py +0 -0
  324. {conan-2.14.0 → conan-2.15.1}/conans/client/rest_client_local_recipe_index.py +0 -0
  325. {conan-2.14.0 → conan-2.15.1}/conans/client/source.py +0 -0
  326. {conan-2.14.0 → conan-2.15.1}/conans/client/subsystems.py +0 -0
  327. {conan-2.14.0 → conan-2.15.1}/conans/conan.py +0 -0
  328. {conan-2.14.0 → conan-2.15.1}/conans/conan_server.py +0 -0
  329. {conan-2.14.0 → conan-2.15.1}/conans/migrations.py +0 -0
  330. {conan-2.14.0 → conan-2.15.1}/conans/model/__init__.py +0 -0
  331. {conan-2.14.0 → conan-2.15.1}/conans/model/package_ref.py +0 -0
  332. {conan-2.14.0 → conan-2.15.1}/conans/model/recipe_ref.py +0 -0
  333. {conan-2.14.0 → conan-2.15.1}/conans/requirements.txt +0 -0
  334. {conan-2.14.0 → conan-2.15.1}/conans/requirements_dev.txt +0 -0
  335. {conan-2.14.0 → conan-2.15.1}/conans/requirements_runner.txt +0 -0
  336. {conan-2.14.0 → conan-2.15.1}/conans/requirements_server.txt +0 -0
  337. {conan-2.14.0 → conan-2.15.1}/conans/util/__init__.py +0 -0
  338. {conan-2.14.0 → conan-2.15.1}/conans/util/config_parser.py +0 -0
  339. {conan-2.14.0 → conan-2.15.1}/conans/util/dates.py +0 -0
  340. {conan-2.14.0 → conan-2.15.1}/conans/util/files.py +0 -0
  341. {conan-2.14.0 → conan-2.15.1}/conans/util/locks.py +0 -0
  342. {conan-2.14.0 → conan-2.15.1}/conans/util/runners.py +0 -0
  343. {conan-2.14.0 → conan-2.15.1}/conans/util/thread.py +0 -0
  344. {conan-2.14.0 → conan-2.15.1}/pyproject.toml +0 -0
  345. {conan-2.14.0 → conan-2.15.1}/setup.cfg +0 -0
  346. {conan-2.14.0 → conan-2.15.1}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: conan
3
- Version: 2.14.0
3
+ Version: 2.15.1
4
4
  Summary: Conan C/C++ package manager
5
5
  Home-page: https://conan.io
6
6
  Author: JFrog LTD
@@ -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.14.0'
5
+ __version__ = '2.15.1'
6
6
  conan_version = Version(__version__)
@@ -3,9 +3,10 @@ import json
3
3
  import os
4
4
  from json import JSONDecodeError
5
5
 
6
+ from conan.api.model import RecipeReference, PkgReference
7
+ from conan.cli import make_abs_path
6
8
  from conan.errors import ConanException
7
9
  from conan.internal.errors import NotFoundException
8
- from conan.api.model import RecipeReference, PkgReference
9
10
  from conan.internal.model.version_range import VersionRange
10
11
  from conans.client.graph.graph import RECIPE_EDITABLE, RECIPE_CONSUMER, RECIPE_PLATFORM, \
11
12
  RECIPE_VIRTUAL, BINARY_SKIP, BINARY_MISSING, BINARY_INVALID
@@ -36,6 +37,10 @@ class MultiPackagesList:
36
37
  for k, v in other.lists.items():
37
38
  self.lists.setdefault(k, PackagesList()).merge(v)
38
39
 
40
+ def keep_outer(self, other):
41
+ for namespace, other_pkg_list in other.lists.items():
42
+ self.lists.get(namespace, PackagesList()).keep_outer(other_pkg_list)
43
+
39
44
  @staticmethod
40
45
  def load(file):
41
46
  try:
@@ -44,6 +49,14 @@ class MultiPackagesList:
44
49
  raise ConanException(f"Package list file invalid JSON: {file}\n{e}")
45
50
  except Exception as e:
46
51
  raise ConanException(f"Package list file missing or broken: {file}\n{e}")
52
+ # Check if input json is not a graph file
53
+ if "graph" in content:
54
+ base_path = os.path.basename(file)
55
+ raise ConanException(
56
+ 'Expected a package list file but found a graph file. You can create a "package list" JSON file by running:\n\n'
57
+ f"\tconan list --graph {base_path} --format=json > pkglist.json\n\n"
58
+ "More Info at 'https://docs.conan.io/2/examples/commands/pkglists.html"
59
+ )
47
60
  result = {}
48
61
  for remote, pkglist in content.items():
49
62
  if "error" in pkglist:
@@ -55,19 +68,40 @@ class MultiPackagesList:
55
68
  return pkglist
56
69
 
57
70
  @staticmethod
58
- def load_graph(graphfile, graph_recipes=None, graph_binaries=None):
71
+ def load_graph(graphfile, graph_recipes=None, graph_binaries=None, context=None):
59
72
  if not os.path.isfile(graphfile):
60
73
  raise ConanException(f"Graph file not found: {graphfile}")
61
74
  try:
75
+ base_context = context.split("-")[0] if context else None
62
76
  graph = json.loads(load(graphfile))
63
- return MultiPackagesList._define_graph(graph, graph_recipes, graph_binaries)
77
+ # Check if input json is a graph file
78
+ if "graph" not in graph:
79
+ raise ConanException(
80
+ 'Expected a graph file but found an unexpected JSON file format. You can create a "graph" JSON file by running:\n\n'
81
+ f"\tconan [ graph-info | create | export-pkg | install | test ] --format=json > graph.json\n\n"
82
+ "More Info at 'https://docs.conan.io/2/reference/commands/formatters/graph_info_json_formatter.html"
83
+ )
84
+
85
+ mpkglist = MultiPackagesList._define_graph(graph, graph_recipes, graph_binaries,
86
+ context=base_context)
87
+ if context == "build-only":
88
+ host = MultiPackagesList._define_graph(graph, graph_recipes, graph_binaries,
89
+ context="host")
90
+ mpkglist.keep_outer(host)
91
+ elif context == "host-only":
92
+ build = MultiPackagesList._define_graph(graph, graph_recipes, graph_binaries,
93
+ context="build")
94
+ mpkglist.keep_outer(build)
95
+ return mpkglist
64
96
  except JSONDecodeError as e:
65
97
  raise ConanException(f"Graph file invalid JSON: {graphfile}\n{e}")
98
+ except ConanException as e:
99
+ raise e
66
100
  except Exception as e:
67
101
  raise ConanException(f"Graph file broken: {graphfile}\n{e}")
68
102
 
69
103
  @staticmethod
70
- def _define_graph(graph, graph_recipes=None, graph_binaries=None):
104
+ def _define_graph(graph, graph_recipes=None, graph_binaries=None, context=None):
71
105
  pkglist = MultiPackagesList()
72
106
  cache_list = PackagesList()
73
107
  if graph_recipes is None and graph_binaries is None:
@@ -79,6 +113,9 @@ class MultiPackagesList:
79
113
 
80
114
  pkglist.lists["Local Cache"] = cache_list
81
115
  for node in graph["graph"]["nodes"].values():
116
+ if context and node['context'] != context:
117
+ continue
118
+
82
119
  # We need to add the python_requires too
83
120
  python_requires = node.get("python_requires")
84
121
  if python_requires is not None:
@@ -142,6 +179,14 @@ class PackagesList:
142
179
  return d
143
180
  recursive_dict_update(self.recipes, other.recipes)
144
181
 
182
+ def keep_outer(self, other):
183
+ if not self.recipes:
184
+ return
185
+
186
+ for ref, info in other.recipes.items():
187
+ if self.recipes.get(ref, {}) == info:
188
+ self.recipes.pop(ref)
189
+
145
190
  def split(self):
146
191
  """
147
192
  Returns a list of PackageList, splitted one per reference.
@@ -12,6 +12,7 @@ from conans.util.files import save, load
12
12
  CONAN_CENTER_AUDIT_PROVIDER_NAME = "conancenter"
13
13
  CYPHER_KEY = "private"
14
14
 
15
+
15
16
  class AuditAPI:
16
17
  """
17
18
  This class provides the functionality to scan references for vulnerabilities.
@@ -26,15 +27,17 @@ class AuditAPI:
26
27
  "private": PrivateProvider,
27
28
  }
28
29
 
29
- def scan(self, deps_graph, provider):
30
+ @staticmethod
31
+ def scan(deps_graph, provider):
30
32
  """
31
33
  Scan a given recipe for vulnerabilities in its dependencies.
32
34
  """
33
35
  refs = sorted(set(RecipeReference.loads(f"{node.ref.name}/{node.ref.version}")
34
- for node in deps_graph.nodes[1:]), key= lambda ref: ref.name)
36
+ for node in deps_graph.nodes[1:]), key=lambda ref: ref.name)
35
37
  return provider.get_cves(refs)
36
38
 
37
- def list(self, references, provider):
39
+ @staticmethod
40
+ def list(references, provider):
38
41
  """
39
42
  List the vulnerabilities of the given reference.
40
43
  """
@@ -1,3 +1,5 @@
1
+ import os
2
+
1
3
  from conan.api.output import ConanOutput
2
4
  from conan.errors import ConanException
3
5
 
@@ -25,9 +27,9 @@ class CommandAPI:
25
27
  # get redefined when running a command and leak to the calling scope
26
28
  # if running from a custom command.
27
29
  # Store the old one and restore it after the command execution as a workaround.
28
- _conan_output_level = ConanOutput._conan_output_level
29
- _silent_warn_tags = ConanOutput._silent_warn_tags
30
- _warnings_as_errors = ConanOutput._warnings_as_errors
30
+ _conan_output_level = ConanOutput._conan_output_level # noqa
31
+ _silent_warn_tags = ConanOutput._silent_warn_tags # noqa
32
+ _warnings_as_errors = ConanOutput._warnings_as_errors # noqa
31
33
 
32
34
  try:
33
35
  result = command.run_cli(self.conan_api, args)
@@ -36,3 +38,25 @@ class CommandAPI:
36
38
  ConanOutput._silent_warn_tags = _silent_warn_tags
37
39
  ConanOutput._warnings_as_errors = _warnings_as_errors
38
40
  return result
41
+
42
+ @staticmethod
43
+ def get_runner(profile_host):
44
+ if profile_host.runner and not os.environ.get("CONAN_RUNNER_ENVIRONMENT"):
45
+ from conan.internal.runner.docker import DockerRunner
46
+ from conan.internal.runner.ssh import SSHRunner
47
+ from conan.internal.runner.wsl import WSLRunner
48
+ try:
49
+ runner_type = profile_host.runner['type'].lower()
50
+ except KeyError:
51
+ raise ConanException(f"Invalid runner configuration. 'type' must be defined")
52
+ runner_instances_map = {
53
+ 'docker': DockerRunner,
54
+ # 'ssh': SSHRunner,
55
+ # 'wsl': WSLRunner,
56
+ }
57
+ try:
58
+ runner_instance = runner_instances_map[runner_type]
59
+ except KeyError:
60
+ raise ConanException(f"Invalid runner type '{runner_type}'. "
61
+ f"Allowed values: {', '.join(runner_instances_map.keys())}")
62
+ return runner_instance
@@ -1,8 +1,9 @@
1
+ import copy
1
2
  import os
2
3
  from collections import OrderedDict
3
4
  from typing import Dict
4
5
 
5
- from conan.api.model import PackagesList
6
+ from conan.api.model import PackagesList, MultiPackagesList, ListPattern
6
7
  from conan.api.output import ConanOutput, TimedOutput
7
8
  from conan.internal.api.list.query_parse import filter_package_configs
8
9
  from conan.internal.conan_app import ConanBasicApp
@@ -242,7 +243,7 @@ class ListAPI:
242
243
  ConanOutput().info(f"Finding binaries in remote {remote.name}")
243
244
  pkg_configurations = self.packages_configurations(ref, remote=remote)
244
245
  except Exception as e:
245
- ConanOutput(f"ERROR IN REMOTE {remote.name}: {e}")
246
+ ConanOutput().error(f"Error in remote '{remote.name}': {e}")
246
247
  else:
247
248
  candidates.extend(_BinaryDistance(pref, data, conaninfo, remote)
248
249
  for pref, data in pkg_configurations.items())
@@ -266,6 +267,82 @@ class ListAPI:
266
267
  rev_dict["packages"][pref.package_id]["remote"] = remote
267
268
  return pkglist
268
269
 
270
+ def find_remotes(self, package_list, remotes):
271
+ """
272
+ (Experimental) Find the remotes where the current package lists can be found
273
+ """
274
+ result = MultiPackagesList()
275
+ for r in remotes:
276
+ result_pkg_list = PackagesList()
277
+ for ref, recipe_bundle in package_list.refs().items():
278
+ ref_no_rev = copy.copy(ref) # TODO: Improve ugly API
279
+ ref_no_rev.revision = None
280
+ try:
281
+ revs = self.recipe_revisions(ref_no_rev, remote=r)
282
+ except NotFoundException:
283
+ continue
284
+ if ref not in revs: # not found
285
+ continue
286
+ result_pkg_list.add_refs([ref])
287
+ for pref, pref_bundle in package_list.prefs(ref, recipe_bundle).items():
288
+ pref_no_rev = copy.copy(pref) # TODO: Improve ugly API
289
+ pref_no_rev.revision = None
290
+ try:
291
+ prevs = self.package_revisions(pref_no_rev, remote=r)
292
+ except NotFoundException:
293
+ continue
294
+ if pref in prevs:
295
+ result_pkg_list.add_prefs(ref, [pref])
296
+ info = recipe_bundle["packages"][pref.package_id]["info"]
297
+ result_pkg_list.add_configurations({pref: info})
298
+ if result_pkg_list.recipes:
299
+ result.add(r.name, result_pkg_list)
300
+ return result
301
+
302
+ def outdated(self, deps_graph, remotes):
303
+ # DO NOT USE YET
304
+ # Data structure to store info per library
305
+ dependencies = deps_graph.nodes[1:]
306
+ dict_nodes = {}
307
+
308
+ # When there are no dependencies command should stop
309
+ if len(dependencies) == 0:
310
+ return dict_nodes
311
+
312
+ ConanOutput().title("Checking remotes")
313
+
314
+ for node in dependencies:
315
+ dict_nodes.setdefault(node.name, {"cache_refs": set(), "version_ranges": [],
316
+ "latest_remote": None})["cache_refs"].add(node.ref)
317
+
318
+ for version_range in deps_graph.resolved_ranges.keys():
319
+ dict_nodes[version_range.name]["version_ranges"].append(version_range)
320
+
321
+ # find in remotes
322
+ for node_name, node_info in dict_nodes.items():
323
+ ref_pattern = ListPattern(node_name, rrev=None, prev=None)
324
+ for remote in remotes:
325
+ try:
326
+ remote_ref_list = self.select(ref_pattern, package_query=None, remote=remote)
327
+ except NotFoundException:
328
+ continue
329
+ if not remote_ref_list.recipes:
330
+ continue
331
+ str_latest_ref = list(remote_ref_list.recipes.keys())[-1]
332
+ recipe_ref = RecipeReference.loads(str_latest_ref)
333
+ if (node_info["latest_remote"] is None
334
+ or node_info["latest_remote"]["ref"] < recipe_ref):
335
+ node_info["latest_remote"] = {"ref": recipe_ref, "remote": remote.name}
336
+
337
+ # Filter nodes with no outdated versions
338
+ filtered_nodes = {}
339
+ for node_name, node in dict_nodes.items():
340
+ if node['latest_remote'] is not None and sorted(list(node['cache_refs']))[0] < \
341
+ node['latest_remote']['ref']:
342
+ filtered_nodes[node_name] = node
343
+
344
+ return filtered_nodes
345
+
269
346
 
270
347
  class _BinaryDistance:
271
348
  def __init__(self, pref, binary, expected, remote=None):
@@ -15,7 +15,6 @@ from conan.api.output import ConanOutput, Color, cli_out_write, LEVEL_TRACE
15
15
  from conan.cli.command import ConanSubCommand
16
16
  from conan.cli.exit_codes import SUCCESS, ERROR_MIGRATION, ERROR_GENERAL, USER_CTRL_C, \
17
17
  ERROR_SIGTERM, USER_CTRL_BREAK, ERROR_INVALID_CONFIGURATION, ERROR_UNEXPECTED
18
- from conan.internal.cache.home_paths import HomePaths
19
18
  from conan import __version__
20
19
  from conan.errors import ConanException, ConanInvalidConfiguration, ConanMigrationError
21
20
 
@@ -49,7 +48,8 @@ class Cli:
49
48
  for k, v in self._commands.items(): # Fill groups data too
50
49
  self._groups[v.group].append(k)
51
50
 
52
- conan_custom_commands_path = HomePaths(self._conan_api.cache_folder).custom_commands_path
51
+ conan_custom_commands_path = os.path.join(self._conan_api.cache_folder, "extensions",
52
+ "commands")
53
53
  # Important! This variable should be only used for testing/debugging purpose
54
54
  developer_custom_commands_path = os.getenv(_CONAN_INTERNAL_CUSTOM_COMMANDS_PATH)
55
55
  # Notice that in case of having same custom commands file names, the developer one has
@@ -80,8 +80,8 @@ def audit_list(conan_api: ConanAPI, parser, subparser, *args):
80
80
  List the vulnerabilities of the given reference.
81
81
  """
82
82
  subparser.add_argument("reference", help="Reference to list vulnerabilities for", nargs="?")
83
- subparser.add_argument("-l", "--list", help="pkglist file to list vulnerabilities for", default=None)
84
- subparser.add_argument("-r", "--remote", help="Remote to use for listing", default=None)
83
+ subparser.add_argument("-l", "--list", help="pkglist file to list vulnerabilities for")
84
+ subparser.add_argument("-r", "--remote", help="Remote to use for listing")
85
85
  _add_provider_arg(subparser)
86
86
  args = parser.parse_args(*args)
87
87
 
@@ -93,7 +93,6 @@ def audit_list(conan_api: ConanAPI, parser, subparser, *args):
93
93
 
94
94
  provider = conan_api.audit.get_provider(args.provider or CONAN_CENTER_AUDIT_PROVIDER_NAME)
95
95
 
96
- references = []
97
96
  if args.list:
98
97
  listfile = make_abs_path(args.list)
99
98
  multi_package_list = MultiPackagesList.load(listfile)
@@ -107,7 +106,8 @@ def audit_list(conan_api: ConanAPI, parser, subparser, *args):
107
106
  references = [args.reference]
108
107
  return conan_api.audit.list(references, provider)
109
108
 
110
- def text_provider_formatter(providers_action):
109
+
110
+ def _text_provider_formatter(providers_action):
111
111
  providers = providers_action[0]
112
112
  action = providers_action[1]
113
113
 
@@ -125,7 +125,8 @@ def text_provider_formatter(providers_action):
125
125
  if provider:
126
126
  cli_out_write(f"{provider.name} (type: {provider.type}) - {provider.url}")
127
127
 
128
- def json_provider_formatter(providers_action):
128
+
129
+ def _json_provider_formatter(providers_action):
129
130
  ret = []
130
131
  for provider in providers_action[0]:
131
132
  if provider:
@@ -133,13 +134,14 @@ def json_provider_formatter(providers_action):
133
134
  cli_out_write(json.dumps(ret, indent=4))
134
135
 
135
136
 
136
- @conan_subcommand(formatters={"text": text_provider_formatter, "json": json_provider_formatter})
137
+ @conan_subcommand(formatters={"text": _text_provider_formatter, "json": _json_provider_formatter})
137
138
  def audit_provider(conan_api, parser, subparser, *args):
138
139
  """
139
140
  Manage security providers for the 'conan audit' command.
140
141
  """
141
142
 
142
- subparser.add_argument("action", choices=["add", "list", "auth", "remove"], help="Action to perform from 'add', 'list' , 'remove' or 'auth'")
143
+ subparser.add_argument("action", choices=["add", "list", "auth", "remove"],
144
+ help="Action to perform from 'add', 'list' , 'remove' or 'auth'")
143
145
  subparser.add_argument("name", help="Provider name", nargs="?")
144
146
 
145
147
  subparser.add_argument("--url", help="Provider URL")
@@ -188,8 +190,9 @@ def audit_provider(conan_api, parser, subparser, *args):
188
190
  conan_api.audit.auth_provider(provider, token)
189
191
  return [provider], args.action
190
192
 
193
+
191
194
  @conan_command(group="Security")
192
- def audit(conan_api, parser, *args):
195
+ def audit(conan_api, parser, *args): # noqa
193
196
  """
194
197
  Find vulnerabilities in your dependencies.
195
198
  """
@@ -9,8 +9,6 @@ from conan.cli.formatters.graph import format_graph_json
9
9
  from conan.cli.printers import print_profiles
10
10
  from conan.cli.printers.graph import print_graph_packages, print_graph_basic
11
11
  from conan.errors import ConanException
12
- from conans.client.graph.graph import BINARY_BUILD
13
- from conans.util.files import mkdir
14
12
 
15
13
 
16
14
  @conan_command(group="Creator", formatters={"json": format_graph_json})
@@ -63,24 +61,9 @@ def create(conan_api, parser, *args):
63
61
  lockfile = conan_api.lockfile.update_lockfile_export(lockfile, conanfile, ref, is_build)
64
62
 
65
63
  print_profiles(profile_host, profile_build)
66
- if profile_host.runner and not os.environ.get("CONAN_RUNNER_ENVIRONMENT"):
67
- from conan.internal.runner.docker import DockerRunner
68
- from conan.internal.runner.ssh import SSHRunner
69
- from conan.internal.runner.wsl import WSLRunner
70
- try:
71
- runner_type = profile_host.runner['type'].lower()
72
- except KeyError:
73
- raise ConanException(f"Invalid runner configuration. 'type' must be defined")
74
- runner_instances_map = {
75
- 'docker': DockerRunner,
76
- # 'ssh': SSHRunner,
77
- # 'wsl': WSLRunner,
78
- }
79
- try:
80
- runner_instance = runner_instances_map[runner_type]
81
- except KeyError:
82
- raise ConanException(f"Invalid runner type '{runner_type}'. Allowed values: {', '.join(runner_instances_map.keys())}")
83
- return runner_instance(conan_api, 'create', profile_host, profile_build, args, raw_args).run()
64
+ runner = conan_api.command.get_runner(profile_host)
65
+ if runner is not None:
66
+ return runner(conan_api, 'create', profile_host, profile_build, args, raw_args).run()
84
67
 
85
68
  if args.build is not None and args.build_test is None:
86
69
  args.build_test = args.build
@@ -125,7 +108,7 @@ def create(conan_api, parser, *args):
125
108
  test_conanfile_path = _get_test_conanfile_path(test_package_folder, path)
126
109
  # If the user provide --test-missing and the binary was not built from source, skip test_package
127
110
  if args.test_missing and deps_graph.root.dependencies\
128
- and deps_graph.root.dependencies[0].dst.binary != BINARY_BUILD:
111
+ and deps_graph.root.dependencies[0].dst.binary != "Build":
129
112
  test_conanfile_path = None # disable it
130
113
 
131
114
  if test_conanfile_path:
@@ -176,7 +159,7 @@ def test_package(conan_api, deps_graph, test_conanfile_path):
176
159
  out.info("Removing previously existing 'test_package' build folder: "
177
160
  f"{conanfile.build_folder}")
178
161
  shutil.rmtree(conanfile.build_folder, ignore_errors=True)
179
- mkdir(conanfile.build_folder)
162
+ os.makedirs(conanfile.build_folder, exist_ok=True)
180
163
  conanfile.output.info(f"Test package build: {conanfile.folders.build}")
181
164
  conanfile.output.info(f"Test package build folder: {conanfile.build_folder}")
182
165
  conan_api.install.install_consumer(deps_graph=deps_graph,
@@ -1,7 +1,6 @@
1
1
  import json
2
2
  import os
3
3
 
4
- from conan.api.model import ListPattern
5
4
  from conan.api.output import ConanOutput, cli_out_write, Color
6
5
  from conan.cli import make_abs_path
7
6
  from conan.cli.args import common_graph_args, validate_common_graph_args
@@ -14,8 +13,6 @@ from conan.cli.printers import print_profiles
14
13
  from conan.cli.printers.graph import print_graph_packages, print_graph_basic
15
14
  from conan.errors import ConanException
16
15
  from conans.client.graph.install_graph import InstallGraph, ProfileArgs
17
- from conan.internal.errors import NotFoundException
18
- from conan.api.model import RecipeReference
19
16
 
20
17
 
21
18
  def explain_formatter_text(data):
@@ -38,7 +35,7 @@ def explain_formatter_json(data):
38
35
 
39
36
 
40
37
  @conan_command(group="Consumer")
41
- def graph(conan_api, parser, *args):
38
+ def graph(conan_api, parser, *args): # noqa
42
39
  """
43
40
  Compute a dependency graph, without installing or building the binaries.
44
41
  """
@@ -135,7 +132,7 @@ def graph_build_order(conan_api, parser, subparser, *args):
135
132
 
136
133
  @conan_subcommand(formatters={"text": cli_build_order, "json": json_build_order,
137
134
  "html": format_build_order_html})
138
- def graph_build_order_merge(conan_api, parser, subparser, *args):
135
+ def graph_build_order_merge(conan_api, parser, subparser, *args): # noqa
139
136
  """
140
137
  Merge more than 1 build-order file.
141
138
  """
@@ -378,48 +375,6 @@ def graph_outdated(conan_api, parser, subparser, *args):
378
375
  print_graph_basic(deps_graph)
379
376
 
380
377
  # Data structure to store info per library
381
- dependencies = deps_graph.nodes[1:]
382
- dict_nodes = {}
383
-
384
- # When there are no dependencies command should stop
385
- if len(dependencies) == 0:
386
- return dict_nodes
387
-
388
- ConanOutput().title("Checking remotes")
389
-
390
- for node in dependencies:
391
- dict_nodes.setdefault(node.name, {"cache_refs": set(), "version_ranges": [],
392
- "latest_remote": None})["cache_refs"].add(node.ref)
393
-
394
- for version_range in deps_graph.resolved_ranges.keys():
395
- dict_nodes[version_range.name]["version_ranges"].append(version_range)
396
-
397
- # find in remotes
398
- _find_in_remotes(conan_api, dict_nodes, remotes)
399
-
400
- # Filter nodes with no outdated versions
401
- filtered_nodes = {}
402
- for node_name, node in dict_nodes.items():
403
- if node['latest_remote'] is not None and sorted(list(node['cache_refs']))[0] < \
404
- node['latest_remote']['ref']:
405
- filtered_nodes[node_name] = node
406
-
407
- return filtered_nodes
408
-
409
-
410
- def _find_in_remotes(conan_api, dict_nodes, remotes):
411
- for node_name, node_info in dict_nodes.items():
412
- ref_pattern = ListPattern(node_name, rrev=None, prev=None)
413
- for remote in remotes:
414
- try:
415
- remote_ref_list = conan_api.list.select(ref_pattern, package_query=None,
416
- remote=remote)
417
- except NotFoundException:
418
- continue
419
- if not remote_ref_list.recipes:
420
- continue
421
- str_latest_ref = list(remote_ref_list.recipes.keys())[-1]
422
- recipe_ref = RecipeReference.loads(str_latest_ref)
423
- if (node_info["latest_remote"] is None
424
- or node_info["latest_remote"]["ref"] < recipe_ref):
425
- node_info["latest_remote"] = {"ref": recipe_ref, "remote": remote.name}
378
+ # DO NOT USE this API call yet, it is not stable
379
+ outdated = conan_api.list.outdated(deps_graph, remotes)
380
+ return outdated
@@ -9,7 +9,6 @@ from conan.cli.formatters.list import list_packages_html
9
9
  from conan.errors import ConanException
10
10
  from conans.util.dates import timestamp_to_str
11
11
 
12
-
13
12
  # Keep them so we don't break other commands that import them, but TODO: Remove later
14
13
  remote_color = Color.BRIGHT_BLUE
15
14
  recipe_name_color = Color.GREEN
@@ -225,6 +224,9 @@ def list(conan_api: ConanAPI, parser, *args):
225
224
  parser.add_argument("-g", "--graph", help="Graph json file")
226
225
  parser.add_argument("-gb", "--graph-binaries", help="Which binaries are listed", action="append")
227
226
  parser.add_argument("-gr", "--graph-recipes", help="Which recipes are listed", action="append")
227
+ parser.add_argument("-gc", "--graph-context", help="Filter the results by the given context",
228
+ default=None, action=OnceArgument,
229
+ choices=["build", "host", "build-only", "host-only"])
228
230
  parser.add_argument('--lru', default=None, action=OnceArgument,
229
231
  help="List recipes and binaries that have not been recently used. Use a"
230
232
  " time limit like --lru=5d (days) or --lru=4w (weeks),"
@@ -248,7 +250,8 @@ def list(conan_api: ConanAPI, parser, *args):
248
250
 
249
251
  if args.graph:
250
252
  graphfile = make_abs_path(args.graph)
251
- pkglist = MultiPackagesList.load_graph(graphfile, args.graph_recipes, args.graph_binaries)
253
+ pkglist = MultiPackagesList.load_graph(graphfile, args.graph_recipes, args.graph_binaries,
254
+ context=args.graph_context)
252
255
  else:
253
256
  ref_pattern = ListPattern(args.pattern, rrev=None, prev=None)
254
257
  if not ref_pattern.package_id and (args.package_query or args.filter_profile or
@@ -1,12 +1,9 @@
1
- import copy
2
-
3
1
  from conan.api.conan_api import ConanAPI
4
- from conan.api.model import MultiPackagesList, PackagesList
2
+ from conan.api.model import MultiPackagesList
5
3
  from conan.cli import make_abs_path
6
4
  from conan.cli.command import conan_command, conan_subcommand
7
5
  from conan.cli.commands.list import print_list_text, print_list_json
8
6
  from conan.cli.formatters.list import list_packages_html
9
- from conan.internal.errors import NotFoundException
10
7
 
11
8
 
12
9
  @conan_command(group="Consumer")
@@ -33,34 +30,7 @@ def pkglist_find_remote(conan_api, parser, subparser, *args):
33
30
  multi_pkglist = MultiPackagesList.load(listfile)
34
31
  package_list = multi_pkglist["Local Cache"]
35
32
  selected_remotes = conan_api.remotes.list(args.remote)
36
-
37
- result = MultiPackagesList()
38
- for r in selected_remotes:
39
- result_pkg_list = PackagesList()
40
- for ref, recipe_bundle in package_list.refs().items():
41
- ref_no_rev = copy.copy(ref) # TODO: Improve ugly API
42
- ref_no_rev.revision = None
43
- try:
44
- revs = conan_api.list.recipe_revisions(ref_no_rev, remote=r)
45
- except NotFoundException:
46
- continue
47
- if ref not in revs: # not found
48
- continue
49
- result_pkg_list.add_refs([ref])
50
- for pref, pref_bundle in package_list.prefs(ref, recipe_bundle).items():
51
- pref_no_rev = copy.copy(pref) # TODO: Improve ugly API
52
- pref_no_rev.revision = None
53
- try:
54
- prevs = conan_api.list.package_revisions(pref_no_rev, remote=r)
55
- except NotFoundException:
56
- continue
57
- if pref in prevs:
58
- result_pkg_list.add_prefs(ref, [pref])
59
- info = recipe_bundle["packages"][pref.package_id]["info"]
60
- result_pkg_list.add_configurations({pref: info})
61
- if result_pkg_list.recipes:
62
- result.add(r.name, result_pkg_list)
63
-
33
+ result = conan_api.list.find_remotes(package_list, selected_remotes)
64
34
  return {
65
35
  "results": result.serialize(),
66
36
  "conan_api": conan_api,
@@ -80,8 +50,8 @@ def pkglist_merge(conan_api, parser, subparser, *args):
80
50
  args = parser.parse_args(*args)
81
51
 
82
52
  result = MultiPackagesList()
83
- for pkglist in args.list:
84
- listfile = make_abs_path(pkglist)
53
+ for pkg_list in args.list:
54
+ listfile = make_abs_path(pkg_list)
85
55
  multi_pkglist = MultiPackagesList.load(listfile)
86
56
  result.merge(multi_pkglist)
87
57