rubygems-update 3.4.7 → 3.4.9

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 (100) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +57 -0
  3. data/Manifest.txt +4 -0
  4. data/POLICIES.md +5 -5
  5. data/README.md +17 -4
  6. data/bundler/CHANGELOG.md +48 -0
  7. data/bundler/README.md +1 -4
  8. data/bundler/lib/bundler/build_metadata.rb +2 -2
  9. data/bundler/lib/bundler/endpoint_specification.rb +0 -4
  10. data/bundler/lib/bundler/environment_preserver.rb +2 -2
  11. data/bundler/lib/bundler/fetcher/dependency.rb +1 -5
  12. data/bundler/lib/bundler/fetcher.rb +2 -2
  13. data/bundler/lib/bundler/incomplete_specification.rb +24 -0
  14. data/bundler/lib/bundler/index.rb +2 -2
  15. data/bundler/lib/bundler/injector.rb +1 -1
  16. data/bundler/lib/bundler/installer/parallel_installer.rb +1 -14
  17. data/bundler/lib/bundler/lazy_specification.rb +4 -8
  18. data/bundler/lib/bundler/lockfile_generator.rb +1 -1
  19. data/bundler/lib/bundler/lockfile_parser.rb +11 -11
  20. data/bundler/lib/bundler/plugin.rb +1 -1
  21. data/bundler/lib/bundler/remote_specification.rb +2 -6
  22. data/bundler/lib/bundler/resolver/base.rb +5 -3
  23. data/bundler/lib/bundler/resolver.rb +6 -9
  24. data/bundler/lib/bundler/rubygems_integration.rb +1 -1
  25. data/bundler/lib/bundler/settings.rb +1 -1
  26. data/bundler/lib/bundler/setup.rb +4 -1
  27. data/bundler/lib/bundler/shared_helpers.rb +1 -1
  28. data/bundler/lib/bundler/source/git/git_proxy.rb +21 -4
  29. data/bundler/lib/bundler/source/git.rb +2 -1
  30. data/bundler/lib/bundler/source/path.rb +1 -1
  31. data/bundler/lib/bundler/source/rubygems.rb +1 -2
  32. data/bundler/lib/bundler/spec_set.rb +19 -12
  33. data/bundler/lib/bundler/templates/Executable.bundler +1 -1
  34. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +1 -1
  35. data/bundler/lib/bundler/templates/newgem/Rakefile.tt +10 -0
  36. data/bundler/lib/bundler/templates/newgem/github/workflows/main.yml.tt +1 -1
  37. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +1 -1
  38. data/bundler/lib/bundler/uri_normalizer.rb +23 -0
  39. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +0 -5
  40. data/bundler/lib/bundler/version.rb +1 -1
  41. data/bundler/lib/bundler.rb +11 -9
  42. data/lib/rubygems/bundler_version_finder.rb +1 -1
  43. data/lib/rubygems/command.rb +10 -6
  44. data/lib/rubygems/command_manager.rb +1 -0
  45. data/lib/rubygems/commands/exec_command.rb +248 -0
  46. data/lib/rubygems/commands/help_command.rb +3 -3
  47. data/lib/rubygems/commands/pristine_command.rb +9 -0
  48. data/lib/rubygems/commands/uninstall_command.rb +3 -0
  49. data/lib/rubygems/core_ext/kernel_require.rb +0 -10
  50. data/lib/rubygems/defaults.rb +2 -2
  51. data/lib/rubygems/dependency.rb +1 -1
  52. data/lib/rubygems/ext/builder.rb +17 -0
  53. data/lib/rubygems/ext/ext_conf_builder.rb +1 -2
  54. data/lib/rubygems/ext/rake_builder.rb +1 -1
  55. data/lib/rubygems/package/tar_header.rb +1 -1
  56. data/lib/rubygems/package/tar_reader/entry.rb +82 -3
  57. data/lib/rubygems/package/tar_reader.rb +0 -28
  58. data/lib/rubygems/platform.rb +2 -2
  59. data/lib/rubygems/request_set/gem_dependency_api.rb +0 -1
  60. data/lib/rubygems/requirement.rb +1 -1
  61. data/lib/rubygems/resolver/stats.rb +1 -1
  62. data/lib/rubygems/source/git.rb +1 -1
  63. data/lib/rubygems/specification.rb +9 -1
  64. data/lib/rubygems/stub_specification.rb +7 -7
  65. data/lib/rubygems/text.rb +1 -1
  66. data/lib/rubygems/util/licenses.rb +2 -2
  67. data/lib/rubygems/version.rb +2 -2
  68. data/lib/rubygems.rb +3 -3
  69. data/rubygems-update.gemspec +1 -1
  70. data/test/rubygems/helper.rb +2 -3
  71. data/test/rubygems/package/tar_test_case.rb +50 -15
  72. data/test/rubygems/simple_gem.rb +1 -1
  73. data/test/rubygems/test_gem.rb +29 -0
  74. data/test/rubygems/test_gem_bundler_version_finder.rb +2 -2
  75. data/test/rubygems/test_gem_commands_exec_command.rb +851 -0
  76. data/test/rubygems/test_gem_commands_install_command.rb +1 -1
  77. data/test/rubygems/test_gem_commands_pristine_command.rb +48 -0
  78. data/test/rubygems/test_gem_commands_setup_command.rb +1 -1
  79. data/test/rubygems/test_gem_commands_uninstall_command.rb +31 -14
  80. data/test/rubygems/test_gem_ext_builder.rb +3 -5
  81. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +20 -6
  82. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +1 -1
  83. data/test/rubygems/test_gem_gem_runner.rb +6 -1
  84. data/test/rubygems/test_gem_package.rb +0 -25
  85. data/test/rubygems/test_gem_package_tar_reader.rb +48 -1
  86. data/test/rubygems/test_gem_package_tar_reader_entry.rb +102 -15
  87. data/test/rubygems/test_gem_remote_fetcher.rb +1 -1
  88. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +10 -10
  89. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +2 -2
  90. data/test/rubygems/test_gem_resolver_git_set.rb +9 -9
  91. data/test/rubygems/test_gem_resolver_git_specification.rb +1 -1
  92. data/test/rubygems/test_gem_source.rb +1 -1
  93. data/test/rubygems/test_gem_source_git.rb +13 -12
  94. data/test/rubygems/test_gem_source_installed.rb +1 -1
  95. data/test/rubygems/test_gem_source_lock.rb +3 -3
  96. data/test/rubygems/test_gem_source_vendor.rb +1 -1
  97. data/test/rubygems/test_gem_specification.rb +19 -2
  98. data/test/rubygems/test_gem_version.rb +2 -2
  99. data/test/rubygems/test_kernel.rb +0 -8
  100. metadata +7 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ce0db157a5beb6c516383463604a7bcfd5f69f6314b44a07428b8e2ef0ce7466
4
- data.tar.gz: a0ed37a3997da0b7f7e21a239482830023eefcf60fe0e70e793f07ebeb36aefa
3
+ metadata.gz: a0ce67a665c26fdc475dafc0858072799332dc0b01b57143bd46a25bd3d07c8d
4
+ data.tar.gz: 88d69d29ecde40e8ca5112f6ee1d706a66c7819842902a0515b322eeff6187f8
5
5
  SHA512:
6
- metadata.gz: 8f601f949d72477e06ec2e6ceb7eb12ef189370e49da57430fc7bdf3937f74f24f678f411e0e791cf7a22fb8911f61ac25f7d8f3f922a587150a54fd431fe726
7
- data.tar.gz: 761cba346c2cb4bf07c552396c10d8aecda68888768a146afdc4a9cf2393ee67b32427b26c3fdc9e93d1f78875abe02e7aec0d8604b33b5cd5794b151d66ce64
6
+ metadata.gz: fd112dabe5437ac6a58a3bbcb73bd08bbc4061cce3c9e2923fead4816bdf956eb6ce4315fb16d40fc78179939bdb516c748fdb0a7a09debad2f520599968f137
7
+ data.tar.gz: 1a2ec92153d67b8d8deb53ead80c6ab7652d709cceb4ffe9d97528f1adcd0be95892e90a573a6ff305b82b5fd1ead9c48223bce93bf6d6bfe960c1bd71478629
data/CHANGELOG.md CHANGED
@@ -1,3 +1,60 @@
1
+ # 3.4.9 / 2023-03-20
2
+
3
+ ## Enhancements:
4
+
5
+ * Improve `TarHeader#calculate_checksum` speed and readability. Pull
6
+ request [#6476](https://github.com/rubygems/rubygems/pull/6476) by
7
+ Maumagnaguagno
8
+ * Added only missing extensions option into pristine command. Pull request
9
+ [#6446](https://github.com/rubygems/rubygems/pull/6446) by hsbt
10
+ * Installs bundler 2.4.9 as a default gem.
11
+
12
+ ## Bug fixes:
13
+
14
+ * Fix `$LOAD_PATH` in rake and ext_conf builder. Pull request
15
+ [#6490](https://github.com/rubygems/rubygems/pull/6490) by ntkme
16
+ * Fix `gem uninstall` with `--install-dir`. Pull request
17
+ [#6481](https://github.com/rubygems/rubygems/pull/6481) by
18
+ deivid-rodriguez
19
+
20
+ ## Documentation:
21
+
22
+ * Document our current release policy. Pull request
23
+ [#6450](https://github.com/rubygems/rubygems/pull/6450) by
24
+ deivid-rodriguez
25
+
26
+ # 3.4.8 / 2023-03-08
27
+
28
+ ## Enhancements:
29
+
30
+ * Add TarReader::Entry#seek to seek within the tar file entry. Pull
31
+ request [#6390](https://github.com/rubygems/rubygems/pull/6390) by
32
+ martinemde
33
+ * Avoid calling String#dup in Gem::Version#marshal_dump. Pull request
34
+ [#6438](https://github.com/rubygems/rubygems/pull/6438) by segiddins
35
+ * Remove hardcoded "master" branch references. Pull request
36
+ [#6425](https://github.com/rubygems/rubygems/pull/6425) by
37
+ deivid-rodriguez
38
+ * [Experimental] Add `gem exec` command to run executables from gems that
39
+ may or may not be installed. Pull request
40
+ [#6309](https://github.com/rubygems/rubygems/pull/6309) by segiddins
41
+ * Installs bundler 2.4.8 as a default gem.
42
+
43
+ ## Bug fixes:
44
+
45
+ * Fix installation error of same version of default gems with local
46
+ installation. Pull request
47
+ [#6430](https://github.com/rubygems/rubygems/pull/6430) by hsbt
48
+ * Use proper memoized var name for Gem.state_home. Pull request
49
+ [#6420](https://github.com/rubygems/rubygems/pull/6420) by simi
50
+
51
+ ## Documentation:
52
+
53
+ * Switch supporting explanations to all Ruby Central. Pull request
54
+ [#6419](https://github.com/rubygems/rubygems/pull/6419) by indirect
55
+ * Update the link to OpenSource.org. Pull request
56
+ [#6392](https://github.com/rubygems/rubygems/pull/6392) by nobu
57
+
1
58
  # 3.4.7 / 2023-02-15
2
59
 
3
60
  ## Enhancements:
data/Manifest.txt CHANGED
@@ -80,6 +80,7 @@ bundler/lib/bundler/gem_helpers.rb
80
80
  bundler/lib/bundler/gem_tasks.rb
81
81
  bundler/lib/bundler/gem_version_promoter.rb
82
82
  bundler/lib/bundler/graph.rb
83
+ bundler/lib/bundler/incomplete_specification.rb
83
84
  bundler/lib/bundler/index.rb
84
85
  bundler/lib/bundler/injector.rb
85
86
  bundler/lib/bundler/inline.rb
@@ -243,6 +244,7 @@ bundler/lib/bundler/ui/rg_proxy.rb
243
244
  bundler/lib/bundler/ui/shell.rb
244
245
  bundler/lib/bundler/ui/silent.rb
245
246
  bundler/lib/bundler/uri_credentials_filter.rb
247
+ bundler/lib/bundler/uri_normalizer.rb
246
248
  bundler/lib/bundler/vendor/.document
247
249
  bundler/lib/bundler/vendor/connection_pool/LICENSE
248
250
  bundler/lib/bundler/vendor/connection_pool/lib/connection_pool.rb
@@ -347,6 +349,7 @@ lib/rubygems/commands/cleanup_command.rb
347
349
  lib/rubygems/commands/contents_command.rb
348
350
  lib/rubygems/commands/dependency_command.rb
349
351
  lib/rubygems/commands/environment_command.rb
352
+ lib/rubygems/commands/exec_command.rb
350
353
  lib/rubygems/commands/fetch_command.rb
351
354
  lib/rubygems/commands/generate_index_command.rb
352
355
  lib/rubygems/commands/help_command.rb
@@ -616,6 +619,7 @@ test/rubygems/test_gem_commands_cleanup_command.rb
616
619
  test/rubygems/test_gem_commands_contents_command.rb
617
620
  test/rubygems/test_gem_commands_dependency_command.rb
618
621
  test/rubygems/test_gem_commands_environment_command.rb
622
+ test/rubygems/test_gem_commands_exec_command.rb
619
623
  test/rubygems/test_gem_commands_fetch_command.rb
620
624
  test/rubygems/test_gem_commands_generate_index_command.rb
621
625
  test/rubygems/test_gem_commands_help_command.rb
data/POLICIES.md CHANGED
@@ -128,8 +128,8 @@ permissions compromised or exposed.
128
128
 
129
129
  ## Changing These Policies
130
130
 
131
- These policies were set in order to reduce the burden of maintenance and to
132
- keep committers current with existing development and policies. RubyGems work
133
- is primarily volunteer-driven which limits the ability to provide long-term
134
- support. By joining [Ruby Together](https://rubytogether.org) you can help
135
- extend support for older RubyGems versions.
131
+ These policies were set in order to reduce the burden of maintenance and to keep
132
+ committers current with existing development and policies. RubyGems work is
133
+ primarily volunteer-driven which limits the ability to provide long-term
134
+ support. By joining [Ruby Central](https://rubycentral.org/#/portal/signup) you
135
+ can help extend support for older RubyGems versions.
data/README.md CHANGED
@@ -64,6 +64,22 @@ To upgrade to the latest RubyGems, run:
64
64
 
65
65
  See [UPGRADING](UPGRADING.md) for more details and alternative instructions.
66
66
 
67
+ ## Release policy
68
+
69
+ RubyGems and Bundler are released in sync, although they do not share their
70
+ major version number. It is planned that also their major version numbers will
71
+ be sync'ed in the future.
72
+
73
+ The release policy is somewhat similar to the release policy of Ruby itself:
74
+
75
+ * Frequent patch releases (every 2-4 weeks) including bug fixes, minor
76
+ enhancements, small features, or even medium sized features declared as
77
+ experimental for battle testing.
78
+ * Yearly minor releases including bigger features, and minor breaking changes
79
+ (affecting only edge cases and a very small set of users).
80
+ * Occasional major releases (replacing yearly minors) including major breaking
81
+ changes.
82
+
67
83
  ## Documentation
68
84
 
69
85
  RubyGems uses [rdoc](https://github.com/rdoc/rdoc) for documentation. A compiled set of the docs
@@ -87,15 +103,12 @@ See https://bundler.io/compatibility for known issues.
87
103
 
88
104
  ### Supporting
89
105
 
90
- <a href="https://rubytogether.org/"><img src="https://rubytogether.org/images/rubies.svg" width=200></a><br/>
91
- <a href="https://rubytogether.org/">Ruby Together</a> pays some RubyGems maintainers for their ongoing work. As a grassroots initiative committed to supporting the critical Ruby infrastructure you rely on, Ruby Together is funded entirely by the Ruby community. Contribute today <a href="https://rubytogether.org/developers">as an individual</a> or even better, <a href="https://rubytogether.org/companies">as a company</a>, and ensure that RubyGems, Bundler, and other shared tooling is around for years to come.
106
+ RubyGems is managed by [Ruby Central](https://rubycentral.org), a non-profit organization that supports the Ruby community through projects like this one, as well as [RubyConf](https://rubyconf.org), [RailsConf](https://railsconf.org), and [RubyGems.org](https://rubygems.org). You can support Ruby Central by attending or [sponsoring](sponsors@rubycentral.org) a conference, or by [joining as a supporting member](https://rubycentral.org/#/portal/signup).
92
107
 
93
108
  ### Contributing
94
109
 
95
110
  If you'd like to contribute to RubyGems, that's awesome, and we <3 you. Check out our [guide to contributing](CONTRIBUTING.md) for more information.
96
111
 
97
- While some RubyGems contributors are compensated by Ruby Together, the project maintainers make decisions independent of Ruby Together. As a project, we welcome contributions regardless of the author’s affiliation with Ruby Together.
98
-
99
112
  ### Code of Conduct
100
113
 
101
114
  Everyone interacting in the RubyGems project’s codebases, issue trackers, chat rooms, and mailing lists is expected to follow the [contributor code of conduct](https://github.com/rubygems/rubygems/blob/master/CODE_OF_CONDUCT.md).
data/bundler/CHANGELOG.md CHANGED
@@ -1,3 +1,51 @@
1
+ # 2.4.9 (March 20, 2023)
2
+
3
+ ## Security:
4
+
5
+ - Don't recommend `--full-index` on errors [#6493](https://github.com/rubygems/rubygems/pull/6493)
6
+
7
+ ## Enhancements:
8
+
9
+ - Fix duplicated specs in some error messages [#6475](https://github.com/rubygems/rubygems/pull/6475)
10
+ - When running `bundle lock --update <name>`, checkout locked revision of unrelated git sources directly [#6459](https://github.com/rubygems/rubygems/pull/6459)
11
+ - Avoid expiring git sources when unnecessary [#6458](https://github.com/rubygems/rubygems/pull/6458)
12
+ - Use `RbSys::ExtensionTask` when creating new rust gems [#6352](https://github.com/rubygems/rubygems/pull/6352)
13
+ - Don't ignore pre-releases when there's only one candidate [#6441](https://github.com/rubygems/rubygems/pull/6441)
14
+
15
+ ## Bug fixes:
16
+
17
+ - Fix incorrect removal of ruby platform when auto-healing corrupted lockfiles [#6495](https://github.com/rubygems/rubygems/pull/6495)
18
+ - Don't consider platform specific candidates when `force_ruby_platform` set [#6442](https://github.com/rubygems/rubygems/pull/6442)
19
+ - Better deal with circular dependencies [#6330](https://github.com/rubygems/rubygems/pull/6330)
20
+
21
+ ## Documentation:
22
+
23
+ - Add debugging docs [#6387](https://github.com/rubygems/rubygems/pull/6387)
24
+ - Document our current release policy [#6450](https://github.com/rubygems/rubygems/pull/6450)
25
+
26
+ # 2.4.8 (March 8, 2023)
27
+
28
+ ## Security:
29
+
30
+ - Safe load all marshaled data [#6384](https://github.com/rubygems/rubygems/pull/6384)
31
+
32
+ ## Enhancements:
33
+
34
+ - Better suggestion when `bundler/setup` fails due to missing gems and Gemfile is not the default [#6428](https://github.com/rubygems/rubygems/pull/6428)
35
+ - Simplify the gem package file filter in the gemspec template [#6344](https://github.com/rubygems/rubygems/pull/6344)
36
+ - Auto-heal corrupted `Gemfile.lock` with no specs [#6423](https://github.com/rubygems/rubygems/pull/6423)
37
+ - Auto-heal on corrupted lockfile with missing deps [#6400](https://github.com/rubygems/rubygems/pull/6400)
38
+ - Give a better message when Gemfile branch does not exist [#6383](https://github.com/rubygems/rubygems/pull/6383)
39
+
40
+ ## Bug fixes:
41
+
42
+ - Respect --no-install option for git: sources [#6088](https://github.com/rubygems/rubygems/pull/6088)
43
+ - Fix `gems.rb` lockfile for bundler version lookup in template [#6413](https://github.com/rubygems/rubygems/pull/6413)
44
+
45
+ ## Documentation:
46
+
47
+ - Switch supporting explanations to all Ruby Central [#6419](https://github.com/rubygems/rubygems/pull/6419)
48
+
1
49
  # 2.4.7 (February 15, 2023)
2
50
 
3
51
  ## Enhancements:
data/bundler/README.md CHANGED
@@ -46,12 +46,9 @@ If you'd like to contribute to Bundler, that's awesome, and we <3 you. We've put
46
46
 
47
47
  If you'd like to request a substantial change to Bundler or its documentation, refer to the [Bundler RFC process](https://github.com/rubygems/rfcs) for more information.
48
48
 
49
- While some Bundler contributors are compensated by Ruby Together, the project maintainers make decisions independent of Ruby Together. As a project, we welcome contributions regardless of the author's affiliation with Ruby Together.
50
-
51
49
  ### Supporting
52
50
 
53
- <a href="https://rubytogether.org/"><img src="https://rubytogether.org/images/rubies.svg" width="150"></a><br>
54
- <a href="https://rubytogether.org/">Ruby Together</a> pays some Bundler maintainers for their ongoing work. As a grassroots initiative committed to supporting the critical Ruby infrastructure you rely on, Ruby Together is funded entirely by the Ruby community. Contribute today <a href="https://rubytogether.org/developers">as an individual</a> or (better yet) <a href="https://rubytogether.org/companies">as a company</a> to ensure that Bundler, RubyGems, and other shared tooling is around for years to come.
51
+ RubyGems is managed by [Ruby Central](https://rubycentral.org), a non-profit organization that supports the Ruby community through projects like this one, as well as [RubyConf](https://rubyconf.org), [RailsConf](https://railsconf.org), and [RubyGems.org](https://rubygems.org). You can support Ruby Central by attending or [sponsoring](sponsors@rubycentral.org) a conference, or by [joining as a supporting member](https://rubycentral.org/#/portal/signup).
55
52
 
56
53
  ### Code of Conduct
57
54
 
@@ -4,8 +4,8 @@ module Bundler
4
4
  # Represents metadata from when the Bundler gem was built.
5
5
  module BuildMetadata
6
6
  # begin ivars
7
- @built_at = "2023-02-15".freeze
8
- @git_commit_sha = "5d717a27e0".freeze
7
+ @built_at = "2023-03-20".freeze
8
+ @git_commit_sha = "6f8e92bcc6".freeze
9
9
  @release = true
10
10
  # end ivars
11
11
 
@@ -26,10 +26,6 @@ module Bundler
26
26
  @platform
27
27
  end
28
28
 
29
- def identifier
30
- @__identifier ||= [name, version, platform.to_s]
31
- end
32
-
33
29
  # needed for standalone, load required_paths from local gemspec
34
30
  # after the gem is installed
35
31
  def require_paths
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Bundler
4
4
  class EnvironmentPreserver
5
- INTENTIONALLY_NIL = "BUNDLER_ENVIRONMENT_PRESERVER_INTENTIONALLY_NIL".freeze
5
+ INTENTIONALLY_NIL = "BUNDLER_ENVIRONMENT_PRESERVER_INTENTIONALLY_NIL"
6
6
  BUNDLER_KEYS = %w[
7
7
  BUNDLE_BIN_PATH
8
8
  BUNDLE_GEMFILE
@@ -16,7 +16,7 @@ module Bundler
16
16
  RUBYLIB
17
17
  RUBYOPT
18
18
  ].map(&:freeze).freeze
19
- BUNDLER_PREFIX = "BUNDLER_ORIG_".freeze
19
+ BUNDLER_PREFIX = "BUNDLER_ORIG_"
20
20
 
21
21
  def self.from_env
22
22
  new(env_to_hash(ENV), BUNDLER_KEYS)
@@ -34,14 +34,10 @@ module Bundler
34
34
 
35
35
  returned_gems = spec_list.map(&:first).uniq
36
36
  specs(deps_list, full_dependency_list + returned_gems, spec_list + last_spec_list)
37
- rescue MarshalError
37
+ rescue MarshalError, HTTPError, GemspecError
38
38
  Bundler.ui.info "" unless Bundler.ui.debug? # new line now that the dots are over
39
39
  Bundler.ui.debug "could not fetch from the dependency API, trying the full index"
40
40
  nil
41
- rescue HTTPError, GemspecError
42
- Bundler.ui.info "" unless Bundler.ui.debug? # new line now that the dots are over
43
- Bundler.ui.debug "could not fetch from the dependency API\nit's suggested to retry using the full index via `bundle install --full-index`"
44
- nil
45
41
  end
46
42
 
47
43
  def dependency_specs(gem_names)
@@ -102,11 +102,11 @@ module Bundler
102
102
  uri = Bundler::URI.parse("#{remote_uri}#{Gem::MARSHAL_SPEC_DIR}#{spec_file_name}.rz")
103
103
  if uri.scheme == "file"
104
104
  path = Bundler.rubygems.correct_for_windows_path(uri.path)
105
- Bundler.load_marshal Bundler.rubygems.inflate(Gem.read_binary(path))
105
+ Bundler.safe_load_marshal Bundler.rubygems.inflate(Gem.read_binary(path))
106
106
  elsif cached_spec_path = gemspec_cached_path(spec_file_name)
107
107
  Bundler.load_gemspec(cached_spec_path)
108
108
  else
109
- Bundler.load_marshal Bundler.rubygems.inflate(downloader.fetch(uri).body)
109
+ Bundler.safe_load_marshal Bundler.rubygems.inflate(downloader.fetch(uri).body)
110
110
  end
111
111
  rescue MarshalError
112
112
  raise HTTPError, "Gemspec #{spec} contained invalid data.\n" \
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bundler
4
+ #
5
+ # Represents a package name that was found to be incomplete when trying to
6
+ # materialize a fresh resolution or the lockfile.
7
+ #
8
+ # Holds the actual partially complete set of specifications for the name.
9
+ # These are used so that they can be unlocked in a future resolution, and fix
10
+ # the situation.
11
+ #
12
+ class IncompleteSpecification
13
+ attr_reader :name, :partially_complete_specs
14
+
15
+ def initialize(name, partially_complete_specs = [])
16
+ @name = name
17
+ @partially_complete_specs = partially_complete_specs
18
+ end
19
+
20
+ def ==(other)
21
+ partially_complete_specs == other.partially_complete_specs
22
+ end
23
+ end
24
+ end
@@ -13,8 +13,8 @@ module Bundler
13
13
  attr_reader :specs, :all_specs, :sources
14
14
  protected :specs, :all_specs
15
15
 
16
- RUBY = "ruby".freeze
17
- NULL = "\0".freeze
16
+ RUBY = "ruby"
17
+ NULL = "\0"
18
18
 
19
19
  def initialize
20
20
  @sources = []
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Bundler
4
4
  class Injector
5
- INJECTED_GEMS = "injected gems".freeze
5
+ INJECTED_GEMS = "injected gems"
6
6
 
7
7
  def self.inject(new_deps, options = {})
8
8
  injector = new(new_deps, options)
@@ -47,13 +47,6 @@ module Bundler
47
47
  dependencies.all? {|d| installed_specs.include? d.name }
48
48
  end
49
49
 
50
- # Check whether spec's dependencies are missing, which can indicate a
51
- # corrupted lockfile
52
- def dependencies_missing?(all_specs)
53
- spec_names = all_specs.map(&:name)
54
- dependencies.any? {|d| !spec_names.include? d.name }
55
- end
56
-
57
50
  # Represents only the non-development dependencies, the ones that are
58
51
  # itself and are in the total list.
59
52
  def dependencies
@@ -123,11 +116,7 @@ module Bundler
123
116
  unmet_dependencies.each do |spec, unmet_spec_dependencies|
124
117
  unmet_spec_dependencies.each do |unmet_spec_dependency|
125
118
  found = @specs.find {|s| s.name == unmet_spec_dependency.name && !unmet_spec_dependency.matches_spec?(s.spec) }
126
- if found
127
- warning << "* #{unmet_spec_dependency}, dependency of #{spec.full_name}, unsatisfied by #{found.full_name}"
128
- else
129
- warning << "* #{unmet_spec_dependency}, dependency of #{spec.full_name} but missing from lockfile"
130
- end
119
+ warning << "* #{unmet_spec_dependency}, dependency of #{spec.full_name}, unsatisfied by #{found.full_name}"
131
120
  end
132
121
  end
133
122
 
@@ -224,8 +213,6 @@ module Bundler
224
213
  if spec.dependencies_installed? @specs
225
214
  spec.state = :enqueued
226
215
  worker_pool.enq spec
227
- elsif spec.dependencies_missing? @specs
228
- spec.state = :failed
229
216
  end
230
217
  end
231
218
  end
@@ -20,7 +20,7 @@ module Bundler
20
20
  end
21
21
 
22
22
  def full_name
23
- if platform == Gem::Platform::RUBY
23
+ @full_name ||= if platform == Gem::Platform::RUBY
24
24
  "#{@name}-#{@version}"
25
25
  else
26
26
  "#{@name}-#{@version}-#{platform}"
@@ -28,15 +28,15 @@ module Bundler
28
28
  end
29
29
 
30
30
  def ==(other)
31
- identifier == other.identifier
31
+ full_name == other.full_name
32
32
  end
33
33
 
34
34
  def eql?(other)
35
- identifier.eql?(other.identifier)
35
+ full_name.eql?(other.full_name)
36
36
  end
37
37
 
38
38
  def hash
39
- identifier.hash
39
+ full_name.hash
40
40
  end
41
41
 
42
42
  ##
@@ -129,10 +129,6 @@ module Bundler
129
129
  end
130
130
  end
131
131
 
132
- def identifier
133
- @__identifier ||= [name, version, platform.to_s]
134
- end
135
-
136
132
  def git_version
137
133
  return unless source.is_a?(Bundler::Source::Git)
138
134
  " #{source.revision[0..6]}"
@@ -45,7 +45,7 @@ module Bundler
45
45
  # gems with the same name, but different platform
46
46
  # are ordered consistently
47
47
  specs.sort_by(&:full_name).each do |spec|
48
- next if spec.name == "bundler".freeze
48
+ next if spec.name == "bundler"
49
49
  out << spec.to_lock
50
50
  end
51
51
  end
@@ -4,15 +4,15 @@ module Bundler
4
4
  class LockfileParser
5
5
  attr_reader :sources, :dependencies, :specs, :platforms, :bundler_version, :ruby_version
6
6
 
7
- BUNDLED = "BUNDLED WITH".freeze
8
- DEPENDENCIES = "DEPENDENCIES".freeze
9
- PLATFORMS = "PLATFORMS".freeze
10
- RUBY = "RUBY VERSION".freeze
11
- GIT = "GIT".freeze
12
- GEM = "GEM".freeze
13
- PATH = "PATH".freeze
14
- PLUGIN = "PLUGIN SOURCE".freeze
15
- SPECS = " specs:".freeze
7
+ BUNDLED = "BUNDLED WITH"
8
+ DEPENDENCIES = "DEPENDENCIES"
9
+ PLATFORMS = "PLATFORMS"
10
+ RUBY = "RUBY VERSION"
11
+ GIT = "GIT"
12
+ GEM = "GEM"
13
+ PATH = "PATH"
14
+ PLUGIN = "PLUGIN SOURCE"
15
+ SPECS = " specs:"
16
16
  OPTIONS = /^ ([a-z]+): (.*)$/i.freeze
17
17
  SOURCE = [GIT, GEM, PATH, PLUGIN].freeze
18
18
 
@@ -86,7 +86,7 @@ module Bundler
86
86
  send("parse_#{@state}", line)
87
87
  end
88
88
  end
89
- @specs = @specs.values.sort_by(&:identifier)
89
+ @specs = @specs.values.sort_by(&:full_name)
90
90
  rescue ArgumentError => e
91
91
  Bundler.ui.debug(e)
92
92
  raise LockfileError, "Your lockfile is unreadable. Run `rm #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)}` " \
@@ -199,7 +199,7 @@ module Bundler
199
199
  @current_spec.source = @current_source
200
200
  @current_source.add_dependency_names(name)
201
201
 
202
- @specs[@current_spec.identifier] = @current_spec
202
+ @specs[@current_spec.full_name] = @current_spec
203
203
  elsif spaces.size == 6
204
204
  version = version.split(",").map(&:strip) if version
205
205
  dep = Gem::Dependency.new(name, version)
@@ -15,7 +15,7 @@ module Bundler
15
15
  class UnknownSourceError < PluginError; end
16
16
  class PluginInstallError < PluginError; end
17
17
 
18
- PLUGIN_FILE_NAME = "plugins.rb".freeze
18
+ PLUGIN_FILE_NAME = "plugins.rb"
19
19
 
20
20
  module_function
21
21
 
@@ -29,12 +29,8 @@ module Bundler
29
29
  @platform = _remote_specification.platform
30
30
  end
31
31
 
32
- def identifier
33
- @__identifier ||= [name, version, @platform.to_s]
34
- end
35
-
36
32
  def full_name
37
- if @platform == Gem::Platform::RUBY
33
+ @full_name ||= if @platform == Gem::Platform::RUBY
38
34
  "#{@name}-#{@version}"
39
35
  else
40
36
  "#{@name}-#{@version}-#{@platform}"
@@ -106,7 +102,7 @@ module Bundler
106
102
  def _remote_specification
107
103
  @_remote_specification ||= @spec_fetcher.fetch_spec([@name, @version, @original_platform])
108
104
  @_remote_specification || raise(GemspecError, "Gemspec data for #{full_name} was" \
109
- " missing from the server! Try installing with `--full-index` as a workaround.")
105
+ " missing from the server!")
110
106
  end
111
107
 
112
108
  def method_missing(method, *args, &blk)
@@ -34,9 +34,11 @@ module Bundler
34
34
  @base[name]
35
35
  end
36
36
 
37
- def delete(specs)
38
- specs.each do |spec|
39
- @base.delete(spec)
37
+ def delete(incomplete_specs)
38
+ incomplete_specs.each do |incomplete_spec|
39
+ incomplete_spec.partially_complete_specs.each do |spec|
40
+ @base.delete(spec)
41
+ end
40
42
  end
41
43
  end
42
44
 
@@ -37,7 +37,9 @@ module Bundler
37
37
  root_version = Resolver::Candidate.new(0)
38
38
 
39
39
  @all_specs = Hash.new do |specs, name|
40
- specs[name] = source_for(name).specs.search(name).sort_by {|s| [s.version, s.platform.to_s] }
40
+ specs[name] = source_for(name).specs.search(name).reject do |s|
41
+ s.dependencies.any? {|d| d.name == name && !d.requirement.satisfied_by?(s.version) } # ignore versions that depend on themselves incorrectly
42
+ end.sort_by {|s| [s.version, s.platform.to_s] }
41
43
  end
42
44
 
43
45
  @sorted_versions = Hash.new do |candidates, package|
@@ -55,7 +57,7 @@ module Bundler
55
57
  { root_version => root_dependencies }
56
58
  else
57
59
  Hash.new do |versions, version|
58
- versions[version] = to_dependency_hash(version.dependencies, @packages)
60
+ versions[version] = to_dependency_hash(version.dependencies.reject {|d| d.name == package.name }, @packages)
59
61
  end
60
62
  end
61
63
  end
@@ -186,11 +188,6 @@ module Bundler
186
188
  package_deps = @cached_dependencies[package]
187
189
  sorted_versions = @sorted_versions[package]
188
190
  package_deps[version].map do |dep_package, dep_constraint|
189
- if package == dep_package
190
- cause = PubGrub::Incompatibility::CircularDependency.new(dep_package, dep_constraint.constraint_string)
191
- return [PubGrub::Incompatibility.new([PubGrub::Term.new(dep_constraint, true)], :cause => cause)]
192
- end
193
-
194
191
  low = high = sorted_versions.index(version)
195
192
 
196
193
  # find version low such that all >= low share the same dep
@@ -243,7 +240,7 @@ module Bundler
243
240
  ruby_specs = select_best_platform_match(specs, Gem::Platform::RUBY)
244
241
  groups << Resolver::Candidate.new(version, :specs => ruby_specs) if ruby_specs.any?
245
242
 
246
- next groups if platform_specs == ruby_specs
243
+ next groups if platform_specs == ruby_specs || package.force_ruby_platform?
247
244
 
248
245
  groups << Resolver::Candidate.new(version, :specs => platform_specs)
249
246
 
@@ -302,7 +299,7 @@ module Bundler
302
299
  end
303
300
 
304
301
  def filter_prereleases(specs, package)
305
- return specs unless package.ignores_prereleases?
302
+ return specs unless package.ignores_prereleases? && specs.size > 1
306
303
 
307
304
  specs.reject {|s| s.version.prerelease? }
308
305
  end
@@ -453,7 +453,7 @@ module Bundler
453
453
  fetcher = gem_remote_fetcher
454
454
  fetcher.headers = { "X-Gemfile-Source" => remote.original_uri.to_s } if remote.original_uri
455
455
  string = fetcher.fetch_path(path)
456
- Bundler.load_marshal(string)
456
+ Bundler.safe_load_marshal(string)
457
457
  rescue Gem::RemoteFetcher::FetchError
458
458
  # it's okay for prerelease to fail
459
459
  raise unless name == "prerelease_specs"
@@ -495,7 +495,7 @@ module Bundler
495
495
  uri = $2
496
496
  suffix = $3
497
497
  end
498
- uri = "#{uri}/" unless uri.end_with?("/")
498
+ uri = URINormalizer.normalize_suffix(uri)
499
499
  require_relative "vendored_uri"
500
500
  uri = Bundler::URI(uri)
501
501
  unless uri.absolute?
@@ -12,7 +12,10 @@ if Bundler::SharedHelpers.in_bundle?
12
12
  Bundler.ui.error e.message
13
13
  Bundler.ui.warn e.backtrace.join("\n") if ENV["DEBUG"]
14
14
  if e.is_a?(Bundler::GemNotFound)
15
- Bundler.ui.warn "Run `bundle install` to install missing gems."
15
+ suggested_cmd = "bundle install"
16
+ original_gemfile = Bundler.original_env["BUNDLE_GEMFILE"]
17
+ suggested_cmd += " --gemfile #{original_gemfile}" if original_gemfile
18
+ Bundler.ui.warn "Run `#{suggested_cmd}` to install missing gems."
16
19
  end
17
20
  exit e.status_code
18
21
  end
@@ -160,7 +160,7 @@ module Bundler
160
160
  " (was expecting #{old_deps.map(&:to_s)}, but the real spec has #{new_deps.map(&:to_s)})"
161
161
  raise APIResponseMismatchError,
162
162
  "Downloading #{spec.full_name} revealed dependencies not in the API or the lockfile (#{extra_deps.join(", ")})." \
163
- "\nEither installing with `--full-index` or running `bundle update #{spec.name}` should fix the problem."
163
+ "\nRunning `bundle update #{spec.name}` should fix the problem."
164
164
  end
165
165
 
166
166
  def pretty_dependency(dep)