rubygems-update 3.4.7 → 3.4.9

Sign up to get free protection for your applications and to get access to all the features.
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)