conan 2.9.3__tar.gz → 2.10.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 (338) hide show
  1. {conan-2.9.3/conan.egg-info → conan-2.10.1}/PKG-INFO +1 -1
  2. {conan-2.9.3 → conan-2.10.1}/conan/__init__.py +1 -2
  3. {conan-2.9.3 → conan-2.10.1}/conan/api/conan_api.py +5 -4
  4. {conan-2.9.3 → conan-2.10.1}/conan/api/output.py +26 -20
  5. {conan-2.9.3 → conan-2.10.1}/conan/api/subapi/cache.py +31 -32
  6. {conan-2.9.3 → conan-2.10.1}/conan/api/subapi/config.py +3 -4
  7. {conan-2.9.3 → conan-2.10.1}/conan/api/subapi/export.py +9 -5
  8. {conan-2.9.3 → conan-2.10.1}/conan/api/subapi/install.py +5 -2
  9. {conan-2.9.3 → conan-2.10.1}/conan/api/subapi/local.py +16 -10
  10. {conan-2.9.3 → conan-2.10.1}/conan/api/subapi/new.py +4 -2
  11. {conan-2.9.3 → conan-2.10.1}/conan/api/subapi/remotes.py +2 -2
  12. conan-2.10.1/conan/api/subapi/workspace.py +82 -0
  13. {conan-2.9.3 → conan-2.10.1}/conan/cli/cli.py +2 -2
  14. {conan-2.9.3 → conan-2.10.1}/conan/cli/command.py +13 -4
  15. {conan-2.9.3 → conan-2.10.1}/conan/cli/commands/build.py +0 -1
  16. {conan-2.9.3 → conan-2.10.1}/conan/cli/commands/config.py +10 -1
  17. {conan-2.9.3 → conan-2.10.1}/conan/cli/commands/list.py +1 -1
  18. {conan-2.9.3 → conan-2.10.1}/conan/cli/commands/new.py +5 -3
  19. {conan-2.9.3 → conan-2.10.1}/conan/cli/commands/remote.py +12 -2
  20. conan-2.10.1/conan/cli/commands/workspace.py +108 -0
  21. {conan-2.9.3 → conan-2.10.1}/conan/cli/formatters/graph/build_order_html.py +3 -2
  22. {conan-2.9.3 → conan-2.10.1}/conan/cli/formatters/graph/graph.py +2 -2
  23. {conan-2.9.3 → conan-2.10.1}/conan/cli/formatters/graph/info_graph_html.py +1 -1
  24. {conan-2.9.3 → conan-2.10.1}/conan/cli/formatters/list/list.py +2 -2
  25. {conan-2.9.3 → conan-2.10.1}/conan/cli/printers/graph.py +1 -0
  26. {conan-2.9.3 → conan-2.10.1}/conan/cps/cps.py +6 -6
  27. {conan-2.9.3 → conan-2.10.1}/conan/internal/__init__.py +3 -0
  28. {conan-2.9.3 → conan-2.10.1}/conan/internal/api/detect/detect_vs.py +0 -1
  29. {conan-2.9.3 → conan-2.10.1}/conan/internal/api/export.py +3 -3
  30. {conan-2.9.3 → conan-2.10.1}/conan/internal/api/install/generators.py +2 -3
  31. {conan-2.9.3 → conan-2.10.1}/conan/internal/api/new/bazel_7_lib.py +4 -1
  32. {conan-2.9.3 → conan-2.10.1}/conan/internal/api/new/bazel_lib.py +4 -1
  33. {conan-2.9.3 → conan-2.10.1}/conan/internal/cache/db/cache_database.py +4 -8
  34. {conan-2.9.3 → conan-2.10.1}/conan/internal/cache/db/packages_table.py +42 -0
  35. {conan-2.9.3 → conan-2.10.1}/conan/internal/cache/integrity_check.py +4 -4
  36. {conan-2.9.3 → conan-2.10.1}/conan/internal/conan_app.py +0 -10
  37. {conan-2.9.3 → conan-2.10.1}/conan/internal/deploy.py +1 -1
  38. conan-2.10.1/conan/internal/methods.py +159 -0
  39. {conan-2.9.3 → conan-2.10.1}/conan/internal/runner/docker.py +6 -3
  40. conan-2.10.1/conan/internal/workspace.py +154 -0
  41. {conan-2.9.3 → conan-2.10.1}/conan/test/assets/genconanfile.py +2 -2
  42. {conan-2.9.3 → conan-2.10.1}/conan/test/utils/artifactory.py +1 -1
  43. {conan-2.9.3 → conan-2.10.1}/conan/test/utils/server_launcher.py +1 -1
  44. {conan-2.9.3 → conan-2.10.1}/conan/test/utils/tools.py +8 -111
  45. {conan-2.9.3 → conan-2.10.1}/conan/tools/build/flags.py +15 -4
  46. {conan-2.9.3 → conan-2.10.1}/conan/tools/cmake/cmake.py +2 -2
  47. {conan-2.9.3 → conan-2.10.1}/conan/tools/cmake/cmakedeps/cmakedeps.py +1 -1
  48. {conan-2.9.3 → conan-2.10.1}/conan/tools/cmake/cmakedeps2/cmakedeps.py +58 -6
  49. {conan-2.9.3 → conan-2.10.1}/conan/tools/cmake/cmakedeps2/config.py +34 -1
  50. {conan-2.9.3 → conan-2.10.1}/conan/tools/cmake/cmakedeps2/target_configuration.py +6 -1
  51. {conan-2.9.3 → conan-2.10.1}/conan/tools/cmake/cmakedeps2/targets.py +1 -1
  52. {conan-2.9.3 → conan-2.10.1}/conan/tools/cmake/toolchain/blocks.py +2 -2
  53. {conan-2.9.3 → conan-2.10.1}/conan/tools/files/patches.py +2 -0
  54. {conan-2.9.3 → conan-2.10.1}/conan/tools/gnu/autotoolstoolchain.py +2 -2
  55. {conan-2.9.3 → conan-2.10.1}/conan/tools/gnu/gnutoolchain.py +2 -2
  56. {conan-2.9.3 → conan-2.10.1}/conan/tools/google/bazeldeps.py +45 -109
  57. {conan-2.9.3 → conan-2.10.1}/conan/tools/meson/toolchain.py +15 -12
  58. {conan-2.9.3 → conan-2.10.1}/conan/tools/microsoft/msbuild.py +2 -2
  59. {conan-2.9.3 → conan-2.10.1}/conan/tools/microsoft/nmaketoolchain.py +1 -1
  60. conan-2.10.1/conan/tools/premake/premake.py +17 -0
  61. {conan-2.9.3 → conan-2.10.1}/conan/tools/premake/premakedeps.py +2 -4
  62. {conan-2.9.3 → conan-2.10.1}/conan/tools/ros/rosenv.py +7 -2
  63. {conan-2.9.3 → conan-2.10.1}/conan/tools/scm/git.py +1 -0
  64. {conan-2.9.3 → conan-2.10.1}/conan/tools/system/package_manager.py +1 -2
  65. {conan-2.9.3 → conan-2.10.1/conan.egg-info}/PKG-INFO +1 -1
  66. {conan-2.9.3 → conan-2.10.1}/conan.egg-info/SOURCES.txt +4 -5
  67. {conan-2.9.3 → conan-2.10.1}/conans/client/graph/build_mode.py +4 -4
  68. {conan-2.9.3 → conan-2.10.1}/conans/client/graph/compute_pid.py +1 -1
  69. {conan-2.9.3 → conan-2.10.1}/conans/client/graph/graph.py +5 -0
  70. {conan-2.9.3 → conan-2.10.1}/conans/client/graph/graph_binaries.py +9 -9
  71. {conan-2.9.3 → conan-2.10.1}/conans/client/graph/graph_builder.py +15 -9
  72. {conan-2.9.3 → conan-2.10.1}/conans/client/graph/profile_node_definer.py +6 -4
  73. {conan-2.9.3 → conan-2.10.1}/conans/client/installer.py +16 -12
  74. {conan-2.9.3 → conan-2.10.1}/conans/client/loader.py +3 -6
  75. {conan-2.9.3 → conan-2.10.1}/conans/client/remote_manager.py +2 -2
  76. {conan-2.9.3 → conan-2.10.1}/conans/client/rest/conan_requester.py +2 -2
  77. {conan-2.9.3 → conan-2.10.1}/conans/client/rest/rest_client.py +5 -3
  78. {conan-2.9.3 → conan-2.10.1}/conans/client/rest/rest_client_v2.py +6 -2
  79. {conan-2.9.3 → conan-2.10.1}/conans/client/rest_client_local_recipe_index.py +5 -3
  80. {conan-2.9.3 → conan-2.10.1}/conans/client/source.py +3 -14
  81. {conan-2.9.3 → conan-2.10.1}/conans/model/build_info.py +109 -48
  82. {conan-2.9.3 → conan-2.10.1}/conans/model/conf.py +1 -1
  83. {conan-2.9.3 → conan-2.10.1}/conans/model/dependencies.py +11 -3
  84. {conan-2.9.3 → conan-2.10.1}/conans/model/requires.py +3 -1
  85. {conan-2.9.3 → conan-2.10.1}/conans/model/version_range.py +3 -3
  86. {conan-2.9.3 → conan-2.10.1}/setup.py +1 -1
  87. conan-2.9.3/conan/tools/premake/premake.py +0 -39
  88. conan-2.9.3/conans/__init__.py +0 -4
  89. conan-2.9.3/conans/client/conanfile/build.py +0 -18
  90. conan-2.9.3/conans/client/conanfile/configure.py +0 -54
  91. conan-2.9.3/conans/client/conanfile/implementations.py +0 -30
  92. conan-2.9.3/conans/client/conanfile/package.py +0 -51
  93. {conan-2.9.3 → conan-2.10.1}/LICENSE.md +0 -0
  94. {conan-2.9.3 → conan-2.10.1}/MANIFEST.in +0 -0
  95. {conan-2.9.3 → conan-2.10.1}/README.md +0 -0
  96. {conan-2.9.3 → conan-2.10.1}/conan/api/__init__.py +0 -0
  97. {conan-2.9.3 → conan-2.10.1}/conan/api/input.py +0 -0
  98. {conan-2.9.3 → conan-2.10.1}/conan/api/model.py +0 -0
  99. {conan-2.9.3 → conan-2.10.1}/conan/api/subapi/__init__.py +0 -0
  100. {conan-2.9.3 → conan-2.10.1}/conan/api/subapi/command.py +0 -0
  101. {conan-2.9.3 → conan-2.10.1}/conan/api/subapi/download.py +0 -0
  102. {conan-2.9.3 → conan-2.10.1}/conan/api/subapi/graph.py +0 -0
  103. {conan-2.9.3 → conan-2.10.1}/conan/api/subapi/list.py +0 -0
  104. {conan-2.9.3 → conan-2.10.1}/conan/api/subapi/lockfile.py +0 -0
  105. {conan-2.9.3 → conan-2.10.1}/conan/api/subapi/profiles.py +0 -0
  106. {conan-2.9.3 → conan-2.10.1}/conan/api/subapi/remove.py +0 -0
  107. {conan-2.9.3 → conan-2.10.1}/conan/api/subapi/search.py +0 -0
  108. {conan-2.9.3 → conan-2.10.1}/conan/api/subapi/upload.py +0 -0
  109. {conan-2.9.3 → conan-2.10.1}/conan/cli/__init__.py +0 -0
  110. {conan-2.9.3 → conan-2.10.1}/conan/cli/args.py +0 -0
  111. {conan-2.9.3 → conan-2.10.1}/conan/cli/commands/__init__.py +0 -0
  112. {conan-2.9.3 → conan-2.10.1}/conan/cli/commands/cache.py +0 -0
  113. {conan-2.9.3 → conan-2.10.1}/conan/cli/commands/create.py +0 -0
  114. {conan-2.9.3 → conan-2.10.1}/conan/cli/commands/download.py +0 -0
  115. {conan-2.9.3 → conan-2.10.1}/conan/cli/commands/editable.py +0 -0
  116. {conan-2.9.3 → conan-2.10.1}/conan/cli/commands/export.py +0 -0
  117. {conan-2.9.3 → conan-2.10.1}/conan/cli/commands/export_pkg.py +0 -0
  118. {conan-2.9.3 → conan-2.10.1}/conan/cli/commands/graph.py +0 -0
  119. {conan-2.9.3 → conan-2.10.1}/conan/cli/commands/inspect.py +0 -0
  120. {conan-2.9.3 → conan-2.10.1}/conan/cli/commands/install.py +0 -0
  121. {conan-2.9.3 → conan-2.10.1}/conan/cli/commands/lock.py +0 -0
  122. {conan-2.9.3 → conan-2.10.1}/conan/cli/commands/pkglist.py +0 -0
  123. {conan-2.9.3 → conan-2.10.1}/conan/cli/commands/profile.py +0 -0
  124. {conan-2.9.3 → conan-2.10.1}/conan/cli/commands/remove.py +0 -0
  125. {conan-2.9.3 → conan-2.10.1}/conan/cli/commands/search.py +0 -0
  126. {conan-2.9.3 → conan-2.10.1}/conan/cli/commands/source.py +0 -0
  127. {conan-2.9.3 → conan-2.10.1}/conan/cli/commands/test.py +0 -0
  128. {conan-2.9.3 → conan-2.10.1}/conan/cli/commands/upload.py +0 -0
  129. {conan-2.9.3 → conan-2.10.1}/conan/cli/commands/version.py +0 -0
  130. {conan-2.9.3 → conan-2.10.1}/conan/cli/exit_codes.py +0 -0
  131. {conan-2.9.3 → conan-2.10.1}/conan/cli/formatters/__init__.py +0 -0
  132. {conan-2.9.3 → conan-2.10.1}/conan/cli/formatters/graph/__init__.py +0 -0
  133. {conan-2.9.3 → conan-2.10.1}/conan/cli/formatters/graph/graph_info_text.py +0 -0
  134. {conan-2.9.3 → conan-2.10.1}/conan/cli/formatters/graph/info_graph_dot.py +0 -0
  135. {conan-2.9.3 → conan-2.10.1}/conan/cli/formatters/list/__init__.py +0 -0
  136. {conan-2.9.3 → conan-2.10.1}/conan/cli/formatters/list/binary_html_table.py +0 -0
  137. {conan-2.9.3 → conan-2.10.1}/conan/cli/formatters/list/search_table_html.py +0 -0
  138. {conan-2.9.3 → conan-2.10.1}/conan/cli/printers/__init__.py +0 -0
  139. {conan-2.9.3 → conan-2.10.1}/conan/cps/__init__.py +0 -0
  140. {conan-2.9.3 → conan-2.10.1}/conan/errors.py +0 -0
  141. {conan-2.9.3 → conan-2.10.1}/conan/internal/api/__init__.py +0 -0
  142. {conan-2.9.3 → conan-2.10.1}/conan/internal/api/config/__init__.py +0 -0
  143. {conan-2.9.3 → conan-2.10.1}/conan/internal/api/config/config_installer.py +0 -0
  144. {conan-2.9.3 → conan-2.10.1}/conan/internal/api/detect/__init__.py +0 -0
  145. {conan-2.9.3 → conan-2.10.1}/conan/internal/api/detect/detect_api.py +0 -0
  146. {conan-2.9.3 → conan-2.10.1}/conan/internal/api/install/__init__.py +0 -0
  147. {conan-2.9.3 → conan-2.10.1}/conan/internal/api/list/__init__.py +0 -0
  148. {conan-2.9.3 → conan-2.10.1}/conan/internal/api/list/query_parse.py +0 -0
  149. {conan-2.9.3 → conan-2.10.1}/conan/internal/api/local/__init__.py +0 -0
  150. {conan-2.9.3 → conan-2.10.1}/conan/internal/api/local/editable.py +0 -0
  151. {conan-2.9.3 → conan-2.10.1}/conan/internal/api/new/__init__.py +0 -0
  152. {conan-2.9.3 → conan-2.10.1}/conan/internal/api/new/alias_new.py +0 -0
  153. {conan-2.9.3 → conan-2.10.1}/conan/internal/api/new/autoools_exe.py +0 -0
  154. {conan-2.9.3 → conan-2.10.1}/conan/internal/api/new/autotools_lib.py +0 -0
  155. {conan-2.9.3 → conan-2.10.1}/conan/internal/api/new/basic.py +0 -0
  156. {conan-2.9.3 → conan-2.10.1}/conan/internal/api/new/bazel_7_exe.py +0 -0
  157. {conan-2.9.3 → conan-2.10.1}/conan/internal/api/new/bazel_exe.py +0 -0
  158. {conan-2.9.3 → conan-2.10.1}/conan/internal/api/new/cmake_exe.py +0 -0
  159. {conan-2.9.3 → conan-2.10.1}/conan/internal/api/new/cmake_lib.py +0 -0
  160. {conan-2.9.3 → conan-2.10.1}/conan/internal/api/new/local_recipes_index.py +0 -0
  161. {conan-2.9.3 → conan-2.10.1}/conan/internal/api/new/meson_exe.py +0 -0
  162. {conan-2.9.3 → conan-2.10.1}/conan/internal/api/new/meson_lib.py +0 -0
  163. {conan-2.9.3 → conan-2.10.1}/conan/internal/api/new/msbuild_exe.py +0 -0
  164. {conan-2.9.3 → conan-2.10.1}/conan/internal/api/new/msbuild_lib.py +0 -0
  165. {conan-2.9.3 → conan-2.10.1}/conan/internal/api/new/qbs_lib.py +0 -0
  166. {conan-2.9.3 → conan-2.10.1}/conan/internal/api/profile/__init__.py +0 -0
  167. {conan-2.9.3 → conan-2.10.1}/conan/internal/api/profile/detect.py +0 -0
  168. {conan-2.9.3 → conan-2.10.1}/conan/internal/api/profile/profile_loader.py +0 -0
  169. {conan-2.9.3 → conan-2.10.1}/conan/internal/api/remotes/__init__.py +0 -0
  170. {conan-2.9.3 → conan-2.10.1}/conan/internal/api/remotes/encrypt.py +0 -0
  171. {conan-2.9.3 → conan-2.10.1}/conan/internal/api/remotes/localdb.py +0 -0
  172. {conan-2.9.3 → conan-2.10.1}/conan/internal/api/uploader.py +0 -0
  173. {conan-2.9.3 → conan-2.10.1}/conan/internal/cache/__init__.py +0 -0
  174. {conan-2.9.3 → conan-2.10.1}/conan/internal/cache/cache.py +0 -0
  175. {conan-2.9.3 → conan-2.10.1}/conan/internal/cache/conan_reference_layout.py +0 -0
  176. {conan-2.9.3 → conan-2.10.1}/conan/internal/cache/db/__init__.py +0 -0
  177. {conan-2.9.3 → conan-2.10.1}/conan/internal/cache/db/recipes_table.py +0 -0
  178. {conan-2.9.3 → conan-2.10.1}/conan/internal/cache/db/table.py +0 -0
  179. {conan-2.9.3 → conan-2.10.1}/conan/internal/cache/home_paths.py +0 -0
  180. {conan-2.9.3 → conan-2.10.1}/conan/internal/default_settings.py +0 -0
  181. {conan-2.9.3 → conan-2.10.1}/conan/internal/errors.py +0 -0
  182. {conan-2.9.3 → conan-2.10.1}/conan/internal/internal_tools.py +0 -0
  183. {conan-2.9.3 → conan-2.10.1}/conan/internal/paths.py +0 -0
  184. {conan-2.9.3 → conan-2.10.1}/conan/internal/runner/__init__.py +0 -0
  185. {conan-2.9.3 → conan-2.10.1}/conan/internal/runner/ssh.py +0 -0
  186. {conan-2.9.3 → conan-2.10.1}/conan/internal/runner/wsl.py +0 -0
  187. {conan-2.9.3 → conan-2.10.1}/conan/test/__init__.py +0 -0
  188. {conan-2.9.3 → conan-2.10.1}/conan/test/assets/__init__.py +0 -0
  189. {conan-2.9.3 → conan-2.10.1}/conan/test/assets/autotools.py +0 -0
  190. {conan-2.9.3 → conan-2.10.1}/conan/test/assets/cmake.py +0 -0
  191. {conan-2.9.3 → conan-2.10.1}/conan/test/assets/pkg_cmake.py +0 -0
  192. {conan-2.9.3 → conan-2.10.1}/conan/test/assets/sources.py +0 -0
  193. {conan-2.9.3 → conan-2.10.1}/conan/test/assets/visual_project_files.py +0 -0
  194. {conan-2.9.3 → conan-2.10.1}/conan/test/utils/__init__.py +0 -0
  195. {conan-2.9.3 → conan-2.10.1}/conan/test/utils/env.py +0 -0
  196. {conan-2.9.3 → conan-2.10.1}/conan/test/utils/file_server.py +0 -0
  197. {conan-2.9.3 → conan-2.10.1}/conan/test/utils/mocks.py +1 -1
  198. {conan-2.9.3 → conan-2.10.1}/conan/test/utils/profiles.py +0 -0
  199. {conan-2.9.3 → conan-2.10.1}/conan/test/utils/scm.py +0 -0
  200. {conan-2.9.3 → conan-2.10.1}/conan/test/utils/test_files.py +0 -0
  201. {conan-2.9.3 → conan-2.10.1}/conan/tools/__init__.py +0 -0
  202. {conan-2.9.3 → conan-2.10.1}/conan/tools/android/__init__.py +0 -0
  203. {conan-2.9.3 → conan-2.10.1}/conan/tools/android/utils.py +0 -0
  204. {conan-2.9.3 → conan-2.10.1}/conan/tools/apple/__init__.py +0 -0
  205. {conan-2.9.3 → conan-2.10.1}/conan/tools/apple/apple.py +0 -0
  206. {conan-2.9.3 → conan-2.10.1}/conan/tools/apple/xcodebuild.py +0 -0
  207. {conan-2.9.3 → conan-2.10.1}/conan/tools/apple/xcodedeps.py +0 -0
  208. {conan-2.9.3 → conan-2.10.1}/conan/tools/apple/xcodetoolchain.py +0 -0
  209. {conan-2.9.3 → conan-2.10.1}/conan/tools/build/__init__.py +0 -0
  210. {conan-2.9.3 → conan-2.10.1}/conan/tools/build/cppstd.py +0 -0
  211. {conan-2.9.3 → conan-2.10.1}/conan/tools/build/cpu.py +0 -0
  212. {conan-2.9.3 → conan-2.10.1}/conan/tools/build/cross_building.py +0 -0
  213. {conan-2.9.3 → conan-2.10.1}/conan/tools/build/cstd.py +0 -0
  214. {conan-2.9.3 → conan-2.10.1}/conan/tools/build/stdcpp_library.py +0 -0
  215. {conan-2.9.3 → conan-2.10.1}/conan/tools/cmake/__init__.py +0 -0
  216. {conan-2.9.3 → conan-2.10.1}/conan/tools/cmake/cmakedeps/__init__.py +0 -0
  217. {conan-2.9.3 → conan-2.10.1}/conan/tools/cmake/cmakedeps/templates/__init__.py +0 -0
  218. {conan-2.9.3 → conan-2.10.1}/conan/tools/cmake/cmakedeps/templates/config.py +0 -0
  219. {conan-2.9.3 → conan-2.10.1}/conan/tools/cmake/cmakedeps/templates/config_version.py +0 -0
  220. {conan-2.9.3 → conan-2.10.1}/conan/tools/cmake/cmakedeps/templates/macros.py +0 -0
  221. {conan-2.9.3 → conan-2.10.1}/conan/tools/cmake/cmakedeps/templates/target_configuration.py +0 -0
  222. {conan-2.9.3 → conan-2.10.1}/conan/tools/cmake/cmakedeps/templates/target_data.py +0 -0
  223. {conan-2.9.3 → conan-2.10.1}/conan/tools/cmake/cmakedeps/templates/targets.py +0 -0
  224. {conan-2.9.3 → conan-2.10.1}/conan/tools/cmake/cmakedeps2/__init__.py +0 -0
  225. {conan-2.9.3 → conan-2.10.1}/conan/tools/cmake/cmakedeps2/config_version.py +0 -0
  226. {conan-2.9.3 → conan-2.10.1}/conan/tools/cmake/layout.py +0 -0
  227. {conan-2.9.3 → conan-2.10.1}/conan/tools/cmake/presets.py +0 -0
  228. {conan-2.9.3 → conan-2.10.1}/conan/tools/cmake/toolchain/__init__.py +0 -0
  229. {conan-2.9.3 → conan-2.10.1}/conan/tools/cmake/toolchain/toolchain.py +0 -0
  230. {conan-2.9.3 → conan-2.10.1}/conan/tools/cmake/utils.py +0 -0
  231. {conan-2.9.3 → conan-2.10.1}/conan/tools/cps/__init__.py +0 -0
  232. {conan-2.9.3 → conan-2.10.1}/conan/tools/cps/cps_deps.py +0 -0
  233. {conan-2.9.3 → conan-2.10.1}/conan/tools/env/__init__.py +0 -0
  234. {conan-2.9.3 → conan-2.10.1}/conan/tools/env/environment.py +0 -0
  235. {conan-2.9.3 → conan-2.10.1}/conan/tools/env/virtualbuildenv.py +0 -0
  236. {conan-2.9.3 → conan-2.10.1}/conan/tools/env/virtualrunenv.py +0 -0
  237. {conan-2.9.3 → conan-2.10.1}/conan/tools/files/__init__.py +0 -0
  238. {conan-2.9.3 → conan-2.10.1}/conan/tools/files/conandata.py +0 -0
  239. {conan-2.9.3 → conan-2.10.1}/conan/tools/files/copy_pattern.py +0 -0
  240. {conan-2.9.3 → conan-2.10.1}/conan/tools/files/files.py +0 -0
  241. {conan-2.9.3 → conan-2.10.1}/conan/tools/files/packager.py +0 -0
  242. {conan-2.9.3 → conan-2.10.1}/conan/tools/files/symlinks/__init__.py +0 -0
  243. {conan-2.9.3 → conan-2.10.1}/conan/tools/files/symlinks/symlinks.py +0 -0
  244. {conan-2.9.3 → conan-2.10.1}/conan/tools/gnu/__init__.py +0 -0
  245. {conan-2.9.3 → conan-2.10.1}/conan/tools/gnu/autotools.py +0 -0
  246. {conan-2.9.3 → conan-2.10.1}/conan/tools/gnu/autotoolsdeps.py +0 -0
  247. {conan-2.9.3 → conan-2.10.1}/conan/tools/gnu/get_gnu_triplet.py +0 -0
  248. {conan-2.9.3 → conan-2.10.1}/conan/tools/gnu/gnudeps_flags.py +0 -0
  249. {conan-2.9.3 → conan-2.10.1}/conan/tools/gnu/makedeps.py +0 -0
  250. {conan-2.9.3 → conan-2.10.1}/conan/tools/gnu/pkgconfig.py +0 -0
  251. {conan-2.9.3 → conan-2.10.1}/conan/tools/gnu/pkgconfigdeps.py +0 -0
  252. {conan-2.9.3 → conan-2.10.1}/conan/tools/google/__init__.py +0 -0
  253. {conan-2.9.3 → conan-2.10.1}/conan/tools/google/bazel.py +0 -0
  254. {conan-2.9.3 → conan-2.10.1}/conan/tools/google/layout.py +0 -0
  255. {conan-2.9.3 → conan-2.10.1}/conan/tools/google/toolchain.py +0 -0
  256. {conan-2.9.3 → conan-2.10.1}/conan/tools/intel/__init__.py +0 -0
  257. {conan-2.9.3 → conan-2.10.1}/conan/tools/intel/intel_cc.py +0 -0
  258. {conan-2.9.3 → conan-2.10.1}/conan/tools/layout/__init__.py +0 -0
  259. {conan-2.9.3 → conan-2.10.1}/conan/tools/meson/__init__.py +0 -0
  260. {conan-2.9.3 → conan-2.10.1}/conan/tools/meson/helpers.py +0 -0
  261. {conan-2.9.3 → conan-2.10.1}/conan/tools/meson/meson.py +0 -0
  262. {conan-2.9.3 → conan-2.10.1}/conan/tools/microsoft/__init__.py +0 -0
  263. {conan-2.9.3 → conan-2.10.1}/conan/tools/microsoft/layout.py +0 -0
  264. {conan-2.9.3 → conan-2.10.1}/conan/tools/microsoft/msbuilddeps.py +0 -0
  265. {conan-2.9.3 → conan-2.10.1}/conan/tools/microsoft/nmakedeps.py +0 -0
  266. {conan-2.9.3 → conan-2.10.1}/conan/tools/microsoft/subsystems.py +0 -0
  267. {conan-2.9.3 → conan-2.10.1}/conan/tools/microsoft/toolchain.py +0 -0
  268. {conan-2.9.3 → conan-2.10.1}/conan/tools/microsoft/visual.py +0 -0
  269. {conan-2.9.3 → conan-2.10.1}/conan/tools/premake/__init__.py +0 -0
  270. {conan-2.9.3 → conan-2.10.1}/conan/tools/qbs/__init__.py +0 -0
  271. {conan-2.9.3 → conan-2.10.1}/conan/tools/qbs/common.py +0 -0
  272. {conan-2.9.3 → conan-2.10.1}/conan/tools/qbs/qbs.py +0 -0
  273. {conan-2.9.3 → conan-2.10.1}/conan/tools/qbs/qbsdeps.py +0 -0
  274. {conan-2.9.3 → conan-2.10.1}/conan/tools/qbs/qbsprofile.py +0 -0
  275. {conan-2.9.3 → conan-2.10.1}/conan/tools/ros/__init__.py +0 -0
  276. {conan-2.9.3 → conan-2.10.1}/conan/tools/scm/__init__.py +0 -0
  277. {conan-2.9.3 → conan-2.10.1}/conan/tools/scons/__init__.py +0 -0
  278. {conan-2.9.3 → conan-2.10.1}/conan/tools/scons/sconsdeps.py +0 -0
  279. {conan-2.9.3 → conan-2.10.1}/conan/tools/system/__init__.py +0 -0
  280. {conan-2.9.3 → conan-2.10.1}/conan.egg-info/dependency_links.txt +0 -0
  281. {conan-2.9.3 → conan-2.10.1}/conan.egg-info/entry_points.txt +0 -0
  282. {conan-2.9.3 → conan-2.10.1}/conan.egg-info/requires.txt +0 -0
  283. {conan-2.9.3 → conan-2.10.1}/conan.egg-info/top_level.txt +0 -0
  284. {conan-2.9.3/conans/client → conan-2.10.1/conans}/__init__.py +0 -0
  285. {conan-2.9.3/conans/client/conanfile → conan-2.10.1/conans/client}/__init__.py +0 -0
  286. {conan-2.9.3 → conan-2.10.1}/conans/client/downloaders/__init__.py +0 -0
  287. {conan-2.9.3 → conan-2.10.1}/conans/client/downloaders/caching_file_downloader.py +0 -0
  288. {conan-2.9.3 → conan-2.10.1}/conans/client/downloaders/download_cache.py +0 -0
  289. {conan-2.9.3 → conan-2.10.1}/conans/client/downloaders/file_downloader.py +0 -0
  290. {conan-2.9.3 → conan-2.10.1}/conans/client/graph/__init__.py +0 -0
  291. {conan-2.9.3 → conan-2.10.1}/conans/client/graph/compatibility.py +0 -0
  292. {conan-2.9.3 → conan-2.10.1}/conans/client/graph/graph_error.py +0 -0
  293. {conan-2.9.3 → conan-2.10.1}/conans/client/graph/install_graph.py +0 -0
  294. {conan-2.9.3 → conan-2.10.1}/conans/client/graph/provides.py +0 -0
  295. {conan-2.9.3 → conan-2.10.1}/conans/client/graph/proxy.py +0 -0
  296. {conan-2.9.3 → conan-2.10.1}/conans/client/graph/python_requires.py +0 -0
  297. {conan-2.9.3 → conan-2.10.1}/conans/client/graph/range_resolver.py +0 -0
  298. {conan-2.9.3 → conan-2.10.1}/conans/client/hook_manager.py +0 -0
  299. {conan-2.9.3 → conan-2.10.1}/conans/client/loader_txt.py +0 -0
  300. {conan-2.9.3 → conan-2.10.1}/conans/client/migrations.py +0 -0
  301. {conan-2.9.3 → conan-2.10.1}/conans/client/pkg_sign.py +0 -0
  302. {conan-2.9.3 → conan-2.10.1}/conans/client/rest/__init__.py +0 -0
  303. {conan-2.9.3 → conan-2.10.1}/conans/client/rest/auth_manager.py +0 -0
  304. {conan-2.9.3 → conan-2.10.1}/conans/client/rest/client_routes.py +0 -0
  305. {conan-2.9.3 → conan-2.10.1}/conans/client/rest/file_uploader.py +0 -0
  306. {conan-2.9.3 → conan-2.10.1}/conans/client/rest/remote_credentials.py +0 -0
  307. {conan-2.9.3 → conan-2.10.1}/conans/client/subsystems.py +0 -0
  308. {conan-2.9.3 → conan-2.10.1}/conans/conan.py +0 -0
  309. {conan-2.9.3 → conan-2.10.1}/conans/conan_server.py +0 -0
  310. {conan-2.9.3 → conan-2.10.1}/conans/migrations.py +0 -0
  311. {conan-2.9.3 → conan-2.10.1}/conans/model/__init__.py +0 -0
  312. {conan-2.9.3 → conan-2.10.1}/conans/model/conan_file.py +0 -0
  313. {conan-2.9.3 → conan-2.10.1}/conans/model/conanfile_interface.py +0 -0
  314. {conan-2.9.3 → conan-2.10.1}/conans/model/graph_lock.py +0 -0
  315. {conan-2.9.3 → conan-2.10.1}/conans/model/info.py +0 -0
  316. {conan-2.9.3 → conan-2.10.1}/conans/model/layout.py +0 -0
  317. {conan-2.9.3 → conan-2.10.1}/conans/model/manifest.py +0 -0
  318. {conan-2.9.3 → conan-2.10.1}/conans/model/options.py +0 -0
  319. {conan-2.9.3 → conan-2.10.1}/conans/model/package_ref.py +0 -0
  320. {conan-2.9.3 → conan-2.10.1}/conans/model/pkg_type.py +0 -0
  321. {conan-2.9.3 → conan-2.10.1}/conans/model/profile.py +0 -0
  322. {conan-2.9.3 → conan-2.10.1}/conans/model/recipe_ref.py +0 -0
  323. {conan-2.9.3 → conan-2.10.1}/conans/model/rest_routes.py +0 -0
  324. {conan-2.9.3 → conan-2.10.1}/conans/model/settings.py +0 -0
  325. {conan-2.9.3 → conan-2.10.1}/conans/model/version.py +0 -0
  326. {conan-2.9.3 → conan-2.10.1}/conans/requirements.txt +0 -0
  327. {conan-2.9.3 → conan-2.10.1}/conans/requirements_dev.txt +0 -0
  328. {conan-2.9.3 → conan-2.10.1}/conans/requirements_runner.txt +0 -0
  329. {conan-2.9.3 → conan-2.10.1}/conans/requirements_server.txt +0 -0
  330. {conan-2.9.3 → conan-2.10.1}/conans/util/__init__.py +0 -0
  331. {conan-2.9.3 → conan-2.10.1}/conans/util/config_parser.py +0 -0
  332. {conan-2.9.3 → conan-2.10.1}/conans/util/dates.py +0 -0
  333. {conan-2.9.3 → conan-2.10.1}/conans/util/files.py +0 -0
  334. {conan-2.9.3 → conan-2.10.1}/conans/util/locks.py +0 -0
  335. {conan-2.9.3 → conan-2.10.1}/conans/util/runners.py +0 -0
  336. {conan-2.9.3 → conan-2.10.1}/conans/util/thread.py +0 -0
  337. {conan-2.9.3 → conan-2.10.1}/pyproject.toml +0 -0
  338. {conan-2.9.3 → conan-2.10.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: conan
3
- Version: 2.9.3
3
+ Version: 2.10.1
4
4
  Summary: Conan C/C++ package manager
5
5
  Home-page: https://conan.io
6
6
  Author: JFrog LTD
@@ -1,6 +1,5 @@
1
1
  from conans.model.conan_file import ConanFile
2
2
  from conan.tools.scm import Version as _Version
3
- from conans import __version__
4
-
5
3
 
4
+ __version__ = '2.10.1'
6
5
  conan_version = _Version(__version__)
@@ -5,7 +5,8 @@ from conan.api.subapi.cache import CacheAPI
5
5
  from conan.api.subapi.command import CommandAPI
6
6
  from conan.api.subapi.local import LocalAPI
7
7
  from conan.api.subapi.lockfile import LockfileAPI
8
- from conans import __version__ as client_version
8
+ from conan.api.subapi.workspace import WorkspaceAPI
9
+ from conan import conan_version
9
10
  from conan.api.subapi.config import ConfigAPI
10
11
  from conan.api.subapi.download import DownloadAPI
11
12
  from conan.api.subapi.export import ExportAPI
@@ -20,7 +21,6 @@ from conan.api.subapi.search import SearchAPI
20
21
  from conan.api.subapi.upload import UploadAPI
21
22
  from conans.client.migrations import ClientMigrator
22
23
  from conan.errors import ConanException
23
- from conans.model.version import Version
24
24
  from conan.internal.paths import get_conan_user_home
25
25
  from conans.model.version_range import validate_conan_version
26
26
 
@@ -33,11 +33,12 @@ class ConanAPI:
33
33
  raise ConanException("Conan needs Python >= 3.6")
34
34
 
35
35
  init_colorama(sys.stderr)
36
- self.cache_folder = cache_folder or get_conan_user_home()
36
+ self.workspace = WorkspaceAPI(self)
37
+ self.cache_folder = self.workspace.home_folder() or cache_folder or get_conan_user_home()
37
38
  self.home_folder = self.cache_folder # Lets call it home, deprecate "cache"
38
39
 
39
40
  # Migration system
40
- migrator = ClientMigrator(self.cache_folder, Version(client_version))
41
+ migrator = ClientMigrator(self.cache_folder, conan_version)
41
42
  migrator.migrate()
42
43
 
43
44
  self.command = CommandAPI(self)
@@ -4,6 +4,7 @@ import sys
4
4
  import time
5
5
  from threading import Lock
6
6
 
7
+ import colorama
7
8
  from colorama import Fore, Style
8
9
 
9
10
  from conan.errors import ConanException
@@ -113,21 +114,26 @@ class ConanOutput:
113
114
 
114
115
  :param v: `str` or `None`, where `None` is the same as `verbose`.
115
116
  """
117
+ env_level = os.getenv("CONAN_LOG_LEVEL")
118
+ v = env_level or v
119
+ levels = {"quiet": LEVEL_QUIET, # -vquiet 80
120
+ "error": LEVEL_ERROR, # -verror 70
121
+ "warning": LEVEL_WARNING, # -vwaring 60
122
+ "notice": LEVEL_NOTICE, # -vnotice 50
123
+ "status": LEVEL_STATUS, # -vstatus 40
124
+ None: LEVEL_VERBOSE, # -v 30
125
+ "verbose": LEVEL_VERBOSE, # -vverbose 30
126
+ "debug": LEVEL_DEBUG, # -vdebug 20
127
+ "v": LEVEL_DEBUG, # -vv 20
128
+ "trace": LEVEL_TRACE, # -vtrace 10
129
+ "vv": LEVEL_TRACE # -vvv 10
130
+ }
116
131
  try:
117
- level = {"quiet": LEVEL_QUIET, # -vquiet 80
118
- "error": LEVEL_ERROR, # -verror 70
119
- "warning": LEVEL_WARNING, # -vwaring 60
120
- "notice": LEVEL_NOTICE, # -vnotice 50
121
- "status": LEVEL_STATUS, # -vstatus 40
122
- None: LEVEL_VERBOSE, # -v 30
123
- "verbose": LEVEL_VERBOSE, # -vverbose 30
124
- "debug": LEVEL_DEBUG, # -vdebug 20
125
- "v": LEVEL_DEBUG, # -vv 20
126
- "trace": LEVEL_TRACE, # -vtrace 10
127
- "vv": LEVEL_TRACE # -vvv 10
128
- }[v]
132
+ level = levels[v]
129
133
  except KeyError:
130
- raise ConanException(f"Invalid argument '-v{v}'")
134
+ msg = " defined in CONAN_LOG_LEVEL environment variable" if env_level else ""
135
+ vals = "quiet, error, warning, notice, status, verbose, debug(v), trace(vv)"
136
+ raise ConanException(f"Invalid argument '-v{v}'{msg}.\nAllowed values: {vals}")
131
137
  else:
132
138
  cls._conan_output_level = level
133
139
 
@@ -283,15 +289,15 @@ def cli_out_write(data, fg=None, bg=None, endline="\n", indentation=0):
283
289
  """
284
290
  Output to be used by formatters to dump information to stdout
285
291
  """
286
-
287
- fg_ = fg or ''
288
- bg_ = bg or ''
289
- if (fg or bg) and _color_enabled(sys.stdout):
290
- data = f"{' ' * indentation}{fg_}{bg_}{data}{Style.RESET_ALL}{endline}"
292
+ if (fg or bg) and _color_enabled(sys.stdout): # need color
293
+ data = f"{' ' * indentation}{fg or ''}{bg or ''}{data}{Style.RESET_ALL}{endline}"
294
+ sys.stdout.write(data)
291
295
  else:
292
296
  data = f"{' ' * indentation}{data}{endline}"
293
-
294
- sys.stdout.write(data)
297
+ # https://github.com/conan-io/conan/issues/17245 avoid colorama crash and overhead
298
+ colorama.deinit()
299
+ sys.stdout.write(data)
300
+ colorama.reinit()
295
301
 
296
302
 
297
303
  class TimedOutput:
@@ -8,7 +8,6 @@ from conan.api.model import PackagesList
8
8
  from conan.api.output import ConanOutput
9
9
  from conan.internal.cache.cache import PkgCache
10
10
  from conan.internal.cache.home_paths import HomePaths
11
- from conan.internal.conan_app import ConanApp
12
11
  from conan.internal.cache.integrity_check import IntegrityChecker
13
12
  from conans.client.downloaders.download_cache import DownloadCache
14
13
  from conan.errors import ConanException
@@ -24,53 +23,53 @@ class CacheAPI:
24
23
  self.conan_api = conan_api
25
24
 
26
25
  def export_path(self, ref: RecipeReference):
27
- app = ConanApp(self.conan_api)
26
+ cache = PkgCache(self.conan_api.cache_folder, self.conan_api.config.global_conf)
28
27
  ref.revision = None if ref.revision == "latest" else ref.revision
29
- ref_layout = app.cache.recipe_layout(ref)
28
+ ref_layout = cache.recipe_layout(ref)
30
29
  return _check_folder_existence(ref, "export", ref_layout.export())
31
30
 
32
31
  def recipe_metadata_path(self, ref: RecipeReference):
33
- app = ConanApp(self.conan_api)
34
- ref = _resolve_latest_ref(app, ref)
35
- ref_layout = app.cache.recipe_layout(ref)
32
+ cache = PkgCache(self.conan_api.cache_folder, self.conan_api.config.global_conf)
33
+ ref = _resolve_latest_ref(cache, ref)
34
+ ref_layout = cache.recipe_layout(ref)
36
35
  return _check_folder_existence(ref, "metadata", ref_layout.metadata())
37
36
 
38
37
  def export_source_path(self, ref: RecipeReference):
39
- app = ConanApp(self.conan_api)
38
+ cache = PkgCache(self.conan_api.cache_folder, self.conan_api.config.global_conf)
40
39
  ref.revision = None if ref.revision == "latest" else ref.revision
41
- ref_layout = app.cache.recipe_layout(ref)
40
+ ref_layout = cache.recipe_layout(ref)
42
41
  return _check_folder_existence(ref, "export_sources", ref_layout.export_sources())
43
42
 
44
43
  def source_path(self, ref: RecipeReference):
45
- app = ConanApp(self.conan_api)
44
+ cache = PkgCache(self.conan_api.cache_folder, self.conan_api.config.global_conf)
46
45
  ref.revision = None if ref.revision == "latest" else ref.revision
47
- ref_layout = app.cache.recipe_layout(ref)
46
+ ref_layout = cache.recipe_layout(ref)
48
47
  return _check_folder_existence(ref, "source", ref_layout.source())
49
48
 
50
49
  def build_path(self, pref: PkgReference):
51
- app = ConanApp(self.conan_api)
52
- pref = _resolve_latest_pref(app, pref)
53
- ref_layout = app.cache.pkg_layout(pref)
50
+ cache = PkgCache(self.conan_api.cache_folder, self.conan_api.config.global_conf)
51
+ pref = _resolve_latest_pref(cache, pref)
52
+ ref_layout = cache.pkg_layout(pref)
54
53
  return _check_folder_existence(pref, "build", ref_layout.build())
55
54
 
56
55
  def package_metadata_path(self, pref: PkgReference):
57
- app = ConanApp(self.conan_api)
58
- pref = _resolve_latest_pref(app, pref)
59
- ref_layout = app.cache.pkg_layout(pref)
56
+ cache = PkgCache(self.conan_api.cache_folder, self.conan_api.config.global_conf)
57
+ pref = _resolve_latest_pref(cache, pref)
58
+ ref_layout = cache.pkg_layout(pref)
60
59
  return _check_folder_existence(pref, "metadata", ref_layout.metadata())
61
60
 
62
61
  def package_path(self, pref: PkgReference):
63
- app = ConanApp(self.conan_api)
64
- pref = _resolve_latest_pref(app, pref)
65
- ref_layout = app.cache.pkg_layout(pref)
62
+ cache = PkgCache(self.conan_api.cache_folder, self.conan_api.config.global_conf)
63
+ pref = _resolve_latest_pref(cache, pref)
64
+ ref_layout = cache.pkg_layout(pref)
66
65
  if os.path.exists(ref_layout.finalize()):
67
66
  return ref_layout.finalize()
68
67
  return _check_folder_existence(pref, "package", ref_layout.package())
69
68
 
70
69
  def check_integrity(self, package_list):
71
70
  """Check if the recipes and packages are corrupted (it will raise a ConanExcepcion)"""
72
- app = ConanApp(self.conan_api)
73
- checker = IntegrityChecker(app)
71
+ cache = PkgCache(self.conan_api.cache_folder, self.conan_api.config.global_conf)
72
+ checker = IntegrityChecker(cache)
74
73
  checker.check(package_list)
75
74
 
76
75
  def clean(self, package_list, source=True, build=True, download=True, temp=True,
@@ -87,11 +86,11 @@ class CacheAPI:
87
86
  :return:
88
87
  """
89
88
 
90
- app = ConanApp(self.conan_api)
89
+ cache = PkgCache(self.conan_api.cache_folder, self.conan_api.config.global_conf)
91
90
  if temp:
92
- rmdir(app.cache.temp_folder)
91
+ rmdir(cache.temp_folder)
93
92
  # Clean those build folders that didn't succeed to create a package and wont be in DB
94
- builds_folder = app.cache.builds_folder
93
+ builds_folder = cache.builds_folder
95
94
  if os.path.isdir(builds_folder):
96
95
  for subdir in os.listdir(builds_folder):
97
96
  folder = os.path.join(builds_folder, subdir)
@@ -105,17 +104,17 @@ class CacheAPI:
105
104
  remove(f)
106
105
 
107
106
  for ref, ref_bundle in package_list.refs().items():
108
- ref_layout = app.cache.recipe_layout(ref)
107
+ ref_layout = cache.recipe_layout(ref)
109
108
  if source:
110
109
  rmdir(ref_layout.source())
111
110
  if download:
112
111
  rmdir(ref_layout.download_export())
113
112
  for pref, _ in package_list.prefs(ref, ref_bundle).items():
114
- pref_layout = app.cache.pkg_layout(pref)
113
+ pref_layout = cache.pkg_layout(pref)
115
114
  if build:
116
115
  rmdir(pref_layout.build())
117
116
  # It is important to remove the "build_id" identifier if build-folder is removed
118
- app.cache.remove_build_id(pref)
117
+ cache.remove_build_id(pref)
119
118
  if download:
120
119
  rmdir(pref_layout.download_package())
121
120
 
@@ -244,21 +243,21 @@ class CacheAPI:
244
243
  return download_cache.get_backup_sources_files(excluded_urls, package_list, only_upload)
245
244
 
246
245
 
247
- def _resolve_latest_ref(app, ref):
246
+ def _resolve_latest_ref(cache, ref):
248
247
  if ref.revision is None or ref.revision == "latest":
249
248
  ref.revision = None
250
- result = app.cache.get_latest_recipe_reference(ref)
249
+ result = cache.get_latest_recipe_reference(ref)
251
250
  if result is None:
252
251
  raise ConanException(f"'{ref}' not found in cache")
253
252
  ref = result
254
253
  return ref
255
254
 
256
255
 
257
- def _resolve_latest_pref(app, pref):
258
- pref.ref = _resolve_latest_ref(app, pref.ref)
256
+ def _resolve_latest_pref(cache, pref):
257
+ pref.ref = _resolve_latest_ref(cache, pref.ref)
259
258
  if pref.revision is None or pref.revision == "latest":
260
259
  pref.revision = None
261
- result = app.cache.get_latest_package_reference(pref)
260
+ result = cache.get_latest_package_reference(pref)
262
261
  if result is None:
263
262
  raise ConanException(f"'{pref.repr_notime()}' not found in cache")
264
263
  pref = result
@@ -40,19 +40,18 @@ class ConfigAPI:
40
40
  configuration_install(app, path_or_url, verify_ssl, config_type=config_type, args=args,
41
41
  source_folder=source_folder, target_folder=target_folder)
42
42
 
43
- def install_pkg(self, ref, lockfile=None, force=False, remotes=None):
43
+ def install_pkg(self, ref, lockfile=None, force=False, remotes=None, profile=None):
44
44
  ConanOutput().warning("The 'conan config install-pkg' is experimental",
45
45
  warn_tag="experimental")
46
46
  conan_api = self.conan_api
47
47
  remotes = conan_api.remotes.list() if remotes is None else remotes
48
- # Ready to use profiles as inputs, but NOT using profiles yet, empty ones
49
- profile_host = profile_build = conan_api.profiles.get_profile([])
48
+ profile_host = profile_build = profile or conan_api.profiles.get_profile([])
50
49
 
51
50
  app = ConanApp(self.conan_api)
52
51
 
53
52
  # Computation of a very simple graph that requires "ref"
54
53
  conanfile = app.loader.load_virtual(requires=[RecipeReference.loads(ref)])
55
- consumer_definer(conanfile, profile_build, profile_host)
54
+ consumer_definer(conanfile, profile_host, profile_build)
56
55
  root_node = Node(ref=None, conanfile=conanfile, context=CONTEXT_HOST, recipe=RECIPE_VIRTUAL)
57
56
  root_node.is_conf = True
58
57
  update = ["*"]
@@ -1,8 +1,11 @@
1
1
  from conan.api.output import ConanOutput
2
+ from conan.internal.cache.cache import PkgCache
3
+ from conan.internal.cache.home_paths import HomePaths
2
4
  from conan.internal.conan_app import ConanApp
3
5
  from conan.internal.api.export import cmd_export
4
- from conans.client.conanfile.package import run_package_method
6
+ from conan.internal.methods import run_package_method
5
7
  from conans.client.graph.graph import BINARY_BUILD, RECIPE_INCACHE
8
+ from conans.client.hook_manager import HookManager
6
9
  from conans.model.package_ref import PkgReference
7
10
  from conans.util.files import mkdir
8
11
 
@@ -15,12 +18,13 @@ class ExportAPI:
15
18
  def export(self, path, name, version, user, channel, lockfile=None, remotes=None):
16
19
  ConanOutput().title("Exporting recipe to the cache")
17
20
  app = ConanApp(self.conan_api)
18
- return cmd_export(app, self.conan_api.config.global_conf, path, name, version, user, channel,
19
- graph_lock=lockfile, remotes=remotes)
21
+ hook_manager = HookManager(HomePaths(self.conan_api.home_folder).hooks_path)
22
+ return cmd_export(app, hook_manager, self.conan_api.config.global_conf, path, name, version,
23
+ user, channel, graph_lock=lockfile, remotes=remotes)
20
24
 
21
25
  def export_pkg(self, deps_graph, source_folder, output_folder):
22
- app = ConanApp(self.conan_api)
23
- cache, hook_manager = app.cache, app.hook_manager
26
+ cache = PkgCache(self.conan_api.cache_folder, self.conan_api.config.global_conf)
27
+ hook_manager = HookManager(HomePaths(self.conan_api.home_folder).hooks_path)
24
28
 
25
29
  # The graph has to be loaded with build_mode=[ref.name], so that node is not tried
26
30
  # to be downloaded from remotes
@@ -1,10 +1,12 @@
1
1
  import os
2
2
 
3
3
  from conan.internal.api.install.generators import write_generators
4
+ from conan.internal.cache.home_paths import HomePaths
4
5
  from conan.internal.conan_app import ConanApp
5
6
  from conan.internal.deploy import do_deploys
6
7
 
7
8
  from conans.client.graph.install_graph import InstallGraph
9
+ from conans.client.hook_manager import HookManager
8
10
  from conans.client.installer import BinaryInstaller
9
11
  from conan.errors import ConanInvalidConfiguration
10
12
 
@@ -87,5 +89,6 @@ class InstallAPI:
87
89
  if gen not in final_generators:
88
90
  final_generators.append(gen)
89
91
  conanfile.generators = final_generators
90
- app = ConanApp(self.conan_api)
91
- write_generators(conanfile, app, envs_generation=envs_generation)
92
+ hook_manager = HookManager(HomePaths(self.conan_api.home_folder).hooks_path)
93
+ write_generators(conanfile, hook_manager, self.conan_api.home_folder,
94
+ envs_generation=envs_generation)
@@ -1,14 +1,15 @@
1
1
  import os
2
2
 
3
3
  from conan.cli import make_abs_path
4
+ from conan.internal.cache.home_paths import HomePaths
4
5
  from conan.internal.conan_app import ConanApp
5
6
  from conan.internal.api.local.editable import EditablePackages
6
- from conans.client.conanfile.build import run_build_method
7
+ from conan.internal.methods import run_build_method, run_source_method
7
8
  from conans.client.graph.graph import CONTEXT_HOST
8
9
  from conans.client.graph.profile_node_definer import initialize_conanfile_profile
9
- from conans.client.source import run_source_method
10
10
  from conan.internal.errors import conanfile_exception_formatter
11
11
  from conan.errors import ConanException
12
+ from conans.client.hook_manager import HookManager
12
13
  from conans.model.recipe_ref import RecipeReference
13
14
  from conans.util.files import chdir
14
15
 
@@ -18,6 +19,9 @@ class LocalAPI:
18
19
  def __init__(self, conan_api):
19
20
  self._conan_api = conan_api
20
21
  self.editable_packages = EditablePackages(conan_api.home_folder)
22
+ editables = conan_api.workspace.editables()
23
+ if editables:
24
+ self.editable_packages.edited_refs.update(editables)
21
25
 
22
26
  @staticmethod
23
27
  def get_conanfile_path(path, cwd, py):
@@ -56,17 +60,20 @@ class LocalAPI:
56
60
  target_path = self._conan_api.local.get_conanfile_path(path=path, cwd=cwd, py=True)
57
61
  output_folder = make_abs_path(output_folder) if output_folder else None
58
62
  # Check the conanfile is there, and name/version matches
59
- self.editable_packages.add(ref, target_path, output_folder=output_folder)
63
+ editable_packages = EditablePackages(self._conan_api.home_folder)
64
+ editable_packages.add(ref, target_path, output_folder=output_folder)
60
65
  return ref
61
66
 
62
67
  def editable_remove(self, path=None, requires=None, cwd=None):
63
68
  if path:
64
69
  path = make_abs_path(path, cwd)
65
70
  path = os.path.join(path, "conanfile.py")
66
- return self.editable_packages.remove(path, requires)
71
+ editable_packages = EditablePackages(self._conan_api.home_folder)
72
+ return editable_packages.remove(path, requires)
67
73
 
68
74
  def editable_list(self):
69
- return self.editable_packages.edited_refs
75
+ editable_packages = EditablePackages(self._conan_api.home_folder)
76
+ return editable_packages.edited_refs
70
77
 
71
78
  def source(self, path, name=None, version=None, user=None, channel=None, remotes=None):
72
79
  """ calls the 'source()' method of the current (user folder) conanfile.py
@@ -92,16 +99,16 @@ class LocalAPI:
92
99
  conanfile.folders.set_base_build(None)
93
100
  conanfile.folders.set_base_package(None)
94
101
 
95
- app = ConanApp(self._conan_api)
96
- run_source_method(conanfile, app.hook_manager)
102
+ hook_manager = HookManager(HomePaths(self._conan_api.home_folder).hooks_path)
103
+ run_source_method(conanfile, hook_manager)
97
104
 
98
105
  def build(self, conanfile):
99
106
  """ calls the 'build()' method of the current (user folder) conanfile.py
100
107
  """
101
- app = ConanApp(self._conan_api)
108
+ hook_manager = HookManager(HomePaths(self._conan_api.home_folder).hooks_path)
102
109
  conanfile.folders.set_base_package(conanfile.folders.base_build)
103
110
  conanfile.folders.set_base_pkg_metadata(os.path.join(conanfile.build_folder, "metadata"))
104
- run_build_method(conanfile, app.hook_manager)
111
+ run_build_method(conanfile, hook_manager)
105
112
 
106
113
  @staticmethod
107
114
  def test(conanfile):
@@ -117,4 +124,3 @@ class LocalAPI:
117
124
  conanfile = app.loader.load_named(conanfile_path, name=name, version=version, user=user,
118
125
  channel=channel, remotes=remotes, graph_lock=lockfile)
119
126
  return conanfile
120
-
@@ -5,7 +5,7 @@ from jinja2 import Template, StrictUndefined, UndefinedError, Environment, meta
5
5
 
6
6
  from conan.errors import ConanException
7
7
  from conans.util.files import load
8
- from conans import __version__
8
+ from conan import __version__
9
9
 
10
10
 
11
11
  class NewAPI:
@@ -93,9 +93,11 @@ class NewAPI:
93
93
  @staticmethod
94
94
  def render(template_files, definitions):
95
95
  result = {}
96
- name = definitions.get("name", "Pkg")
96
+ name = definitions.get("name", "pkg")
97
97
  if isinstance(name, list):
98
98
  raise ConanException(f"name argument can't be multiple: {name}")
99
+ if name != name.lower():
100
+ raise ConanException(f"name argument must be lowercase: {name}")
99
101
  definitions["conan_version"] = __version__
100
102
 
101
103
  def ensure_list(key):
@@ -237,7 +237,7 @@ class RemotesAPI:
237
237
  username = None
238
238
  localdb.store(username, token=None, refresh_token=None, remote_url=remote.url)
239
239
 
240
- def user_auth(self, remote: Remote, with_user=False):
240
+ def user_auth(self, remote: Remote, with_user=False, force=False):
241
241
  # TODO: Review
242
242
  app = ConanApp(self.conan_api)
243
243
  if with_user:
@@ -247,7 +247,7 @@ class RemotesAPI:
247
247
  user = os.getenv(var_name, None) or os.getenv("CONAN_LOGIN_USERNAME", None)
248
248
  if not user:
249
249
  return
250
- app.remote_manager.check_credentials(remote)
250
+ app.remote_manager.check_credentials(remote, force)
251
251
  user, token, _ = app.localdb.get_login(remote.url)
252
252
  return user
253
253
 
@@ -0,0 +1,82 @@
1
+ import os
2
+ import shutil
3
+
4
+ from conan.cli import make_abs_path
5
+ from conan.internal.conan_app import ConanApp
6
+ from conan.internal.workspace import Workspace
7
+ from conan.tools.scm import Git
8
+ from conan.errors import ConanException
9
+ from conans.client.graph.graph import RECIPE_EDITABLE
10
+ from conans.client.source import retrieve_exports_sources
11
+ from conans.model.recipe_ref import RecipeReference
12
+ from conans.util.files import merge_directories
13
+
14
+
15
+ class WorkspaceAPI:
16
+
17
+ def __init__(self, conan_api):
18
+ self._conan_api = conan_api
19
+ self._workspace = Workspace()
20
+
21
+ def home_folder(self):
22
+ return self._workspace.home_folder()
23
+
24
+ def folder(self):
25
+ return self._workspace.folder
26
+
27
+ def config_folder(self):
28
+ return self._workspace.config_folder()
29
+
30
+ def editables(self):
31
+ return self._workspace.editables()
32
+
33
+ def open(self, require, remotes, cwd=None):
34
+ app = ConanApp(self._conan_api)
35
+ ref = RecipeReference.loads(require)
36
+ recipe = app.proxy.get_recipe(ref, remotes, update=False, check_update=False)
37
+
38
+ layout, recipe_status, remote = recipe
39
+ if recipe_status == RECIPE_EDITABLE:
40
+ raise ConanException(f"Can't open a dependency that is already an editable: {ref}")
41
+ ref = layout.reference
42
+ conanfile_path = layout.conanfile()
43
+ conanfile, module = app.loader.load_basic_module(conanfile_path, remotes=remotes)
44
+
45
+ scm = conanfile.conan_data.get("scm") if conanfile.conan_data else None
46
+ dst_path = os.path.join(cwd or os.getcwd(), ref.name)
47
+ if scm is None:
48
+ conanfile.output.warning("conandata doesn't contain 'scm' information\n"
49
+ "doing a local copy!!!")
50
+ shutil.copytree(layout.export(), dst_path)
51
+ retrieve_exports_sources(app.remote_manager, layout, conanfile, ref, remotes)
52
+ export_sources = layout.export_sources()
53
+ if os.path.exists(export_sources):
54
+ conanfile.output.warning("There are export-sources, copying them, but the location"
55
+ " might be incorrect, use 'scm' approach")
56
+ merge_directories(export_sources, dst_path)
57
+ else:
58
+ git = Git(conanfile, folder=cwd)
59
+ git.clone(url=scm["url"], target=ref.name)
60
+ git.folder = ref.name # change to the cloned folder
61
+ git.checkout(commit=scm["commit"])
62
+ return dst_path
63
+
64
+ def add(self, path, name=None, version=None, user=None, channel=None, cwd=None,
65
+ output_folder=None, remotes=None):
66
+ path = self._conan_api.local.get_conanfile_path(path, cwd, py=True)
67
+ app = ConanApp(self._conan_api)
68
+ conanfile = app.loader.load_named(path, name, version, user, channel, remotes=remotes)
69
+ if conanfile.name is None or conanfile.version is None:
70
+ raise ConanException("Editable package recipe should declare its name and version")
71
+ ref = RecipeReference(conanfile.name, conanfile.version, conanfile.user, conanfile.channel)
72
+ ref.validate_ref()
73
+ output_folder = make_abs_path(output_folder) if output_folder else None
74
+ # Check the conanfile is there, and name/version matches
75
+ self._workspace.add(ref, path, output_folder=output_folder)
76
+ return ref
77
+
78
+ def remove(self, path):
79
+ return self._workspace.remove(path)
80
+
81
+ def info(self):
82
+ return self._workspace.serialize()
@@ -16,7 +16,7 @@ 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
18
  from conan.internal.cache.home_paths import HomePaths
19
- from conans import __version__ as client_version
19
+ from conan import __version__
20
20
  from conan.errors import ConanException, ConanInvalidConfiguration, ConanMigrationError
21
21
 
22
22
  _CONAN_INTERNAL_CUSTOM_COMMANDS_PATH = "_CONAN_INTERNAL_CUSTOM_COMMANDS_PATH"
@@ -176,7 +176,7 @@ class Cli:
176
176
  command = self._commands[command_argument]
177
177
  except KeyError as exc:
178
178
  if command_argument in ["-v", "--version"]:
179
- cli_out_write("Conan version %s" % client_version)
179
+ cli_out_write("Conan version %s" % __version__)
180
180
  return
181
181
 
182
182
  if command_argument in ["-h", "--help"]:
@@ -1,5 +1,4 @@
1
1
  import argparse
2
- import os
3
2
  import textwrap
4
3
 
5
4
  from conan.api.output import ConanOutput
@@ -98,13 +97,15 @@ class BaseConanCommand:
98
97
 
99
98
  formatter(info)
100
99
 
101
- def _dispatch_errors(self, info):
100
+ @staticmethod
101
+ def _dispatch_errors(info):
102
102
  if info and isinstance(info, dict):
103
103
  if info.get("conan_error"):
104
104
  raise ConanException(info["conan_error"])
105
105
  if info.get("conan_warning"):
106
106
  ConanOutput().warning(info["conan_warning"])
107
107
 
108
+
108
109
  class ConanArgumentParser(argparse.ArgumentParser):
109
110
 
110
111
  def __init__(self, conan_api, *args, **kwargs):
@@ -113,9 +114,10 @@ class ConanArgumentParser(argparse.ArgumentParser):
113
114
 
114
115
  def parse_args(self, args=None, namespace=None):
115
116
  args = super().parse_args(args)
116
- ConanOutput.define_log_level(os.getenv("CONAN_LOG_LEVEL", args.v))
117
+ ConanOutput.define_log_level(args.v)
117
118
  if getattr(args, "lockfile_packages", None):
118
119
  ConanOutput().error("The --lockfile-packages arg is private and shouldn't be used")
120
+ global_conf = self._conan_api.config.global_conf
119
121
  if args.core_conf:
120
122
  from conans.model.conf import ConfDefinition
121
123
  confs = ConfDefinition()
@@ -124,7 +126,14 @@ class ConanArgumentParser(argparse.ArgumentParser):
124
126
  raise ConanException(f"Only core. values are allowed in --core-conf. Got {c}")
125
127
  confs.loads("\n".join(args.core_conf))
126
128
  confs.validate()
127
- self._conan_api.config.global_conf.update_conf_definition(confs)
129
+ global_conf.update_conf_definition(confs)
130
+
131
+ # TODO: This might be even better moved to the ConanAPI so users without doing custom
132
+ # commands can benefit from it
133
+ ConanOutput.set_warnings_as_errors(global_conf.get("core:warnings_as_errors",
134
+ default=[], check_type=list))
135
+ ConanOutput.define_silence_warnings(global_conf.get("core:skip_warnings",
136
+ default=[], check_type=list))
128
137
  return args
129
138
 
130
139
 
@@ -61,7 +61,6 @@ def build(conan_api, parser, *args):
61
61
  print_graph_packages(deps_graph)
62
62
 
63
63
  out = ConanOutput()
64
- out.title("Installing packages")
65
64
  conan_api.install.install_binaries(deps_graph=deps_graph, remotes=remotes)
66
65
 
67
66
  out.title("Finalizing install (deploy, generators)")
@@ -73,14 +73,23 @@ def config_install_pkg(conan_api, parser, subparser, *args):
73
73
  subparser.add_argument("--url", action=OnceArgument,
74
74
  help="(Experimental) Provide Conan repository URL "
75
75
  "(for first install without remotes)")
76
+ subparser.add_argument("-pr", "--profile", help="Profile to install config")
77
+ subparser.add_argument("-s", "--settings", action="append", help="Settings to install config")
78
+ subparser.add_argument("-o", "--options", action="append", help="Options to install config")
76
79
  args = parser.parse_args(*args)
77
80
 
78
81
  lockfile = conan_api.lockfile.get_lockfile(lockfile=args.lockfile,
79
82
  partial=args.lockfile_partial)
80
83
 
84
+ try:
85
+ default_profile = args.profile or conan_api.profiles.get_default_build()
86
+ except ConanException: # it can fail if the default profile doesn't exist yet
87
+ default_profile = None
88
+ profiles = [default_profile] if default_profile else []
89
+ profile = conan_api.profiles.get_profile(profiles, args.settings, args.options)
81
90
  remotes = [Remote("_tmp_conan_config", url=args.url)] if args.url else None
82
91
  config_pref = conan_api.config.install_pkg(args.item, lockfile=lockfile, force=args.force,
83
- remotes=remotes)
92
+ remotes=remotes, profile=profile)
84
93
  lockfile = conan_api.lockfile.add_lockfile(lockfile, config_requires=[config_pref.ref])
85
94
  conan_api.lockfile.save_lockfile(lockfile, args.lockfile_out)
86
95