rubygems-update 3.3.22 → 3.3.23
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 +19 -0
- data/Manifest.txt +1 -0
- data/POLICIES.md +38 -5
- data/bundler/CHANGELOG.md +18 -0
- data/bundler/lib/bundler/build_metadata.rb +2 -2
- data/bundler/lib/bundler/cli/init.rb +5 -1
- data/bundler/lib/bundler/definition.rb +2 -12
- data/bundler/lib/bundler/dsl.rb +0 -1
- data/bundler/lib/bundler/gem_version_promoter.rb +6 -7
- data/bundler/lib/bundler/index.rb +3 -26
- data/bundler/lib/bundler/resolver.rb +7 -11
- data/bundler/lib/bundler/rubygems_ext.rb +12 -1
- data/bundler/lib/bundler/spec_set.rb +1 -1
- data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +5 -4
- data/bundler/lib/bundler/version.rb +1 -1
- data/lib/rubygems/gemcutter_utilities.rb +8 -1
- data/lib/rubygems/package.rb +9 -4
- data/lib/rubygems/platform.rb +17 -1
- data/lib/rubygems/resolver.rb +1 -1
- data/lib/rubygems.rb +1 -1
- data/rubygems-update.gemspec +1 -1
- data/test/rubygems/helper.rb +23 -17
- data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
- data/test/rubygems/test_gem.rb +254 -212
- data/test/rubygems/test_gem_commands_owner_command.rb +105 -24
- data/test/rubygems/test_gem_commands_push_command.rb +44 -23
- data/test/rubygems/test_gem_commands_signin_command.rb +28 -3
- data/test/rubygems/test_gem_commands_yank_command.rb +9 -9
- data/test/rubygems/test_gem_gemcutter_utilities.rb +16 -12
- data/test/rubygems/test_gem_package.rb +15 -0
- data/test/rubygems/test_gem_platform.rb +35 -0
- data/test/rubygems/test_gem_resolver.rb +33 -0
- data/test/rubygems/test_require.rb +5 -5
- data/test/rubygems/utilities.rb +36 -14
- metadata +4 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f93f67c33abbbb5ea165e7d2682601f04071a38b9b513388d9a5e428dd683297
|
|
4
|
+
data.tar.gz: 15847dcefd91515ea3057a9d1b3ff6da9ae367ee714cbdb43c5537d6fa5e7ea9
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 62659400aed8a1f03108d675fe35674430b1fa5bc2a990ef4bc78fa03072e853b077472a2af0ceace9f7972eb62d8d2c475f9a811f911402a068d28550c26b78
|
|
7
|
+
data.tar.gz: 1ba9446a59bd88a30558850cf20d3b4fabae944e98ef6995e6dcdb940444f41226e923d50f3fac9839f086fce076ad6a4810e1e035b3d0cabce021a4c92dde91
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,22 @@
|
|
|
1
|
+
# 3.3.23 / 2022-10-05
|
|
2
|
+
|
|
3
|
+
## Enhancements:
|
|
4
|
+
|
|
5
|
+
* Add better error handling for permanent redirect responses. Pull request
|
|
6
|
+
#5931 by jenshenny
|
|
7
|
+
* Installs bundler 2.3.23 as a default gem.
|
|
8
|
+
|
|
9
|
+
## Bug fixes:
|
|
10
|
+
|
|
11
|
+
* Fix generic arm platform matching against runtime arm platforms with
|
|
12
|
+
eabi modifiers. Pull request #5957 by deivid-rodriguez
|
|
13
|
+
* Fix `Gem::Platform.match` not handling String argument properly. Pull
|
|
14
|
+
request #5939 by flavorjones
|
|
15
|
+
* Fix resolution on non-musl platforms. Pull request #5915 by
|
|
16
|
+
deivid-rodriguez
|
|
17
|
+
* Mask the file mode when extracting files. Pull request #5906 by
|
|
18
|
+
kddnewton
|
|
19
|
+
|
|
1
20
|
# 3.3.22 / 2022-09-07
|
|
2
21
|
|
|
3
22
|
## Enhancements:
|
data/Manifest.txt
CHANGED
|
@@ -577,6 +577,7 @@ test/rubygems/invalidchild_cert.pem
|
|
|
577
577
|
test/rubygems/invalidchild_cert_32.pem
|
|
578
578
|
test/rubygems/invalidchild_key.pem
|
|
579
579
|
test/rubygems/package/tar_test_case.rb
|
|
580
|
+
test/rubygems/packages/Bluebie-legs-0.6.2.gem
|
|
580
581
|
test/rubygems/packages/ascii_binder-0.1.10.1.gem
|
|
581
582
|
test/rubygems/packages/ill-formatted-platform-1.0.0.10.gem
|
|
582
583
|
test/rubygems/plugin/exception/rubygems_plugin.rb
|
data/POLICIES.md
CHANGED
|
@@ -42,8 +42,19 @@ at version 2.7, so when RubyGems 2.8 is released, it will only support Ruby
|
|
|
42
42
|
|
|
43
43
|
## Release Process
|
|
44
44
|
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
### Permissions
|
|
46
|
+
|
|
47
|
+
You'll need the following environment variables set to release RubyGems &
|
|
48
|
+
Bundler:
|
|
49
|
+
|
|
50
|
+
* AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY: to be able to push RubyGems zip
|
|
51
|
+
files to s3 so that they appear at RubyGems [download page].
|
|
52
|
+
|
|
53
|
+
* GITHUB_RELEASE_PAT: A [GitHub PAT] with repo permissions, in order to push
|
|
54
|
+
GitHub releases and to use the GitHub API for changelog generation.
|
|
55
|
+
|
|
56
|
+
[download page]: https://rubygems.org/pages/download
|
|
57
|
+
[GitHub PAT]: https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token
|
|
47
58
|
|
|
48
59
|
### Recommendations for security releases
|
|
49
60
|
|
|
@@ -54,14 +65,36 @@ smooth and no needed steps are missed.
|
|
|
54
65
|
have to work on weekends.
|
|
55
66
|
* Continue with the regular release process below.
|
|
56
67
|
|
|
68
|
+
### Automatic changelog and backport generation
|
|
69
|
+
|
|
70
|
+
PR labels and titles are used to automatically generate changelogs for patch and
|
|
71
|
+
minor releases.
|
|
72
|
+
|
|
73
|
+
When releasing, a changelog generation script goes through all PRs that have
|
|
74
|
+
never made it into a release, and selects only the ones with specific labels as
|
|
75
|
+
detailed in the `.changelog.yml` and `bundler/.changelog.yml` files. Those
|
|
76
|
+
particular PRs get backported to the stable branch and included in the release
|
|
77
|
+
changelog.
|
|
78
|
+
|
|
79
|
+
If PRs don't have a proper label, they won't be backported to patch releases.
|
|
80
|
+
|
|
81
|
+
If you want a PR to be backported to a patch level release, but don't want to
|
|
82
|
+
include it in the changelog, you can use the special `rubygems: backport` and
|
|
83
|
+
`bundler: backport` labels. For example, this is useful when backporting a PR
|
|
84
|
+
generates conflicts that are solved by backporting another PR with no user
|
|
85
|
+
visible changes. You can use these special labels to also backport the other PR
|
|
86
|
+
and not get any conflicts.
|
|
57
87
|
|
|
58
88
|
### Steps for patch releases
|
|
59
89
|
|
|
60
90
|
* Confirm all PRs that you want backported are properly tagged with `rubygems:
|
|
61
91
|
<type>` or `bundler: <type>` labels at GitHub.
|
|
62
|
-
* Run `rake prepare_release[<target_version>]
|
|
63
|
-
|
|
64
|
-
|
|
92
|
+
* Run `rake prepare_release[<target_version>]`. This will create a PR to the
|
|
93
|
+
stable branch with the backports included in the release, and proper
|
|
94
|
+
changelogs and version bumps. It will also create a PR to merge release
|
|
95
|
+
changelogs into master.
|
|
96
|
+
* Once CI passes, merge the release PR, switch to the stable branch and pull
|
|
97
|
+
the PR just merged.
|
|
65
98
|
* Release `bundler` with `(cd bundler && bin/rake release)`.
|
|
66
99
|
* Release `rubygems` with `rake release`.
|
|
67
100
|
|
data/bundler/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
# 2.3.23 (October 5, 2022)
|
|
2
|
+
|
|
3
|
+
## Enhancements:
|
|
4
|
+
|
|
5
|
+
- Update GitLab CI template with new one [#5944](https://github.com/rubygems/rubygems/pull/5944)
|
|
6
|
+
|
|
7
|
+
## Bug fixes:
|
|
8
|
+
|
|
9
|
+
- Fix `bundle init` not respecting umask in generated gem's Gemfile [#5947](https://github.com/rubygems/rubygems/pull/5947)
|
|
10
|
+
|
|
11
|
+
## Performance:
|
|
12
|
+
|
|
13
|
+
- Further speed up Bundler by not sorting specs unnecessarily [#5868](https://github.com/rubygems/rubygems/pull/5868)
|
|
14
|
+
|
|
15
|
+
## Documentation:
|
|
16
|
+
|
|
17
|
+
- Update Bundler new feature instructions [#5912](https://github.com/rubygems/rubygems/pull/5912)
|
|
18
|
+
|
|
1
19
|
# 2.3.22 (September 7, 2022)
|
|
2
20
|
|
|
3
21
|
## Enhancements:
|
|
@@ -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 = "2022-
|
|
8
|
-
@git_commit_sha = "
|
|
7
|
+
@built_at = "2022-10-05".freeze
|
|
8
|
+
@git_commit_sha = "250d9d485d".freeze
|
|
9
9
|
@release = true
|
|
10
10
|
# end ivars
|
|
11
11
|
|
|
@@ -32,7 +32,11 @@ module Bundler
|
|
|
32
32
|
file << spec.to_gemfile
|
|
33
33
|
end
|
|
34
34
|
else
|
|
35
|
-
|
|
35
|
+
File.open(File.expand_path("../templates/#{gemfile}", __dir__), "r") do |template|
|
|
36
|
+
File.open(gemfile, "wb") do |destination|
|
|
37
|
+
IO.copy_stream(template, destination)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
36
40
|
end
|
|
37
41
|
|
|
38
42
|
puts "Writing new #{gemfile} to #{SharedHelpers.pwd}/#{gemfile}"
|
|
@@ -106,6 +106,7 @@ module Bundler
|
|
|
106
106
|
@locked_gems = nil
|
|
107
107
|
@locked_deps = {}
|
|
108
108
|
@locked_specs = SpecSet.new([])
|
|
109
|
+
@originally_locked_specs = @locked_specs
|
|
109
110
|
@locked_sources = []
|
|
110
111
|
@locked_platforms = []
|
|
111
112
|
end
|
|
@@ -149,18 +150,7 @@ module Bundler
|
|
|
149
150
|
end
|
|
150
151
|
|
|
151
152
|
def gem_version_promoter
|
|
152
|
-
@gem_version_promoter ||=
|
|
153
|
-
locked_specs =
|
|
154
|
-
if unlocking? && @locked_specs.empty? && !@lockfile_contents.empty?
|
|
155
|
-
# Definition uses an empty set of locked_specs to indicate all gems
|
|
156
|
-
# are unlocked, but GemVersionPromoter needs the locked_specs
|
|
157
|
-
# for conservative comparison.
|
|
158
|
-
Bundler::SpecSet.new(@locked_gems.specs)
|
|
159
|
-
else
|
|
160
|
-
@locked_specs
|
|
161
|
-
end
|
|
162
|
-
GemVersionPromoter.new(locked_specs, @unlock[:gems])
|
|
163
|
-
end
|
|
153
|
+
@gem_version_promoter ||= GemVersionPromoter.new(@originally_locked_specs, @unlock[:gems])
|
|
164
154
|
end
|
|
165
155
|
|
|
166
156
|
def resolve_only_locally!
|
data/bundler/lib/bundler/dsl.rb
CHANGED
|
@@ -67,7 +67,6 @@ module Bundler
|
|
|
67
67
|
|
|
68
68
|
gemspecs = Gem::Util.glob_files_in_dir("{,*}.gemspec", expanded_path).map {|g| Bundler.load_gemspec(g) }.compact
|
|
69
69
|
gemspecs.reject! {|s| s.name != name } if name
|
|
70
|
-
Index.sort_specs(gemspecs)
|
|
71
70
|
specs_by_name_and_version = gemspecs.group_by {|s| [s.name, s.version] }
|
|
72
71
|
|
|
73
72
|
case specs_by_name_and_version.size
|
|
@@ -116,15 +116,14 @@ module Bundler
|
|
|
116
116
|
end
|
|
117
117
|
|
|
118
118
|
def sort_dep_specs(spec_groups, locked_spec)
|
|
119
|
-
|
|
120
|
-
@gem_name = locked_spec
|
|
121
|
-
@locked_version = locked_spec.version
|
|
119
|
+
@locked_version = locked_spec&.version
|
|
120
|
+
@gem_name = locked_spec&.name
|
|
122
121
|
|
|
123
122
|
result = spec_groups.sort do |a, b|
|
|
124
123
|
@a_ver = a.version
|
|
125
124
|
@b_ver = b.version
|
|
126
125
|
|
|
127
|
-
unless @prerelease_specified[@gem_name]
|
|
126
|
+
unless @gem_name && @prerelease_specified[@gem_name]
|
|
128
127
|
a_pre = @a_ver.prerelease?
|
|
129
128
|
b_pre = @b_ver.prerelease?
|
|
130
129
|
|
|
@@ -148,7 +147,7 @@ module Bundler
|
|
|
148
147
|
end
|
|
149
148
|
|
|
150
149
|
def either_version_older_than_locked
|
|
151
|
-
@a_ver < @locked_version || @b_ver < @locked_version
|
|
150
|
+
@locked_version && (@a_ver < @locked_version || @b_ver < @locked_version)
|
|
152
151
|
end
|
|
153
152
|
|
|
154
153
|
def segments_do_not_match(level)
|
|
@@ -157,7 +156,7 @@ module Bundler
|
|
|
157
156
|
end
|
|
158
157
|
|
|
159
158
|
def unlocking_gem?
|
|
160
|
-
unlock_gems.empty? || unlock_gems.include?(@gem_name)
|
|
159
|
+
unlock_gems.empty? || (@gem_name && unlock_gems.include?(@gem_name))
|
|
161
160
|
end
|
|
162
161
|
|
|
163
162
|
# Specific version moves can't always reliably be done during sorting
|
|
@@ -165,7 +164,7 @@ module Bundler
|
|
|
165
164
|
def post_sort(result)
|
|
166
165
|
# default :major behavior in Bundler does not do this
|
|
167
166
|
return result if major?
|
|
168
|
-
if unlocking_gem?
|
|
167
|
+
if unlocking_gem? || @locked_version.nil?
|
|
169
168
|
result
|
|
170
169
|
else
|
|
171
170
|
move_version_to_end(result, @locked_version)
|
|
@@ -57,36 +57,13 @@ module Bundler
|
|
|
57
57
|
# Search this index's specs, and any source indexes that this index knows
|
|
58
58
|
# about, returning all of the results.
|
|
59
59
|
def search(query)
|
|
60
|
-
sort_specs(unsorted_search(query))
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
def unsorted_search(query)
|
|
64
60
|
results = local_search(query)
|
|
65
|
-
|
|
66
|
-
seen = results.map(&:full_name).uniq unless @sources.empty?
|
|
61
|
+
return results unless @sources.any?
|
|
67
62
|
|
|
68
63
|
@sources.each do |source|
|
|
69
|
-
source.
|
|
70
|
-
next if seen.include?(spec.full_name)
|
|
71
|
-
|
|
72
|
-
seen << spec.full_name
|
|
73
|
-
results << spec
|
|
74
|
-
end
|
|
64
|
+
results.concat(source.search(query))
|
|
75
65
|
end
|
|
76
|
-
|
|
77
|
-
results
|
|
78
|
-
end
|
|
79
|
-
protected :unsorted_search
|
|
80
|
-
|
|
81
|
-
def self.sort_specs(specs)
|
|
82
|
-
specs.sort_by do |s|
|
|
83
|
-
platform_string = s.platform.to_s
|
|
84
|
-
[s.version, platform_string == RUBY ? NULL : platform_string]
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
def sort_specs(specs)
|
|
89
|
-
self.class.sort_specs(specs)
|
|
66
|
+
results.uniq(&:full_name)
|
|
90
67
|
end
|
|
91
68
|
|
|
92
69
|
def local_search(query)
|
|
@@ -42,8 +42,7 @@ module Bundler
|
|
|
42
42
|
remove_from_candidates(spec)
|
|
43
43
|
end
|
|
44
44
|
|
|
45
|
-
|
|
46
|
-
requirements.each {|dep| @prerelease_specified[dep.name] ||= dep.prerelease? }
|
|
45
|
+
requirements.each {|dep| prerelease_specified[dep.name] ||= dep.prerelease? }
|
|
47
46
|
|
|
48
47
|
verify_gemfile_dependencies_are_found!(requirements)
|
|
49
48
|
result = @resolver.resolve(requirements).
|
|
@@ -127,13 +126,6 @@ module Bundler
|
|
|
127
126
|
results = results_for(dependency) + locked_results
|
|
128
127
|
results = results.select {|spec| requirement_satisfied_by?(locked_requirement, nil, spec) } if locked_requirement
|
|
129
128
|
|
|
130
|
-
if !@prerelease_specified[name] && locked_results.empty?
|
|
131
|
-
# Move prereleases to the beginning of the list, so they're considered
|
|
132
|
-
# last during resolution.
|
|
133
|
-
pre, results = results.partition {|spec| spec.version.prerelease? }
|
|
134
|
-
results = pre + results
|
|
135
|
-
end
|
|
136
|
-
|
|
137
129
|
if results.any?
|
|
138
130
|
results = @gem_version_promoter.sort_versions(dependency, results)
|
|
139
131
|
|
|
@@ -221,6 +213,10 @@ module Bundler
|
|
|
221
213
|
@base.base_requirements
|
|
222
214
|
end
|
|
223
215
|
|
|
216
|
+
def prerelease_specified
|
|
217
|
+
@gem_version_promoter.prerelease_specified
|
|
218
|
+
end
|
|
219
|
+
|
|
224
220
|
def remove_from_candidates(spec)
|
|
225
221
|
@base.delete(spec)
|
|
226
222
|
|
|
@@ -255,7 +251,7 @@ module Bundler
|
|
|
255
251
|
all - 1_000_000
|
|
256
252
|
else
|
|
257
253
|
search = search_for(dependency)
|
|
258
|
-
search =
|
|
254
|
+
search = prerelease_specified[dependency.name] ? search.count : search.count {|s| !s.version.prerelease? }
|
|
259
255
|
search - all
|
|
260
256
|
end
|
|
261
257
|
end
|
|
@@ -284,7 +280,7 @@ module Bundler
|
|
|
284
280
|
end
|
|
285
281
|
|
|
286
282
|
def gem_not_found_message(name, requirement, source, extra_message = "")
|
|
287
|
-
specs = source.specs.search(name)
|
|
283
|
+
specs = source.specs.search(name).sort_by {|s| [s.version, s.platform.to_s] }
|
|
288
284
|
matching_part = name
|
|
289
285
|
requirement_label = SharedHelpers.pretty_dependency(requirement)
|
|
290
286
|
cache_message = begin
|
|
@@ -261,10 +261,21 @@ module Gem
|
|
|
261
261
|
# version
|
|
262
262
|
(
|
|
263
263
|
(@os != "linux" && (@version.nil? || other.version.nil?)) ||
|
|
264
|
-
(@os == "linux" && (other.
|
|
264
|
+
(@os == "linux" && (normalized_linux_version_ext == other.normalized_linux_version_ext || ["musl#{@version}", "musleabi#{@version}", "musleabihf#{@version}"].include?(other.version))) ||
|
|
265
265
|
@version == other.version
|
|
266
266
|
)
|
|
267
267
|
end
|
|
268
|
+
|
|
269
|
+
# This is a copy of RubyGems 3.3.23 or higher `normalized_linux_method`.
|
|
270
|
+
# Once only 3.3.23 is supported, we can use the method in RubyGems.
|
|
271
|
+
def normalized_linux_version_ext
|
|
272
|
+
return nil unless @version
|
|
273
|
+
|
|
274
|
+
without_gnu_nor_abi_modifiers = @version.sub(/\Agnu/, "").sub(/eabi(hf)?\Z/, "")
|
|
275
|
+
return nil if without_gnu_nor_abi_modifiers.empty?
|
|
276
|
+
|
|
277
|
+
without_gnu_nor_abi_modifiers
|
|
278
|
+
end
|
|
268
279
|
end
|
|
269
280
|
end
|
|
270
281
|
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
default:
|
|
2
|
+
image: ruby:<%= RUBY_VERSION %>
|
|
2
3
|
|
|
3
|
-
before_script:
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
before_script:
|
|
5
|
+
- gem install bundler -v <%= Bundler::VERSION %>
|
|
6
|
+
- bundle install
|
|
6
7
|
|
|
7
8
|
example_job:
|
|
8
9
|
script:
|
|
@@ -201,7 +201,8 @@ module Gem::GemcutterUtilities
|
|
|
201
201
|
# block was given or shows the response body to the user.
|
|
202
202
|
#
|
|
203
203
|
# If the response was not successful, shows an error to the user including
|
|
204
|
-
# the +error_prefix+ and the response body.
|
|
204
|
+
# the +error_prefix+ and the response body. If the response was a permanent redirect,
|
|
205
|
+
# shows an error to the user including the redirect location.
|
|
205
206
|
|
|
206
207
|
def with_response(response, error_prefix = nil)
|
|
207
208
|
case response
|
|
@@ -211,6 +212,12 @@ module Gem::GemcutterUtilities
|
|
|
211
212
|
else
|
|
212
213
|
say clean_text(response.body)
|
|
213
214
|
end
|
|
215
|
+
when Net::HTTPPermanentRedirect, Net::HTTPRedirection then
|
|
216
|
+
message = "The request has redirected permanently to #{response['location']}. Please check your defined push host URL."
|
|
217
|
+
message = "#{error_prefix}: #{message}" if error_prefix
|
|
218
|
+
|
|
219
|
+
say clean_text(message)
|
|
220
|
+
terminate_interaction(ERROR_CODE)
|
|
214
221
|
else
|
|
215
222
|
message = response.body
|
|
216
223
|
message = "#{error_prefix}: #{message}" if error_prefix
|
data/lib/rubygems/package.rb
CHANGED
|
@@ -444,10 +444,10 @@ EOM
|
|
|
444
444
|
directories << mkdir
|
|
445
445
|
end
|
|
446
446
|
|
|
447
|
-
|
|
448
|
-
out.write entry.read
|
|
447
|
+
if entry.file?
|
|
448
|
+
File.open(destination, "wb") {|out| out.write entry.read }
|
|
449
449
|
FileUtils.chmod file_mode(entry.header.mode), destination
|
|
450
|
-
end
|
|
450
|
+
end
|
|
451
451
|
|
|
452
452
|
verbose destination
|
|
453
453
|
end
|
|
@@ -467,7 +467,12 @@ EOM
|
|
|
467
467
|
end
|
|
468
468
|
|
|
469
469
|
def file_mode(mode) # :nodoc:
|
|
470
|
-
((mode & 0111).zero? ? data_mode : prog_mode) ||
|
|
470
|
+
((mode & 0111).zero? ? data_mode : prog_mode) ||
|
|
471
|
+
# If we're not using one of the default modes, then we're going to fall
|
|
472
|
+
# back to the mode from the tarball. In this case we need to mask it down
|
|
473
|
+
# to fit into 2^16 bits (the maximum value for a mode in CRuby since it
|
|
474
|
+
# gets put into an unsigned short).
|
|
475
|
+
(mode & ((1 << 16) - 1))
|
|
471
476
|
end
|
|
472
477
|
|
|
473
478
|
##
|
data/lib/rubygems/platform.rb
CHANGED
|
@@ -22,6 +22,7 @@ class Gem::Platform
|
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
def self.match_platforms?(platform, platforms)
|
|
25
|
+
platform = Gem::Platform.new(platform) unless platform.is_a?(Gem::Platform)
|
|
25
26
|
platforms.any? do |local_platform|
|
|
26
27
|
platform.nil? ||
|
|
27
28
|
local_platform == platform ||
|
|
@@ -162,6 +163,9 @@ class Gem::Platform
|
|
|
162
163
|
# runtime platform "no version" stands for 'gnu'. To be able to disinguish
|
|
163
164
|
# these, the method receiver is the gem platform, while the argument is
|
|
164
165
|
# the runtime platform.
|
|
166
|
+
#
|
|
167
|
+
#--
|
|
168
|
+
# NOTE: Until it can be removed, changes to this method must also be reflected in `bundler/lib/bundler/rubygems_ext.rb`
|
|
165
169
|
|
|
166
170
|
def ===(other)
|
|
167
171
|
return nil unless Gem::Platform === other
|
|
@@ -180,11 +184,23 @@ class Gem::Platform
|
|
|
180
184
|
# version
|
|
181
185
|
(
|
|
182
186
|
(@os != "linux" && (@version.nil? || other.version.nil?)) ||
|
|
183
|
-
(@os == "linux" && (other.
|
|
187
|
+
(@os == "linux" && (normalized_linux_version == other.normalized_linux_version || ["musl#{@version}", "musleabi#{@version}", "musleabihf#{@version}"].include?(other.version))) ||
|
|
184
188
|
@version == other.version
|
|
185
189
|
)
|
|
186
190
|
end
|
|
187
191
|
|
|
192
|
+
#--
|
|
193
|
+
# NOTE: Until it can be removed, changes to this method must also be reflected in `bundler/lib/bundler/rubygems_ext.rb`
|
|
194
|
+
|
|
195
|
+
def normalized_linux_version
|
|
196
|
+
return nil unless @version
|
|
197
|
+
|
|
198
|
+
without_gnu_nor_abi_modifiers = @version.sub(/\Agnu/, "").sub(/eabi(hf)?\Z/, "")
|
|
199
|
+
return nil if without_gnu_nor_abi_modifiers.empty?
|
|
200
|
+
|
|
201
|
+
without_gnu_nor_abi_modifiers
|
|
202
|
+
end
|
|
203
|
+
|
|
188
204
|
##
|
|
189
205
|
# Does +other+ match this platform? If +other+ is a String it will be
|
|
190
206
|
# converted to a Gem::Platform first. See #=== for matching rules.
|
data/lib/rubygems/resolver.rb
CHANGED
|
@@ -246,7 +246,7 @@ class Gem::Resolver
|
|
|
246
246
|
|
|
247
247
|
sources.each do |source|
|
|
248
248
|
groups[source].
|
|
249
|
-
sort_by {|spec| [spec.version, Gem::Platform.local
|
|
249
|
+
sort_by {|spec| [spec.version, spec.platform =~ Gem::Platform.local ? 1 : 0] }.
|
|
250
250
|
map {|spec| ActivationRequest.new spec, dependency }.
|
|
251
251
|
each {|activation_request| activation_requests << activation_request }
|
|
252
252
|
end
|
data/lib/rubygems.rb
CHANGED
data/rubygems-update.gemspec
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Gem::Specification.new do |s|
|
|
4
4
|
s.name = "rubygems-update"
|
|
5
|
-
s.version = "3.3.
|
|
5
|
+
s.version = "3.3.23"
|
|
6
6
|
s.authors = ["Jim Weirich", "Chad Fowler", "Eric Hodel", "Luis Lavena", "Aaron Patterson", "Samuel Giddins", "André Arko", "Evan Phoenix", "Hiroshi SHIBATA"]
|
|
7
7
|
s.email = ["", "", "drbrain@segment7.net", "luislavena@gmail.com", "aaron@tenderlovemaking.com", "segiddins@segiddins.me", "andre@arko.net", "evan@phx.io", "hsbt@ruby-lang.org"]
|
|
8
8
|
|
data/test/rubygems/helper.rb
CHANGED
|
@@ -2,26 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
require "rubygems"
|
|
4
4
|
|
|
5
|
-
# If bundler gemspec exists, add to stubs
|
|
6
|
-
bundler_gemspec = File.expand_path("../../bundler/bundler.gemspec", __dir__)
|
|
7
|
-
if File.exist?(bundler_gemspec)
|
|
8
|
-
Gem::Specification.dirs.unshift File.dirname(bundler_gemspec)
|
|
9
|
-
Gem::Specification.class_variable_set :@@stubs, nil
|
|
10
|
-
Gem::Specification.stubs
|
|
11
|
-
Gem::Specification.dirs.shift
|
|
12
|
-
end
|
|
13
|
-
|
|
14
5
|
begin
|
|
15
6
|
gem "test-unit", "~> 3.0"
|
|
16
7
|
rescue Gem::LoadError
|
|
17
8
|
end
|
|
18
9
|
|
|
19
|
-
if File.exist?(bundler_gemspec)
|
|
20
|
-
require_relative "../../bundler/lib/bundler"
|
|
21
|
-
else
|
|
22
|
-
require "bundler"
|
|
23
|
-
end
|
|
24
|
-
|
|
25
10
|
require "test/unit"
|
|
26
11
|
|
|
27
12
|
ENV["JARS_SKIP"] = "true" if Gem.java_platform? # avoid unnecessary and noisy `jar-dependencies` post install hook
|
|
@@ -409,7 +394,6 @@ class Gem::TestCase < Test::Unit::TestCase
|
|
|
409
394
|
Gem.loaded_specs.clear
|
|
410
395
|
Gem.instance_variable_set(:@activated_gem_paths, 0)
|
|
411
396
|
Gem.clear_default_specs
|
|
412
|
-
Bundler.reset!
|
|
413
397
|
|
|
414
398
|
Gem.configuration.verbose = true
|
|
415
399
|
Gem.configuration.update_sources = true
|
|
@@ -465,7 +449,7 @@ class Gem::TestCase < Test::Unit::TestCase
|
|
|
465
449
|
|
|
466
450
|
FileUtils.rm_rf @tempdir
|
|
467
451
|
|
|
468
|
-
|
|
452
|
+
restore_env
|
|
469
453
|
|
|
470
454
|
Gem::ConfigFile.send :remove_const, :SYSTEM_WIDE_CONFIG_FILE
|
|
471
455
|
Gem::ConfigFile.send :const_set, :SYSTEM_WIDE_CONFIG_FILE,
|
|
@@ -575,6 +559,7 @@ class Gem::TestCase < Test::Unit::TestCase
|
|
|
575
559
|
Dir.chdir directory do
|
|
576
560
|
unless File.exist? ".git"
|
|
577
561
|
system @git, "init", "--quiet"
|
|
562
|
+
system @git, "checkout", "-b", "master", "--quiet"
|
|
578
563
|
system @git, "config", "user.name", "RubyGems Tests"
|
|
579
564
|
system @git, "config", "user.email", "rubygems@example"
|
|
580
565
|
end
|
|
@@ -1301,6 +1286,10 @@ Also, a list:
|
|
|
1301
1286
|
$LOAD_PATH.find {|p| p == File.dirname($LOADED_FEATURES.find {|f| f.end_with?("/rubygems.rb") }) }
|
|
1302
1287
|
end
|
|
1303
1288
|
|
|
1289
|
+
def bundler_path
|
|
1290
|
+
$LOAD_PATH.find {|p| p == File.dirname($LOADED_FEATURES.find {|f| f.end_with?("/bundler.rb") }) }
|
|
1291
|
+
end
|
|
1292
|
+
|
|
1304
1293
|
def with_clean_path_to_ruby
|
|
1305
1294
|
orig_ruby = Gem.ruby
|
|
1306
1295
|
|
|
@@ -1581,6 +1570,23 @@ Also, a list:
|
|
|
1581
1570
|
PUBLIC_KEY = nil
|
|
1582
1571
|
PUBLIC_CERT = nil
|
|
1583
1572
|
end if Gem::HAVE_OPENSSL
|
|
1573
|
+
|
|
1574
|
+
private
|
|
1575
|
+
|
|
1576
|
+
def restore_env
|
|
1577
|
+
unless Gem.win_platform?
|
|
1578
|
+
ENV.replace(@orig_env)
|
|
1579
|
+
return
|
|
1580
|
+
end
|
|
1581
|
+
|
|
1582
|
+
# Fallback logic for Windows below to workaround
|
|
1583
|
+
# https://bugs.ruby-lang.org/issues/16798. Can be dropped once all
|
|
1584
|
+
# supported rubies include the fix for that.
|
|
1585
|
+
|
|
1586
|
+
ENV.clear
|
|
1587
|
+
|
|
1588
|
+
@orig_env.each {|k, v| ENV[k] = v }
|
|
1589
|
+
end
|
|
1584
1590
|
end
|
|
1585
1591
|
|
|
1586
1592
|
# https://github.com/seattlerb/minitest/blob/13c48a03d84a2a87855a4de0c959f96800100357/lib/minitest/mock.rb#L192
|
|
Binary file
|