rubygems-update 4.0.9 → 4.0.11
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +22 -0
- data/bundler/CHANGELOG.md +32 -0
- data/bundler/lib/bundler/build_metadata.rb +1 -1
- data/bundler/lib/bundler/cli/gem.rb +1 -1
- data/bundler/lib/bundler/definition.rb +2 -0
- data/bundler/lib/bundler/injector.rb +1 -2
- data/bundler/lib/bundler/installer/parallel_installer.rb +11 -19
- data/bundler/lib/bundler/lockfile_generator.rb +16 -1
- data/bundler/lib/bundler/lockfile_parser.rb +8 -1
- data/bundler/lib/bundler/man/bundle-add.1 +1 -1
- data/bundler/lib/bundler/man/bundle-binstubs.1 +1 -1
- data/bundler/lib/bundler/man/bundle-cache.1 +1 -1
- data/bundler/lib/bundler/man/bundle-check.1 +1 -1
- data/bundler/lib/bundler/man/bundle-clean.1 +1 -1
- data/bundler/lib/bundler/man/bundle-config.1 +2 -2
- data/bundler/lib/bundler/man/bundle-config.1.ronn +1 -1
- data/bundler/lib/bundler/man/bundle-console.1 +1 -1
- data/bundler/lib/bundler/man/bundle-doctor.1 +1 -1
- data/bundler/lib/bundler/man/bundle-env.1 +1 -1
- data/bundler/lib/bundler/man/bundle-exec.1 +1 -1
- data/bundler/lib/bundler/man/bundle-fund.1 +1 -1
- data/bundler/lib/bundler/man/bundle-gem.1 +1 -1
- data/bundler/lib/bundler/man/bundle-help.1 +1 -1
- data/bundler/lib/bundler/man/bundle-info.1 +1 -1
- data/bundler/lib/bundler/man/bundle-init.1 +1 -1
- data/bundler/lib/bundler/man/bundle-install.1 +1 -1
- data/bundler/lib/bundler/man/bundle-issue.1 +1 -1
- data/bundler/lib/bundler/man/bundle-licenses.1 +1 -1
- data/bundler/lib/bundler/man/bundle-list.1 +1 -1
- data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
- data/bundler/lib/bundler/man/bundle-open.1 +1 -1
- data/bundler/lib/bundler/man/bundle-outdated.1 +1 -1
- data/bundler/lib/bundler/man/bundle-platform.1 +1 -1
- data/bundler/lib/bundler/man/bundle-plugin.1 +1 -1
- data/bundler/lib/bundler/man/bundle-pristine.1 +1 -1
- data/bundler/lib/bundler/man/bundle-remove.1 +1 -1
- data/bundler/lib/bundler/man/bundle-show.1 +1 -1
- data/bundler/lib/bundler/man/bundle-update.1 +1 -1
- data/bundler/lib/bundler/man/bundle-version.1 +1 -1
- data/bundler/lib/bundler/man/bundle.1 +1 -1
- data/bundler/lib/bundler/man/gemfile.5 +1 -1
- data/bundler/lib/bundler/resolver/strategy.rb +6 -3
- data/bundler/lib/bundler/resolver.rb +18 -0
- data/bundler/lib/bundler/settings/validator.rb +7 -0
- data/bundler/lib/bundler/settings.rb +1 -0
- data/bundler/lib/bundler/source/metadata.rb +4 -0
- data/bundler/lib/bundler/source/rubygems.rb +1 -1
- data/bundler/lib/bundler/stub_specification.rb +1 -0
- data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +10 -1
- data/bundler/lib/bundler/version.rb +1 -1
- data/doc/MAINTAINERS.txt +6 -0
- data/lib/rubygems/commands/pristine_command.rb +5 -0
- data/lib/rubygems/commands/specification_command.rb +3 -3
- data/lib/rubygems/package.rb +9 -0
- data/lib/rubygems/specification.rb +1 -0
- data/lib/rubygems/stub_specification.rb +1 -0
- data/lib/rubygems/util/licenses.rb +33 -0
- data/lib/rubygems/version.rb +61 -37
- data/lib/rubygems.rb +11 -3
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: '096dab65b2e989b2033cbf8aff7d547855316525f62a0303db2a78c936913ae1'
|
|
4
|
+
data.tar.gz: ccaf6e838015f6379612821a3b5d9302191602c43e6ce638e85f6698f5e07f50
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 93585d30c81cd070091f3a36919bcc95d603824aef4d275ce76c203a2d827ff3418e7417fee889215f4fde8d96fe79faaa1b171386856127f8cbf4aaf3fce5c4
|
|
7
|
+
data.tar.gz: def8489db13223f31532db270f844add16fe82279f46b45fab175d7f7e8989a44300a814a750ebc69ee4851df48608ebf4e1e784edb1dd10534a572b92d06678
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 4.0.11 / 2026-04-30
|
|
4
|
+
|
|
5
|
+
### Enhancements:
|
|
6
|
+
|
|
7
|
+
* Add commented-out rubygems_mfa_required to bundle gem template. Pull request [#9487](https://github.com/ruby/rubygems/pull/9487) by MatheusRich
|
|
8
|
+
* Clarify the name and meaning of the first argument to `gem spec`. Pull request [#9476](https://github.com/ruby/rubygems/pull/9476) by eregon
|
|
9
|
+
* Installs bundler 4.0.11 as a default gem.
|
|
10
|
+
|
|
11
|
+
## 4.0.10 / 2026-04-08
|
|
12
|
+
|
|
13
|
+
### Enhancements:
|
|
14
|
+
|
|
15
|
+
* Ignore warnings with spec different platforms. Pull request [#8508](https://github.com/ruby/rubygems/pull/8508) by hsbt
|
|
16
|
+
* Better algorithm for sorting gem version. Pull request [#9421](https://github.com/ruby/rubygems/pull/9421) by Edouard-chin
|
|
17
|
+
* Update SPDX license list as of 2026-02-20. Pull request [#9434](https://github.com/ruby/rubygems/pull/9434) by hsbt
|
|
18
|
+
* Installs bundler 4.0.10 as a default gem.
|
|
19
|
+
|
|
20
|
+
### Bug fixes:
|
|
21
|
+
|
|
22
|
+
* Register native extension files in default spec map. Pull request [#9431](https://github.com/ruby/rubygems/pull/9431) by hsbt
|
|
23
|
+
* Fix NoMethodError in Gem.try_activate when activation conflicts occur. Pull request [#9404](https://github.com/ruby/rubygems/pull/9404) by hsbt
|
|
24
|
+
|
|
3
25
|
## 4.0.9 / 2026-03-25
|
|
4
26
|
|
|
5
27
|
### Enhancements:
|
data/bundler/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,37 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 4.0.11 / 2026-04-30
|
|
4
|
+
|
|
5
|
+
### Enhancements:
|
|
6
|
+
|
|
7
|
+
* Update gem creation guide URL to rubygems.org. Pull request [#9500](https://github.com/ruby/rubygems/pull/9500) by nissyi-gh
|
|
8
|
+
* Lock the checksum of Bundler itself in the lockfile. Pull request [#9366](https://github.com/ruby/rubygems/pull/9366) by Edouard-chin
|
|
9
|
+
|
|
10
|
+
### Bug fixes:
|
|
11
|
+
|
|
12
|
+
* Fix installing gems with native extensions + transitive dependencies. Pull request [#9477](https://github.com/ruby/rubygems/pull/9477) by nicholasdower
|
|
13
|
+
* Fix the bundler version not being updated in dev/test lockfile. Pull request [#9463](https://github.com/ruby/rubygems/pull/9463) by Edouard-chin
|
|
14
|
+
* Ensure the release CI doesn't break due to the Bundler checksum feature. Pull request [#9436](https://github.com/ruby/rubygems/pull/9436) by Edouard-chin
|
|
15
|
+
|
|
16
|
+
### Documentation:
|
|
17
|
+
|
|
18
|
+
* Fix formatting for BUNDLE_PREFER_PATCH variable in man page. Pull request [#9474](https://github.com/ruby/rubygems/pull/9474) by toy
|
|
19
|
+
|
|
20
|
+
## 4.0.10 / 2026-04-08
|
|
21
|
+
|
|
22
|
+
### Enhancements:
|
|
23
|
+
|
|
24
|
+
* Ignore warnings with spec different platforms. Pull request [#8508](https://github.com/ruby/rubygems/pull/8508) by hsbt
|
|
25
|
+
* Improve error message when current platform is not in lockfile. Pull request [#9439](https://github.com/ruby/rubygems/pull/9439) by 55728
|
|
26
|
+
* Cache package version selection. Pull request [#9410](https://github.com/ruby/rubygems/pull/9410) by Edouard-chin
|
|
27
|
+
* Check happy path first when comparing gem version. Pull request [#9417](https://github.com/ruby/rubygems/pull/9417) by Edouard-chin
|
|
28
|
+
* [feature] default_cli_command for config what command bundler runs when no specific command is provided. Pull request [#8886](https://github.com/ruby/rubygems/pull/8886) by jonbarlo
|
|
29
|
+
* Introduce a fast path for comparing Gem::Version. Pull request [#9414](https://github.com/ruby/rubygems/pull/9414) by Edouard-chin
|
|
30
|
+
|
|
31
|
+
### Bug fixes:
|
|
32
|
+
|
|
33
|
+
* Restore rb_sys dependency for Rust. Pull request [#9416](https://github.com/ruby/rubygems/pull/9416) by bangseongbeom
|
|
34
|
+
|
|
3
35
|
## 4.0.9 / 2026-03-25
|
|
4
36
|
|
|
5
37
|
### Enhancements:
|
|
@@ -288,7 +288,7 @@ module Bundler
|
|
|
288
288
|
open_editor(options["edit"], target.join("#{name}.gemspec")) if options[:edit]
|
|
289
289
|
|
|
290
290
|
Bundler.ui.info "\nGem '#{name}' was successfully created. " \
|
|
291
|
-
"For more information on making a RubyGem visit https://
|
|
291
|
+
"For more information on making a RubyGem visit https://guides.rubygems.org/make-your-own-gem/"
|
|
292
292
|
end
|
|
293
293
|
|
|
294
294
|
private
|
|
@@ -80,11 +80,10 @@ module Bundler
|
|
|
80
80
|
def conservative_version(spec)
|
|
81
81
|
version = spec.version
|
|
82
82
|
return ">= 0" if version.nil?
|
|
83
|
-
segments = version.segments
|
|
84
83
|
seg_end_index = version >= Gem::Version.new("1.0") ? 1 : 2
|
|
85
84
|
|
|
86
85
|
prerelease_suffix = version.to_s.delete_prefix(version.release.to_s) if version.prerelease?
|
|
87
|
-
"#{version_prefix}#{segments[0..seg_end_index].join(".")}#{prerelease_suffix}"
|
|
86
|
+
"#{version_prefix}#{version.segments[0..seg_end_index].join(".")}#{prerelease_suffix}"
|
|
88
87
|
end
|
|
89
88
|
|
|
90
89
|
def version_prefix
|
|
@@ -6,7 +6,7 @@ require_relative "gem_installer"
|
|
|
6
6
|
module Bundler
|
|
7
7
|
class ParallelInstaller
|
|
8
8
|
class SpecInstallation
|
|
9
|
-
attr_accessor :spec, :name, :full_name, :post_install_message, :state, :error
|
|
9
|
+
attr_accessor :spec, :name, :full_name, :post_install_message, :state, :error, :dependencies
|
|
10
10
|
def initialize(spec)
|
|
11
11
|
@spec = spec
|
|
12
12
|
@name = spec.name
|
|
@@ -46,25 +46,11 @@ module Bundler
|
|
|
46
46
|
!post_install_message.empty?
|
|
47
47
|
end
|
|
48
48
|
|
|
49
|
-
|
|
50
|
-
dep.type == :development || dep.name == @name
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
# Checks installed dependencies against spec's dependencies to make
|
|
54
|
-
# sure needed dependencies have been installed.
|
|
49
|
+
# Recursively checks that all dependencies (direct and transitive) have been installed.
|
|
55
50
|
def dependencies_installed?(installed_specs)
|
|
56
|
-
dependencies.all?
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
# Represents only the non-development dependencies, the ones that are
|
|
60
|
-
# itself and are in the total list.
|
|
61
|
-
def dependencies
|
|
62
|
-
@dependencies ||= all_dependencies.reject {|dep| ignorable_dependency? dep }
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
# Represents all dependencies
|
|
66
|
-
def all_dependencies
|
|
67
|
-
@spec.dependencies
|
|
51
|
+
dependencies.all? do |dep|
|
|
52
|
+
installed_specs.include?(dep.name) && dep.dependencies_installed?(installed_specs)
|
|
53
|
+
end
|
|
68
54
|
end
|
|
69
55
|
|
|
70
56
|
def to_s
|
|
@@ -85,6 +71,12 @@ module Bundler
|
|
|
85
71
|
@force = force
|
|
86
72
|
@local = local
|
|
87
73
|
@specs = all_specs.map {|s| SpecInstallation.new(s) }
|
|
74
|
+
specs_by_name = @specs.to_h {|s| [s.name, s] }
|
|
75
|
+
@specs.each do |spec_install|
|
|
76
|
+
spec_install.dependencies = spec_install.spec.dependencies.filter_map do |dep|
|
|
77
|
+
specs_by_name[dep.name] unless dep.type == :development || dep.name == spec_install.name
|
|
78
|
+
end
|
|
79
|
+
end
|
|
88
80
|
@specs.each do |spec_install|
|
|
89
81
|
spec_install.state = :installed if skip.include?(spec_install.name)
|
|
90
82
|
end if skip
|
|
@@ -71,7 +71,8 @@ module Bundler
|
|
|
71
71
|
checksums = definition.resolve.map do |spec|
|
|
72
72
|
spec.source.checksum_store.to_lock(spec)
|
|
73
73
|
end
|
|
74
|
-
|
|
74
|
+
|
|
75
|
+
add_section("CHECKSUMS", checksums + bundler_checksum)
|
|
75
76
|
end
|
|
76
77
|
|
|
77
78
|
def add_locked_ruby_version
|
|
@@ -100,5 +101,19 @@ module Bundler
|
|
|
100
101
|
raise ArgumentError, "#{value.inspect} can't be serialized in a lockfile"
|
|
101
102
|
end
|
|
102
103
|
end
|
|
104
|
+
|
|
105
|
+
def bundler_checksum
|
|
106
|
+
return [] if Bundler.gem_version.to_s.end_with?(".dev") || ENV["SKIP_BUNDLER_CHECKSUM"]
|
|
107
|
+
|
|
108
|
+
bundler_spec = definition.sources.metadata_source.specs.search(["bundler", Bundler.gem_version]).last
|
|
109
|
+
return [] unless File.exist?(bundler_spec.cache_file)
|
|
110
|
+
|
|
111
|
+
require "rubygems/package"
|
|
112
|
+
|
|
113
|
+
package = Gem::Package.new(bundler_spec.cache_file)
|
|
114
|
+
definition.sources.metadata_source.checksum_store.register(bundler_spec, Checksum.from_gem_package(package))
|
|
115
|
+
|
|
116
|
+
[definition.sources.metadata_source.checksum_store.to_lock(bundler_spec)]
|
|
117
|
+
end
|
|
103
118
|
end
|
|
104
119
|
end
|
|
@@ -28,6 +28,7 @@ module Bundler
|
|
|
28
28
|
|
|
29
29
|
attr_reader(
|
|
30
30
|
:sources,
|
|
31
|
+
:metadata_source,
|
|
31
32
|
:dependencies,
|
|
32
33
|
:specs,
|
|
33
34
|
:platforms,
|
|
@@ -97,6 +98,7 @@ module Bundler
|
|
|
97
98
|
def initialize(lockfile, strict: false)
|
|
98
99
|
@platforms = []
|
|
99
100
|
@sources = []
|
|
101
|
+
@metadata_source = Source::Metadata.new
|
|
100
102
|
@dependencies = {}
|
|
101
103
|
@parse_method = nil
|
|
102
104
|
@specs = {}
|
|
@@ -252,7 +254,12 @@ module Bundler
|
|
|
252
254
|
version = Gem::Version.new(version)
|
|
253
255
|
platform = platform ? Gem::Platform.new(platform) : Gem::Platform::RUBY
|
|
254
256
|
full_name = Gem::NameTuple.new(name, version, platform).full_name
|
|
255
|
-
|
|
257
|
+
spec = @specs[full_name]
|
|
258
|
+
|
|
259
|
+
if name == "bundler"
|
|
260
|
+
spec ||= LazySpecification.new(name, version, platform, @metadata_source)
|
|
261
|
+
end
|
|
262
|
+
return unless spec
|
|
256
263
|
|
|
257
264
|
if checksums
|
|
258
265
|
checksums.split(",") do |lock_checksum|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.\" generated with Ronn-NG/v0.10.1
|
|
2
2
|
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
|
|
3
|
-
.TH "BUNDLE\-BINSTUBS" "1" "
|
|
3
|
+
.TH "BUNDLE\-BINSTUBS" "1" "April 2026" ""
|
|
4
4
|
.SH "NAME"
|
|
5
5
|
\fBbundle\-binstubs\fR \- Install the binstubs of the listed gems
|
|
6
6
|
.SH "SYNOPSIS"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.\" generated with Ronn-NG/v0.10.1
|
|
2
2
|
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
|
|
3
|
-
.TH "BUNDLE\-CACHE" "1" "
|
|
3
|
+
.TH "BUNDLE\-CACHE" "1" "April 2026" ""
|
|
4
4
|
.SH "NAME"
|
|
5
5
|
\fBbundle\-cache\fR \- Package your needed \fB\.gem\fR files into your application
|
|
6
6
|
.SH "SYNOPSIS"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.\" generated with Ronn-NG/v0.10.1
|
|
2
2
|
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
|
|
3
|
-
.TH "BUNDLE\-CHECK" "1" "
|
|
3
|
+
.TH "BUNDLE\-CHECK" "1" "April 2026" ""
|
|
4
4
|
.SH "NAME"
|
|
5
5
|
\fBbundle\-check\fR \- Verifies if dependencies are satisfied by installed gems
|
|
6
6
|
.SH "SYNOPSIS"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.\" generated with Ronn-NG/v0.10.1
|
|
2
2
|
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
|
|
3
|
-
.TH "BUNDLE\-CLEAN" "1" "
|
|
3
|
+
.TH "BUNDLE\-CLEAN" "1" "April 2026" ""
|
|
4
4
|
.SH "NAME"
|
|
5
5
|
\fBbundle\-clean\fR \- Cleans up unused gems in your bundler directory
|
|
6
6
|
.SH "SYNOPSIS"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.\" generated with Ronn-NG/v0.10.1
|
|
2
2
|
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
|
|
3
|
-
.TH "BUNDLE\-CONFIG" "1" "
|
|
3
|
+
.TH "BUNDLE\-CONFIG" "1" "April 2026" ""
|
|
4
4
|
.SH "NAME"
|
|
5
5
|
\fBbundle\-config\fR \- Set bundler configuration options
|
|
6
6
|
.SH "SYNOPSIS"
|
|
@@ -172,7 +172,7 @@ Whether Bundler will install gems into the default system path (\fBGem\.dir\fR)\
|
|
|
172
172
|
\fBplugins\fR (\fBBUNDLE_PLUGINS\fR)
|
|
173
173
|
Enable Bundler's experimental plugin system\.
|
|
174
174
|
.TP
|
|
175
|
-
\fBprefer_patch\fR (
|
|
175
|
+
\fBprefer_patch\fR (\fBBUNDLE_PREFER_PATCH\fR)
|
|
176
176
|
Prefer updating only to next patch version during updates\. Makes \fBbundle update\fR calls equivalent to \fBbundler update \-\-patch\fR\.
|
|
177
177
|
.TP
|
|
178
178
|
\fBredirect\fR (\fBBUNDLE_REDIRECT\fR)
|
|
@@ -223,7 +223,7 @@ learn more about their operation in [bundle install(1)](bundle-install.1.html).
|
|
|
223
223
|
Whether Bundler will install gems into the default system path (`Gem.dir`).
|
|
224
224
|
* `plugins` (`BUNDLE_PLUGINS`):
|
|
225
225
|
Enable Bundler's experimental plugin system.
|
|
226
|
-
* `prefer_patch` (BUNDLE_PREFER_PATCH):
|
|
226
|
+
* `prefer_patch` (`BUNDLE_PREFER_PATCH`):
|
|
227
227
|
Prefer updating only to next patch version during updates. Makes `bundle update` calls equivalent to `bundler update --patch`.
|
|
228
228
|
* `redirect` (`BUNDLE_REDIRECT`):
|
|
229
229
|
The number of redirects allowed for network requests. Defaults to `5`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.\" generated with Ronn-NG/v0.10.1
|
|
2
2
|
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
|
|
3
|
-
.TH "BUNDLE\-CONSOLE" "1" "
|
|
3
|
+
.TH "BUNDLE\-CONSOLE" "1" "April 2026" ""
|
|
4
4
|
.SH "NAME"
|
|
5
5
|
\fBbundle\-console\fR \- Open an IRB session with the bundle pre\-loaded
|
|
6
6
|
.SH "SYNOPSIS"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.\" generated with Ronn-NG/v0.10.1
|
|
2
2
|
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
|
|
3
|
-
.TH "BUNDLE\-ENV" "1" "
|
|
3
|
+
.TH "BUNDLE\-ENV" "1" "April 2026" ""
|
|
4
4
|
.SH "NAME"
|
|
5
5
|
\fBbundle\-env\fR \- Print information about the environment Bundler is running under
|
|
6
6
|
.SH "SYNOPSIS"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.\" generated with Ronn-NG/v0.10.1
|
|
2
2
|
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
|
|
3
|
-
.TH "BUNDLE\-EXEC" "1" "
|
|
3
|
+
.TH "BUNDLE\-EXEC" "1" "April 2026" ""
|
|
4
4
|
.SH "NAME"
|
|
5
5
|
\fBbundle\-exec\fR \- Execute a command in the context of the bundle
|
|
6
6
|
.SH "SYNOPSIS"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.\" generated with Ronn-NG/v0.10.1
|
|
2
2
|
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
|
|
3
|
-
.TH "BUNDLE\-FUND" "1" "
|
|
3
|
+
.TH "BUNDLE\-FUND" "1" "April 2026" ""
|
|
4
4
|
.SH "NAME"
|
|
5
5
|
\fBbundle\-fund\fR \- Lists information about gems seeking funding assistance
|
|
6
6
|
.SH "SYNOPSIS"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.\" generated with Ronn-NG/v0.10.1
|
|
2
2
|
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
|
|
3
|
-
.TH "BUNDLE\-GEM" "1" "
|
|
3
|
+
.TH "BUNDLE\-GEM" "1" "April 2026" ""
|
|
4
4
|
.SH "NAME"
|
|
5
5
|
\fBbundle\-gem\fR \- Generate a project skeleton for creating a rubygem
|
|
6
6
|
.SH "SYNOPSIS"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.\" generated with Ronn-NG/v0.10.1
|
|
2
2
|
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
|
|
3
|
-
.TH "BUNDLE\-INFO" "1" "
|
|
3
|
+
.TH "BUNDLE\-INFO" "1" "April 2026" ""
|
|
4
4
|
.SH "NAME"
|
|
5
5
|
\fBbundle\-info\fR \- Show information for the given gem in your bundle
|
|
6
6
|
.SH "SYNOPSIS"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.\" generated with Ronn-NG/v0.10.1
|
|
2
2
|
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
|
|
3
|
-
.TH "BUNDLE\-INIT" "1" "
|
|
3
|
+
.TH "BUNDLE\-INIT" "1" "April 2026" ""
|
|
4
4
|
.SH "NAME"
|
|
5
5
|
\fBbundle\-init\fR \- Generates a Gemfile into the current working directory
|
|
6
6
|
.SH "SYNOPSIS"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.\" generated with Ronn-NG/v0.10.1
|
|
2
2
|
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
|
|
3
|
-
.TH "BUNDLE\-INSTALL" "1" "
|
|
3
|
+
.TH "BUNDLE\-INSTALL" "1" "April 2026" ""
|
|
4
4
|
.SH "NAME"
|
|
5
5
|
\fBbundle\-install\fR \- Install the dependencies specified in your Gemfile
|
|
6
6
|
.SH "SYNOPSIS"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.\" generated with Ronn-NG/v0.10.1
|
|
2
2
|
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
|
|
3
|
-
.TH "BUNDLE\-LICENSES" "1" "
|
|
3
|
+
.TH "BUNDLE\-LICENSES" "1" "April 2026" ""
|
|
4
4
|
.SH "NAME"
|
|
5
5
|
\fBbundle\-licenses\fR \- Print the license of all gems in the bundle
|
|
6
6
|
.SH "SYNOPSIS"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.\" generated with Ronn-NG/v0.10.1
|
|
2
2
|
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
|
|
3
|
-
.TH "BUNDLE\-LOCK" "1" "
|
|
3
|
+
.TH "BUNDLE\-LOCK" "1" "April 2026" ""
|
|
4
4
|
.SH "NAME"
|
|
5
5
|
\fBbundle\-lock\fR \- Creates / Updates a lockfile without installing
|
|
6
6
|
.SH "SYNOPSIS"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.\" generated with Ronn-NG/v0.10.1
|
|
2
2
|
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
|
|
3
|
-
.TH "BUNDLE\-OPEN" "1" "
|
|
3
|
+
.TH "BUNDLE\-OPEN" "1" "April 2026" ""
|
|
4
4
|
.SH "NAME"
|
|
5
5
|
\fBbundle\-open\fR \- Opens the source directory for a gem in your bundle
|
|
6
6
|
.SH "SYNOPSIS"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.\" generated with Ronn-NG/v0.10.1
|
|
2
2
|
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
|
|
3
|
-
.TH "BUNDLE\-OUTDATED" "1" "
|
|
3
|
+
.TH "BUNDLE\-OUTDATED" "1" "April 2026" ""
|
|
4
4
|
.SH "NAME"
|
|
5
5
|
\fBbundle\-outdated\fR \- List installed gems with newer versions available
|
|
6
6
|
.SH "SYNOPSIS"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.\" generated with Ronn-NG/v0.10.1
|
|
2
2
|
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
|
|
3
|
-
.TH "BUNDLE\-PLATFORM" "1" "
|
|
3
|
+
.TH "BUNDLE\-PLATFORM" "1" "April 2026" ""
|
|
4
4
|
.SH "NAME"
|
|
5
5
|
\fBbundle\-platform\fR \- Displays platform compatibility information
|
|
6
6
|
.SH "SYNOPSIS"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.\" generated with Ronn-NG/v0.10.1
|
|
2
2
|
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
|
|
3
|
-
.TH "BUNDLE\-PRISTINE" "1" "
|
|
3
|
+
.TH "BUNDLE\-PRISTINE" "1" "April 2026" ""
|
|
4
4
|
.SH "NAME"
|
|
5
5
|
\fBbundle\-pristine\fR \- Restores installed gems to their pristine condition
|
|
6
6
|
.SH "SYNOPSIS"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.\" generated with Ronn-NG/v0.10.1
|
|
2
2
|
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
|
|
3
|
-
.TH "BUNDLE\-SHOW" "1" "
|
|
3
|
+
.TH "BUNDLE\-SHOW" "1" "April 2026" ""
|
|
4
4
|
.SH "NAME"
|
|
5
5
|
\fBbundle\-show\fR \- Shows all the gems in your bundle, or the path to a gem
|
|
6
6
|
.SH "SYNOPSIS"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
.\" generated with Ronn-NG/v0.10.1
|
|
2
2
|
.\" http://github.com/apjanke/ronn-ng/tree/0.10.1
|
|
3
|
-
.TH "BUNDLE\-UPDATE" "1" "
|
|
3
|
+
.TH "BUNDLE\-UPDATE" "1" "April 2026" ""
|
|
4
4
|
.SH "NAME"
|
|
5
5
|
\fBbundle\-update\fR \- Update your gems to the latest available versions
|
|
6
6
|
.SH "SYNOPSIS"
|
|
@@ -5,6 +5,7 @@ module Bundler
|
|
|
5
5
|
class Strategy
|
|
6
6
|
def initialize(source)
|
|
7
7
|
@source = source
|
|
8
|
+
@package_priority_cache = {}
|
|
8
9
|
end
|
|
9
10
|
|
|
10
11
|
def next_package_and_version(unsatisfied)
|
|
@@ -17,10 +18,12 @@ module Bundler
|
|
|
17
18
|
|
|
18
19
|
def next_term_to_try_from(unsatisfied)
|
|
19
20
|
unsatisfied.min_by do |package, range|
|
|
20
|
-
|
|
21
|
-
|
|
21
|
+
@package_priority_cache[[package, range]] ||= begin
|
|
22
|
+
matching_versions = @source.versions_for(package, range)
|
|
23
|
+
higher_versions = @source.versions_for(package, range.upper_invert)
|
|
22
24
|
|
|
23
|
-
|
|
25
|
+
[matching_versions.count <= 1 ? 0 : 1, higher_versions.count]
|
|
26
|
+
end
|
|
24
27
|
end
|
|
25
28
|
end
|
|
26
29
|
|
|
@@ -353,9 +353,27 @@ module Bundler
|
|
|
353
353
|
message << "\n#{other_specs_matching_message(specs, matching_part)}"
|
|
354
354
|
end
|
|
355
355
|
|
|
356
|
+
if specs_matching_requirement.any? && (hint = platform_mismatch_hint)
|
|
357
|
+
message << "\n\n#{hint}"
|
|
358
|
+
end
|
|
359
|
+
|
|
356
360
|
raise GemNotFound, message
|
|
357
361
|
end
|
|
358
362
|
|
|
363
|
+
def platform_mismatch_hint
|
|
364
|
+
locked_platforms = Bundler.locked_gems&.platforms
|
|
365
|
+
return unless locked_platforms
|
|
366
|
+
|
|
367
|
+
local_platform = Bundler.local_platform
|
|
368
|
+
return if locked_platforms.include?(local_platform)
|
|
369
|
+
return if locked_platforms.any? {|p| p == Gem::Platform::RUBY }
|
|
370
|
+
|
|
371
|
+
"Your current platform (#{local_platform}) is not included in the lockfile's platforms (#{locked_platforms.join(", ")}). " \
|
|
372
|
+
"Add the current platform to the lockfile with\n`bundle lock --add-platform #{local_platform}` and try again."
|
|
373
|
+
rescue GemfileNotFound
|
|
374
|
+
nil
|
|
375
|
+
end
|
|
376
|
+
|
|
359
377
|
def filtered_versions_for(package)
|
|
360
378
|
@gem_version_promoter.filter_versions(package, @all_versions[package])
|
|
361
379
|
end
|
|
@@ -74,6 +74,13 @@ module Bundler
|
|
|
74
74
|
fail!(key, value, "`#{other_key}` is current set to #{other_setting.inspect}", "the `#{conflicting.join("`, `")}` groups conflict")
|
|
75
75
|
end
|
|
76
76
|
end
|
|
77
|
+
|
|
78
|
+
rule %w[default_cli_command], "default_cli_command must be either 'install' or 'cli_help'" do |key, value, _settings|
|
|
79
|
+
valid_values = %w[install cli_help]
|
|
80
|
+
if !value.nil? && !valid_values.include?(value.to_s)
|
|
81
|
+
fail!(key, value, "must be one of: #{valid_values.join(", ")}")
|
|
82
|
+
end
|
|
83
|
+
end
|
|
77
84
|
end
|
|
78
85
|
end
|
|
79
86
|
end
|
|
@@ -508,7 +508,7 @@ module Bundler
|
|
|
508
508
|
|
|
509
509
|
# We are using a mutex to reaed and write from/to the hash.
|
|
510
510
|
# The reason this double synchronization was added is for performance
|
|
511
|
-
# and lock the mutex for the shortest possible amount of time. Otherwise,
|
|
511
|
+
# and to lock the mutex for the shortest possible amount of time. Otherwise,
|
|
512
512
|
# all threads are fighting over this mutex and when it gets acquired it gets locked
|
|
513
513
|
# until a threads finishes downloading a gem, leaving the other threads waiting
|
|
514
514
|
# doing nothing.
|
|
@@ -52,6 +52,7 @@ module Bundler
|
|
|
52
52
|
|
|
53
53
|
# This is defined directly to avoid having to loading the full spec
|
|
54
54
|
def missing_extensions?
|
|
55
|
+
return false if RUBY_ENGINE == "jruby"
|
|
55
56
|
return false if default_gem?
|
|
56
57
|
return false if extensions.empty?
|
|
57
58
|
return false if File.exist? gem_build_complete_path
|
|
@@ -22,6 +22,12 @@ Gem::Specification.new do |spec|
|
|
|
22
22
|
spec.metadata["changelog_uri"] = "<%= config[:changelog_uri] %>"
|
|
23
23
|
<%- end -%>
|
|
24
24
|
|
|
25
|
+
# Uncomment the line below to require MFA for gem pushes.
|
|
26
|
+
# This helps protect your gem from supply chain attacks by ensuring
|
|
27
|
+
# no one can publish a new version without multi-factor authentication.
|
|
28
|
+
# See: https://guides.rubygems.org/mfa-requirement-opt-in/
|
|
29
|
+
# spec.metadata["rubygems_mfa_required"] = "true"
|
|
30
|
+
|
|
25
31
|
# Specify which files should be added to the gem when it is released.
|
|
26
32
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
|
27
33
|
gemspec = File.basename(__FILE__)
|
|
@@ -40,10 +46,13 @@ Gem::Specification.new do |spec|
|
|
|
40
46
|
|
|
41
47
|
# Uncomment to register a new dependency of your gem
|
|
42
48
|
# spec.add_dependency "example-gem", "~> 1.0"
|
|
49
|
+
<%- if config[:ext] == 'rust' -%>
|
|
50
|
+
spec.add_dependency "rb_sys", "~> 0.9.91"
|
|
51
|
+
<%- end -%>
|
|
43
52
|
<%- if config[:ext] == 'go' -%>
|
|
44
53
|
spec.add_dependency "go_gem", "~> 0.2"
|
|
45
54
|
<%- end -%>
|
|
46
55
|
|
|
47
56
|
# For more information and examples about making a new gem, check out our
|
|
48
|
-
# guide at: https://
|
|
57
|
+
# guide at: https://guides.rubygems.org/make-your-own-gem/
|
|
49
58
|
end
|
data/doc/MAINTAINERS.txt
CHANGED
|
@@ -1 +1,7 @@
|
|
|
1
1
|
SHIBATA Hiroshi <hsbt@ruby-lang.org> (@hsbt)
|
|
2
|
+
Aaron Patterson <tenderlove@ruby-lang.org> (@tenderlove)
|
|
3
|
+
Sutou Kouhei <kou@clear-code.com> (@kou)
|
|
4
|
+
Colby Swandale <colby@rubygems.org> (@colby-swandale)
|
|
5
|
+
Eileen Uchitelle <eileencodes@gmail.com> (@eileencodes)
|
|
6
|
+
Mike Dalessio <mike.dalessio@gmail.com> (@flavorjones)
|
|
7
|
+
Edouard Chin <chin.edouard@gmail.com> (@Edouard-chin)
|
|
@@ -132,6 +132,11 @@ extensions will be restored.
|
|
|
132
132
|
specs = specs.select {|spec| spec.platform == RUBY_ENGINE || Gem::Platform.local === spec.platform || spec.platform == Gem::Platform::RUBY }
|
|
133
133
|
|
|
134
134
|
if specs.to_a.empty?
|
|
135
|
+
if options[:only_missing_extensions]
|
|
136
|
+
say "No gems with missing extensions to restore"
|
|
137
|
+
return
|
|
138
|
+
end
|
|
139
|
+
|
|
135
140
|
raise Gem::Exception,
|
|
136
141
|
"Failed to find gems #{options[:args]} #{options[:version]}"
|
|
137
142
|
end
|
|
@@ -42,7 +42,7 @@ class Gem::Commands::SpecificationCommand < Gem::Command
|
|
|
42
42
|
|
|
43
43
|
def arguments # :nodoc:
|
|
44
44
|
<<-ARGS
|
|
45
|
-
|
|
45
|
+
GEM_OR_FILE gem name or a .gem file to show the gemspec for
|
|
46
46
|
FIELD name of gemspec field to show
|
|
47
47
|
ARGS
|
|
48
48
|
end
|
|
@@ -68,7 +68,7 @@ Specific fields in the specification can be extracted in YAML format:
|
|
|
68
68
|
end
|
|
69
69
|
|
|
70
70
|
def usage # :nodoc:
|
|
71
|
-
"#{program_name} [
|
|
71
|
+
"#{program_name} [GEM_OR_FILE] [FIELD]"
|
|
72
72
|
end
|
|
73
73
|
|
|
74
74
|
def execute
|
|
@@ -77,7 +77,7 @@ Specific fields in the specification can be extracted in YAML format:
|
|
|
77
77
|
|
|
78
78
|
unless gem
|
|
79
79
|
raise Gem::CommandLineError,
|
|
80
|
-
"Please specify a gem name or file on the command line"
|
|
80
|
+
"Please specify a gem name or a .gem file on the command line"
|
|
81
81
|
end
|
|
82
82
|
|
|
83
83
|
case v = options[:version]
|
data/lib/rubygems/package.rb
CHANGED
|
@@ -552,6 +552,15 @@ EOM
|
|
|
552
552
|
tar = Gem::Package::TarReader.new gzio
|
|
553
553
|
|
|
554
554
|
yield tar
|
|
555
|
+
ensure
|
|
556
|
+
# Consume remaining gzip data to prevent the
|
|
557
|
+
# "attempt to close unfinished zstream; reset forced" warning
|
|
558
|
+
# when the GzipReader is closed with unconsumed compressed data.
|
|
559
|
+
begin
|
|
560
|
+
IO.copy_stream(gzio, IO::NULL)
|
|
561
|
+
rescue Zlib::GzipFile::Error, IOError
|
|
562
|
+
nil
|
|
563
|
+
end
|
|
555
564
|
end
|
|
556
565
|
end
|
|
557
566
|
|
|
@@ -2071,6 +2071,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
|
2071
2071
|
# probably want to build_extensions
|
|
2072
2072
|
|
|
2073
2073
|
def missing_extensions?
|
|
2074
|
+
return false if RUBY_ENGINE == "jruby"
|
|
2074
2075
|
return false if extensions.empty?
|
|
2075
2076
|
return false if default_gem?
|
|
2076
2077
|
return false if File.exist? gem_build_complete_path
|
|
@@ -140,6 +140,7 @@ class Gem::StubSpecification < Gem::BasicSpecification
|
|
|
140
140
|
end
|
|
141
141
|
|
|
142
142
|
def missing_extensions?
|
|
143
|
+
return false if RUBY_ENGINE == "jruby"
|
|
143
144
|
return false if default_gem?
|
|
144
145
|
return false if extensions.empty?
|
|
145
146
|
return false if File.exist? gem_build_complete_path
|
|
@@ -27,6 +27,7 @@ class Gem::Licenses
|
|
|
27
27
|
AGPL-1.0-or-later
|
|
28
28
|
AGPL-3.0-only
|
|
29
29
|
AGPL-3.0-or-later
|
|
30
|
+
ALGLIB-Documentation
|
|
30
31
|
AMD-newlib
|
|
31
32
|
AMDPLPA
|
|
32
33
|
AML
|
|
@@ -48,6 +49,7 @@ class Gem::Licenses
|
|
|
48
49
|
Adobe-Display-PostScript
|
|
49
50
|
Adobe-Glyph
|
|
50
51
|
Adobe-Utopia
|
|
52
|
+
Advanced-Cryptics-Dictionary
|
|
51
53
|
Afmparse
|
|
52
54
|
Aladdin
|
|
53
55
|
Apache-1.0
|
|
@@ -61,6 +63,7 @@ class Gem::Licenses
|
|
|
61
63
|
Artistic-2.0
|
|
62
64
|
Artistic-dist
|
|
63
65
|
Aspell-RU
|
|
66
|
+
BOLA-1.1
|
|
64
67
|
BSD-1-Clause
|
|
65
68
|
BSD-2-Clause
|
|
66
69
|
BSD-2-Clause-Darwin
|
|
@@ -80,6 +83,7 @@ class Gem::Licenses
|
|
|
80
83
|
BSD-3-Clause-No-Nuclear-Warranty
|
|
81
84
|
BSD-3-Clause-Open-MPI
|
|
82
85
|
BSD-3-Clause-Sun
|
|
86
|
+
BSD-3-Clause-Tso
|
|
83
87
|
BSD-3-Clause-acpica
|
|
84
88
|
BSD-3-Clause-flex
|
|
85
89
|
BSD-4-Clause
|
|
@@ -90,6 +94,7 @@ class Gem::Licenses
|
|
|
90
94
|
BSD-Advertising-Acknowledgement
|
|
91
95
|
BSD-Attribution-HPND-disclaimer
|
|
92
96
|
BSD-Inferno-Nettverk
|
|
97
|
+
BSD-Mark-Modifications
|
|
93
98
|
BSD-Protection
|
|
94
99
|
BSD-Source-Code
|
|
95
100
|
BSD-Source-beginning-file
|
|
@@ -111,9 +116,11 @@ class Gem::Licenses
|
|
|
111
116
|
Borceux
|
|
112
117
|
Brian-Gladman-2-Clause
|
|
113
118
|
Brian-Gladman-3-Clause
|
|
119
|
+
Buddy
|
|
114
120
|
C-UDA-1.0
|
|
115
121
|
CAL-1.0
|
|
116
122
|
CAL-1.0-Combined-Work-Exception
|
|
123
|
+
CAPEC-tou
|
|
117
124
|
CATOSL-1.1
|
|
118
125
|
CC-BY-1.0
|
|
119
126
|
CC-BY-2.0
|
|
@@ -231,6 +238,9 @@ class Gem::Licenses
|
|
|
231
238
|
EPICS
|
|
232
239
|
EPL-1.0
|
|
233
240
|
EPL-2.0
|
|
241
|
+
ESA-PL-permissive-2.4
|
|
242
|
+
ESA-PL-strong-copyleft-2.4
|
|
243
|
+
ESA-PL-weak-copyleft-2.4
|
|
234
244
|
EUDatagrid
|
|
235
245
|
EUPL-1.0
|
|
236
246
|
EUPL-1.1
|
|
@@ -304,6 +314,7 @@ class Gem::Licenses
|
|
|
304
314
|
HPND-Markus-Kuhn
|
|
305
315
|
HPND-Netrek
|
|
306
316
|
HPND-Pbmplus
|
|
317
|
+
HPND-SMC
|
|
307
318
|
HPND-UC
|
|
308
319
|
HPND-UC-export-US
|
|
309
320
|
HPND-doc
|
|
@@ -318,6 +329,7 @@ class Gem::Licenses
|
|
|
318
329
|
HPND-sell-variant
|
|
319
330
|
HPND-sell-variant-MIT-disclaimer
|
|
320
331
|
HPND-sell-variant-MIT-disclaimer-rev
|
|
332
|
+
HPND-sell-variant-critical-systems
|
|
321
333
|
HTMLTIDY
|
|
322
334
|
HaskellReport
|
|
323
335
|
Hippocratic-2.1
|
|
@@ -330,6 +342,7 @@ class Gem::Licenses
|
|
|
330
342
|
IPL-1.0
|
|
331
343
|
ISC
|
|
332
344
|
ISC-Veillard
|
|
345
|
+
ISO-permission
|
|
333
346
|
ImageMagick
|
|
334
347
|
Imlib2
|
|
335
348
|
Info-ZIP
|
|
@@ -387,6 +400,7 @@ class Gem::Licenses
|
|
|
387
400
|
MIT-Festival
|
|
388
401
|
MIT-Khronos-old
|
|
389
402
|
MIT-Modern-Variant
|
|
403
|
+
MIT-STK
|
|
390
404
|
MIT-Wu
|
|
391
405
|
MIT-advertising
|
|
392
406
|
MIT-enna
|
|
@@ -395,6 +409,7 @@ class Gem::Licenses
|
|
|
395
409
|
MIT-testregex
|
|
396
410
|
MITNFA
|
|
397
411
|
MMIXware
|
|
412
|
+
MMPL-1.0.1
|
|
398
413
|
MPEG-SSG
|
|
399
414
|
MPL-1.0
|
|
400
415
|
MPL-1.1
|
|
@@ -426,6 +441,7 @@ class Gem::Licenses
|
|
|
426
441
|
NGPL
|
|
427
442
|
NICTA-1.0
|
|
428
443
|
NIST-PD
|
|
444
|
+
NIST-PD-TNT
|
|
429
445
|
NIST-PD-fallback
|
|
430
446
|
NIST-Software
|
|
431
447
|
NLOD-1.0
|
|
@@ -485,12 +501,15 @@ class Gem::Licenses
|
|
|
485
501
|
OPL-1.0
|
|
486
502
|
OPL-UK-3.0
|
|
487
503
|
OPUBL-1.0
|
|
504
|
+
OSC-1.0
|
|
488
505
|
OSET-PL-2.1
|
|
489
506
|
OSL-1.0
|
|
490
507
|
OSL-1.1
|
|
491
508
|
OSL-2.0
|
|
492
509
|
OSL-2.1
|
|
493
510
|
OSL-3.0
|
|
511
|
+
OSSP
|
|
512
|
+
OpenMDW-1.0
|
|
494
513
|
OpenPBS-2.3
|
|
495
514
|
OpenSSL
|
|
496
515
|
OpenSSL-standalone
|
|
@@ -501,6 +520,7 @@ class Gem::Licenses
|
|
|
501
520
|
PHP-3.01
|
|
502
521
|
PPL
|
|
503
522
|
PSF-2.0
|
|
523
|
+
ParaType-Free-Font-1.3
|
|
504
524
|
Parity-6.0.0
|
|
505
525
|
Parity-7.0.0
|
|
506
526
|
Pixar
|
|
@@ -529,6 +549,7 @@ class Gem::Licenses
|
|
|
529
549
|
SGI-B-1.1
|
|
530
550
|
SGI-B-2.0
|
|
531
551
|
SGI-OpenGL
|
|
552
|
+
SGMLUG-PM
|
|
532
553
|
SGP4
|
|
533
554
|
SHL-0.5
|
|
534
555
|
SHL-0.51
|
|
@@ -576,6 +597,7 @@ class Gem::Licenses
|
|
|
576
597
|
TTYP0
|
|
577
598
|
TU-Berlin-1.0
|
|
578
599
|
TU-Berlin-2.0
|
|
600
|
+
TekHVC
|
|
579
601
|
TermReadKey
|
|
580
602
|
ThirdEye
|
|
581
603
|
TrustedQSL
|
|
@@ -585,6 +607,7 @@ class Gem::Licenses
|
|
|
585
607
|
UPL-1.0
|
|
586
608
|
URT-RLE
|
|
587
609
|
Ubuntu-font-1.0
|
|
610
|
+
UnRAR
|
|
588
611
|
Unicode-3.0
|
|
589
612
|
Unicode-DFS-2015
|
|
590
613
|
Unicode-DFS-2016
|
|
@@ -596,15 +619,19 @@ class Gem::Licenses
|
|
|
596
619
|
VOSTROM
|
|
597
620
|
VSL-1.0
|
|
598
621
|
Vim
|
|
622
|
+
Vixie-Cron
|
|
599
623
|
W3C
|
|
600
624
|
W3C-19980720
|
|
601
625
|
W3C-20150513
|
|
626
|
+
WTFNMFPL
|
|
602
627
|
WTFPL
|
|
603
628
|
Watcom-1.0
|
|
604
629
|
Widget-Workshop
|
|
630
|
+
WordNet
|
|
605
631
|
Wsuipa
|
|
606
632
|
X11
|
|
607
633
|
X11-distribute-modifications-variant
|
|
634
|
+
X11-no-permit-persons
|
|
608
635
|
X11-swapped
|
|
609
636
|
XFree86-1.1
|
|
610
637
|
XSkat
|
|
@@ -645,6 +672,7 @@ class Gem::Licenses
|
|
|
645
672
|
gnuplot
|
|
646
673
|
gtkbook
|
|
647
674
|
hdparm
|
|
675
|
+
hyphen-bulgarian
|
|
648
676
|
iMatix
|
|
649
677
|
jove
|
|
650
678
|
libpng-1.6.35
|
|
@@ -734,6 +762,7 @@ class Gem::Licenses
|
|
|
734
762
|
CGAL-linking-exception
|
|
735
763
|
CLISP-exception-2.0
|
|
736
764
|
Classpath-exception-2.0
|
|
765
|
+
Classpath-exception-2.0-short
|
|
737
766
|
DigiRule-FOSS-exception
|
|
738
767
|
Digia-Qt-LGPL-exception-1.1
|
|
739
768
|
FLTK-exception
|
|
@@ -775,6 +804,7 @@ class Gem::Licenses
|
|
|
775
804
|
SHL-2.0
|
|
776
805
|
SHL-2.1
|
|
777
806
|
SWI-exception
|
|
807
|
+
Simple-Library-Usage-exception
|
|
778
808
|
Swift-exception
|
|
779
809
|
Texinfo-exception
|
|
780
810
|
UBDL-exception
|
|
@@ -788,12 +818,15 @@ class Gem::Licenses
|
|
|
788
818
|
gnu-javamail-exception
|
|
789
819
|
harbour-exception
|
|
790
820
|
i2p-gpl-java-exception
|
|
821
|
+
kvirc-openssl-exception
|
|
791
822
|
libpri-OpenH323-exception
|
|
792
823
|
mif-exception
|
|
793
824
|
mxml-exception
|
|
794
825
|
openvpn-openssl-exception
|
|
795
826
|
polyparse-exception
|
|
796
827
|
romic-exception
|
|
828
|
+
rsync-linking-exception
|
|
829
|
+
sqlitestudio-OpenSSL-exception
|
|
797
830
|
stunnel-exception
|
|
798
831
|
u-boot-exception-2.0
|
|
799
832
|
vsftpd-openssl-exception
|
data/lib/rubygems/version.rb
CHANGED
|
@@ -158,6 +158,7 @@ class Gem::Version
|
|
|
158
158
|
|
|
159
159
|
VERSION_PATTERN = '[0-9]+(?>\.[0-9a-zA-Z]+)*(-[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?' # :nodoc:
|
|
160
160
|
ANCHORED_VERSION_PATTERN = /\A\s*(#{VERSION_PATTERN})?\s*\z/ # :nodoc:
|
|
161
|
+
RADIX_OPT = [9_500, 3_500, 260_000, 22_227, 24].freeze # :nodoc:
|
|
161
162
|
|
|
162
163
|
##
|
|
163
164
|
# A string representation of this Version.
|
|
@@ -222,6 +223,7 @@ class Gem::Version
|
|
|
222
223
|
end
|
|
223
224
|
@version = -@version
|
|
224
225
|
@segments = nil
|
|
226
|
+
@sort_key = compute_sort_key
|
|
225
227
|
end
|
|
226
228
|
|
|
227
229
|
##
|
|
@@ -344,54 +346,58 @@ class Gem::Version
|
|
|
344
346
|
# other types may raise an exception.
|
|
345
347
|
|
|
346
348
|
def <=>(other)
|
|
347
|
-
if
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
return unless Gem::Version === other
|
|
353
|
-
return 0 if @version == other.version || canonical_segments == other.canonical_segments
|
|
349
|
+
if Gem::Version === other
|
|
350
|
+
# Fast path for comparison when available.
|
|
351
|
+
if @sort_key && other.sort_key
|
|
352
|
+
return @sort_key <=> other.sort_key
|
|
353
|
+
end
|
|
354
354
|
|
|
355
|
-
|
|
356
|
-
rhsegments = other.canonical_segments
|
|
355
|
+
return 0 if @version == other.version || canonical_segments == other.canonical_segments
|
|
357
356
|
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
limit = (lhsize > rhsize ? rhsize : lhsize)
|
|
357
|
+
lhsegments = canonical_segments
|
|
358
|
+
rhsegments = other.canonical_segments
|
|
361
359
|
|
|
362
|
-
|
|
360
|
+
lhsize = lhsegments.size
|
|
361
|
+
rhsize = rhsegments.size
|
|
362
|
+
limit = (lhsize > rhsize ? rhsize : lhsize)
|
|
363
363
|
|
|
364
|
-
|
|
365
|
-
lhs = lhsegments[i]
|
|
366
|
-
rhs = rhsegments[i]
|
|
367
|
-
i += 1
|
|
364
|
+
i = 0
|
|
368
365
|
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
366
|
+
while i < limit
|
|
367
|
+
lhs = lhsegments[i]
|
|
368
|
+
rhs = rhsegments[i]
|
|
369
|
+
i += 1
|
|
372
370
|
|
|
373
|
-
|
|
374
|
-
|
|
371
|
+
next if lhs == rhs
|
|
372
|
+
return -1 if String === lhs && Numeric === rhs
|
|
373
|
+
return 1 if Numeric === lhs && String === rhs
|
|
375
374
|
|
|
376
|
-
|
|
375
|
+
return lhs <=> rhs
|
|
376
|
+
end
|
|
377
377
|
|
|
378
|
-
|
|
379
|
-
rhs = rhsegments[i]
|
|
378
|
+
lhs = lhsegments[i]
|
|
380
379
|
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
380
|
+
if lhs.nil?
|
|
381
|
+
rhs = rhsegments[i]
|
|
382
|
+
|
|
383
|
+
while i < rhsize
|
|
384
|
+
return 1 if String === rhs
|
|
385
|
+
return -1 unless rhs.zero?
|
|
386
|
+
rhs = rhsegments[i += 1]
|
|
387
|
+
end
|
|
388
|
+
else
|
|
389
|
+
while i < lhsize
|
|
390
|
+
return -1 if String === lhs
|
|
391
|
+
return 1 unless lhs.zero?
|
|
392
|
+
lhs = lhsegments[i += 1]
|
|
393
|
+
end
|
|
391
394
|
end
|
|
392
|
-
end
|
|
393
395
|
|
|
394
|
-
|
|
396
|
+
0
|
|
397
|
+
elsif String === other
|
|
398
|
+
return unless self.class.correct?(other)
|
|
399
|
+
self <=> self.class.new(other)
|
|
400
|
+
end
|
|
395
401
|
end
|
|
396
402
|
|
|
397
403
|
# remove trailing zeros segments before first letter or at the end of the version
|
|
@@ -415,6 +421,24 @@ class Gem::Version
|
|
|
415
421
|
|
|
416
422
|
protected
|
|
417
423
|
|
|
424
|
+
attr_reader :sort_key # :nodoc:
|
|
425
|
+
|
|
426
|
+
def compute_sort_key
|
|
427
|
+
return if prerelease?
|
|
428
|
+
|
|
429
|
+
segments = canonical_segments
|
|
430
|
+
return if segments.size > 5
|
|
431
|
+
|
|
432
|
+
key = 0
|
|
433
|
+
RADIX_OPT.each_with_index do |radix, i|
|
|
434
|
+
seg = segments.fetch(i, 0)
|
|
435
|
+
return nil if seg >= radix
|
|
436
|
+
key = key * radix + seg
|
|
437
|
+
end
|
|
438
|
+
|
|
439
|
+
key
|
|
440
|
+
end
|
|
441
|
+
|
|
418
442
|
def _segments
|
|
419
443
|
# segments is lazy so it can pick up version values that come from
|
|
420
444
|
# old marshaled versions, which don't go through marshal_load.
|
data/lib/rubygems.rb
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
require "rbconfig"
|
|
10
10
|
|
|
11
11
|
module Gem
|
|
12
|
-
VERSION = "4.0.
|
|
12
|
+
VERSION = "4.0.11"
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
require_relative "rubygems/defaults"
|
|
@@ -192,8 +192,9 @@ module Gem
|
|
|
192
192
|
begin
|
|
193
193
|
spec.activate
|
|
194
194
|
rescue Gem::LoadError => e # this could fail due to gem dep collisions, go lax
|
|
195
|
+
name = spec.name
|
|
195
196
|
spec = Gem::Specification.find_unloaded_by_path(path)
|
|
196
|
-
spec ||= Gem::Specification.find_by_name(
|
|
197
|
+
spec ||= Gem::Specification.find_by_name(name)
|
|
197
198
|
if spec.nil?
|
|
198
199
|
raise e
|
|
199
200
|
else
|
|
@@ -1284,10 +1285,17 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
|
|
|
1284
1285
|
prefix_pattern = /^(#{prefix_group})/
|
|
1285
1286
|
end
|
|
1286
1287
|
|
|
1288
|
+
native_extension_suffixes = Gem.dynamic_library_suffixes.reject(&:empty?)
|
|
1289
|
+
|
|
1287
1290
|
spec.files.each do |file|
|
|
1288
1291
|
if new_format
|
|
1289
1292
|
file = file.sub(prefix_pattern, "")
|
|
1290
|
-
|
|
1293
|
+
unless $~
|
|
1294
|
+
# Also register native extension files (e.g. date_core.bundle)
|
|
1295
|
+
# that are listed without require path prefix in the gemspec
|
|
1296
|
+
next if file.include?("/")
|
|
1297
|
+
next unless file.end_with?(*native_extension_suffixes)
|
|
1298
|
+
end
|
|
1291
1299
|
end
|
|
1292
1300
|
|
|
1293
1301
|
spec.activate if already_loaded?(file)
|