bundler 2.3.27 → 2.4.0

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 (186) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +44 -3
  3. data/README.md +2 -2
  4. data/bundler.gemspec +2 -2
  5. data/exe/bundle +1 -4
  6. data/lib/bundler/build_metadata.rb +2 -2
  7. data/lib/bundler/cli/add.rb +1 -1
  8. data/lib/bundler/cli/check.rb +1 -1
  9. data/lib/bundler/cli/common.rb +1 -0
  10. data/lib/bundler/cli/console.rb +2 -2
  11. data/lib/bundler/cli/doctor.rb +4 -6
  12. data/lib/bundler/cli/gem.rb +62 -40
  13. data/lib/bundler/cli/install.rb +2 -3
  14. data/lib/bundler/cli/lock.rb +8 -5
  15. data/lib/bundler/cli/outdated.rb +1 -3
  16. data/lib/bundler/cli/viz.rb +1 -1
  17. data/lib/bundler/cli.rb +43 -2
  18. data/lib/bundler/compact_index_client/cache.rb +1 -1
  19. data/lib/bundler/compact_index_client/updater.rb +40 -39
  20. data/lib/bundler/constants.rb +1 -1
  21. data/lib/bundler/definition.rb +61 -31
  22. data/lib/bundler/dependency.rb +12 -11
  23. data/lib/bundler/digest.rb +1 -1
  24. data/lib/bundler/dsl.rb +1 -1
  25. data/lib/bundler/env.rb +1 -1
  26. data/lib/bundler/environment_preserver.rb +1 -0
  27. data/lib/bundler/errors.rb +1 -11
  28. data/lib/bundler/fetcher/compact_index.rb +9 -11
  29. data/lib/bundler/fetcher/dependency.rb +1 -1
  30. data/lib/bundler/fetcher/downloader.rb +2 -5
  31. data/lib/bundler/fetcher.rb +2 -6
  32. data/lib/bundler/force_platform.rb +18 -0
  33. data/lib/bundler/friendly_errors.rb +0 -3
  34. data/lib/bundler/gem_version_promoter.rb +52 -86
  35. data/lib/bundler/graph.rb +3 -3
  36. data/lib/bundler/index.rb +5 -18
  37. data/lib/bundler/injector.rb +1 -1
  38. data/lib/bundler/inline.rb +2 -2
  39. data/lib/bundler/installer/parallel_installer.rb +0 -31
  40. data/lib/bundler/installer.rb +6 -16
  41. data/lib/bundler/lazy_specification.rb +37 -33
  42. data/lib/bundler/lockfile_parser.rb +5 -5
  43. data/lib/bundler/man/bundle-add.1 +1 -1
  44. data/lib/bundler/man/bundle-binstubs.1 +1 -1
  45. data/lib/bundler/man/bundle-cache.1 +1 -1
  46. data/lib/bundler/man/bundle-check.1 +1 -1
  47. data/lib/bundler/man/bundle-clean.1 +1 -1
  48. data/lib/bundler/man/bundle-config.1 +1 -1
  49. data/lib/bundler/man/bundle-console.1 +1 -1
  50. data/lib/bundler/man/bundle-doctor.1 +1 -1
  51. data/lib/bundler/man/bundle-exec.1 +1 -1
  52. data/lib/bundler/man/bundle-gem.1 +27 -37
  53. data/lib/bundler/man/bundle-gem.1.ronn +5 -5
  54. data/lib/bundler/man/bundle-help.1 +1 -1
  55. data/lib/bundler/man/bundle-info.1 +1 -1
  56. data/lib/bundler/man/bundle-init.1 +1 -1
  57. data/lib/bundler/man/bundle-inject.1 +1 -1
  58. data/lib/bundler/man/bundle-install.1 +1 -30
  59. data/lib/bundler/man/bundle-install.1.ronn +0 -29
  60. data/lib/bundler/man/bundle-list.1 +1 -1
  61. data/lib/bundler/man/bundle-lock.1 +1 -1
  62. data/lib/bundler/man/bundle-open.1 +1 -1
  63. data/lib/bundler/man/bundle-outdated.1 +1 -1
  64. data/lib/bundler/man/bundle-platform.1 +2 -2
  65. data/lib/bundler/man/bundle-platform.1.ronn +1 -1
  66. data/lib/bundler/man/bundle-plugin.1 +1 -1
  67. data/lib/bundler/man/bundle-pristine.1 +1 -1
  68. data/lib/bundler/man/bundle-remove.1 +1 -1
  69. data/lib/bundler/man/bundle-show.1 +1 -1
  70. data/lib/bundler/man/bundle-update.1 +1 -1
  71. data/lib/bundler/man/bundle-version.1 +1 -1
  72. data/lib/bundler/man/bundle-viz.1 +1 -1
  73. data/lib/bundler/man/bundle.1 +1 -1
  74. data/lib/bundler/man/gemfile.5 +1 -1
  75. data/lib/bundler/mirror.rb +5 -7
  76. data/lib/bundler/plugin/index.rb +4 -4
  77. data/lib/bundler/plugin/installer/rubygems.rb +0 -4
  78. data/lib/bundler/resolver/base.rb +7 -11
  79. data/lib/bundler/resolver/candidate.rb +92 -0
  80. data/lib/bundler/resolver/incompatibility.rb +15 -0
  81. data/lib/bundler/resolver/package.rb +63 -0
  82. data/lib/bundler/resolver/root.rb +25 -0
  83. data/lib/bundler/resolver/spec_group.rb +26 -36
  84. data/lib/bundler/resolver.rb +285 -277
  85. data/lib/bundler/rubygems_ext.rb +11 -6
  86. data/lib/bundler/rubygems_gem_installer.rb +4 -2
  87. data/lib/bundler/rubygems_integration.rb +1 -9
  88. data/lib/bundler/runtime.rb +1 -5
  89. data/lib/bundler/settings.rb +0 -6
  90. data/lib/bundler/shared_helpers.rb +1 -0
  91. data/lib/bundler/source/git/git_proxy.rb +190 -67
  92. data/lib/bundler/source/git.rb +15 -17
  93. data/lib/bundler/source/metadata.rb +0 -1
  94. data/lib/bundler/source/path/installer.rb +1 -22
  95. data/lib/bundler/source/path.rb +5 -5
  96. data/lib/bundler/source/rubygems.rb +13 -67
  97. data/lib/bundler/source_list.rb +8 -2
  98. data/lib/bundler/spec_set.rb +7 -9
  99. data/lib/bundler/templates/Executable +1 -1
  100. data/lib/bundler/templates/Executable.bundler +4 -9
  101. data/lib/bundler/templates/Executable.standalone +2 -0
  102. data/lib/bundler/templates/newgem/Cargo.toml.tt +7 -0
  103. data/lib/bundler/templates/newgem/Gemfile.tt +3 -0
  104. data/lib/bundler/templates/newgem/README.md.tt +6 -4
  105. data/lib/bundler/templates/newgem/Rakefile.tt +2 -1
  106. data/lib/bundler/templates/newgem/circleci/config.yml.tt +12 -0
  107. data/lib/bundler/templates/newgem/ext/newgem/Cargo.toml.tt +15 -0
  108. data/lib/bundler/templates/newgem/ext/newgem/extconf-rust.rb.tt +6 -0
  109. data/lib/bundler/templates/newgem/ext/newgem/src/lib.rs.tt +12 -0
  110. data/lib/bundler/templates/newgem/github/workflows/main.yml.tt +10 -0
  111. data/lib/bundler/templates/newgem/gitignore.tt +3 -0
  112. data/lib/bundler/templates/newgem/gitlab-ci.yml.tt +8 -0
  113. data/lib/bundler/templates/newgem/newgem.gemspec.tt +8 -2
  114. data/lib/bundler/ui/shell.rb +35 -12
  115. data/lib/bundler/ui/silent.rb +21 -5
  116. data/lib/bundler/vendor/connection_pool/lib/connection_pool/timed_stack.rb +3 -3
  117. data/lib/bundler/vendor/connection_pool/lib/connection_pool/wrapper.rb +0 -1
  118. data/lib/bundler/vendor/connection_pool/lib/connection_pool.rb +3 -1
  119. data/lib/bundler/vendor/fileutils/lib/fileutils.rb +1350 -408
  120. data/lib/bundler/vendor/net-http-persistent/README.rdoc +1 -1
  121. data/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +1 -1
  122. data/lib/bundler/vendor/pub_grub/LICENSE.txt +21 -0
  123. data/lib/bundler/vendor/pub_grub/lib/pub_grub/assignment.rb +20 -0
  124. data/lib/bundler/vendor/pub_grub/lib/pub_grub/basic_package_source.rb +189 -0
  125. data/lib/bundler/vendor/pub_grub/lib/pub_grub/failure_writer.rb +182 -0
  126. data/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +151 -0
  127. data/lib/bundler/vendor/pub_grub/lib/pub_grub/package.rb +43 -0
  128. data/lib/bundler/vendor/pub_grub/lib/pub_grub/partial_solution.rb +121 -0
  129. data/lib/bundler/vendor/pub_grub/lib/pub_grub/rubygems.rb +45 -0
  130. data/lib/bundler/vendor/pub_grub/lib/pub_grub/solve_failure.rb +19 -0
  131. data/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +53 -0
  132. data/lib/bundler/vendor/pub_grub/lib/pub_grub/term.rb +105 -0
  133. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version.rb +3 -0
  134. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +124 -0
  135. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +409 -0
  136. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +240 -0
  137. data/lib/bundler/vendor/pub_grub/lib/pub_grub/version_union.rb +178 -0
  138. data/lib/bundler/vendor/pub_grub/lib/pub_grub.rb +31 -0
  139. data/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +1 -1
  140. data/lib/bundler/vendor/uri/lib/uri/common.rb +64 -16
  141. data/lib/bundler/vendor/uri/lib/uri/file.rb +7 -1
  142. data/lib/bundler/vendor/uri/lib/uri/ftp.rb +2 -1
  143. data/lib/bundler/vendor/uri/lib/uri/generic.rb +27 -7
  144. data/lib/bundler/vendor/uri/lib/uri/http.rb +40 -2
  145. data/lib/bundler/vendor/uri/lib/uri/https.rb +2 -1
  146. data/lib/bundler/vendor/uri/lib/uri/ldap.rb +1 -1
  147. data/lib/bundler/vendor/uri/lib/uri/ldaps.rb +2 -1
  148. data/lib/bundler/vendor/uri/lib/uri/mailto.rb +2 -2
  149. data/lib/bundler/vendor/uri/lib/uri/rfc2396_parser.rb +13 -7
  150. data/lib/bundler/vendor/uri/lib/uri/rfc3986_parser.rb +10 -5
  151. data/lib/bundler/vendor/uri/lib/uri/version.rb +1 -1
  152. data/lib/bundler/vendor/uri/lib/uri/ws.rb +1 -2
  153. data/lib/bundler/vendor/uri/lib/uri/wss.rb +2 -1
  154. data/lib/bundler/vendor/uri/lib/uri.rb +3 -2
  155. data/lib/bundler/vendored_persistent.rb +1 -33
  156. data/lib/bundler/{vendored_tmpdir.rb → vendored_pub_grub.rb} +1 -1
  157. data/lib/bundler/version.rb +5 -1
  158. data/lib/bundler/worker.rb +5 -7
  159. data/lib/bundler.rb +20 -64
  160. metadata +33 -32
  161. data/lib/bundler/templates/newgem/travis.yml.tt +0 -6
  162. data/lib/bundler/vendor/molinillo/LICENSE +0 -9
  163. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb +0 -57
  164. data/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +0 -88
  165. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb +0 -36
  166. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +0 -66
  167. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb +0 -62
  168. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb +0 -63
  169. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb +0 -61
  170. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb +0 -126
  171. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb +0 -46
  172. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb +0 -36
  173. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +0 -164
  174. data/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -255
  175. data/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +0 -149
  176. data/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb +0 -6
  177. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +0 -112
  178. data/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb +0 -67
  179. data/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +0 -839
  180. data/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb +0 -46
  181. data/lib/bundler/vendor/molinillo/lib/molinillo/state.rb +0 -58
  182. data/lib/bundler/vendor/molinillo/lib/molinillo.rb +0 -11
  183. data/lib/bundler/vendor/tmpdir/lib/tmpdir.rb +0 -154
  184. data/lib/bundler/vendored_molinillo.rb +0 -4
  185. data/lib/bundler/version_ranges.rb +0 -122
  186. /data/lib/bundler/templates/newgem/ext/newgem/{extconf.rb.tt → extconf-c.rb.tt} +0 -0
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ class Resolver
5
+ #
6
+ # Represents a gem being resolved, in a format PubGrub likes.
7
+ #
8
+ # The class holds the following information:
9
+ #
10
+ # * Platforms this gem will be resolved on.
11
+ # * The locked version of this gem resolution should favor (if any).
12
+ # * Whether the gem should be unlocked to its latest version.
13
+ # * The dependency explicit set in the Gemfile for this gem (if any).
14
+ #
15
+ class Package
16
+ attr_reader :name, :platforms, :dependency, :locked_version
17
+
18
+ def initialize(name, platforms, locked_specs, unlock, dependency: nil)
19
+ @name = name
20
+ @platforms = platforms
21
+ @locked_version = locked_specs[name].first&.version
22
+ @unlock = unlock
23
+ @dependency = dependency || Dependency.new(name, @locked_version)
24
+ end
25
+
26
+ def to_s
27
+ @name.delete("\0")
28
+ end
29
+
30
+ def root?
31
+ false
32
+ end
33
+
34
+ def meta?
35
+ @name.end_with?("\0")
36
+ end
37
+
38
+ def ==(other)
39
+ self.class == other.class && @name == other.name
40
+ end
41
+
42
+ def hash
43
+ @name.hash
44
+ end
45
+
46
+ def unlock?
47
+ @unlock.empty? || @unlock.include?(name)
48
+ end
49
+
50
+ def prerelease_specified?
51
+ @dependency.prerelease?
52
+ end
53
+
54
+ def force_ruby_platform?
55
+ @dependency.force_ruby_platform
56
+ end
57
+
58
+ def current_platform?
59
+ @dependency.current_platform?
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "package"
4
+
5
+ module Bundler
6
+ class Resolver
7
+ #
8
+ # Represents the Gemfile from the resolver's perspective. It's the root
9
+ # package and Gemfile entries depend on it.
10
+ #
11
+ class Root < Package
12
+ def initialize(name)
13
+ @name = name
14
+ end
15
+
16
+ def meta?
17
+ true
18
+ end
19
+
20
+ def root?
21
+ true
22
+ end
23
+ end
24
+ end
25
+ end
@@ -3,20 +3,27 @@
3
3
  module Bundler
4
4
  class Resolver
5
5
  class SpecGroup
6
- attr_accessor :name, :version, :source
7
- attr_accessor :activated_platforms, :force_ruby_platform
6
+ def initialize(specs)
7
+ @specs = specs
8
+ end
8
9
 
9
- def initialize(specs, relevant_platforms)
10
- @exemplary_spec = specs.first
11
- @name = @exemplary_spec.name
12
- @version = @exemplary_spec.version
13
- @source = @exemplary_spec.source
10
+ def empty?
11
+ @specs.empty?
12
+ end
14
13
 
15
- @activated_platforms = relevant_platforms
16
- @specs = specs
14
+ def name
15
+ @name ||= exemplary_spec.name
16
+ end
17
+
18
+ def version
19
+ @version ||= exemplary_spec.version
20
+ end
21
+
22
+ def source
23
+ @source ||= exemplary_spec.source
17
24
  end
18
25
 
19
- def to_specs
26
+ def to_specs(force_ruby_platform)
20
27
  @specs.map do |s|
21
28
  lazy_spec = LazySpecification.new(name, version, s.platform, source)
22
29
  lazy_spec.force_ruby_platform = force_ruby_platform
@@ -26,44 +33,27 @@ module Bundler
26
33
  end
27
34
 
28
35
  def to_s
29
- activated_platforms_string = sorted_activated_platforms.join(", ")
30
- "#{name} (#{version}) (#{activated_platforms_string})"
36
+ sorted_spec_names.join(", ")
31
37
  end
32
38
 
33
- def dependencies_for_activated_platforms
34
- @dependencies_for_activated_platforms ||= @specs.map do |spec|
39
+ def dependencies
40
+ @dependencies ||= @specs.map do |spec|
35
41
  __dependencies(spec) + metadata_dependencies(spec)
36
42
  end.flatten.uniq
37
43
  end
38
44
 
39
- def ==(other)
40
- return unless other.is_a?(SpecGroup)
41
- name == other.name &&
42
- version == other.version &&
43
- sorted_activated_platforms == other.sorted_activated_platforms &&
44
- source == other.source
45
- end
46
-
47
- def eql?(other)
48
- return unless other.is_a?(SpecGroup)
49
- name.eql?(other.name) &&
50
- version.eql?(other.version) &&
51
- sorted_activated_platforms.eql?(other.sorted_activated_platforms) &&
52
- source.eql?(other.source)
53
- end
54
-
55
- def hash
56
- name.hash ^ version.hash ^ sorted_activated_platforms.hash ^ source.hash
57
- end
58
-
59
45
  protected
60
46
 
61
- def sorted_activated_platforms
62
- activated_platforms.sort_by(&:to_s)
47
+ def sorted_spec_names
48
+ @sorted_spec_names ||= @specs.map(&:full_name).sort
63
49
  end
64
50
 
65
51
  private
66
52
 
53
+ def exemplary_spec
54
+ @specs.first
55
+ end
56
+
67
57
  def __dependencies(spec)
68
58
  dependencies = []
69
59
  spec.dependencies.each do |dep|