rubygems-update 3.4.6 → 3.4.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (120) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +45 -0
  3. data/Manifest.txt +2 -1
  4. data/POLICIES.md +5 -5
  5. data/README.md +1 -4
  6. data/bundler/CHANGELOG.md +40 -0
  7. data/bundler/README.md +1 -4
  8. data/bundler/lib/bundler/build_metadata.rb +2 -2
  9. data/bundler/lib/bundler/cli/init.rb +2 -2
  10. data/bundler/lib/bundler/cli.rb +1 -0
  11. data/bundler/lib/bundler/current_ruby.rb +2 -0
  12. data/bundler/lib/bundler/dependency.rb +1 -1
  13. data/bundler/lib/bundler/environment_preserver.rb +2 -2
  14. data/bundler/lib/bundler/fetcher.rb +2 -2
  15. data/bundler/lib/bundler/index.rb +2 -2
  16. data/bundler/lib/bundler/injector.rb +1 -1
  17. data/bundler/lib/bundler/installer/parallel_installer.rb +3 -2
  18. data/bundler/lib/bundler/installer/standalone.rb +1 -1
  19. data/bundler/lib/bundler/lockfile_generator.rb +1 -1
  20. data/bundler/lib/bundler/lockfile_parser.rb +9 -9
  21. data/bundler/lib/bundler/man/bundle-add.1 +1 -1
  22. data/bundler/lib/bundler/man/bundle-binstubs.1 +1 -1
  23. data/bundler/lib/bundler/man/bundle-cache.1 +1 -1
  24. data/bundler/lib/bundler/man/bundle-check.1 +1 -1
  25. data/bundler/lib/bundler/man/bundle-clean.1 +1 -1
  26. data/bundler/lib/bundler/man/bundle-config.1 +1 -1
  27. data/bundler/lib/bundler/man/bundle-console.1 +1 -1
  28. data/bundler/lib/bundler/man/bundle-doctor.1 +1 -1
  29. data/bundler/lib/bundler/man/bundle-exec.1 +1 -1
  30. data/bundler/lib/bundler/man/bundle-gem.1 +1 -1
  31. data/bundler/lib/bundler/man/bundle-help.1 +1 -1
  32. data/bundler/lib/bundler/man/bundle-info.1 +1 -1
  33. data/bundler/lib/bundler/man/bundle-init.1 +5 -1
  34. data/bundler/lib/bundler/man/bundle-init.1.ronn +2 -0
  35. data/bundler/lib/bundler/man/bundle-inject.1 +1 -1
  36. data/bundler/lib/bundler/man/bundle-install.1 +1 -1
  37. data/bundler/lib/bundler/man/bundle-list.1 +1 -1
  38. data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
  39. data/bundler/lib/bundler/man/bundle-open.1 +1 -1
  40. data/bundler/lib/bundler/man/bundle-outdated.1 +1 -1
  41. data/bundler/lib/bundler/man/bundle-platform.1 +1 -1
  42. data/bundler/lib/bundler/man/bundle-plugin.1 +1 -1
  43. data/bundler/lib/bundler/man/bundle-pristine.1 +1 -1
  44. data/bundler/lib/bundler/man/bundle-remove.1 +1 -1
  45. data/bundler/lib/bundler/man/bundle-show.1 +1 -1
  46. data/bundler/lib/bundler/man/bundle-update.1 +1 -1
  47. data/bundler/lib/bundler/man/bundle-version.1 +1 -1
  48. data/bundler/lib/bundler/man/bundle-viz.1 +1 -1
  49. data/bundler/lib/bundler/man/bundle.1 +1 -1
  50. data/bundler/lib/bundler/man/gemfile.5 +1 -1
  51. data/bundler/lib/bundler/plugin.rb +1 -1
  52. data/bundler/lib/bundler/rubygems_integration.rb +1 -1
  53. data/bundler/lib/bundler/setup.rb +4 -1
  54. data/bundler/lib/bundler/source/git/git_proxy.rb +22 -8
  55. data/bundler/lib/bundler/source/git.rb +1 -0
  56. data/bundler/lib/bundler/source/path.rb +1 -1
  57. data/bundler/lib/bundler/spec_set.rb +8 -2
  58. data/bundler/lib/bundler/templates/Executable.bundler +1 -1
  59. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +1 -1
  60. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/incompatibility.rb +6 -2
  61. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/static_package_source.rb +8 -1
  62. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_constraint.rb +5 -4
  63. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_range.rb +4 -2
  64. data/bundler/lib/bundler/vendor/pub_grub/lib/pub_grub/version_solver.rb +4 -1
  65. data/bundler/lib/bundler/version.rb +1 -1
  66. data/bundler/lib/bundler.rb +9 -9
  67. data/lib/rubygems/bundler_version_finder.rb +1 -1
  68. data/lib/rubygems/command.rb +10 -6
  69. data/lib/rubygems/command_manager.rb +1 -0
  70. data/lib/rubygems/commands/exec_command.rb +248 -0
  71. data/lib/rubygems/commands/help_command.rb +3 -3
  72. data/lib/rubygems/defaults.rb +2 -2
  73. data/lib/rubygems/dependency.rb +1 -1
  74. data/lib/rubygems/deprecate.rb +2 -2
  75. data/lib/rubygems/package/tar_reader/entry.rb +88 -7
  76. data/lib/rubygems/package/tar_reader.rb +0 -28
  77. data/lib/rubygems/platform.rb +2 -2
  78. data/lib/rubygems/request_set/gem_dependency_api.rb +0 -1
  79. data/lib/rubygems/requirement.rb +1 -1
  80. data/lib/rubygems/resolver/stats.rb +1 -1
  81. data/lib/rubygems/source/git.rb +1 -1
  82. data/lib/rubygems/specification.rb +9 -1
  83. data/lib/rubygems/specification_policy.rb +5 -0
  84. data/lib/rubygems/stub_specification.rb +7 -7
  85. data/lib/rubygems/text.rb +1 -1
  86. data/lib/rubygems/util/licenses.rb +2 -2
  87. data/lib/rubygems/version.rb +2 -2
  88. data/lib/rubygems.rb +3 -3
  89. data/rubygems-update.gemspec +1 -1
  90. data/test/rubygems/helper.rb +2 -3
  91. data/test/rubygems/package/tar_test_case.rb +49 -14
  92. data/test/rubygems/simple_gem.rb +1 -1
  93. data/test/rubygems/test_gem.rb +24 -0
  94. data/test/rubygems/test_gem_bundler_version_finder.rb +2 -2
  95. data/test/rubygems/test_gem_command_manager.rb +25 -0
  96. data/test/rubygems/test_gem_commands_exec_command.rb +851 -0
  97. data/test/rubygems/test_gem_commands_install_command.rb +1 -1
  98. data/test/rubygems/test_gem_commands_setup_command.rb +1 -1
  99. data/test/rubygems/test_gem_ext_builder.rb +3 -5
  100. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +20 -6
  101. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +1 -1
  102. data/test/rubygems/test_gem_gem_runner.rb +2 -2
  103. data/test/rubygems/test_gem_package.rb +0 -25
  104. data/test/rubygems/test_gem_package_tar_reader.rb +48 -1
  105. data/test/rubygems/test_gem_package_tar_reader_entry.rb +151 -6
  106. data/test/rubygems/test_gem_remote_fetcher.rb +1 -1
  107. data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +10 -10
  108. data/test/rubygems/test_gem_request_set_lockfile_parser.rb +2 -2
  109. data/test/rubygems/test_gem_resolver_git_set.rb +9 -9
  110. data/test/rubygems/test_gem_resolver_git_specification.rb +1 -1
  111. data/test/rubygems/test_gem_source.rb +1 -1
  112. data/test/rubygems/test_gem_source_git.rb +13 -12
  113. data/test/rubygems/test_gem_source_installed.rb +1 -1
  114. data/test/rubygems/test_gem_source_lock.rb +3 -3
  115. data/test/rubygems/test_gem_source_vendor.rb +1 -1
  116. data/test/rubygems/test_gem_specification.rb +36 -2
  117. data/test/rubygems/test_gem_version.rb +2 -2
  118. data/test/rubygems/test_kernel.rb +0 -8
  119. metadata +5 -4
  120. data/bundler/lib/bundler/templates/gems.rb +0 -5
@@ -3,7 +3,7 @@ require_relative "../command"
3
3
 
4
4
  class Gem::Commands::HelpCommand < Gem::Command
5
5
  # :stopdoc:
6
- EXAMPLES = <<-EOF.freeze
6
+ EXAMPLES = <<-EOF
7
7
  Some examples of 'gem' usage.
8
8
 
9
9
  * Install 'rake', either from local directory or remote server:
@@ -52,7 +52,7 @@ Some examples of 'gem' usage.
52
52
  gem update --system
53
53
  EOF
54
54
 
55
- GEM_DEPENDENCIES = <<-EOF.freeze
55
+ GEM_DEPENDENCIES = <<-EOF
56
56
  A gem dependencies file allows installation of a consistent set of gems across
57
57
  multiple environments. The RubyGems implementation is designed to be
58
58
  compatible with Bundler's Gemfile format. You can see additional
@@ -229,7 +229,7 @@ default. This may be overridden with the :development_group option:
229
229
 
230
230
  EOF
231
231
 
232
- PLATFORMS = <<-'EOF'.freeze
232
+ PLATFORMS = <<-'EOF'
233
233
  RubyGems platforms are composed of three parts, a CPU, an OS, and a
234
234
  version. These values are taken from values in rbconfig.rb. You can view
235
235
  your current platform by running `gem environment`.
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  module Gem
3
- DEFAULT_HOST = "https://rubygems.org".freeze
3
+ DEFAULT_HOST = "https://rubygems.org"
4
4
 
5
5
  @post_install_hooks ||= []
6
6
  @done_installing_hooks ||= []
@@ -158,7 +158,7 @@ module Gem
158
158
  # The path to standard location of the user's state directory.
159
159
 
160
160
  def self.state_home
161
- @data_home ||= (ENV["XDG_STATE_HOME"] || File.join(Gem.user_home, ".local", "state"))
161
+ @state_home ||= (ENV["XDG_STATE_HOME"] || File.join(Gem.user_home, ".local", "state"))
162
162
  end
163
163
 
164
164
  ##
@@ -299,7 +299,7 @@ class Gem::Dependency
299
299
  end
300
300
 
301
301
  def prioritizes_bundler?
302
- name == "bundler".freeze && !specific?
302
+ name == "bundler" && !specific?
303
303
  end
304
304
 
305
305
  def to_specs
@@ -143,7 +143,7 @@ module Gem::Deprecate
143
143
  end
144
144
 
145
145
  # Deprecation method to deprecate Rubygems commands
146
- def rubygems_deprecate_command
146
+ def rubygems_deprecate_command(version = Gem::Deprecate.next_rubygems_major_version)
147
147
  class_eval do
148
148
  define_method "deprecated?" do
149
149
  true
@@ -151,7 +151,7 @@ module Gem::Deprecate
151
151
 
152
152
  define_method "deprecation_warning" do
153
153
  msg = [ "#{self.command} command is deprecated",
154
- ". It will be removed in Rubygems #{Gem::Deprecate.next_rubygems_major_version}.\n",
154
+ ". It will be removed in Rubygems #{version}.\n",
155
155
  ]
156
156
 
157
157
  alert_warning "#{msg.join}" unless Gem::Deprecate.skip
@@ -8,6 +8,20 @@
8
8
  # Class for reading entries out of a tar file
9
9
 
10
10
  class Gem::Package::TarReader::Entry
11
+ ##
12
+ # Creates a new tar entry for +header+ that will be read from +io+
13
+ # If a block is given, the entry is yielded and then closed.
14
+
15
+ def self.open(header, io, &block)
16
+ entry = new header, io
17
+ return entry unless block_given?
18
+ begin
19
+ yield entry
20
+ ensure
21
+ entry.close
22
+ end
23
+ end
24
+
11
25
  ##
12
26
  # Header for this tar entry
13
27
 
@@ -21,6 +35,7 @@ class Gem::Package::TarReader::Entry
21
35
  @header = header
22
36
  @io = io
23
37
  @orig_pos = @io.pos
38
+ @end_pos = @orig_pos + @header.size
24
39
  @read = 0
25
40
  end
26
41
 
@@ -39,7 +54,14 @@ class Gem::Package::TarReader::Entry
39
54
  # Closes the tar entry
40
55
 
41
56
  def close
57
+ return if closed?
58
+ # Seek to the end of the entry if it wasn't fully read
59
+ seek(0, IO::SEEK_END)
60
+ # discard trailing zeros
61
+ skip = (512 - (@header.size % 512)) % 512
62
+ @io.read(skip)
42
63
  @closed = true
64
+ nil
43
65
  end
44
66
 
45
67
  ##
@@ -117,6 +139,14 @@ class Gem::Package::TarReader::Entry
117
139
  bytes_read
118
140
  end
119
141
 
142
+ ##
143
+ # Seek to the position in the tar entry
144
+
145
+ def pos=(new_pos)
146
+ seek(new_pos, IO::SEEK_SET)
147
+ new_pos
148
+ end
149
+
120
150
  def size
121
151
  @header.size
122
152
  end
@@ -130,9 +160,10 @@ class Gem::Package::TarReader::Entry
130
160
  def read(len = nil)
131
161
  check_closed
132
162
 
133
- return nil if @read >= @header.size
134
-
135
163
  len ||= @header.size - @read
164
+
165
+ return nil if len > 0 && @read >= @header.size
166
+
136
167
  max_read = [len, @header.size - @read].min
137
168
 
138
169
  ret = @io.read max_read
@@ -144,9 +175,10 @@ class Gem::Package::TarReader::Entry
144
175
  def readpartial(maxlen = nil, outbuf = "".b)
145
176
  check_closed
146
177
 
147
- raise EOFError if @read >= @header.size
148
-
149
178
  maxlen ||= @header.size - @read
179
+
180
+ raise EOFError if maxlen > 0 && @read >= @header.size
181
+
150
182
  max_read = [maxlen, @header.size - @read].min
151
183
 
152
184
  @io.readpartial(max_read, outbuf)
@@ -155,13 +187,62 @@ class Gem::Package::TarReader::Entry
155
187
  outbuf
156
188
  end
157
189
 
190
+ ##
191
+ # Seeks to +offset+ bytes into the tar file entry
192
+ # +whence+ can be IO::SEEK_SET, IO::SEEK_CUR, or IO::SEEK_END
193
+
194
+ def seek(offset, whence = IO::SEEK_SET)
195
+ check_closed
196
+
197
+ new_pos =
198
+ case whence
199
+ when IO::SEEK_SET then @orig_pos + offset
200
+ when IO::SEEK_CUR then @io.pos + offset
201
+ when IO::SEEK_END then @end_pos + offset
202
+ else
203
+ raise ArgumentError, "invalid whence"
204
+ end
205
+
206
+ if new_pos < @orig_pos
207
+ new_pos = @orig_pos
208
+ elsif new_pos > @end_pos
209
+ new_pos = @end_pos
210
+ end
211
+
212
+ pending = new_pos - @io.pos
213
+
214
+ if @io.respond_to?(:seek)
215
+ begin
216
+ # avoid reading if the @io supports seeking
217
+ @io.seek new_pos, IO::SEEK_SET
218
+ pending = 0
219
+ rescue Errno::EINVAL
220
+ end
221
+ end
222
+
223
+ # if seeking isn't supported or failed
224
+ # negative seek requires that we rewind and read
225
+ if pending < 0
226
+ @io.rewind
227
+ pending = new_pos
228
+ end
229
+
230
+ while pending > 0 do
231
+ size_read = @io.read([pending, 4096].min).size
232
+ raise UnexpectedEOF if @io.eof?
233
+ pending -= size_read
234
+ end
235
+
236
+ @read = @io.pos - @orig_pos
237
+
238
+ 0
239
+ end
240
+
158
241
  ##
159
242
  # Rewinds to the beginning of the tar file entry
160
243
 
161
244
  def rewind
162
245
  check_closed
163
-
164
- @io.pos = @orig_pos
165
- @read = 0
246
+ seek(0, IO::SEEK_SET)
166
247
  end
167
248
  end
@@ -53,39 +53,11 @@ class Gem::Package::TarReader
53
53
  def each
54
54
  return enum_for __method__ unless block_given?
55
55
 
56
- use_seek = @io.respond_to?(:seek)
57
-
58
56
  until @io.eof? do
59
57
  header = Gem::Package::TarHeader.from @io
60
58
  return if header.empty?
61
-
62
59
  entry = Gem::Package::TarReader::Entry.new header, @io
63
- size = entry.header.size
64
-
65
60
  yield entry
66
-
67
- skip = (512 - (size % 512)) % 512
68
- pending = size - entry.bytes_read
69
-
70
- if use_seek
71
- begin
72
- # avoid reading if the @io supports seeking
73
- @io.seek pending, IO::SEEK_CUR
74
- pending = 0
75
- rescue Errno::EINVAL
76
- end
77
- end
78
-
79
- # if seeking isn't supported or failed
80
- while pending > 0 do
81
- bytes_read = @io.read([pending, 4096].min).size
82
- raise UnexpectedEOF if @io.eof?
83
- pending -= bytes_read
84
- end
85
-
86
- @io.read skip # discard trailing zeros
87
-
88
- # make sure nobody can use #read, #getc or #rewind anymore
89
61
  entry.close
90
62
  end
91
63
  end
@@ -235,11 +235,11 @@ class Gem::Platform
235
235
  # A pure-Ruby gem that may use Gem::Specification#extensions to build
236
236
  # binary files.
237
237
 
238
- RUBY = "ruby".freeze
238
+ RUBY = "ruby"
239
239
 
240
240
  ##
241
241
  # A platform-specific gem that is built for the packaging Ruby's platform.
242
242
  # This will be replaced with Gem::Platform::local.
243
243
 
244
- CURRENT = "current".freeze
244
+ CURRENT = "current"
245
245
  end
@@ -435,7 +435,6 @@ Gem dependencies file #{@path} requires #{name} more than once.
435
435
  reference ||= ref
436
436
  reference ||= branch
437
437
  reference ||= tag
438
- reference ||= "master"
439
438
 
440
439
  if ref && branch
441
440
  warn <<-WARNING
@@ -22,7 +22,7 @@ class Gem::Requirement
22
22
  SOURCE_SET_REQUIREMENT = Struct.new(:for_lockfile).new "!" # :nodoc:
23
23
 
24
24
  quoted = OPS.keys.map {|k| Regexp.quote k }.join "|"
25
- PATTERN_RAW = "\\s*(#{quoted})?\\s*(#{Gem::Version::VERSION_PATTERN})\\s*".freeze # :nodoc:
25
+ PATTERN_RAW = "\\s*(#{quoted})?\\s*(#{Gem::Version::VERSION_PATTERN})\\s*" # :nodoc:
26
26
 
27
27
  ##
28
28
  # A regular expression that matches a requirement
@@ -32,7 +32,7 @@ class Gem::Resolver::Stats
32
32
  @iterations += 1
33
33
  end
34
34
 
35
- PATTERN = "%20s: %d\n".freeze
35
+ PATTERN = "%20s: %d\n"
36
36
 
37
37
  def display
38
38
  $stdout.puts "=== Resolver Statistics ==="
@@ -53,7 +53,7 @@ class Gem::Source::Git < Gem::Source
53
53
  @uri = Gem::Uri.parse(repository)
54
54
  @name = name
55
55
  @repository = repository
56
- @reference = reference
56
+ @reference = reference || "HEAD"
57
57
  @need_submodules = submodules
58
58
 
59
59
  @remote = true
@@ -338,7 +338,7 @@ class Gem::Specification < Gem::BasicSpecification
338
338
  # The simplest way is to specify the standard SPDX ID
339
339
  # https://spdx.org/licenses/ for the license.
340
340
  # Ideally, you should pick one that is OSI (Open Source Initiative)
341
- # http://opensource.org/licenses/alphabetical approved.
341
+ # https://opensource.org/licenses/ approved.
342
342
  #
343
343
  # The most commonly used OSI-approved licenses are MIT and Apache-2.0.
344
344
  # GitHub also provides a license picker at http://choosealicense.com/.
@@ -1021,6 +1021,12 @@ class Gem::Specification < Gem::BasicSpecification
1021
1021
  Gem::Dependency.new(name, *requirements).to_spec
1022
1022
  end
1023
1023
 
1024
+ ##
1025
+ # Find the best specification matching a +full_name+.
1026
+ def self.find_by_full_name(full_name)
1027
+ stubs.find {|s| s.full_name == full_name }&.to_spec
1028
+ end
1029
+
1024
1030
  ##
1025
1031
  # Return the best specification that contains the file matching +path+.
1026
1032
 
@@ -1606,6 +1612,8 @@ class Gem::Specification < Gem::BasicSpecification
1606
1612
  def build_extensions # :nodoc:
1607
1613
  return if extensions.empty?
1608
1614
  return if default_gem?
1615
+ # we need to fresh build when same name and version of default gems
1616
+ return if self.class.find_by_full_name(full_name)&.default_gem?
1609
1617
  return if File.exist? gem_build_complete_path
1610
1618
  return if !File.writable?(base_dir)
1611
1619
  return if !File.exist?(File.join(base_dir, "extensions"))
@@ -173,6 +173,7 @@ duplicate dependency on #{dep}, (#{prev.requirement}) use:
173
173
  end
174
174
 
175
175
  ##
176
+ # Checks that the gem does not depend on itself.
176
177
  # Checks that dependencies use requirements as we recommend. Warnings are
177
178
  # issued when dependencies are open-ended or overly strict for semantic
178
179
  # versioning.
@@ -180,6 +181,10 @@ duplicate dependency on #{dep}, (#{prev.requirement}) use:
180
181
  def validate_dependencies # :nodoc:
181
182
  warning_messages = []
182
183
  @specification.dependencies.each do |dep|
184
+ if dep.name == @specification.name # warn on self reference
185
+ warning_messages << "Self referencing dependency is unnecessary and strongly discouraged."
186
+ end
187
+
183
188
  prerelease_dep = dep.requirements_list.any? do |req|
184
189
  Gem::Requirement.new(req).prerelease?
185
190
  end
@@ -6,10 +6,10 @@
6
6
 
7
7
  class Gem::StubSpecification < Gem::BasicSpecification
8
8
  # :nodoc:
9
- PREFIX = "# stub: ".freeze
9
+ PREFIX = "# stub: "
10
10
 
11
11
  # :nodoc:
12
- OPEN_MODE = "r:UTF-8:-".freeze
12
+ OPEN_MODE = "r:UTF-8:-"
13
13
 
14
14
  class StubLine # :nodoc: all
15
15
  attr_reader :name, :version, :platform, :require_paths, :extensions,
@@ -19,9 +19,9 @@ class Gem::StubSpecification < Gem::BasicSpecification
19
19
 
20
20
  # These are common require paths.
21
21
  REQUIRE_PATHS = { # :nodoc:
22
- "lib" => "lib".freeze,
23
- "test" => "test".freeze,
24
- "ext" => "ext".freeze,
22
+ "lib" => "lib",
23
+ "test" => "test",
24
+ "ext" => "ext",
25
25
  }.freeze
26
26
 
27
27
  # These are common require path lists. This hash is used to optimize
@@ -33,7 +33,7 @@ class Gem::StubSpecification < Gem::BasicSpecification
33
33
  }.freeze
34
34
 
35
35
  def initialize(data, extensions)
36
- parts = data[PREFIX.length..-1].split(" ".freeze, 4)
36
+ parts = data[PREFIX.length..-1].split(" ", 4)
37
37
  @name = parts[0].freeze
38
38
  @version = if Gem::Version.correct?(parts[1])
39
39
  Gem::Version.new(parts[1])
@@ -50,7 +50,7 @@ class Gem::StubSpecification < Gem::BasicSpecification
50
50
  end
51
51
 
52
52
  path_list = parts.last
53
- @require_paths = REQUIRE_PATH_LIST[path_list] || path_list.split("\0".freeze).map! do |x|
53
+ @require_paths = REQUIRE_PATH_LIST[path_list] || path_list.split("\0").map! do |x|
54
54
  REQUIRE_PATHS[x] || x
55
55
  end
56
56
  end
data/lib/rubygems/text.rb CHANGED
@@ -9,7 +9,7 @@ module Gem::Text
9
9
  # Remove any non-printable characters and make the text suitable for
10
10
  # printing.
11
11
  def clean_text(text)
12
- text.gsub(/[\000-\b\v-\f\016-\037\177]/, ".".freeze)
12
+ text.gsub(/[\000-\b\v-\f\016-\037\177]/, ".")
13
13
  end
14
14
 
15
15
  def truncate_text(text, description, max_length = 100_000)
@@ -4,8 +4,8 @@ require_relative "../text"
4
4
  class Gem::Licenses
5
5
  extend Gem::Text
6
6
 
7
- NONSTANDARD = "Nonstandard".freeze
8
- LICENSE_REF = "LicenseRef-.+".freeze
7
+ NONSTANDARD = "Nonstandard"
8
+ LICENSE_REF = "LicenseRef-.+"
9
9
 
10
10
  # Software Package Data Exchange (SPDX) standard open-source software
11
11
  # license identifiers
@@ -155,7 +155,7 @@ require_relative "deprecate"
155
155
  class Gem::Version
156
156
  include Comparable
157
157
 
158
- VERSION_PATTERN = '[0-9]+(?>\.[0-9a-zA-Z]+)*(-[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?'.freeze # :nodoc:
158
+ VERSION_PATTERN = '[0-9]+(?>\.[0-9a-zA-Z]+)*(-[0-9A-Za-z-]+(\.[0-9A-Za-z-]+)*)?' # :nodoc:
159
159
  ANCHORED_VERSION_PATTERN = /\A\s*(#{VERSION_PATTERN})?\s*\z/.freeze # :nodoc:
160
160
 
161
161
  ##
@@ -272,7 +272,7 @@ class Gem::Version
272
272
  # string for backwards (RubyGems 1.3.5 and earlier) compatibility.
273
273
 
274
274
  def marshal_dump
275
- [version]
275
+ [@version]
276
276
  end
277
277
 
278
278
  ##
data/lib/rubygems.rb CHANGED
@@ -8,7 +8,7 @@
8
8
  require "rbconfig"
9
9
 
10
10
  module Gem
11
- VERSION = "3.4.6".freeze
11
+ VERSION = "3.4.8"
12
12
  end
13
13
 
14
14
  # Must be first since it unloads the prelude from 1.9.2
@@ -824,7 +824,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
824
824
  def self.env_requirement(gem_name)
825
825
  @env_requirements_by_name ||= {}
826
826
  @env_requirements_by_name[gem_name] ||= begin
827
- req = ENV["GEM_REQUIREMENT_#{gem_name.upcase}"] || ">= 0".freeze
827
+ req = ENV["GEM_REQUIREMENT_#{gem_name.upcase}"] || ">= 0"
828
828
  Gem::Requirement.create(req)
829
829
  end
830
830
  end
@@ -1301,7 +1301,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
1301
1301
  ##
1302
1302
  # Location of Marshal quick gemspecs on remote repositories
1303
1303
 
1304
- MARSHAL_SPEC_DIR = "quick/Marshal.#{Gem.marshal_version}/".freeze
1304
+ MARSHAL_SPEC_DIR = "quick/Marshal.#{Gem.marshal_version}/"
1305
1305
 
1306
1306
  autoload :ConfigFile, File.expand_path("rubygems/config_file", __dir__)
1307
1307
  autoload :Dependency, File.expand_path("rubygems/dependency", __dir__)
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "rubygems-update"
5
- s.version = "3.4.6"
5
+ s.version = "3.4.8"
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
 
@@ -563,14 +563,13 @@ class Gem::TestCase < Test::Unit::TestCase
563
563
  Dir.chdir directory do
564
564
  unless File.exist? ".git"
565
565
  system @git, "init", "--quiet"
566
- system @git, "checkout", "-b", "master", "--quiet"
567
566
  system @git, "config", "user.name", "RubyGems Tests"
568
567
  system @git, "config", "user.email", "rubygems@example"
569
568
  end
570
569
 
571
570
  system @git, "add", gemspec
572
571
  system @git, "commit", "-a", "-m", "a non-empty commit message", "--quiet"
573
- head = Gem::Util.popen(@git, "rev-parse", "master").strip
572
+ head = Gem::Util.popen(@git, "rev-parse", "HEAD").strip
574
573
  end
575
574
 
576
575
  return name, git_spec.version, directory, head
@@ -1555,7 +1554,7 @@ Also, a list:
1555
1554
  # :stopdoc:
1556
1555
  # only available in RubyGems tests
1557
1556
 
1558
- PRIVATE_KEY_PASSPHRASE = "Foo bar".freeze
1557
+ PRIVATE_KEY_PASSPHRASE = "Foo bar"
1559
1558
 
1560
1559
  begin
1561
1560
  PRIVATE_KEY = load_key "private"
@@ -90,31 +90,36 @@ class Gem::Package::TarTestCase < Gem::TestCase
90
90
  ASCIIZ("wheel", 32), # char gname[32]; ASCIIZ
91
91
  Z(to_oct(0, 7)), # char devmajor[8]; 0 padded, octal, null
92
92
  Z(to_oct(0, 7)), # char devminor[8]; 0 padded, octal, null
93
- ASCIIZ(dname, 155), # char prefix[155]; ASCII + (Z unless filled)
93
+ ASCIIZ(dname, 155), # char prefix[155]; ASCII + (Z unless filled)
94
94
  ]
95
95
 
96
96
  h = arr.join
97
- ret = h + "\0" * (512 - h.size)
97
+ ret = ASCIIZ(h, 512)
98
98
  assert_equal(512, ret.size)
99
99
  ret
100
100
  end
101
101
 
102
- def tar_dir_header(name, prefix, mode, mtime)
103
- h = header("5", name, prefix, 0, mode, mtime)
102
+ def header_with_checksum(type, fname, dname, length, mode, mtime, linkname = "")
103
+ h = header(type, fname, dname, length, mode, mtime, nil, linkname)
104
104
  checksum = calc_checksum(h)
105
- header("5", name, prefix, 0, mode, mtime, checksum)
105
+ header(type, fname, dname, length, mode, mtime, checksum, linkname)
106
+ end
107
+
108
+ def tar_dir_header(name, prefix, mode, mtime)
109
+ header_with_checksum("5", name, prefix, 0, mode, mtime)
106
110
  end
107
111
 
108
112
  def tar_file_header(fname, dname, mode, length, mtime)
109
- h = header("0", fname, dname, length, mode, mtime)
110
- checksum = calc_checksum(h)
111
- header("0", fname, dname, length, mode, mtime, checksum)
113
+ header_with_checksum("0", fname, dname, length, mode, mtime)
112
114
  end
113
115
 
114
- def tar_symlink_header(fname, prefix, mode, mtime, linkname)
115
- h = header("2", fname, prefix, 0, mode, mtime, nil, linkname)
116
- checksum = calc_checksum(h)
117
- header("2", fname, prefix, 0, mode, mtime, checksum, linkname)
116
+ def tar_symlink_header(fname, dname, mode, mtime, linkname)
117
+ header_with_checksum("2", fname, dname, 0, mode, mtime, linkname)
118
+ end
119
+
120
+ def tar_file_contents(content)
121
+ pad = (512 - (content.size % 512)) % 512
122
+ content + "\0" * pad
118
123
  end
119
124
 
120
125
  def to_oct(n, pad_size)
@@ -122,11 +127,15 @@ class Gem::Package::TarTestCase < Gem::TestCase
122
127
  end
123
128
 
124
129
  def util_entry(tar)
125
- io = TempIO.new tar
130
+ io = tar.respond_to?(:read) ? tar : TempIO.new(tar)
126
131
 
127
132
  header = Gem::Package::TarHeader.from io
128
133
 
129
- Gem::Package::TarReader::Entry.new header, io
134
+ Gem::Package::TarReader::Entry.open header, io
135
+ end
136
+
137
+ def close_util_entry(entry)
138
+ entry.instance_variable_get(:@io).close!
130
139
  end
131
140
 
132
141
  def util_dir_entry
@@ -136,4 +145,30 @@ class Gem::Package::TarTestCase < Gem::TestCase
136
145
  def util_symlink_entry
137
146
  util_entry tar_symlink_header("foo", "bar", 0, Time.now, "link")
138
147
  end
148
+
149
+ def util_tar(&block)
150
+ tar_io = StringIO.new
151
+ Gem::Package::TarWriter.new(tar_io, &block)
152
+ tar_io.rewind
153
+ tar_io
154
+ end
155
+
156
+ def util_tar_gz(&block)
157
+ tar_io = util_tar(&block)
158
+ StringIO.new util_gzip(tar_io.string)
159
+ end
160
+
161
+ def util_gem_data_tar(spec = nil, &block)
162
+ data_tgz = util_tar_gz(&block)
163
+ util_tar do |tar|
164
+ if spec
165
+ tar.add_file "metadata.gz", 0444 do |io|
166
+ io.write util_gzip(spec.to_yaml)
167
+ end
168
+ end
169
+ tar.add_file "data.tar.gz", 0644 do |io|
170
+ io.write data_tgz.string
171
+ end
172
+ end
173
+ end
139
174
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- SIMPLE_GEM = <<-GEMDATA.freeze
2
+ SIMPLE_GEM = <<-GEMDATA
3
3
  MD5SUM = "989bf34a1cbecd52e0ea66b662b3a405"
4
4
  if $0 == __FILE__
5
5
  require 'optparse'
@@ -1654,6 +1654,30 @@ class TestGem < Gem::TestCase
1654
1654
  ENV["SOURCE_DATE_EPOCH"] = old_epoch
1655
1655
  end
1656
1656
 
1657
+ def test_data_home_default
1658
+ expected = File.join(@userhome, ".local", "share")
1659
+ assert_equal expected, Gem.data_home
1660
+ end
1661
+
1662
+ def test_data_home_from_env
1663
+ ENV["XDG_DATA_HOME"] = expected = "/test/data/home"
1664
+ assert_equal expected, Gem.data_home
1665
+ end
1666
+
1667
+ def test_state_home_default
1668
+ Gem.instance_variable_set :@state_home, nil
1669
+ Gem.data_home # memoize @data_home, to demonstrate GH-6418
1670
+ expected = File.join(@userhome, ".local", "state")
1671
+ assert_equal expected, Gem.state_home
1672
+ end
1673
+
1674
+ def test_state_home_from_env
1675
+ Gem.instance_variable_set :@state_home, nil
1676
+ Gem.data_home # memoize @data_home, to demonstrate GH-6418
1677
+ ENV["XDG_STATE_HOME"] = expected = "/test/state/home"
1678
+ assert_equal expected, Gem.state_home
1679
+ end
1680
+
1657
1681
  private
1658
1682
 
1659
1683
  def ruby_install_name(name)
@@ -4,10 +4,10 @@ require "rubygems/bundler_version_finder"
4
4
 
5
5
  class TestGemBundlerVersionFinder < Gem::TestCase
6
6
  def setup
7
- super
8
-
9
7
  @argv = ARGV.dup
10
8
  @dollar_0 = $0
9
+ super
10
+
11
11
  without_any_upwards_gemfiles
12
12
  end
13
13