conan-server 2.2.2__tar.gz → 2.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (362) hide show
  1. {conan-server-2.2.2/conan_server.egg-info → conan-server-2.3.0}/PKG-INFO +4 -10
  2. {conan-server-2.2.2 → conan-server-2.3.0}/README.md +3 -9
  3. {conan-server-2.2.2 → conan-server-2.3.0}/conan/api/model.py +26 -0
  4. {conan-server-2.2.2 → conan-server-2.3.0}/conan/api/subapi/cache.py +31 -12
  5. {conan-server-2.2.2 → conan-server-2.3.0}/conan/api/subapi/local.py +3 -1
  6. {conan-server-2.2.2 → conan-server-2.3.0}/conan/api/subapi/remotes.py +4 -1
  7. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/cli.py +9 -0
  8. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/commands/create.py +35 -1
  9. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/commands/graph.py +2 -6
  10. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/commands/new.py +1 -1
  11. conan-server-2.3.0/conan/cli/commands/pkglist.py +93 -0
  12. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/commands/profile.py +8 -2
  13. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/commands/version.py +13 -1
  14. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/formatters/graph/graph.py +12 -9
  15. conan-server-2.3.0/conan/cli/formatters/graph/info_graph_dot.py +13 -0
  16. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/formatters/graph/info_graph_html.py +35 -12
  17. {conan-server-2.2.2 → conan-server-2.3.0}/conan/internal/api/detect_api.py +49 -22
  18. {conan-server-2.2.2 → conan-server-2.3.0}/conan/internal/api/new/autoools_exe.py +1 -0
  19. {conan-server-2.2.2 → conan-server-2.3.0}/conan/internal/api/new/autotools_lib.py +2 -0
  20. {conan-server-2.2.2 → conan-server-2.3.0}/conan/internal/cache/db/packages_table.py +17 -17
  21. {conan-server-2.2.2 → conan-server-2.3.0}/conan/internal/cache/db/recipes_table.py +9 -9
  22. conan-server-2.3.0/conan/internal/runner/__init__.py +6 -0
  23. conan-server-2.3.0/conan/internal/runner/docker.py +273 -0
  24. conan-server-2.3.0/conan/internal/runner/ssh.py +273 -0
  25. conan-server-2.3.0/conan/internal/runner/wsl.py +144 -0
  26. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/apple/apple.py +50 -34
  27. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/cmake/cmake.py +3 -7
  28. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/cmake/cmakedeps/cmakedeps.py +5 -0
  29. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/cmake/cmakedeps/templates/config.py +10 -7
  30. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/cmake/cmakedeps/templates/target_configuration.py +44 -42
  31. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/cmake/cmakedeps/templates/target_data.py +19 -14
  32. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/cmake/presets.py +23 -17
  33. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/cmake/toolchain/blocks.py +2 -2
  34. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/cmake/toolchain/toolchain.py +5 -5
  35. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/files/copy_pattern.py +13 -6
  36. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/gnu/__init__.py +1 -0
  37. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/gnu/autotools.py +0 -1
  38. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/gnu/autotoolstoolchain.py +24 -30
  39. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/gnu/get_gnu_triplet.py +24 -14
  40. conan-server-2.3.0/conan/tools/gnu/gnutoolchain.py +265 -0
  41. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/google/bazeldeps.py +12 -8
  42. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/meson/meson.py +11 -13
  43. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/meson/toolchain.py +138 -66
  44. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/microsoft/visual.py +10 -16
  45. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/scm/git.py +13 -5
  46. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/system/package_manager.py +2 -2
  47. {conan-server-2.2.2 → conan-server-2.3.0/conan_server.egg-info}/PKG-INFO +4 -10
  48. {conan-server-2.2.2 → conan-server-2.3.0}/conan_server.egg-info/SOURCES.txt +7 -0
  49. {conan-server-2.2.2 → conan-server-2.3.0}/conan_server.egg-info/requires.txt +10 -2
  50. {conan-server-2.2.2 → conan-server-2.3.0}/conans/__init__.py +1 -1
  51. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/cmd/export.py +1 -0
  52. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/cmd/uploader.py +15 -4
  53. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/conf/__init__.py +2 -1
  54. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/conf/config_installer.py +2 -2
  55. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/downloaders/file_downloader.py +1 -1
  56. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/generators/__init__.py +13 -6
  57. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/graph/compute_pid.py +6 -5
  58. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/graph/graph_error.py +9 -13
  59. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/graph/profile_node_definer.py +5 -0
  60. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/profile_loader.py +15 -1
  61. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/rest/conan_requester.py +5 -5
  62. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/rest/remote_credentials.py +9 -6
  63. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/rest/rest_client_common.py +4 -1
  64. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/store/localdb.py +2 -2
  65. {conan-server-2.2.2 → conan-server-2.3.0}/conans/model/conan_file.py +0 -1
  66. {conan-server-2.2.2 → conan-server-2.3.0}/conans/model/conf.py +2 -1
  67. {conan-server-2.2.2 → conan-server-2.3.0}/conans/model/dependencies.py +3 -1
  68. {conan-server-2.2.2 → conan-server-2.3.0}/conans/model/profile.py +2 -0
  69. {conan-server-2.2.2 → conan-server-2.3.0}/conans/model/recipe_ref.py +2 -2
  70. {conan-server-2.2.2 → conan-server-2.3.0}/conans/model/settings.py +26 -22
  71. {conan-server-2.2.2 → conan-server-2.3.0}/conans/model/version_range.py +4 -2
  72. {conan-server-2.2.2 → conan-server-2.3.0}/conans/paths/__init__.py +3 -1
  73. {conan-server-2.2.2 → conan-server-2.3.0}/conans/requirements_dev.txt +5 -1
  74. conan-server-2.3.0/conans/requirements_runner.txt +2 -0
  75. {conan-server-2.2.2 → conan-server-2.3.0}/conans/test/conftest.py +1 -1
  76. {conan-server-2.2.2 → conan-server-2.3.0}/conans/test/utils/file_server.py +1 -1
  77. {conan-server-2.2.2 → conan-server-2.3.0}/conans/test/utils/tools.py +3 -1
  78. {conan-server-2.2.2 → conan-server-2.3.0}/conans/util/windows.py +3 -4
  79. conan-server-2.2.2/conan/cli/formatters/graph/info_graph_dot.py +0 -9
  80. {conan-server-2.2.2 → conan-server-2.3.0}/LICENSE.md +0 -0
  81. {conan-server-2.2.2 → conan-server-2.3.0}/MANIFEST.in +0 -0
  82. {conan-server-2.2.2 → conan-server-2.3.0}/conan/__init__.py +0 -0
  83. {conan-server-2.2.2 → conan-server-2.3.0}/conan/api/__init__.py +0 -0
  84. {conan-server-2.2.2 → conan-server-2.3.0}/conan/api/conan_api.py +0 -0
  85. {conan-server-2.2.2 → conan-server-2.3.0}/conan/api/output.py +0 -0
  86. {conan-server-2.2.2 → conan-server-2.3.0}/conan/api/subapi/__init__.py +0 -0
  87. {conan-server-2.2.2 → conan-server-2.3.0}/conan/api/subapi/command.py +0 -0
  88. {conan-server-2.2.2 → conan-server-2.3.0}/conan/api/subapi/config.py +0 -0
  89. {conan-server-2.2.2 → conan-server-2.3.0}/conan/api/subapi/download.py +0 -0
  90. {conan-server-2.2.2 → conan-server-2.3.0}/conan/api/subapi/export.py +0 -0
  91. {conan-server-2.2.2 → conan-server-2.3.0}/conan/api/subapi/graph.py +0 -0
  92. {conan-server-2.2.2 → conan-server-2.3.0}/conan/api/subapi/install.py +0 -0
  93. {conan-server-2.2.2 → conan-server-2.3.0}/conan/api/subapi/list.py +0 -0
  94. {conan-server-2.2.2 → conan-server-2.3.0}/conan/api/subapi/lockfile.py +0 -0
  95. {conan-server-2.2.2 → conan-server-2.3.0}/conan/api/subapi/new.py +0 -0
  96. {conan-server-2.2.2 → conan-server-2.3.0}/conan/api/subapi/profiles.py +0 -0
  97. {conan-server-2.2.2 → conan-server-2.3.0}/conan/api/subapi/remove.py +0 -0
  98. {conan-server-2.2.2 → conan-server-2.3.0}/conan/api/subapi/search.py +0 -0
  99. {conan-server-2.2.2 → conan-server-2.3.0}/conan/api/subapi/upload.py +0 -0
  100. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/__init__.py +0 -0
  101. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/args.py +0 -0
  102. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/command.py +0 -0
  103. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/commands/__init__.py +0 -0
  104. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/commands/build.py +0 -0
  105. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/commands/cache.py +0 -0
  106. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/commands/config.py +0 -0
  107. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/commands/download.py +0 -0
  108. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/commands/editable.py +0 -0
  109. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/commands/export.py +0 -0
  110. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/commands/export_pkg.py +0 -0
  111. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/commands/inspect.py +0 -0
  112. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/commands/install.py +0 -0
  113. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/commands/list.py +0 -0
  114. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/commands/lock.py +0 -0
  115. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/commands/remote.py +0 -0
  116. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/commands/remove.py +0 -0
  117. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/commands/search.py +0 -0
  118. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/commands/source.py +0 -0
  119. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/commands/test.py +0 -0
  120. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/commands/upload.py +0 -0
  121. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/exit_codes.py +0 -0
  122. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/formatters/__init__.py +0 -0
  123. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/formatters/graph/__init__.py +0 -0
  124. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/formatters/graph/graph_info_text.py +0 -0
  125. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/formatters/list/__init__.py +0 -0
  126. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/formatters/list/binary_html_table.py +0 -0
  127. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/formatters/list/list.py +0 -0
  128. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/formatters/list/search_table_html.py +0 -0
  129. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/printers/__init__.py +0 -0
  130. {conan-server-2.2.2 → conan-server-2.3.0}/conan/cli/printers/graph.py +0 -0
  131. {conan-server-2.2.2 → conan-server-2.3.0}/conan/errors.py +0 -0
  132. {conan-server-2.2.2 → conan-server-2.3.0}/conan/internal/__init__.py +0 -0
  133. {conan-server-2.2.2 → conan-server-2.3.0}/conan/internal/api/__init__.py +0 -0
  134. {conan-server-2.2.2 → conan-server-2.3.0}/conan/internal/api/new/__init__.py +0 -0
  135. {conan-server-2.2.2 → conan-server-2.3.0}/conan/internal/api/new/alias_new.py +0 -0
  136. {conan-server-2.2.2 → conan-server-2.3.0}/conan/internal/api/new/basic.py +0 -0
  137. {conan-server-2.2.2 → conan-server-2.3.0}/conan/internal/api/new/bazel_exe.py +0 -0
  138. {conan-server-2.2.2 → conan-server-2.3.0}/conan/internal/api/new/bazel_lib.py +0 -0
  139. {conan-server-2.2.2 → conan-server-2.3.0}/conan/internal/api/new/cmake_exe.py +0 -0
  140. {conan-server-2.2.2 → conan-server-2.3.0}/conan/internal/api/new/cmake_lib.py +0 -0
  141. {conan-server-2.2.2 → conan-server-2.3.0}/conan/internal/api/new/local_recipes_index.py +0 -0
  142. {conan-server-2.2.2 → conan-server-2.3.0}/conan/internal/api/new/meson_exe.py +0 -0
  143. {conan-server-2.2.2 → conan-server-2.3.0}/conan/internal/api/new/meson_lib.py +0 -0
  144. {conan-server-2.2.2 → conan-server-2.3.0}/conan/internal/api/new/msbuild_exe.py +0 -0
  145. {conan-server-2.2.2 → conan-server-2.3.0}/conan/internal/api/new/msbuild_lib.py +0 -0
  146. {conan-server-2.2.2 → conan-server-2.3.0}/conan/internal/cache/__init__.py +0 -0
  147. {conan-server-2.2.2 → conan-server-2.3.0}/conan/internal/cache/cache.py +0 -0
  148. {conan-server-2.2.2 → conan-server-2.3.0}/conan/internal/cache/conan_reference_layout.py +0 -0
  149. {conan-server-2.2.2 → conan-server-2.3.0}/conan/internal/cache/db/__init__.py +0 -0
  150. {conan-server-2.2.2 → conan-server-2.3.0}/conan/internal/cache/db/cache_database.py +0 -0
  151. {conan-server-2.2.2 → conan-server-2.3.0}/conan/internal/cache/db/table.py +0 -0
  152. {conan-server-2.2.2 → conan-server-2.3.0}/conan/internal/cache/home_paths.py +0 -0
  153. {conan-server-2.2.2 → conan-server-2.3.0}/conan/internal/conan_app.py +0 -0
  154. {conan-server-2.2.2 → conan-server-2.3.0}/conan/internal/deploy.py +0 -0
  155. {conan-server-2.2.2 → conan-server-2.3.0}/conan/internal/integrity_check.py +0 -0
  156. {conan-server-2.2.2 → conan-server-2.3.0}/conan/internal/internal_tools.py +0 -0
  157. {conan-server-2.2.2 → conan-server-2.3.0}/conan/internal/upload_metadata.py +0 -0
  158. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/__init__.py +0 -0
  159. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/android/__init__.py +0 -0
  160. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/android/utils.py +0 -0
  161. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/apple/__init__.py +0 -0
  162. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/apple/xcodebuild.py +0 -0
  163. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/apple/xcodedeps.py +0 -0
  164. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/apple/xcodetoolchain.py +0 -0
  165. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/build/__init__.py +0 -0
  166. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/build/cppstd.py +0 -0
  167. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/build/cpu.py +0 -0
  168. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/build/cross_building.py +0 -0
  169. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/build/flags.py +0 -0
  170. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/build/stdcpp_library.py +0 -0
  171. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/cmake/__init__.py +0 -0
  172. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/cmake/cmakedeps/__init__.py +0 -0
  173. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/cmake/cmakedeps/templates/__init__.py +0 -0
  174. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/cmake/cmakedeps/templates/config_version.py +0 -0
  175. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/cmake/cmakedeps/templates/macros.py +0 -0
  176. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/cmake/cmakedeps/templates/targets.py +0 -0
  177. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/cmake/layout.py +0 -0
  178. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/cmake/toolchain/__init__.py +0 -0
  179. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/cmake/utils.py +0 -0
  180. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/env/__init__.py +0 -0
  181. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/env/environment.py +0 -0
  182. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/env/virtualbuildenv.py +0 -0
  183. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/env/virtualrunenv.py +0 -0
  184. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/files/__init__.py +0 -0
  185. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/files/conandata.py +0 -0
  186. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/files/files.py +0 -0
  187. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/files/packager.py +0 -0
  188. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/files/patches.py +0 -0
  189. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/files/symlinks/__init__.py +0 -0
  190. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/files/symlinks/symlinks.py +0 -0
  191. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/gnu/autotoolsdeps.py +0 -0
  192. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/gnu/gnudeps_flags.py +0 -0
  193. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/gnu/makedeps.py +0 -0
  194. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/gnu/pkgconfig.py +0 -0
  195. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/gnu/pkgconfigdeps.py +0 -0
  196. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/google/__init__.py +0 -0
  197. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/google/bazel.py +0 -0
  198. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/google/layout.py +0 -0
  199. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/google/toolchain.py +0 -0
  200. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/intel/__init__.py +0 -0
  201. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/intel/intel_cc.py +0 -0
  202. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/layout/__init__.py +0 -0
  203. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/meson/__init__.py +0 -0
  204. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/meson/helpers.py +0 -0
  205. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/microsoft/__init__.py +0 -0
  206. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/microsoft/layout.py +0 -0
  207. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/microsoft/msbuild.py +0 -0
  208. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/microsoft/msbuilddeps.py +0 -0
  209. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/microsoft/nmakedeps.py +0 -0
  210. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/microsoft/nmaketoolchain.py +0 -0
  211. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/microsoft/subsystems.py +0 -0
  212. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/microsoft/toolchain.py +0 -0
  213. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/premake/__init__.py +0 -0
  214. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/premake/premake.py +0 -0
  215. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/premake/premakedeps.py +0 -0
  216. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/qbs/__init__.py +0 -0
  217. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/qbs/qbs.py +0 -0
  218. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/qbs/qbsprofile.py +0 -0
  219. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/scm/__init__.py +0 -0
  220. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/scons/__init__.py +0 -0
  221. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/scons/sconsdeps.py +0 -0
  222. {conan-server-2.2.2 → conan-server-2.3.0}/conan/tools/system/__init__.py +0 -0
  223. {conan-server-2.2.2 → conan-server-2.3.0}/conan_server.egg-info/dependency_links.txt +0 -0
  224. {conan-server-2.2.2 → conan-server-2.3.0}/conan_server.egg-info/entry_points.txt +0 -0
  225. {conan-server-2.2.2 → conan-server-2.3.0}/conan_server.egg-info/top_level.txt +0 -0
  226. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/__init__.py +0 -0
  227. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/cache/__init__.py +0 -0
  228. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/cache/cache.py +0 -0
  229. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/cache/editable.py +0 -0
  230. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/cmd/__init__.py +0 -0
  231. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/conanfile/__init__.py +0 -0
  232. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/conanfile/build.py +0 -0
  233. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/conanfile/configure.py +0 -0
  234. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/conanfile/implementations.py +0 -0
  235. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/conanfile/package.py +0 -0
  236. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/conf/detect.py +0 -0
  237. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/conf/detect_vs.py +0 -0
  238. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/conf/required_version.py +0 -0
  239. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/downloaders/__init__.py +0 -0
  240. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/downloaders/caching_file_downloader.py +0 -0
  241. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/downloaders/download_cache.py +0 -0
  242. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/graph/__init__.py +0 -0
  243. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/graph/build_mode.py +0 -0
  244. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/graph/compatibility.py +0 -0
  245. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/graph/graph.py +0 -0
  246. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/graph/graph_binaries.py +0 -0
  247. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/graph/graph_builder.py +0 -0
  248. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/graph/install_graph.py +0 -0
  249. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/graph/provides.py +0 -0
  250. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/graph/proxy.py +0 -0
  251. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/graph/python_requires.py +0 -0
  252. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/graph/range_resolver.py +0 -0
  253. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/hook_manager.py +0 -0
  254. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/installer.py +0 -0
  255. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/loader.py +0 -0
  256. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/loader_txt.py +0 -0
  257. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/migrations.py +0 -0
  258. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/pkg_sign.py +0 -0
  259. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/remote_manager.py +0 -0
  260. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/rest/__init__.py +0 -0
  261. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/rest/auth_manager.py +0 -0
  262. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/rest/client_routes.py +0 -0
  263. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/rest/file_uploader.py +0 -0
  264. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/rest/rest_client.py +0 -0
  265. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/rest/rest_client_v2.py +0 -0
  266. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/rest_client_local_recipe_index.py +0 -0
  267. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/source.py +0 -0
  268. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/store/__init__.py +0 -0
  269. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/subsystems.py +0 -0
  270. {conan-server-2.2.2 → conan-server-2.3.0}/conans/client/userio.py +0 -0
  271. {conan-server-2.2.2 → conan-server-2.3.0}/conans/conan.py +0 -0
  272. {conan-server-2.2.2 → conan-server-2.3.0}/conans/conan_server.py +0 -0
  273. {conan-server-2.2.2 → conan-server-2.3.0}/conans/errors.py +0 -0
  274. {conan-server-2.2.2 → conan-server-2.3.0}/conans/migrations.py +0 -0
  275. {conan-server-2.2.2 → conan-server-2.3.0}/conans/model/__init__.py +0 -0
  276. {conan-server-2.2.2 → conan-server-2.3.0}/conans/model/build_info.py +0 -0
  277. {conan-server-2.2.2 → conan-server-2.3.0}/conans/model/conanfile_interface.py +0 -0
  278. {conan-server-2.2.2 → conan-server-2.3.0}/conans/model/graph_lock.py +0 -0
  279. {conan-server-2.2.2 → conan-server-2.3.0}/conans/model/info.py +0 -0
  280. {conan-server-2.2.2 → conan-server-2.3.0}/conans/model/layout.py +0 -0
  281. {conan-server-2.2.2 → conan-server-2.3.0}/conans/model/manifest.py +0 -0
  282. {conan-server-2.2.2 → conan-server-2.3.0}/conans/model/options.py +0 -0
  283. {conan-server-2.2.2 → conan-server-2.3.0}/conans/model/package_ref.py +0 -0
  284. {conan-server-2.2.2 → conan-server-2.3.0}/conans/model/pkg_type.py +0 -0
  285. {conan-server-2.2.2 → conan-server-2.3.0}/conans/model/requires.py +0 -0
  286. {conan-server-2.2.2 → conan-server-2.3.0}/conans/model/rest_routes.py +0 -0
  287. {conan-server-2.2.2 → conan-server-2.3.0}/conans/model/version.py +0 -0
  288. {conan-server-2.2.2 → conan-server-2.3.0}/conans/requirements.txt +0 -0
  289. {conan-server-2.2.2 → conan-server-2.3.0}/conans/requirements_server.txt +0 -0
  290. {conan-server-2.2.2 → conan-server-2.3.0}/conans/search/__init__.py +0 -0
  291. {conan-server-2.2.2 → conan-server-2.3.0}/conans/search/query_parse.py +0 -0
  292. {conan-server-2.2.2 → conan-server-2.3.0}/conans/search/search.py +0 -0
  293. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/__init__.py +0 -0
  294. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/conf/__init__.py +0 -0
  295. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/conf/default_server_conf.py +0 -0
  296. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/crypto/__init__.py +0 -0
  297. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/crypto/jwt/__init__.py +0 -0
  298. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/crypto/jwt/jwt_credentials_manager.py +0 -0
  299. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/crypto/jwt/jwt_manager.py +0 -0
  300. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/launcher.py +0 -0
  301. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/migrate.py +0 -0
  302. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/migrations.py +0 -0
  303. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/plugin_loader.py +0 -0
  304. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/rest/__init__.py +0 -0
  305. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/rest/api_v2.py +0 -0
  306. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/rest/bottle_plugins/__init__.py +0 -0
  307. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/rest/bottle_plugins/authorization_header.py +0 -0
  308. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/rest/bottle_plugins/http_basic_authentication.py +0 -0
  309. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/rest/bottle_plugins/jwt_authentication.py +0 -0
  310. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/rest/bottle_plugins/return_handler.py +0 -0
  311. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/rest/bottle_routes.py +0 -0
  312. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/rest/controller/__init__.py +0 -0
  313. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/rest/controller/v2/__init__.py +0 -0
  314. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/rest/controller/v2/conan.py +0 -0
  315. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/rest/controller/v2/delete.py +0 -0
  316. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/rest/controller/v2/ping.py +0 -0
  317. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/rest/controller/v2/revisions.py +0 -0
  318. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/rest/controller/v2/search.py +0 -0
  319. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/rest/controller/v2/users.py +0 -0
  320. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/rest/server.py +0 -0
  321. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/revision_list.py +0 -0
  322. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/server_launcher.py +0 -0
  323. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/service/__init__.py +0 -0
  324. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/service/authorize.py +0 -0
  325. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/service/mime.py +0 -0
  326. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/service/user_service.py +0 -0
  327. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/service/v2/__init__.py +0 -0
  328. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/service/v2/search.py +0 -0
  329. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/service/v2/service_v2.py +0 -0
  330. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/store/__init__.py +0 -0
  331. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/store/disk_adapter.py +0 -0
  332. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/store/server_store.py +0 -0
  333. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/utils/__init__.py +0 -0
  334. {conan-server-2.2.2 → conan-server-2.3.0}/conans/server/utils/files.py +0 -0
  335. {conan-server-2.2.2 → conan-server-2.3.0}/conans/test/__init__.py +0 -0
  336. {conan-server-2.2.2 → conan-server-2.3.0}/conans/test/assets/__init__.py +0 -0
  337. {conan-server-2.2.2 → conan-server-2.3.0}/conans/test/assets/autotools.py +0 -0
  338. {conan-server-2.2.2 → conan-server-2.3.0}/conans/test/assets/cmake.py +0 -0
  339. {conan-server-2.2.2 → conan-server-2.3.0}/conans/test/assets/genconanfile.py +0 -0
  340. {conan-server-2.2.2 → conan-server-2.3.0}/conans/test/assets/pkg_cmake.py +0 -0
  341. {conan-server-2.2.2 → conan-server-2.3.0}/conans/test/assets/sources.py +0 -0
  342. {conan-server-2.2.2 → conan-server-2.3.0}/conans/test/assets/visual_project_files.py +0 -0
  343. {conan-server-2.2.2 → conan-server-2.3.0}/conans/test/utils/__init__.py +0 -0
  344. {conan-server-2.2.2 → conan-server-2.3.0}/conans/test/utils/artifactory.py +0 -0
  345. {conan-server-2.2.2 → conan-server-2.3.0}/conans/test/utils/mocks.py +0 -0
  346. {conan-server-2.2.2 → conan-server-2.3.0}/conans/test/utils/profiles.py +0 -0
  347. {conan-server-2.2.2 → conan-server-2.3.0}/conans/test/utils/scm.py +0 -0
  348. {conan-server-2.2.2 → conan-server-2.3.0}/conans/test/utils/server_launcher.py +0 -0
  349. {conan-server-2.2.2 → conan-server-2.3.0}/conans/test/utils/test_files.py +0 -0
  350. {conan-server-2.2.2 → conan-server-2.3.0}/conans/util/__init__.py +0 -0
  351. {conan-server-2.2.2 → conan-server-2.3.0}/conans/util/config_parser.py +0 -0
  352. {conan-server-2.2.2 → conan-server-2.3.0}/conans/util/dates.py +0 -0
  353. {conan-server-2.2.2 → conan-server-2.3.0}/conans/util/encrypt.py +0 -0
  354. {conan-server-2.2.2 → conan-server-2.3.0}/conans/util/env.py +0 -0
  355. {conan-server-2.2.2 → conan-server-2.3.0}/conans/util/files.py +0 -0
  356. {conan-server-2.2.2 → conan-server-2.3.0}/conans/util/locks.py +0 -0
  357. {conan-server-2.2.2 → conan-server-2.3.0}/conans/util/runners.py +0 -0
  358. {conan-server-2.2.2 → conan-server-2.3.0}/conans/util/sha.py +0 -0
  359. {conan-server-2.2.2 → conan-server-2.3.0}/conans/util/thread.py +0 -0
  360. {conan-server-2.2.2 → conan-server-2.3.0}/pyproject.toml +0 -0
  361. {conan-server-2.2.2 → conan-server-2.3.0}/setup.cfg +0 -0
  362. {conan-server-2.2.2 → conan-server-2.3.0}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: conan-server
3
- Version: 2.2.2
3
+ Version: 2.3.0
4
4
  Summary: Conan Server of Conan C/C++ package manager
5
5
  Home-page: https://conan.io
6
6
  Author: JFrog LTD
@@ -43,12 +43,6 @@ Description: <picture>
43
43
  This is the **developer/maintainer** documentation. For user documentation, go to https://docs.conan.io
44
44
 
45
45
 
46
- | **develop2** |
47
- |-------------------------|
48
- | [![Build Status Develop](https://ci.conan.io/buildStatus/icon?job=ConanTestSuite/develop)](https://ci.conan.io/blue/organizations/jenkins/ConanTestSuitev2/activity) |
49
-
50
-
51
-
52
46
  ## Setup
53
47
 
54
48
  You can run Conan from source in Windows, MacOS, and Linux:
@@ -87,9 +81,9 @@ Description: <picture>
87
81
 
88
82
 
89
83
  Feedback and contribution are always welcome in this project.
90
- Please read our [contributing guide](https://github.com/conan-io/conan/blob/develop/.github/CONTRIBUTING.md).
84
+ Please read our [contributing guide](https://github.com/conan-io/conan/blob/develop2/.github/CONTRIBUTING.md).
91
85
  Also, if you plan to contribute, please add some testing for your changes. You can read the [Conan
92
- tests guidelines section](https://github.com/conan-io/conan/blob/develop/conans/test/README.md) for
86
+ tests guidelines section](https://github.com/conan-io/conan/blob/develop2/conans/test/README.md) for
93
87
  some advice on how to write tests for Conan.
94
88
 
95
89
  ### Running the tests
@@ -141,7 +135,7 @@ Description: <picture>
141
135
  To run specific tests, you can specify the test name too, something like:
142
136
 
143
137
  ```bash
144
- $ python -m pytest conans/test/unittests/client/cmd/export_test.py::ExportTest::test_export_warning -s
138
+ $ python -m pytest conans/test/functional/command/export_test.py::TestRevisionModeSCM::test_revision_mode_scm -s
145
139
  ```
146
140
 
147
141
  The `-s` argument can be useful to see some output that otherwise is captured by *pytest*.
@@ -35,12 +35,6 @@ Conan is a package manager for C and C++ developers:
35
35
  This is the **developer/maintainer** documentation. For user documentation, go to https://docs.conan.io
36
36
 
37
37
 
38
- | **develop2** |
39
- |-------------------------|
40
- | [![Build Status Develop](https://ci.conan.io/buildStatus/icon?job=ConanTestSuite/develop)](https://ci.conan.io/blue/organizations/jenkins/ConanTestSuitev2/activity) |
41
-
42
-
43
-
44
38
  ## Setup
45
39
 
46
40
  You can run Conan from source in Windows, MacOS, and Linux:
@@ -79,9 +73,9 @@ You can run Conan from source in Windows, MacOS, and Linux:
79
73
 
80
74
 
81
75
  Feedback and contribution are always welcome in this project.
82
- Please read our [contributing guide](https://github.com/conan-io/conan/blob/develop/.github/CONTRIBUTING.md).
76
+ Please read our [contributing guide](https://github.com/conan-io/conan/blob/develop2/.github/CONTRIBUTING.md).
83
77
  Also, if you plan to contribute, please add some testing for your changes. You can read the [Conan
84
- tests guidelines section](https://github.com/conan-io/conan/blob/develop/conans/test/README.md) for
78
+ tests guidelines section](https://github.com/conan-io/conan/blob/develop2/conans/test/README.md) for
85
79
  some advice on how to write tests for Conan.
86
80
 
87
81
  ### Running the tests
@@ -133,7 +127,7 @@ OK
133
127
  To run specific tests, you can specify the test name too, something like:
134
128
 
135
129
  ```bash
136
- $ python -m pytest conans/test/unittests/client/cmd/export_test.py::ExportTest::test_export_warning -s
130
+ $ python -m pytest conans/test/functional/command/export_test.py::TestRevisionModeSCM::test_revision_mode_scm -s
137
131
  ```
138
132
 
139
133
  The `-s` argument can be useful to see some output that otherwise is captured by *pytest*.
@@ -47,6 +47,9 @@ class MultiPackagesList:
47
47
  def __init__(self):
48
48
  self.lists = {}
49
49
 
50
+ def setdefault(self, key, default):
51
+ return self.lists.setdefault(key, default)
52
+
50
53
  def __getitem__(self, name):
51
54
  try:
52
55
  return self.lists[name]
@@ -63,6 +66,10 @@ class MultiPackagesList:
63
66
  return {k: v.serialize() if isinstance(v, PackagesList) else v
64
67
  for k, v in self.lists.items()}
65
68
 
69
+ def merge(self, other):
70
+ for k, v in other.lists.items():
71
+ self.lists.setdefault(k, PackagesList()).merge(v)
72
+
66
73
  @staticmethod
67
74
  def load(file):
68
75
  content = json.loads(load(file))
@@ -76,9 +83,18 @@ class MultiPackagesList:
76
83
  pkglist.lists = result
77
84
  return pkglist
78
85
 
86
+ @staticmethod
87
+ def from_graph(graph, graph_recipes=None, graph_binaries=None):
88
+ graph = {"graph": graph.serialize()}
89
+ return MultiPackagesList._define_graph(graph, graph_recipes, graph_binaries)
90
+
79
91
  @staticmethod
80
92
  def load_graph(graphfile, graph_recipes=None, graph_binaries=None):
81
93
  graph = json.loads(load(graphfile))
94
+ return MultiPackagesList._define_graph(graph, graph_recipes, graph_binaries)
95
+
96
+ @staticmethod
97
+ def _define_graph(graph, graph_recipes=None, graph_binaries=None):
82
98
  pkglist = MultiPackagesList()
83
99
  cache_list = PackagesList()
84
100
  if graph_recipes is None and graph_binaries is None:
@@ -143,6 +159,16 @@ class PackagesList:
143
159
  def __init__(self):
144
160
  self.recipes = {}
145
161
 
162
+ def merge(self, other):
163
+ def recursive_dict_update(d, u): # TODO: repeated from conandata.py
164
+ for k, v in u.items():
165
+ if isinstance(v, dict):
166
+ d[k] = recursive_dict_update(d.get(k, {}), v)
167
+ else:
168
+ d[k] = v
169
+ return d
170
+ recursive_dict_update(self.recipes, other.recipes)
171
+
146
172
  def split(self):
147
173
  """
148
174
  Returns a list of PackageList, splitted one per reference.
@@ -155,6 +155,8 @@ class CacheAPI:
155
155
  tgz.close()
156
156
 
157
157
  def restore(self, path):
158
+ if not os.path.isfile(path):
159
+ raise ConanException(f"Restore archive doesn't exist in {path}")
158
160
  with open(path, mode='rb') as file_handler:
159
161
  the_tar = tarfile.open(fileobj=file_handler)
160
162
  fileobj = the_tar.extractfile("pkglist.json")
@@ -162,32 +164,49 @@ class CacheAPI:
162
164
  the_tar.extractall(path=self.conan_api.cache_folder)
163
165
  the_tar.close()
164
166
 
167
+ # After unzipping the files, we need to update the DB that references these files
165
168
  out = ConanOutput()
166
169
  package_list = PackagesList.deserialize(json.loads(pkglist))
167
170
  cache = ClientCache(self.conan_api.cache_folder, self.conan_api.config.global_conf)
168
171
  for ref, ref_bundle in package_list.refs().items():
169
172
  ref.timestamp = revision_timestamp_now()
170
173
  ref_bundle["timestamp"] = ref.timestamp
171
- recipe_layout = cache.get_or_create_ref_layout(ref)
174
+ recipe_layout = cache.get_or_create_ref_layout(ref) # DB folder entry
172
175
  recipe_folder = ref_bundle["recipe_folder"]
173
176
  rel_path = os.path.relpath(recipe_layout.base_folder, cache.cache_folder)
174
177
  rel_path = rel_path.replace("\\", "/")
178
+ # In the case of recipes, they are always "in place", so just checking it
175
179
  assert rel_path == recipe_folder, f"{rel_path}!={recipe_folder}"
176
180
  out.info(f"Restore: {ref} in {recipe_folder}")
177
181
  for pref, pref_bundle in package_list.prefs(ref, ref_bundle).items():
178
182
  pref.timestamp = revision_timestamp_now()
179
183
  pref_bundle["timestamp"] = pref.timestamp
180
- pkg_layout = cache.get_or_create_pkg_layout(pref)
181
- pkg_folder = pref_bundle["package_folder"]
182
- out.info(f"Restore: {pref} in {pkg_folder}")
183
- # We need to put the package in the final location in the cache
184
- shutil.move(os.path.join(cache.cache_folder, pkg_folder), pkg_layout.package())
185
- metadata_folder = pref_bundle.get("metadata_folder")
186
- if metadata_folder:
187
- out.info(f"Restore: {pref} metadata in {metadata_folder}")
188
- # We need to put the package in the final location in the cache
189
- shutil.move(os.path.join(cache.cache_folder, metadata_folder),
190
- pkg_layout.metadata())
184
+ pkg_layout = cache.get_or_create_pkg_layout(pref) # DB Folder entry
185
+ unzipped_pkg_folder = pref_bundle["package_folder"]
186
+ out.info(f"Restore: {pref} in {unzipped_pkg_folder}")
187
+ # If the DB folder entry is different to the disk unzipped one, we need to move it
188
+ # This happens for built (not downloaded) packages in the source "conan cache save"
189
+ db_pkg_folder = os.path.relpath(pkg_layout.package(), cache.cache_folder)
190
+ db_pkg_folder = db_pkg_folder.replace("\\", "/")
191
+ if db_pkg_folder != unzipped_pkg_folder:
192
+ # If a previous package exists, like a previous restore, then remove it
193
+ if os.path.exists(pkg_layout.package()):
194
+ shutil.rmtree(pkg_layout.package())
195
+ shutil.move(os.path.join(cache.cache_folder, unzipped_pkg_folder),
196
+ pkg_layout.package())
197
+ pref_bundle["package_folder"] = db_pkg_folder
198
+ unzipped_metadata_folder = pref_bundle.get("metadata_folder")
199
+ if unzipped_metadata_folder:
200
+ out.info(f"Restore: {pref} metadata in {unzipped_metadata_folder}")
201
+ db_metadata_folder = os.path.relpath(pkg_layout.metadata(), cache.cache_folder)
202
+ db_metadata_folder = db_metadata_folder.replace("\\", "/")
203
+ if db_metadata_folder != unzipped_metadata_folder:
204
+ # We need to put the package in the final location in the cache
205
+ if os.path.exists(pkg_layout.metadata()):
206
+ shutil.rmtree(pkg_layout.metadata())
207
+ shutil.move(os.path.join(cache.cache_folder, unzipped_metadata_folder),
208
+ pkg_layout.metadata())
209
+ pref_bundle["metadata_folder"] = db_metadata_folder
191
210
 
192
211
  return package_list
193
212
 
@@ -1,5 +1,6 @@
1
1
  import os
2
2
 
3
+ from conan.api.output import ConanOutput
3
4
  from conan.cli import make_abs_path
4
5
  from conan.internal.conan_app import ConanApp
5
6
  from conans.client.cache.editable import EditablePackages
@@ -60,7 +61,8 @@ class LocalAPI:
60
61
 
61
62
  def editable_remove(self, path=None, requires=None, cwd=None):
62
63
  if path:
63
- path = self._conan_api.local.get_conanfile_path(path, cwd, py=True)
64
+ path = make_abs_path(path, cwd)
65
+ path = os.path.join(path, "conanfile.py")
64
66
  return self.editable_packages.remove(path, requires)
65
67
 
66
68
  def editable_list(self):
@@ -257,7 +257,10 @@ def _load(remotes_file):
257
257
  _save(remotes_file, [remote])
258
258
  return [remote]
259
259
 
260
- data = json.loads(load(remotes_file))
260
+ try:
261
+ data = json.loads(load(remotes_file))
262
+ except Exception as e:
263
+ raise ConanException(f"Error loading JSON remotes file '{remotes_file}': {e}")
261
264
  result = []
262
265
  for r in data.get("remotes", []):
263
266
  remote = Remote(r["name"], r["url"], r["verify_ssl"], r.get("disabled", False),
@@ -236,6 +236,14 @@ class Cli:
236
236
  return ERROR_UNEXPECTED
237
237
 
238
238
 
239
+ def _warn_python_version():
240
+ version = sys.version_info
241
+ if version.minor == 6:
242
+ ConanOutput().warning("Python 3.6 is end-of-life since 2021. "
243
+ "Conan future versions will drop support for it, "
244
+ "please upgrade Python", warn_tag="deprecated")
245
+
246
+
239
247
  def main(args):
240
248
  """ main entry point of the conan application, using a Command to
241
249
  parse parameters
@@ -281,6 +289,7 @@ def main(args):
281
289
  error = SUCCESS
282
290
  try:
283
291
  cli.run(args)
292
+ _warn_python_version()
284
293
  except BaseException as e:
285
294
  error = cli.exception_exit_error(e)
286
295
  sys.exit(error)
@@ -9,6 +9,7 @@ from conan.cli.formatters.graph import format_graph_json
9
9
  from conan.cli.printers import print_profiles
10
10
  from conan.cli.printers.graph import print_graph_packages, print_graph_basic
11
11
  from conan.errors import ConanException
12
+ from conans.client.graph.graph import BINARY_BUILD
12
13
  from conans.util.files import mkdir
13
14
 
14
15
 
@@ -26,14 +27,20 @@ def create(conan_api, parser, *args):
26
27
  parser.add_argument("-tf", "--test-folder", action=OnceArgument,
27
28
  help='Alternative test folder name. By default it is "test_package". '
28
29
  'Use "" to skip the test stage')
30
+ parser.add_argument("-tm", "--test-missing", action='store_true', default=False,
31
+ help='Run the test_package checks only if the package is built from source'
32
+ ' but not if it already existed (using --build=missing)')
29
33
  parser.add_argument("-bt", "--build-test", action="append",
30
34
  help="Same as '--build' but only for the test_package requires. By default"
31
35
  " if not specified it will take the '--build' value if specified")
36
+ raw_args = args[0]
32
37
  args = parser.parse_args(*args)
33
38
 
39
+ if args.test_missing and args.test_folder == "":
40
+ raise ConanException('--test-folder="" is incompatible with --test-missing')
41
+
34
42
  cwd = os.getcwd()
35
43
  path = conan_api.local.get_conanfile_path(args.path, cwd, py=True)
36
- test_conanfile_path = _get_test_conanfile_path(args.test_folder, path)
37
44
  overrides = eval(args.lockfile_overrides) if args.lockfile_overrides else None
38
45
  lockfile = conan_api.lockfile.get_lockfile(lockfile=args.lockfile,
39
46
  conanfile_path=path,
@@ -56,6 +63,25 @@ def create(conan_api, parser, *args):
56
63
  lockfile = conan_api.lockfile.update_lockfile_export(lockfile, conanfile, ref, is_build)
57
64
 
58
65
  print_profiles(profile_host, profile_build)
66
+ if profile_host.runner and not os.environ.get("CONAN_RUNNER_ENVIRONMENT"):
67
+ from conan.internal.runner.docker import DockerRunner
68
+ from conan.internal.runner.ssh import SSHRunner
69
+ from conan.internal.runner.wsl import WSLRunner
70
+ try:
71
+ runner_type = profile_host.runner['type'].lower()
72
+ except KeyError:
73
+ raise ConanException(f"Invalid runner configuration. 'type' must be defined")
74
+ runner_instances_map = {
75
+ 'docker': DockerRunner,
76
+ # 'ssh': SSHRunner,
77
+ # 'wsl': WSLRunner,
78
+ }
79
+ try:
80
+ runner_instance = runner_instances_map[runner_type]
81
+ except KeyError:
82
+ raise ConanException(f"Invalid runner type '{runner_type}'. Allowed values: {', '.join(runner_instances_map.keys())}")
83
+ return runner_instance(conan_api, 'create', profile_host, profile_build, args, raw_args).run()
84
+
59
85
  if args.build is not None and args.build_test is None:
60
86
  args.build_test = args.build
61
87
 
@@ -91,6 +117,14 @@ def create(conan_api, parser, *args):
91
117
  lockfile = conan_api.lockfile.update_lockfile(lockfile, deps_graph, args.lockfile_packages,
92
118
  clean=args.lockfile_clean)
93
119
 
120
+ test_package_folder = getattr(conanfile, "test_package_folder", None) \
121
+ if args.test_folder is None else args.test_folder
122
+ test_conanfile_path = _get_test_conanfile_path(test_package_folder, path)
123
+ # If the user provide --test-missing and the binary was not built from source, skip test_package
124
+ if args.test_missing and deps_graph.root.dependencies\
125
+ and deps_graph.root.dependencies[0].dst.binary != BINARY_BUILD:
126
+ test_conanfile_path = None # disable it
127
+
94
128
  if test_conanfile_path:
95
129
  # TODO: We need arguments for:
96
130
  # - decide update policy "--test_package_update"
@@ -14,9 +14,8 @@ from conan.errors import ConanException
14
14
  from conan.internal.deploy import do_deploys
15
15
  from conans.client.graph.graph import BINARY_MISSING
16
16
  from conans.client.graph.install_graph import InstallGraph
17
- from conans.errors import ConanConnectionError, NotFoundException
17
+ from conans.errors import NotFoundException
18
18
  from conans.model.recipe_ref import ref_matches, RecipeReference
19
- from conans.model.version_range import VersionRange
20
19
 
21
20
 
22
21
  def explain_formatter_text(data):
@@ -214,10 +213,7 @@ def graph_info(conan_api, parser, subparser, *args):
214
213
  remotes, args.update,
215
214
  check_updates=args.check_updates)
216
215
  print_graph_basic(deps_graph)
217
- if deps_graph.error:
218
- ConanOutput().info("Graph error", Color.BRIGHT_RED)
219
- ConanOutput().info(" {}".format(deps_graph.error), Color.BRIGHT_RED)
220
- else:
216
+ if not deps_graph.error:
221
217
  conan_api.graph.analyze_binaries(deps_graph, args.build, remotes=remotes, update=args.update,
222
218
  lockfile=lockfile)
223
219
  print_graph_packages(deps_graph)
@@ -18,7 +18,7 @@ def new(conan_api, parser, *args):
18
18
  "either a predefined built-in or a user-provided one. "
19
19
  "Available built-in templates: basic, cmake_lib, cmake_exe, "
20
20
  "meson_lib, meson_exe, msbuild_lib, msbuild_exe, bazel_lib, bazel_exe, "
21
- "autotools_lib, autotools_exe, local_recipes_index"
21
+ "autotools_lib, autotools_exe, local_recipes_index. "
22
22
  "E.g. 'conan new cmake_lib -d name=hello -d version=0.1'. "
23
23
  "You can define your own templates too by inputting an absolute path "
24
24
  "as your template, or a path relative to your conan home folder."
@@ -0,0 +1,93 @@
1
+ import copy
2
+
3
+ from conan.api.conan_api import ConanAPI
4
+ from conan.api.model import MultiPackagesList, PackagesList
5
+ from conan.cli import make_abs_path
6
+ from conan.cli.command import conan_command, conan_subcommand
7
+ from conan.cli.commands.list import print_list_text, print_list_json
8
+ from conan.cli.formatters.list import list_packages_html
9
+ from conans.errors import NotFoundException
10
+
11
+
12
+ @conan_command(group="Consumer")
13
+ def pkglist(conan_api: ConanAPI, parser, *args): # noqa
14
+ """
15
+ Several operations over package lists
16
+ """
17
+
18
+
19
+ @conan_subcommand(formatters={"text": print_list_text,
20
+ "json": print_list_json,
21
+ "html": list_packages_html})
22
+ def pkglist_find_remote(conan_api, parser, subparser, *args):
23
+ """
24
+ (Experimental) Find the remotes of a list of packages in the cache
25
+ """
26
+ subparser.add_argument('list', help="Input package list")
27
+ subparser.add_argument("-r", "--remote", default=None, action="append",
28
+ help="Remote names. Accepts wildcards "
29
+ "('*' means all the remotes available)")
30
+ args = parser.parse_args(*args)
31
+
32
+ listfile = make_abs_path(args.list)
33
+ multi_pkglist = MultiPackagesList.load(listfile)
34
+ package_list = multi_pkglist["Local Cache"]
35
+ selected_remotes = conan_api.remotes.list(args.remote)
36
+
37
+ result = MultiPackagesList()
38
+ for r in selected_remotes:
39
+ result_pkg_list = PackagesList()
40
+ for ref, recipe_bundle in package_list.refs().items():
41
+ ref_no_rev = copy.copy(ref) # TODO: Improve ugly API
42
+ ref_no_rev.revision = None
43
+ try:
44
+ revs = conan_api.list.recipe_revisions(ref_no_rev, remote=r)
45
+ except NotFoundException:
46
+ continue
47
+ if ref not in revs: # not found
48
+ continue
49
+ result_pkg_list.add_refs([ref])
50
+ for pref, pref_bundle in package_list.prefs(ref, recipe_bundle).items():
51
+ pref_no_rev = copy.copy(pref) # TODO: Improve ugly API
52
+ pref_no_rev.revision = None
53
+ try:
54
+ prevs = conan_api.list.package_revisions(pref_no_rev, remote=r)
55
+ except NotFoundException:
56
+ continue
57
+ if pref in prevs:
58
+ result_pkg_list.add_prefs(ref, [pref])
59
+ info = recipe_bundle["packages"][pref.package_id]["info"]
60
+ result_pkg_list.add_configurations({pref: info})
61
+ if result_pkg_list.recipes:
62
+ result.add(r.name, result_pkg_list)
63
+
64
+ return {
65
+ "results": result.serialize(),
66
+ "conan_api": conan_api,
67
+ "cli_args": " ".join([f"{arg}={getattr(args, arg)}"
68
+ for arg in vars(args) if getattr(args, arg)])
69
+ }
70
+
71
+
72
+ @conan_subcommand(formatters={"text": print_list_text,
73
+ "json": print_list_json,
74
+ "html": list_packages_html})
75
+ def pkglist_merge(conan_api, parser, subparser, *args):
76
+ """
77
+ (Experimental) Merge several package lists into a single one
78
+ """
79
+ subparser.add_argument("-l", "--list", help="Package list file", action="append")
80
+ args = parser.parse_args(*args)
81
+
82
+ result = MultiPackagesList()
83
+ for pkglist in args.list:
84
+ listfile = make_abs_path(pkglist)
85
+ multi_pkglist = MultiPackagesList.load(listfile)
86
+ result.merge(multi_pkglist)
87
+
88
+ return {
89
+ "results": result.serialize(),
90
+ "conan_api": conan_api,
91
+ "cli_args": " ".join([f"{arg}={getattr(args, arg)}"
92
+ for arg in vars(args) if getattr(args, arg)])
93
+ }
@@ -58,12 +58,18 @@ def profile_detect(conan_api, parser, subparser, *args):
58
58
  """
59
59
  subparser.add_argument("--name", help="Profile name, 'default' if not specified")
60
60
  subparser.add_argument("-f", "--force", action='store_true', help="Overwrite if exists")
61
+ subparser.add_argument("-e", "--exist-ok", action='store_true',
62
+ help="If the profile already exist, do not detect a new one")
61
63
  args = parser.parse_args(*args)
62
64
 
63
65
  profile_name = args.name or "default"
64
66
  profile_pathname = conan_api.profiles.get_path(profile_name, os.getcwd(), exists=False)
65
- if not args.force and os.path.exists(profile_pathname):
66
- raise ConanException(f"Profile '{profile_pathname}' already exists")
67
+ if os.path.exists(profile_pathname):
68
+ if args.exist_ok:
69
+ ConanOutput().info(f"Profile '{profile_name}' already exists, skipping detection")
70
+ return
71
+ if not args.force:
72
+ raise ConanException(f"Profile '{profile_pathname}' already exists")
67
73
 
68
74
  detected_profile = conan_api.profiles.detect()
69
75
  ConanOutput().success("\nDetected profile:")
@@ -12,10 +12,22 @@ def version(conan_api, parser, *args):
12
12
  Give information about the Conan client version.
13
13
  """
14
14
 
15
- return {'version': str(conan_version),
15
+ return {
16
+ 'version': str(conan_version),
17
+ 'conan_path': sys.argv[0],
16
18
  'python': {
17
19
  'version': platform.python_version().replace('\n', ''),
18
20
  'sys_version': sys.version.replace('\n', ''),
21
+ 'sys_executable': sys.executable,
22
+ 'is_frozen': getattr(sys, 'frozen', False),
23
+ 'architecture': platform.machine(),
24
+ },
25
+ 'system': {
26
+ 'version': platform.version(),
27
+ 'platform': platform.platform(),
28
+ 'system': platform.system(),
29
+ 'release': platform.release(),
30
+ 'cpu': platform.processor(),
19
31
  }
20
32
  }
21
33
 
@@ -54,16 +54,23 @@ class _PrinterGraphItem(object):
54
54
  class _Grapher(object):
55
55
  def __init__(self, deps_graph):
56
56
  self._deps_graph = deps_graph
57
- self.node_map, self.edges = self._build_graph()
57
+ self.node_map, self._edges = self._build_graph()
58
58
  self._nodes = self.node_map.values()
59
59
 
60
60
  @property
61
61
  def nodes(self):
62
- ConanOutput().warning("--format=html rendering using 'graph' object is deprecated and "
62
+ ConanOutput().warning("--format=html/dot rendering using 'graph' object is deprecated and "
63
63
  "will be removed in future 2.X version. Please upgrade your template "
64
64
  "to use 'deps_graph' instead", warn_tag="deprecated")
65
65
  return self._nodes
66
66
 
67
+ @property
68
+ def edges(self):
69
+ ConanOutput().warning("--format=html/dot rendering using 'graph' object is deprecated and "
70
+ "will be removed in future 2.X version. Please upgrade your template "
71
+ "to use 'deps_graph' instead", warn_tag="deprecated")
72
+ return self._edges
73
+
67
74
  def _build_graph(self):
68
75
  graph_nodes = self._deps_graph.by_levels()
69
76
  build_time_nodes = self._deps_graph.build_time_nodes()
@@ -95,10 +102,10 @@ class _Grapher(object):
95
102
 
96
103
 
97
104
  def _render_graph(graph, error, template, template_folder):
98
- deps_graph = json.dumps(graph.serialize())
105
+ deps_graph = graph.serialize()
99
106
  graph = _Grapher(graph)
100
107
  from conans import __version__ as client_version
101
- template = Template(template)
108
+ template = Template(template, autoescape=select_autoescape(['html', 'xml']))
102
109
  return template.render(deps_graph=deps_graph, graph=graph, error=error,
103
110
  base_template_path=template_folder, version=client_version)
104
111
 
@@ -126,11 +133,7 @@ def format_graph_html(result):
126
133
  def format_graph_dot(result):
127
134
  graph = result["graph"]
128
135
  conan_api = result["conan_api"]
129
- package_filter = result["package_filter"]
130
- serial = graph.serialize()
131
- # TODO: This is not used, it is necessary to update the renderings to use the serialized graph
132
- # instead of the native graph
133
- serial = filter_graph(serial, package_filter)
136
+
134
137
  template_folder = os.path.join(conan_api.cache_folder, "templates")
135
138
  user_template = os.path.join(template_folder, "graph.dot")
136
139
  template = load(user_template) if os.path.isfile(user_template) else graph_info_dot
@@ -0,0 +1,13 @@
1
+
2
+ graph_info_dot = """\
3
+ digraph {
4
+ {%- for node_id, node in deps_graph["nodes"].items() %}
5
+ {%- for dep_id, dep in node["dependencies"].items() %}
6
+ {%- if dep["direct"] %}
7
+ "{{ node["label"] }}" -> "{{ deps_graph["nodes"][dep_id]["label"] }}"
8
+ {%- endif %}
9
+ {%- endfor %}
10
+ {%- endfor %}
11
+ }
12
+
13
+ """