conan 2.18.1__tar.gz → 2.19.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 (353) hide show
  1. {conan-2.18.1/conan.egg-info → conan-2.19.1}/PKG-INFO +1 -1
  2. {conan-2.18.1 → conan-2.19.1}/conan/__init__.py +1 -1
  3. {conan-2.18.1 → conan-2.19.1}/conan/api/conan_api.py +21 -9
  4. {conan-2.18.1 → conan-2.19.1}/conan/api/input.py +3 -3
  5. {conan-2.18.1 → conan-2.19.1}/conan/api/output.py +15 -10
  6. {conan-2.18.1 → conan-2.19.1}/conan/api/subapi/config.py +0 -2
  7. {conan-2.18.1 → conan-2.19.1}/conan/api/subapi/export.py +4 -3
  8. {conan-2.18.1 → conan-2.19.1}/conan/api/subapi/graph.py +4 -2
  9. {conan-2.18.1 → conan-2.19.1}/conan/api/subapi/install.py +6 -5
  10. {conan-2.18.1 → conan-2.19.1}/conan/api/subapi/local.py +4 -3
  11. {conan-2.18.1 → conan-2.19.1}/conan/api/subapi/report.py +6 -4
  12. {conan-2.18.1 → conan-2.19.1}/conan/cli/commands/export_pkg.py +3 -1
  13. {conan-2.18.1 → conan-2.19.1}/conan/cli/commands/new.py +1 -1
  14. {conan-2.18.1 → conan-2.19.1}/conan/cli/formatters/graph/info_graph_html.py +26 -3
  15. {conan-2.18.1 → conan-2.19.1}/conan/cli/formatters/report/diff_html.py +41 -25
  16. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/detect/detect_api.py +13 -14
  17. {conan-2.18.1 → conan-2.19.1}/conan/internal/cache/home_paths.py +0 -2
  18. {conan-2.18.1 → conan-2.19.1}/conan/internal/default_settings.py +1 -1
  19. {conan-2.18.1 → conan-2.19.1}/conan/internal/graph/graph_binaries.py +7 -3
  20. {conan-2.18.1 → conan-2.19.1}/conan/internal/hook_manager.py +4 -0
  21. {conan-2.18.1 → conan-2.19.1}/conan/internal/loader.py +3 -2
  22. {conan-2.18.1 → conan-2.19.1}/conan/internal/model/conan_file.py +3 -0
  23. {conan-2.18.1 → conan-2.19.1}/conan/internal/model/profile.py +6 -0
  24. {conan-2.18.1 → conan-2.19.1}/conan/internal/rest/download_cache.py +11 -3
  25. {conan-2.18.1 → conan-2.19.1}/conan/internal/rest/remote_manager.py +25 -3
  26. {conan-2.18.1 → conan-2.19.1}/conan/internal/runner/ssh.py +8 -2
  27. conan-2.19.1/conan/test/assets/premake.py +44 -0
  28. {conan-2.18.1 → conan-2.19.1}/conan/test/utils/tools.py +1 -1
  29. {conan-2.18.1 → conan-2.19.1}/conan/tools/apple/apple.py +10 -0
  30. {conan-2.18.1 → conan-2.19.1}/conan/tools/apple/xcodebuild.py +10 -3
  31. {conan-2.18.1 → conan-2.19.1}/conan/tools/apple/xcodetoolchain.py +3 -9
  32. {conan-2.18.1 → conan-2.19.1}/conan/tools/cmake/cmakedeps2/target_configuration.py +40 -3
  33. {conan-2.18.1 → conan-2.19.1}/conan/tools/cmake/toolchain/blocks.py +7 -3
  34. {conan-2.18.1 → conan-2.19.1}/conan/tools/files/files.py +7 -1
  35. {conan-2.18.1 → conan-2.19.1}/conan/tools/gnu/autotools.py +8 -4
  36. {conan-2.18.1 → conan-2.19.1}/conan/tools/meson/toolchain.py +29 -21
  37. {conan-2.18.1 → conan-2.19.1}/conan/tools/premake/premake.py +7 -3
  38. {conan-2.18.1 → conan-2.19.1}/conan/tools/premake/premakedeps.py +64 -23
  39. {conan-2.18.1 → conan-2.19.1}/conan/tools/sbom/cyclonedx.py +16 -11
  40. {conan-2.18.1 → conan-2.19.1/conan.egg-info}/PKG-INFO +1 -1
  41. {conan-2.18.1 → conan-2.19.1}/conan.egg-info/SOURCES.txt +1 -0
  42. {conan-2.18.1 → conan-2.19.1}/conans/conan.py +2 -1
  43. {conan-2.18.1 → conan-2.19.1}/LICENSE.md +0 -0
  44. {conan-2.18.1 → conan-2.19.1}/MANIFEST.in +0 -0
  45. {conan-2.18.1 → conan-2.19.1}/README.md +0 -0
  46. {conan-2.18.1 → conan-2.19.1}/conan/api/__init__.py +0 -0
  47. {conan-2.18.1 → conan-2.19.1}/conan/api/model/__init__.py +0 -0
  48. {conan-2.18.1 → conan-2.19.1}/conan/api/model/list.py +0 -0
  49. {conan-2.18.1 → conan-2.19.1}/conan/api/model/refs.py +0 -0
  50. {conan-2.18.1 → conan-2.19.1}/conan/api/model/remote.py +0 -0
  51. {conan-2.18.1 → conan-2.19.1}/conan/api/subapi/__init__.py +0 -0
  52. {conan-2.18.1 → conan-2.19.1}/conan/api/subapi/audit.py +0 -0
  53. {conan-2.18.1 → conan-2.19.1}/conan/api/subapi/cache.py +0 -0
  54. {conan-2.18.1 → conan-2.19.1}/conan/api/subapi/command.py +0 -0
  55. {conan-2.18.1 → conan-2.19.1}/conan/api/subapi/download.py +0 -0
  56. {conan-2.18.1 → conan-2.19.1}/conan/api/subapi/list.py +0 -0
  57. {conan-2.18.1 → conan-2.19.1}/conan/api/subapi/lockfile.py +0 -0
  58. {conan-2.18.1 → conan-2.19.1}/conan/api/subapi/new.py +0 -0
  59. {conan-2.18.1 → conan-2.19.1}/conan/api/subapi/profiles.py +0 -0
  60. {conan-2.18.1 → conan-2.19.1}/conan/api/subapi/remotes.py +0 -0
  61. {conan-2.18.1 → conan-2.19.1}/conan/api/subapi/remove.py +0 -0
  62. {conan-2.18.1 → conan-2.19.1}/conan/api/subapi/search.py +0 -0
  63. {conan-2.18.1 → conan-2.19.1}/conan/api/subapi/upload.py +0 -0
  64. {conan-2.18.1 → conan-2.19.1}/conan/api/subapi/workspace.py +0 -0
  65. {conan-2.18.1 → conan-2.19.1}/conan/cli/__init__.py +0 -0
  66. {conan-2.18.1 → conan-2.19.1}/conan/cli/args.py +0 -0
  67. {conan-2.18.1 → conan-2.19.1}/conan/cli/cli.py +0 -0
  68. {conan-2.18.1 → conan-2.19.1}/conan/cli/command.py +0 -0
  69. {conan-2.18.1 → conan-2.19.1}/conan/cli/commands/__init__.py +0 -0
  70. {conan-2.18.1 → conan-2.19.1}/conan/cli/commands/audit.py +0 -0
  71. {conan-2.18.1 → conan-2.19.1}/conan/cli/commands/build.py +0 -0
  72. {conan-2.18.1 → conan-2.19.1}/conan/cli/commands/cache.py +0 -0
  73. {conan-2.18.1 → conan-2.19.1}/conan/cli/commands/config.py +0 -0
  74. {conan-2.18.1 → conan-2.19.1}/conan/cli/commands/create.py +0 -0
  75. {conan-2.18.1 → conan-2.19.1}/conan/cli/commands/download.py +0 -0
  76. {conan-2.18.1 → conan-2.19.1}/conan/cli/commands/editable.py +0 -0
  77. {conan-2.18.1 → conan-2.19.1}/conan/cli/commands/export.py +0 -0
  78. {conan-2.18.1 → conan-2.19.1}/conan/cli/commands/graph.py +0 -0
  79. {conan-2.18.1 → conan-2.19.1}/conan/cli/commands/inspect.py +0 -0
  80. {conan-2.18.1 → conan-2.19.1}/conan/cli/commands/install.py +0 -0
  81. {conan-2.18.1 → conan-2.19.1}/conan/cli/commands/list.py +0 -0
  82. {conan-2.18.1 → conan-2.19.1}/conan/cli/commands/lock.py +0 -0
  83. {conan-2.18.1 → conan-2.19.1}/conan/cli/commands/pkglist.py +0 -0
  84. {conan-2.18.1 → conan-2.19.1}/conan/cli/commands/profile.py +0 -0
  85. {conan-2.18.1 → conan-2.19.1}/conan/cli/commands/remote.py +0 -0
  86. {conan-2.18.1 → conan-2.19.1}/conan/cli/commands/remove.py +0 -0
  87. {conan-2.18.1 → conan-2.19.1}/conan/cli/commands/report.py +0 -0
  88. {conan-2.18.1 → conan-2.19.1}/conan/cli/commands/search.py +0 -0
  89. {conan-2.18.1 → conan-2.19.1}/conan/cli/commands/source.py +0 -0
  90. {conan-2.18.1 → conan-2.19.1}/conan/cli/commands/test.py +0 -0
  91. {conan-2.18.1 → conan-2.19.1}/conan/cli/commands/upload.py +0 -0
  92. {conan-2.18.1 → conan-2.19.1}/conan/cli/commands/version.py +0 -0
  93. {conan-2.18.1 → conan-2.19.1}/conan/cli/commands/workspace.py +0 -0
  94. {conan-2.18.1 → conan-2.19.1}/conan/cli/exit_codes.py +0 -0
  95. {conan-2.18.1 → conan-2.19.1}/conan/cli/formatters/__init__.py +0 -0
  96. {conan-2.18.1 → conan-2.19.1}/conan/cli/formatters/audit/__init__.py +0 -0
  97. {conan-2.18.1 → conan-2.19.1}/conan/cli/formatters/audit/vulnerabilities.py +0 -0
  98. {conan-2.18.1 → conan-2.19.1}/conan/cli/formatters/graph/__init__.py +0 -0
  99. {conan-2.18.1 → conan-2.19.1}/conan/cli/formatters/graph/build_order_html.py +0 -0
  100. {conan-2.18.1 → conan-2.19.1}/conan/cli/formatters/graph/graph.py +0 -0
  101. {conan-2.18.1 → conan-2.19.1}/conan/cli/formatters/graph/graph_info_text.py +0 -0
  102. {conan-2.18.1 → conan-2.19.1}/conan/cli/formatters/graph/info_graph_dot.py +0 -0
  103. {conan-2.18.1 → conan-2.19.1}/conan/cli/formatters/list/__init__.py +0 -0
  104. {conan-2.18.1 → conan-2.19.1}/conan/cli/formatters/list/list.py +0 -0
  105. {conan-2.18.1 → conan-2.19.1}/conan/cli/formatters/list/search_table_html.py +0 -0
  106. {conan-2.18.1 → conan-2.19.1}/conan/cli/formatters/report/__init__.py +0 -0
  107. {conan-2.18.1 → conan-2.19.1}/conan/cli/formatters/report/diff.py +0 -0
  108. {conan-2.18.1 → conan-2.19.1}/conan/cli/printers/__init__.py +0 -0
  109. {conan-2.18.1 → conan-2.19.1}/conan/cli/printers/graph.py +0 -0
  110. {conan-2.18.1 → conan-2.19.1}/conan/cps/__init__.py +0 -0
  111. {conan-2.18.1 → conan-2.19.1}/conan/cps/cps.py +0 -0
  112. {conan-2.18.1 → conan-2.19.1}/conan/errors.py +0 -0
  113. {conan-2.18.1 → conan-2.19.1}/conan/internal/__init__.py +0 -0
  114. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/__init__.py +0 -0
  115. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/audit/__init__.py +0 -0
  116. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/audit/providers.py +0 -0
  117. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/config/__init__.py +0 -0
  118. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/config/config_installer.py +0 -0
  119. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/detect/__init__.py +0 -0
  120. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/detect/detect_vs.py +0 -0
  121. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/export.py +0 -0
  122. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/install/__init__.py +0 -0
  123. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/install/generators.py +0 -0
  124. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/list/__init__.py +0 -0
  125. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/list/query_parse.py +0 -0
  126. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/local/__init__.py +0 -0
  127. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/local/editable.py +0 -0
  128. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/migrations.py +0 -0
  129. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/new/__init__.py +0 -0
  130. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/new/alias_new.py +0 -0
  131. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/new/autoools_exe.py +0 -0
  132. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/new/autotools_lib.py +0 -0
  133. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/new/basic.py +0 -0
  134. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/new/bazel_7_exe.py +0 -0
  135. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/new/bazel_7_lib.py +0 -0
  136. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/new/bazel_exe.py +0 -0
  137. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/new/bazel_lib.py +0 -0
  138. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/new/cmake_exe.py +0 -0
  139. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/new/cmake_lib.py +0 -0
  140. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/new/header_lib.py +0 -0
  141. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/new/local_recipes_index.py +0 -0
  142. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/new/meson_exe.py +0 -0
  143. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/new/meson_lib.py +0 -0
  144. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/new/msbuild_exe.py +0 -0
  145. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/new/msbuild_lib.py +0 -0
  146. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/new/premake_exe.py +0 -0
  147. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/new/premake_lib.py +0 -0
  148. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/new/qbs_lib.py +0 -0
  149. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/new/workspace.py +0 -0
  150. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/profile/__init__.py +0 -0
  151. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/profile/detect.py +0 -0
  152. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/profile/profile_loader.py +0 -0
  153. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/remotes/__init__.py +0 -0
  154. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/remotes/encrypt.py +0 -0
  155. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/remotes/localdb.py +0 -0
  156. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/upload.py +0 -0
  157. {conan-2.18.1 → conan-2.19.1}/conan/internal/api/uploader.py +0 -0
  158. {conan-2.18.1 → conan-2.19.1}/conan/internal/cache/__init__.py +0 -0
  159. {conan-2.18.1 → conan-2.19.1}/conan/internal/cache/cache.py +0 -0
  160. {conan-2.18.1 → conan-2.19.1}/conan/internal/cache/conan_reference_layout.py +0 -0
  161. {conan-2.18.1 → conan-2.19.1}/conan/internal/cache/db/__init__.py +0 -0
  162. {conan-2.18.1 → conan-2.19.1}/conan/internal/cache/db/cache_database.py +0 -0
  163. {conan-2.18.1 → conan-2.19.1}/conan/internal/cache/db/packages_table.py +0 -0
  164. {conan-2.18.1 → conan-2.19.1}/conan/internal/cache/db/recipes_table.py +0 -0
  165. {conan-2.18.1 → conan-2.19.1}/conan/internal/cache/db/table.py +0 -0
  166. {conan-2.18.1 → conan-2.19.1}/conan/internal/cache/integrity_check.py +0 -0
  167. {conan-2.18.1 → conan-2.19.1}/conan/internal/conan_app.py +0 -0
  168. {conan-2.18.1 → conan-2.19.1}/conan/internal/deploy.py +0 -0
  169. {conan-2.18.1 → conan-2.19.1}/conan/internal/errors.py +0 -0
  170. {conan-2.18.1 → conan-2.19.1}/conan/internal/graph/__init__.py +0 -0
  171. {conan-2.18.1 → conan-2.19.1}/conan/internal/graph/build_mode.py +0 -0
  172. {conan-2.18.1 → conan-2.19.1}/conan/internal/graph/compatibility.py +0 -0
  173. {conan-2.18.1 → conan-2.19.1}/conan/internal/graph/compute_pid.py +0 -0
  174. {conan-2.18.1 → conan-2.19.1}/conan/internal/graph/graph.py +0 -0
  175. {conan-2.18.1 → conan-2.19.1}/conan/internal/graph/graph_builder.py +0 -0
  176. {conan-2.18.1 → conan-2.19.1}/conan/internal/graph/graph_error.py +0 -0
  177. {conan-2.18.1 → conan-2.19.1}/conan/internal/graph/install_graph.py +0 -0
  178. {conan-2.18.1 → conan-2.19.1}/conan/internal/graph/installer.py +0 -0
  179. {conan-2.18.1 → conan-2.19.1}/conan/internal/graph/profile_node_definer.py +0 -0
  180. {conan-2.18.1 → conan-2.19.1}/conan/internal/graph/provides.py +0 -0
  181. {conan-2.18.1 → conan-2.19.1}/conan/internal/graph/proxy.py +0 -0
  182. {conan-2.18.1 → conan-2.19.1}/conan/internal/graph/python_requires.py +0 -0
  183. {conan-2.18.1 → conan-2.19.1}/conan/internal/graph/range_resolver.py +0 -0
  184. {conan-2.18.1 → conan-2.19.1}/conan/internal/internal_tools.py +0 -0
  185. {conan-2.18.1 → conan-2.19.1}/conan/internal/methods.py +0 -0
  186. {conan-2.18.1 → conan-2.19.1}/conan/internal/model/__init__.py +0 -0
  187. {conan-2.18.1 → conan-2.19.1}/conan/internal/model/conanfile_interface.py +0 -0
  188. {conan-2.18.1 → conan-2.19.1}/conan/internal/model/conf.py +0 -0
  189. {conan-2.18.1 → conan-2.19.1}/conan/internal/model/cpp_info.py +0 -0
  190. {conan-2.18.1 → conan-2.19.1}/conan/internal/model/dependencies.py +0 -0
  191. {conan-2.18.1 → conan-2.19.1}/conan/internal/model/info.py +0 -0
  192. {conan-2.18.1 → conan-2.19.1}/conan/internal/model/layout.py +0 -0
  193. {conan-2.18.1 → conan-2.19.1}/conan/internal/model/lockfile.py +0 -0
  194. {conan-2.18.1 → conan-2.19.1}/conan/internal/model/manifest.py +0 -0
  195. {conan-2.18.1 → conan-2.19.1}/conan/internal/model/options.py +0 -0
  196. {conan-2.18.1 → conan-2.19.1}/conan/internal/model/pkg_type.py +0 -0
  197. {conan-2.18.1 → conan-2.19.1}/conan/internal/model/recipe_ref.py +0 -0
  198. {conan-2.18.1 → conan-2.19.1}/conan/internal/model/requires.py +0 -0
  199. {conan-2.18.1 → conan-2.19.1}/conan/internal/model/settings.py +0 -0
  200. {conan-2.18.1 → conan-2.19.1}/conan/internal/model/version.py +0 -0
  201. {conan-2.18.1 → conan-2.19.1}/conan/internal/model/version_range.py +0 -0
  202. {conan-2.18.1 → conan-2.19.1}/conan/internal/model/workspace.py +0 -0
  203. {conan-2.18.1 → conan-2.19.1}/conan/internal/paths.py +0 -0
  204. {conan-2.18.1 → conan-2.19.1}/conan/internal/rest/__init__.py +0 -0
  205. {conan-2.18.1 → conan-2.19.1}/conan/internal/rest/auth_manager.py +0 -0
  206. {conan-2.18.1 → conan-2.19.1}/conan/internal/rest/caching_file_downloader.py +0 -0
  207. {conan-2.18.1 → conan-2.19.1}/conan/internal/rest/client_routes.py +0 -0
  208. {conan-2.18.1 → conan-2.19.1}/conan/internal/rest/conan_requester.py +0 -0
  209. {conan-2.18.1 → conan-2.19.1}/conan/internal/rest/file_downloader.py +0 -0
  210. {conan-2.18.1 → conan-2.19.1}/conan/internal/rest/file_uploader.py +0 -0
  211. {conan-2.18.1 → conan-2.19.1}/conan/internal/rest/pkg_sign.py +0 -0
  212. {conan-2.18.1 → conan-2.19.1}/conan/internal/rest/remote_credentials.py +0 -0
  213. {conan-2.18.1 → conan-2.19.1}/conan/internal/rest/rest_client.py +0 -0
  214. {conan-2.18.1 → conan-2.19.1}/conan/internal/rest/rest_client_local_recipe_index.py +0 -0
  215. {conan-2.18.1 → conan-2.19.1}/conan/internal/rest/rest_client_v2.py +0 -0
  216. {conan-2.18.1 → conan-2.19.1}/conan/internal/rest/rest_routes.py +0 -0
  217. {conan-2.18.1 → conan-2.19.1}/conan/internal/runner/__init__.py +0 -0
  218. {conan-2.18.1 → conan-2.19.1}/conan/internal/runner/docker.py +0 -0
  219. {conan-2.18.1 → conan-2.19.1}/conan/internal/runner/output.py +0 -0
  220. {conan-2.18.1 → conan-2.19.1}/conan/internal/runner/wsl.py +0 -0
  221. {conan-2.18.1 → conan-2.19.1}/conan/internal/source.py +0 -0
  222. {conan-2.18.1 → conan-2.19.1}/conan/internal/subsystems.py +0 -0
  223. {conan-2.18.1 → conan-2.19.1}/conan/internal/util/__init__.py +0 -0
  224. {conan-2.18.1 → conan-2.19.1}/conan/internal/util/config_parser.py +0 -0
  225. {conan-2.18.1 → conan-2.19.1}/conan/internal/util/dates.py +0 -0
  226. {conan-2.18.1 → conan-2.19.1}/conan/internal/util/files.py +0 -0
  227. {conan-2.18.1 → conan-2.19.1}/conan/internal/util/runners.py +0 -0
  228. {conan-2.18.1 → conan-2.19.1}/conan/test/__init__.py +0 -0
  229. {conan-2.18.1 → conan-2.19.1}/conan/test/assets/__init__.py +0 -0
  230. {conan-2.18.1 → conan-2.19.1}/conan/test/assets/autotools.py +0 -0
  231. {conan-2.18.1 → conan-2.19.1}/conan/test/assets/cmake.py +0 -0
  232. {conan-2.18.1 → conan-2.19.1}/conan/test/assets/genconanfile.py +0 -0
  233. {conan-2.18.1 → conan-2.19.1}/conan/test/assets/sources.py +0 -0
  234. {conan-2.18.1 → conan-2.19.1}/conan/test/assets/visual_project_files.py +0 -0
  235. {conan-2.18.1 → conan-2.19.1}/conan/test/utils/__init__.py +0 -0
  236. {conan-2.18.1 → conan-2.19.1}/conan/test/utils/artifactory.py +0 -0
  237. {conan-2.18.1 → conan-2.19.1}/conan/test/utils/env.py +0 -0
  238. {conan-2.18.1 → conan-2.19.1}/conan/test/utils/file_server.py +0 -0
  239. {conan-2.18.1 → conan-2.19.1}/conan/test/utils/mocks.py +0 -0
  240. {conan-2.18.1 → conan-2.19.1}/conan/test/utils/profiles.py +0 -0
  241. {conan-2.18.1 → conan-2.19.1}/conan/test/utils/scm.py +0 -0
  242. {conan-2.18.1 → conan-2.19.1}/conan/test/utils/server_launcher.py +0 -0
  243. {conan-2.18.1 → conan-2.19.1}/conan/test/utils/test_files.py +0 -0
  244. {conan-2.18.1 → conan-2.19.1}/conan/tools/__init__.py +0 -0
  245. {conan-2.18.1 → conan-2.19.1}/conan/tools/android/__init__.py +0 -0
  246. {conan-2.18.1 → conan-2.19.1}/conan/tools/android/utils.py +0 -0
  247. {conan-2.18.1 → conan-2.19.1}/conan/tools/apple/__init__.py +0 -0
  248. {conan-2.18.1 → conan-2.19.1}/conan/tools/apple/xcodedeps.py +0 -0
  249. {conan-2.18.1 → conan-2.19.1}/conan/tools/build/__init__.py +0 -0
  250. {conan-2.18.1 → conan-2.19.1}/conan/tools/build/cppstd.py +0 -0
  251. {conan-2.18.1 → conan-2.19.1}/conan/tools/build/cpu.py +0 -0
  252. {conan-2.18.1 → conan-2.19.1}/conan/tools/build/cross_building.py +0 -0
  253. {conan-2.18.1 → conan-2.19.1}/conan/tools/build/cstd.py +0 -0
  254. {conan-2.18.1 → conan-2.19.1}/conan/tools/build/flags.py +0 -0
  255. {conan-2.18.1 → conan-2.19.1}/conan/tools/build/stdcpp_library.py +0 -0
  256. {conan-2.18.1 → conan-2.19.1}/conan/tools/cmake/__init__.py +0 -0
  257. {conan-2.18.1 → conan-2.19.1}/conan/tools/cmake/cmake.py +0 -0
  258. {conan-2.18.1 → conan-2.19.1}/conan/tools/cmake/cmakedeps/__init__.py +0 -0
  259. {conan-2.18.1 → conan-2.19.1}/conan/tools/cmake/cmakedeps/cmakedeps.py +0 -0
  260. {conan-2.18.1 → conan-2.19.1}/conan/tools/cmake/cmakedeps/templates/__init__.py +0 -0
  261. {conan-2.18.1 → conan-2.19.1}/conan/tools/cmake/cmakedeps/templates/config.py +0 -0
  262. {conan-2.18.1 → conan-2.19.1}/conan/tools/cmake/cmakedeps/templates/config_version.py +0 -0
  263. {conan-2.18.1 → conan-2.19.1}/conan/tools/cmake/cmakedeps/templates/macros.py +0 -0
  264. {conan-2.18.1 → conan-2.19.1}/conan/tools/cmake/cmakedeps/templates/target_configuration.py +0 -0
  265. {conan-2.18.1 → conan-2.19.1}/conan/tools/cmake/cmakedeps/templates/target_data.py +0 -0
  266. {conan-2.18.1 → conan-2.19.1}/conan/tools/cmake/cmakedeps/templates/targets.py +0 -0
  267. {conan-2.18.1 → conan-2.19.1}/conan/tools/cmake/cmakedeps2/__init__.py +0 -0
  268. {conan-2.18.1 → conan-2.19.1}/conan/tools/cmake/cmakedeps2/cmakedeps.py +0 -0
  269. {conan-2.18.1 → conan-2.19.1}/conan/tools/cmake/cmakedeps2/config.py +0 -0
  270. {conan-2.18.1 → conan-2.19.1}/conan/tools/cmake/cmakedeps2/config_version.py +0 -0
  271. {conan-2.18.1 → conan-2.19.1}/conan/tools/cmake/cmakedeps2/targets.py +0 -0
  272. {conan-2.18.1 → conan-2.19.1}/conan/tools/cmake/layout.py +0 -0
  273. {conan-2.18.1 → conan-2.19.1}/conan/tools/cmake/presets.py +0 -0
  274. {conan-2.18.1 → conan-2.19.1}/conan/tools/cmake/toolchain/__init__.py +0 -0
  275. {conan-2.18.1 → conan-2.19.1}/conan/tools/cmake/toolchain/toolchain.py +0 -0
  276. {conan-2.18.1 → conan-2.19.1}/conan/tools/cmake/utils.py +0 -0
  277. {conan-2.18.1 → conan-2.19.1}/conan/tools/cps/__init__.py +0 -0
  278. {conan-2.18.1 → conan-2.19.1}/conan/tools/cps/cps_deps.py +0 -0
  279. {conan-2.18.1 → conan-2.19.1}/conan/tools/env/__init__.py +0 -0
  280. {conan-2.18.1 → conan-2.19.1}/conan/tools/env/environment.py +0 -0
  281. {conan-2.18.1 → conan-2.19.1}/conan/tools/env/virtualbuildenv.py +0 -0
  282. {conan-2.18.1 → conan-2.19.1}/conan/tools/env/virtualrunenv.py +0 -0
  283. {conan-2.18.1 → conan-2.19.1}/conan/tools/files/__init__.py +0 -0
  284. {conan-2.18.1 → conan-2.19.1}/conan/tools/files/conandata.py +0 -0
  285. {conan-2.18.1 → conan-2.19.1}/conan/tools/files/copy_pattern.py +0 -0
  286. {conan-2.18.1 → conan-2.19.1}/conan/tools/files/packager.py +0 -0
  287. {conan-2.18.1 → conan-2.19.1}/conan/tools/files/patches.py +0 -0
  288. {conan-2.18.1 → conan-2.19.1}/conan/tools/files/symlinks/__init__.py +0 -0
  289. {conan-2.18.1 → conan-2.19.1}/conan/tools/files/symlinks/symlinks.py +0 -0
  290. {conan-2.18.1 → conan-2.19.1}/conan/tools/gnu/__init__.py +0 -0
  291. {conan-2.18.1 → conan-2.19.1}/conan/tools/gnu/autotoolsdeps.py +0 -0
  292. {conan-2.18.1 → conan-2.19.1}/conan/tools/gnu/autotoolstoolchain.py +0 -0
  293. {conan-2.18.1 → conan-2.19.1}/conan/tools/gnu/get_gnu_triplet.py +0 -0
  294. {conan-2.18.1 → conan-2.19.1}/conan/tools/gnu/gnudeps_flags.py +0 -0
  295. {conan-2.18.1 → conan-2.19.1}/conan/tools/gnu/gnutoolchain.py +0 -0
  296. {conan-2.18.1 → conan-2.19.1}/conan/tools/gnu/makedeps.py +0 -0
  297. {conan-2.18.1 → conan-2.19.1}/conan/tools/gnu/pkgconfig.py +0 -0
  298. {conan-2.18.1 → conan-2.19.1}/conan/tools/gnu/pkgconfigdeps.py +0 -0
  299. {conan-2.18.1 → conan-2.19.1}/conan/tools/google/__init__.py +0 -0
  300. {conan-2.18.1 → conan-2.19.1}/conan/tools/google/bazel.py +0 -0
  301. {conan-2.18.1 → conan-2.19.1}/conan/tools/google/bazeldeps.py +0 -0
  302. {conan-2.18.1 → conan-2.19.1}/conan/tools/google/layout.py +0 -0
  303. {conan-2.18.1 → conan-2.19.1}/conan/tools/google/toolchain.py +0 -0
  304. {conan-2.18.1 → conan-2.19.1}/conan/tools/intel/__init__.py +0 -0
  305. {conan-2.18.1 → conan-2.19.1}/conan/tools/intel/intel_cc.py +0 -0
  306. {conan-2.18.1 → conan-2.19.1}/conan/tools/layout/__init__.py +0 -0
  307. {conan-2.18.1 → conan-2.19.1}/conan/tools/meson/__init__.py +0 -0
  308. {conan-2.18.1 → conan-2.19.1}/conan/tools/meson/helpers.py +0 -0
  309. {conan-2.18.1 → conan-2.19.1}/conan/tools/meson/meson.py +0 -0
  310. {conan-2.18.1 → conan-2.19.1}/conan/tools/microsoft/__init__.py +0 -0
  311. {conan-2.18.1 → conan-2.19.1}/conan/tools/microsoft/layout.py +0 -0
  312. {conan-2.18.1 → conan-2.19.1}/conan/tools/microsoft/msbuild.py +0 -0
  313. {conan-2.18.1 → conan-2.19.1}/conan/tools/microsoft/msbuilddeps.py +0 -0
  314. {conan-2.18.1 → conan-2.19.1}/conan/tools/microsoft/nmakedeps.py +0 -0
  315. {conan-2.18.1 → conan-2.19.1}/conan/tools/microsoft/nmaketoolchain.py +0 -0
  316. {conan-2.18.1 → conan-2.19.1}/conan/tools/microsoft/subsystems.py +0 -0
  317. {conan-2.18.1 → conan-2.19.1}/conan/tools/microsoft/toolchain.py +0 -0
  318. {conan-2.18.1 → conan-2.19.1}/conan/tools/microsoft/visual.py +0 -0
  319. {conan-2.18.1 → conan-2.19.1}/conan/tools/premake/__init__.py +0 -0
  320. {conan-2.18.1 → conan-2.19.1}/conan/tools/premake/constants.py +0 -0
  321. {conan-2.18.1 → conan-2.19.1}/conan/tools/premake/toolchain.py +0 -0
  322. {conan-2.18.1 → conan-2.19.1}/conan/tools/qbs/__init__.py +0 -0
  323. {conan-2.18.1 → conan-2.19.1}/conan/tools/qbs/common.py +0 -0
  324. {conan-2.18.1 → conan-2.19.1}/conan/tools/qbs/qbs.py +0 -0
  325. {conan-2.18.1 → conan-2.19.1}/conan/tools/qbs/qbsdeps.py +0 -0
  326. {conan-2.18.1 → conan-2.19.1}/conan/tools/qbs/qbsprofile.py +0 -0
  327. {conan-2.18.1 → conan-2.19.1}/conan/tools/ros/__init__.py +0 -0
  328. {conan-2.18.1 → conan-2.19.1}/conan/tools/ros/rosenv.py +0 -0
  329. {conan-2.18.1 → conan-2.19.1}/conan/tools/sbom/__init__.py +0 -0
  330. {conan-2.18.1 → conan-2.19.1}/conan/tools/sbom/spdx_licenses.py +0 -0
  331. {conan-2.18.1 → conan-2.19.1}/conan/tools/scm/__init__.py +0 -0
  332. {conan-2.18.1 → conan-2.19.1}/conan/tools/scm/git.py +0 -0
  333. {conan-2.18.1 → conan-2.19.1}/conan/tools/scons/__init__.py +0 -0
  334. {conan-2.18.1 → conan-2.19.1}/conan/tools/scons/sconsdeps.py +0 -0
  335. {conan-2.18.1 → conan-2.19.1}/conan/tools/system/__init__.py +0 -0
  336. {conan-2.18.1 → conan-2.19.1}/conan/tools/system/package_manager.py +0 -0
  337. {conan-2.18.1 → conan-2.19.1}/conan.egg-info/dependency_links.txt +0 -0
  338. {conan-2.18.1 → conan-2.19.1}/conan.egg-info/entry_points.txt +0 -0
  339. {conan-2.18.1 → conan-2.19.1}/conan.egg-info/requires.txt +0 -0
  340. {conan-2.18.1 → conan-2.19.1}/conan.egg-info/top_level.txt +0 -0
  341. {conan-2.18.1 → conan-2.19.1}/conans/__init__.py +0 -0
  342. {conan-2.18.1 → conan-2.19.1}/conans/conan_server.py +0 -0
  343. {conan-2.18.1 → conan-2.19.1}/conans/migrations.py +0 -0
  344. {conan-2.18.1 → conan-2.19.1}/conans/model/__init__.py +0 -0
  345. {conan-2.18.1 → conan-2.19.1}/conans/model/package_ref.py +0 -0
  346. {conan-2.18.1 → conan-2.19.1}/conans/model/recipe_ref.py +0 -0
  347. {conan-2.18.1 → conan-2.19.1}/conans/requirements.txt +0 -0
  348. {conan-2.18.1 → conan-2.19.1}/conans/requirements_dev.txt +0 -0
  349. {conan-2.18.1 → conan-2.19.1}/conans/requirements_runner.txt +0 -0
  350. {conan-2.18.1 → conan-2.19.1}/conans/requirements_server.txt +0 -0
  351. {conan-2.18.1 → conan-2.19.1}/pyproject.toml +0 -0
  352. {conan-2.18.1 → conan-2.19.1}/setup.cfg +0 -0
  353. {conan-2.18.1 → conan-2.19.1}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: conan
3
- Version: 2.18.1
3
+ Version: 2.19.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.18.1'
5
+ __version__ = '2.19.1'
6
6
  conan_version = Version(__version__)
@@ -22,6 +22,8 @@ from conan.api.subapi.remove import RemoveAPI
22
22
  from conan.api.subapi.search import SearchAPI
23
23
  from conan.api.subapi.upload import UploadAPI
24
24
  from conan.errors import ConanException
25
+ from conan.internal.cache.home_paths import HomePaths
26
+ from conan.internal.hook_manager import HookManager
25
27
  from conan.internal.paths import get_conan_user_home
26
28
  from conan.internal.api.migrations import ClientMigrator
27
29
  from conan.internal.model.version_range import validate_conan_version
@@ -48,10 +50,12 @@ class ConanAPI:
48
50
  init_colorama(sys.stderr)
49
51
  self.cache_folder = cache_folder or get_conan_user_home()
50
52
  self.home_folder = self.cache_folder # Lets call it home, deprecate "cache"
51
- self.migrate()
52
-
53
53
  # This API is depended upon by the subsequent ones, it should be initialized first
54
54
  self.config = ConfigAPI(self)
55
+ _check_conan_version(self)
56
+
57
+ self._api_helpers = self._ApiHelpers(self)
58
+ self.migrate()
55
59
 
56
60
  self.remotes = RemotesAPI(self)
57
61
  self.command = CommandAPI(self)
@@ -60,27 +64,27 @@ class ConanAPI:
60
64
  # Get latest refs and list refs of recipes and packages
61
65
  self.list = ListAPI(self)
62
66
  self.profiles = ProfilesAPI(self)
63
- self.install = InstallAPI(self)
64
- self.graph = GraphAPI(self)
65
- self.export = ExportAPI(self)
67
+ self.install = InstallAPI(self, self._api_helpers)
68
+ self.graph = GraphAPI(self, self._api_helpers)
69
+ self.export = ExportAPI(self, self._api_helpers)
66
70
  self.remove = RemoveAPI(self)
67
71
  self.new = NewAPI(self)
68
72
  self.upload = UploadAPI(self)
69
73
  self.download = DownloadAPI(self)
70
74
  self.cache = CacheAPI(self)
71
75
  self.lockfile = LockfileAPI(self)
72
- self.local = LocalAPI(self)
76
+ self.local = LocalAPI(self, self._api_helpers)
73
77
  self.audit = AuditAPI(self)
74
78
  # Now, lazy loading of editables
75
79
  self.workspace = WorkspaceAPI(self)
76
- self.report = ReportAPI(self)
77
-
78
- _check_conan_version(self)
80
+ self.report = ReportAPI(self, self._api_helpers)
79
81
 
80
82
  def reinit(self):
81
83
  """
82
84
  Reinitialize the Conan API. This is useful when the configuration changes.
83
85
  """
86
+ # TODO: Think order of reinitialization for helpers
87
+ self._api_helpers.reinit()
84
88
  self.config.reinit()
85
89
  self.remotes.reinit()
86
90
  self.local.reinit()
@@ -94,6 +98,14 @@ class ConanAPI:
94
98
  migrator = ClientMigrator(self.cache_folder, conan_version)
95
99
  migrator.migrate()
96
100
 
101
+ class _ApiHelpers:
102
+ def __init__(self, conan_api):
103
+ self._conan_api = conan_api
104
+ self.hook_manager = HookManager(HomePaths(self._conan_api.home_folder).hooks_path)
105
+
106
+ def reinit(self):
107
+ self.hook_manager.reinit()
108
+
97
109
 
98
110
  def _check_conan_version(conan_api):
99
111
  required_range_new = conan_api.config.global_conf.get("core:required_conan_version")
@@ -33,11 +33,11 @@ class UserInput:
33
33
  :param username If username is specified it only request password"""
34
34
  self._raise_if_non_interactive()
35
35
  if not username:
36
- self._out.write("Remote '%s' username: " % remote_name)
36
+ self._out.login_msg(f"Remote '{remote_name}' username: ")
37
37
  username = self.get_username()
38
38
 
39
- self._out.write("Please enter a password for user '%s' on remote '%s': "
40
- % (username, remote_name))
39
+ self._out.login_msg("Please enter a password for "
40
+ f"user '{username}' on remote '{remote_name}': ")
41
41
  try:
42
42
  pwd = self.get_password()
43
43
  except ConanException:
@@ -19,7 +19,7 @@ LEVEL_DEBUG = 20 # -vv Closely related to internal implementation details
19
19
  LEVEL_TRACE = 10 # -vvv Fine-grained messages with very low-level implementation details
20
20
 
21
21
 
22
- class Color(object):
22
+ class Color:
23
23
  """ Wrapper around colorama colors that are undefined in importing
24
24
  """
25
25
  RED = Fore.RED # @UndefinedVariable
@@ -181,6 +181,11 @@ class ConanOutput:
181
181
  self.writeln(f'*{msg: ^48}*', fg=color)
182
182
  self.writeln(f"**************************************************\n", fg=color)
183
183
 
184
+ def login_msg(self, msg, newline=False):
185
+ # unconditional to the error level, this has to show always
186
+ self._write_message(msg, newline=newline)
187
+ return self
188
+
184
189
  def _write_message(self, msg, fg=None, bg=None, newline=True):
185
190
  if isinstance(msg, dict):
186
191
  # For traces we can receive a dict already, we try to transform then into more natural
@@ -189,20 +194,19 @@ class ConanOutput:
189
194
  msg = "=> {}".format(msg)
190
195
  # msg = json.dumps(msg, sort_keys=True, default=json_encoder)
191
196
 
192
- ret = ""
193
197
  if self._scope:
194
198
  if self._color:
195
- ret = "{}{}{}:{} ".format(fg or '', bg or '', self.scope, Style.RESET_ALL)
199
+ ret = f"{fg or ''}{bg or ''}{self._scope}: {msg}{Style.RESET_ALL}"
196
200
  else:
197
- ret = "{}: ".format(self._scope)
198
-
199
- if self._color:
200
- ret += "{}{}{}{}".format(fg or '', bg or '', msg, Style.RESET_ALL)
201
+ ret = f"{self._scope}: {msg}"
201
202
  else:
202
- ret += "{}".format(msg)
203
+ if self._color:
204
+ ret = f"{fg or ''}{bg or ''}{msg}{Style.RESET_ALL}"
205
+ else:
206
+ ret = msg
203
207
 
204
208
  if newline:
205
- ret = "%s\n" % ret
209
+ ret += "\n"
206
210
 
207
211
  with self.lock:
208
212
  self.stream.write(ret)
@@ -260,7 +264,8 @@ class ConanOutput:
260
264
 
261
265
  def warning(self, msg, warn_tag=None):
262
266
  _treat_as_error = self._warn_tag_matches(warn_tag, self._warnings_as_errors)
263
- if self._conan_output_level <= LEVEL_WARNING or (_treat_as_error and self._conan_output_level <= LEVEL_ERROR):
267
+ if (self._conan_output_level <= LEVEL_WARNING or
268
+ (_treat_as_error and self._conan_output_level <= LEVEL_ERROR)):
264
269
  if self._warn_tag_matches(warn_tag, self._silent_warn_tags):
265
270
  return self
266
271
  warn_tag_msg = "" if warn_tag is None else f"{warn_tag}: "
@@ -30,7 +30,6 @@ class ConfigAPI:
30
30
  self.conan_api = conan_api
31
31
  self._new_config = None
32
32
  self._cli_core_confs = None
33
- self.hook_manager = HookManager(HomePaths(conan_api.home_folder).hooks_path)
34
33
 
35
34
  def home(self):
36
35
  return self.conan_api.cache_folder
@@ -236,4 +235,3 @@ class ConfigAPI:
236
235
  if self._new_config is not None:
237
236
  self._new_config.clear()
238
237
  self._populate_global_conf()
239
- self.hook_manager = HookManager(HomePaths(self.conan_api.home_folder).hooks_path)
@@ -10,19 +10,20 @@ from conan.internal.util.files import mkdir
10
10
 
11
11
  class ExportAPI:
12
12
 
13
- def __init__(self, conan_api):
13
+ def __init__(self, conan_api, helpers):
14
14
  self.conan_api = conan_api
15
+ self._helpers = helpers
15
16
 
16
17
  def export(self, path, name, version, user, channel, lockfile=None, remotes=None):
17
18
  ConanOutput().title("Exporting recipe to the cache")
18
19
  app = ConanApp(self.conan_api)
19
- hook_manager = self.conan_api.config.hook_manager
20
+ hook_manager = self._helpers.hook_manager
20
21
  return cmd_export(app, hook_manager, self.conan_api.config.global_conf, path, name, version,
21
22
  user, channel, graph_lock=lockfile, remotes=remotes)
22
23
 
23
24
  def export_pkg(self, deps_graph, source_folder, output_folder):
24
25
  cache = PkgCache(self.conan_api.cache_folder, self.conan_api.config.global_conf)
25
- hook_manager = self.conan_api.config.hook_manager
26
+ hook_manager = self._helpers.hook_manager
26
27
 
27
28
  # The graph has to be loaded with build_mode=[ref.name], so that node is not tried
28
29
  # to be downloaded from remotes
@@ -13,8 +13,9 @@ from conan.api.model import RecipeReference
13
13
 
14
14
  class GraphAPI:
15
15
 
16
- def __init__(self, conan_api):
16
+ def __init__(self, conan_api, helpers):
17
17
  self.conan_api = conan_api
18
+ self._helpers = helpers
18
19
 
19
20
  def _load_root_consumer_conanfile(self, path, profile_host, profile_build,
20
21
  name=None, version=None, user=None, channel=None,
@@ -205,7 +206,8 @@ class GraphAPI:
205
206
  """
206
207
  ConanOutput().title("Computing necessary packages")
207
208
  conan_app = ConanBasicApp(self.conan_api)
208
- binaries_analyzer = GraphBinariesAnalyzer(conan_app, self.conan_api.config.global_conf)
209
+ binaries_analyzer = GraphBinariesAnalyzer(conan_app, self.conan_api.config.global_conf,
210
+ self._helpers.hook_manager)
209
211
  binaries_analyzer.evaluate_graph(graph, build_mode, lockfile, remotes, update,
210
212
  build_modes_test, tested_graph)
211
213
 
@@ -11,8 +11,9 @@ from conan.errors import ConanInvalidConfiguration
11
11
 
12
12
  class InstallAPI:
13
13
 
14
- def __init__(self, conan_api):
14
+ def __init__(self, conan_api, helpers):
15
15
  self.conan_api = conan_api
16
+ self._helpers = helpers
16
17
 
17
18
  def install_binaries(self, deps_graph, remotes=None):
18
19
  """ Install binaries for dependency graph
@@ -21,7 +22,7 @@ class InstallAPI:
21
22
  """
22
23
  app = ConanBasicApp(self.conan_api)
23
24
  installer = BinaryInstaller(app, self.conan_api.config.global_conf, app.editable_packages,
24
- self.conan_api.config.hook_manager)
25
+ self._helpers.hook_manager)
25
26
  install_graph = InstallGraph(deps_graph)
26
27
  install_graph.raise_errors()
27
28
  install_order = install_graph.install_order()
@@ -35,7 +36,7 @@ class InstallAPI:
35
36
  """
36
37
  app = ConanBasicApp(self.conan_api)
37
38
  installer = BinaryInstaller(app, self.conan_api.config.global_conf, app.editable_packages,
38
- self.conan_api.config.hook_manager)
39
+ self._helpers.hook_manager)
39
40
  installer.install_system_requires(graph, only_info)
40
41
 
41
42
  def install_sources(self, graph, remotes):
@@ -46,7 +47,7 @@ class InstallAPI:
46
47
  """
47
48
  app = ConanBasicApp(self.conan_api)
48
49
  installer = BinaryInstaller(app, self.conan_api.config.global_conf, app.editable_packages,
49
- self.conan_api.config.hook_manager)
50
+ self._helpers.hook_manager)
50
51
  installer.install_sources(graph, remotes)
51
52
 
52
53
  # TODO: Look for a better name
@@ -87,7 +88,7 @@ class InstallAPI:
87
88
  if gen not in final_generators:
88
89
  final_generators.append(gen)
89
90
  conanfile.generators = final_generators
90
- hook_manager = self.conan_api.config.hook_manager
91
+ hook_manager = self._helpers.hook_manager
91
92
  write_generators(conanfile, hook_manager, self.conan_api.home_folder,
92
93
  envs_generation=envs_generation)
93
94
 
@@ -14,8 +14,9 @@ from conan.internal.util.files import chdir
14
14
 
15
15
  class LocalAPI:
16
16
 
17
- def __init__(self, conan_api):
17
+ def __init__(self, conan_api, helpers):
18
18
  self._conan_api = conan_api
19
+ self._helpers = helpers
19
20
  self.editable_packages = EditablePackages(conan_api.home_folder)
20
21
 
21
22
  @staticmethod
@@ -93,13 +94,13 @@ class LocalAPI:
93
94
  conanfile.folders.set_base_build(None)
94
95
  conanfile.folders.set_base_package(None)
95
96
 
96
- hook_manager = self._conan_api.config.hook_manager
97
+ hook_manager = self._helpers.hook_manager
97
98
  run_source_method(conanfile, hook_manager)
98
99
 
99
100
  def build(self, conanfile):
100
101
  """ calls the 'build()' method of the current (user folder) conanfile.py
101
102
  """
102
- hook_manager = self._conan_api.config.hook_manager
103
+ hook_manager = self._helpers.hook_manager
103
104
  conanfile.folders.set_base_package(conanfile.folders.base_build)
104
105
  conanfile.folders.set_base_pkg_metadata(os.path.join(conanfile.build_folder, "metadata"))
105
106
  run_build_method(conanfile, hook_manager)
@@ -14,8 +14,9 @@ from conan.internal.util.runners import conan_run
14
14
 
15
15
 
16
16
  class ReportAPI:
17
- def __init__(self, conan_api):
17
+ def __init__(self, conan_api, helpers):
18
18
  self.conan_api = conan_api
19
+ self._helpers = helpers
19
20
 
20
21
  def diff(self, old_reference, new_reference, remotes, old_path=None, new_path=None, cwd=None):
21
22
  """
@@ -36,7 +37,8 @@ class ReportAPI:
36
37
  export_ref, cache_path = _export_recipe_from_path(self.conan_api, path_to_conanfile,
37
38
  reference, remotes, cwd)
38
39
  exported_path = self.conan_api.local.get_conanfile_path(cache_path, cwd, py=True)
39
- _configure_source(self.conan_api, exported_path, export_ref, remotes)
40
+ _configure_source(self.conan_api, self._helpers.hook_manager, exported_path, export_ref,
41
+ remotes)
40
42
  return export_ref, cache_path
41
43
 
42
44
 
@@ -77,7 +79,7 @@ class ReportAPI:
77
79
  "dst_prefix": dst_prefix,
78
80
  }
79
81
 
80
- def _configure_source(conan_api, conanfile_path, ref, remotes):
82
+ def _configure_source(conan_api, hook_manager, conanfile_path, ref, remotes):
81
83
  app = ConanApp(conan_api)
82
84
  conanfile = app.loader.load_consumer(conanfile_path, name=ref.name, version=str(ref.version),
83
85
  user=ref.user, channel=ref.channel, graph_lock=None,
@@ -97,7 +99,7 @@ def _configure_source(conan_api, conanfile_path, ref, remotes):
97
99
  conanfile.folders.set_base_source(source_folder)
98
100
  conanfile.folders.set_base_export_sources(export_source_folder)
99
101
  conanfile.folders.set_base_recipe_metadata(recipe_layout.metadata())
100
- config_source(export_source_folder, conanfile, conan_api.config.hook_manager)
102
+ config_source(export_source_folder, conanfile, hook_manager)
101
103
 
102
104
  def _get_ref_from_cache_or_remote(conan_api, reference, enabled_remotes):
103
105
  ref = RecipeReference.loads(reference)
@@ -38,7 +38,6 @@ def export_pkg(conan_api, parser, *args):
38
38
 
39
39
  cwd = os.getcwd()
40
40
  path = conan_api.local.get_conanfile_path(args.path, cwd, py=True)
41
- test_conanfile_path = _get_test_conanfile_path(args.test_folder, path)
42
41
  overrides = eval(args.lockfile_overrides) if args.lockfile_overrides else None
43
42
  lockfile = conan_api.lockfile.get_lockfile(lockfile=args.lockfile, conanfile_path=path,
44
43
  cwd=cwd, partial=args.lockfile_partial,
@@ -92,6 +91,9 @@ def export_pkg(conan_api, parser, *args):
92
91
  lockfile = conan_api.lockfile.update_lockfile(lockfile, deps_graph, args.lockfile_packages,
93
92
  clean=args.lockfile_clean)
94
93
 
94
+ test_package_folder = getattr(conanfile, "test_package_folder", None) \
95
+ if args.test_folder is None else args.test_folder
96
+ test_conanfile_path = _get_test_conanfile_path(test_package_folder, path)
95
97
  if test_conanfile_path:
96
98
  from conan.cli.commands.test import run_test
97
99
  # same as ``conan create`` the lockfile, and deps graph is the one of the exported-pkg
@@ -12,7 +12,7 @@ def new(conan_api, parser, *args):
12
12
  "either a predefined built-in or a user-provided one. "
13
13
  "Available built-in templates: basic, cmake_lib, cmake_exe, header_lib, "
14
14
  "meson_lib, meson_exe, msbuild_lib, msbuild_exe, bazel_lib, bazel_exe, "
15
- "autotools_lib, autotools_exe, local_recipes_index, workspace. "
15
+ "autotools_lib, autotools_exe, premake_lib, premake_exe, local_recipes_index, workspace. "
16
16
  "E.g. 'conan new cmake_lib -d name=hello -d version=0.1'. "
17
17
  "You can define your own templates too by inputting an absolute path "
18
18
  "as your template, or a path relative to your conan home folder."
@@ -44,7 +44,7 @@ graph_info_html = r"""
44
44
  <label for="show_package_type">Show package type</label>
45
45
  </div>
46
46
  <div>
47
- <input type="search" placeholder="Search packages..." oninput="searchPackages(this)">
47
+ <input type="search" placeholder="Search packages..." oninput="searchPackages(this)" onkeydown="onSearchKeyDown(event)">
48
48
  </div>
49
49
  <div>
50
50
  <input type="search" placeholder="Exclude packages..." title="Add a comma to exclude an additional package" oninput="excludePackages(this)">
@@ -64,6 +64,7 @@ graph_info_html = r"""
64
64
  let hide_build = false;
65
65
  let hide_test = false;
66
66
  let search_pkgs = null;
67
+ let focus_search = false;
67
68
  let excluded_pkgs = null;
68
69
  let collapse_packages = false;
69
70
  let show_package_type = false;
@@ -135,6 +136,9 @@ graph_info_html = r"""
135
136
  if (patterns.some(pattern => label.match(pattern))) {
136
137
  borderWidth = 3;
137
138
  borderColor = "Magenta";
139
+ if (focus_search) {
140
+ focus_search = node_id;
141
+ }
138
142
  }
139
143
  }
140
144
  if (node.test) {
@@ -312,6 +316,10 @@ graph_info_html = r"""
312
316
  network.setData(data);
313
317
  network.redraw();
314
318
  network.moveTo({position: viewPos, scale: scale});
319
+ // If we have found a package to focus, we need to move the view
320
+ if (typeof focus_search === "string") {
321
+ network.focus(focus_search, {animation: true, locked: false});
322
+ }
315
323
  }
316
324
  function switchBuild() {
317
325
  hide_build = !hide_build;
@@ -325,13 +333,28 @@ graph_info_html = r"""
325
333
  collapse_packages = !collapse_packages;
326
334
  draw();
327
335
  }
336
+ const debounce = (func, delay) => {
337
+ let timeout;
338
+ return function(...args) {
339
+ clearTimeout(timeout);
340
+ timeout = setTimeout(() => func.apply(this, args), delay);
341
+ };
342
+ };
343
+ const debouncedDraw = debounce(draw, 300);
328
344
  function searchPackages(e) {
329
345
  search_pkgs = e.value;
330
- draw();
346
+ debouncedDraw();
347
+ }
348
+ function onSearchKeyDown(event) {
349
+ if (event.key === "Enter") {
350
+ focus_search = true;
351
+ draw();
352
+ focus_search = false;
353
+ }
331
354
  }
332
355
  function excludePackages(e) {
333
356
  excluded_pkgs = e.value;
334
- draw();
357
+ debouncedDraw();
335
358
  }
336
359
  function showPackageType(e) {
337
360
  show_package_type = !show_package_type;
@@ -32,56 +32,70 @@ diff_html = r"""
32
32
  }
33
33
  </style>
34
34
  <script>
35
+ function debounce(func, delay) {
36
+ let timeout;
37
+ return function(...args) {
38
+ const context = this;
39
+ clearTimeout(timeout);
40
+ timeout = setTimeout(() => {
41
+ func.apply(context, args);
42
+ }, delay);
43
+ };
44
+ }
35
45
  let includeSearchQuery = "";
36
46
  let excludeSearchQuery = "";
37
47
 
38
- async function onExcludeSearchInput(event) {
39
- excludeSearchQuery = event.currentTarget.value.toLowerCase();
40
- onSearchInput(event);
41
- }
42
-
43
- async function onIncludeSearchInput(event) {
44
- includeSearchQuery = event.currentTarget.value.toLowerCase();
45
- onSearchInput(event);
46
- }
47
-
48
48
  async function onSearchInput(event) {
49
49
  const sidebar = document.querySelectorAll(".sidebar li");
50
50
  const content = document.querySelectorAll(".content .diff-content");
51
+ const searchingIcon = document.getElementById("searching_icon");
52
+
53
+ searchingIcon.style.display = "inline-block";
54
+
55
+ let emptySearch = true;
51
56
 
52
57
  sidebar.forEach(async function(item) {
53
58
  const text = item.textContent.toLowerCase();
54
59
  const shouldInclude = includeSearchQuery === "" || text.includes(includeSearchQuery);
55
60
  const shouldExclude = excludeSearchQuery !== "" && text.includes(excludeSearchQuery);
61
+ const associatedId = item.querySelector("a").getAttribute("href").substring(1)
62
+ const contentItem = document.getElementById(associatedId);
56
63
 
57
64
  if (shouldInclude) {
58
65
  if (shouldExclude) {
59
66
  item.style.display = "none";
67
+ contentItem.style.display = "none";
60
68
  } else {
61
69
  item.style.display = "list-item";
70
+ contentItem.style.display = "block";
71
+ emptySearch = false;
62
72
  }
63
73
  } else {
64
74
  item.style.display = "none";
75
+ contentItem.style.display = "none";
65
76
  }
66
77
 
67
78
  });
68
79
 
69
- content.forEach(async function(item) {
70
- const filename = document.getElementById(item.id + "_filename");
71
- const text = filename.dataset.replacedPaths.toLowerCase();
72
- const shouldInclude = includeSearchQuery === "" || text.includes(includeSearchQuery);
73
- const shouldExclude = excludeSearchQuery !== "" && text.includes(excludeSearchQuery);
80
+ searchingIcon.style.display = "none";
81
+ const emptySearchTag = document.getElementById("empty_search");
82
+ if (emptySearch) {
83
+ emptySearchTag.style.display = "block";
84
+ } else {
85
+ emptySearchTag.style.display = "none";
86
+ }
87
+ }
74
88
 
75
- if (shouldInclude) {
76
- if (shouldExclude) {
77
- item.style.display = "none";
78
- } else {
79
- item.style.display = "block";
80
- }
81
- } else {
82
- item.style.display = "none";
83
- }
84
- });
89
+ const debouncedOnSearchInput = debounce(onSearchInput, 500);
90
+
91
+ async function onExcludeSearchInput(event) {
92
+ excludeSearchQuery = event.currentTarget.value.toLowerCase();
93
+ debouncedOnSearchInput(event);
94
+ }
95
+
96
+ async function onIncludeSearchInput(event) {
97
+ includeSearchQuery = event.currentTarget.value.toLowerCase();
98
+ debouncedOnSearchInput(event);
85
99
  }
86
100
  </script>
87
101
  </head>
@@ -96,10 +110,12 @@ diff_html = r"""
96
110
  <h2>File list:</h2>
97
111
  <input type="text" id="search-include" placeholder="Include search..." oninput="onIncludeSearchInput(event)" />
98
112
  <input type="text" id="search-exclude" placeholder="Exclude search..." oninput="onExcludeSearchInput(event)" />
113
+ <span id="searching_icon" style="display:none">...</span>
99
114
  <ul>
100
115
  {%- for filename in content.keys() %}
101
116
  <li><a href="#diff_{{- safe_filename(filename) -}}" class="side-link">{{ replace_cache_paths(filename) }}</a></li>
102
117
  {%- endfor %}
118
+ <span id="empty_search" style="display:none">No results found</span>
103
119
  </ul>
104
120
  </div>
105
121
  <div class='content'>
@@ -233,7 +233,7 @@ def detect_libcxx(compiler, version, compiler_exe=None):
233
233
  old_path = os.getcwd()
234
234
  os.chdir(t)
235
235
  try:
236
- error, out_str = detect_runner("%s main.cpp -std=c++11" % executable)
236
+ error, out_str = detect_runner(f'"{executable}" main.cpp -std=c++11')
237
237
  if error:
238
238
  if "using libstdc++" in out_str:
239
239
  output.info("gcc C++ standard library: libstdc++")
@@ -482,17 +482,16 @@ def _detect_vs_ide_version():
482
482
  def _cc_compiler(compiler_exe="cc"):
483
483
  # Try to detect the "cc" linux system "alternative". It could point to gcc or clang
484
484
  try:
485
- ret, out = detect_runner('%s --version' % compiler_exe)
485
+ ret, out = detect_runner(f'"{compiler_exe}" --version')
486
486
  if ret != 0:
487
487
  return None, None, None
488
488
  compiler = "clang" if "clang" in out else "gcc"
489
489
  # clang and gcc have version after a space, first try to find that to skip extra numbers
490
490
  # that might appear in the first line of the output before the version
491
- installed_version = re.search(r" ([0-9]+(\.[0-9]+)+)", out)
492
- # Try only major but with spaces next
493
- installed_version = installed_version or re.search(r" ([0-9]+(\.[0-9]+)?)", out)
491
+ # There might also be a leading parenthesis that contains build information, so we try to skip it
492
+ installed_version = re.search(r"(?:\(.*\))? ([0-9]+(\.[0-9]+)*)", out)
494
493
  # Fallback to the first number we find optionally followed by other version fields
495
- installed_version = installed_version or re.search(r"([0-9]+(\.[0-9]+)?)", out)
494
+ installed_version = installed_version or re.search(r"([0-9]+(\.[0-9]+)*)", out)
496
495
  if installed_version and installed_version.group(1):
497
496
  installed_version = installed_version.group(1)
498
497
  ConanOutput(scope="detect_api").info("Found cc=%s-%s" % (compiler, installed_version))
@@ -505,13 +504,12 @@ def detect_gcc_compiler(compiler_exe="gcc"):
505
504
  try:
506
505
  if platform.system() == "Darwin":
507
506
  # In Mac OS X check if gcc is a fronted using apple-clang
508
- _, out = detect_runner("%s --version" % compiler_exe)
507
+ _, out = detect_runner(f'"{compiler_exe}" --version')
509
508
  out = out.lower()
510
509
  if "clang" in out:
511
510
  return None, None, None
512
511
 
513
- # TODO: Add -dumpfullversion to always return major.minor
514
- ret, out = detect_runner('%s -dumpversion' % compiler_exe)
512
+ ret, out = detect_runner(f'"{compiler_exe}" -dumpversion')
515
513
  if ret != 0:
516
514
  return None, None, None
517
515
  compiler = "gcc"
@@ -524,14 +522,15 @@ def detect_gcc_compiler(compiler_exe="gcc"):
524
522
 
525
523
 
526
524
  def detect_compiler():
527
- ConanOutput(scope="detect_api").warning("detect_compiler() is deprecated, use detect_default_compiler()", warn_tag="deprecated")
525
+ ConanOutput(scope="detect_api").warning("detect_compiler() is deprecated, "
526
+ "use detect_default_compiler()", warn_tag="deprecated")
528
527
  compiler, version, _ = detect_default_compiler()
529
528
  return compiler, version
530
529
 
531
530
 
532
531
  def detect_intel_compiler(compiler_exe="icx"):
533
532
  try:
534
- ret, out = detect_runner("%s --version" % compiler_exe)
533
+ ret, out = detect_runner(f'"{compiler_exe}" --version')
535
534
  if ret != 0:
536
535
  return None, None
537
536
  compiler = "intel-cc"
@@ -545,7 +544,7 @@ def detect_intel_compiler(compiler_exe="icx"):
545
544
 
546
545
  def detect_suncc_compiler(compiler_exe="cc"):
547
546
  try:
548
- _, out = detect_runner('%s -V' % compiler_exe)
547
+ _, out = detect_runner(f'"{compiler_exe}" -V')
549
548
  compiler = "sun-cc"
550
549
  installed_version = re.search(r"Sun C.*([0-9]+\.[0-9]+)", out)
551
550
  if installed_version:
@@ -561,7 +560,7 @@ def detect_suncc_compiler(compiler_exe="cc"):
561
560
 
562
561
  def detect_clang_compiler(compiler_exe="clang"):
563
562
  try:
564
- ret, out = detect_runner('%s --version' % compiler_exe)
563
+ ret, out = detect_runner(f'"{compiler_exe}" --version')
565
564
  if ret != 0:
566
565
  return None, None, None
567
566
  if "Apple" in out:
@@ -651,6 +650,6 @@ def detect_sdk_version(sdk):
651
650
  if platform.system() != "Darwin":
652
651
  return
653
652
  cmd = f'xcrun -sdk {sdk} --show-sdk-version'
654
- result = check_output_runner(cmd)
653
+ _, result = detect_runner(cmd)
655
654
  result = result.strip()
656
655
  return result
@@ -20,8 +20,6 @@ class HomePaths:
20
20
  def global_conf_path(self):
21
21
  return os.path.join(self._home, "global.conf")
22
22
 
23
- new_config_path = global_conf_path # for not breaking tests, TODO to remove
24
-
25
23
  @property
26
24
  def deployers_path(self):
27
25
  deploy = os.path.join(self._home, _EXTENSIONS_FOLDER, "deploy")