rubygems-update 3.3.19 → 3.3.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +20 -0
  3. data/bin/update_rubygems +1 -1
  4. data/bundler/CHANGELOG.md +26 -0
  5. data/bundler/lib/bundler/build_metadata.rb +2 -2
  6. data/bundler/lib/bundler/cli/install.rb +5 -2
  7. data/bundler/lib/bundler/cli/outdated.rb +12 -3
  8. data/bundler/lib/bundler/cli/platform.rb +1 -1
  9. data/bundler/lib/bundler/cli.rb +5 -3
  10. data/bundler/lib/bundler/definition.rb +61 -11
  11. data/bundler/lib/bundler/fetcher.rb +6 -6
  12. data/bundler/lib/bundler/gem_helpers.rb +7 -1
  13. data/bundler/lib/bundler/installer/standalone.rb +1 -1
  14. data/bundler/lib/bundler/installer.rb +8 -1
  15. data/bundler/lib/bundler/lazy_specification.rb +21 -21
  16. data/bundler/lib/bundler/man/bundle-cache.1 +6 -0
  17. data/bundler/lib/bundler/man/bundle-cache.1.ronn +7 -0
  18. data/bundler/lib/bundler/man/bundle-config.1 +2 -2
  19. data/bundler/lib/bundler/man/bundle-config.1.ronn +3 -3
  20. data/bundler/lib/bundler/man/bundle-install.1 +4 -0
  21. data/bundler/lib/bundler/man/bundle-install.1.ronn +6 -0
  22. data/bundler/lib/bundler/man/bundle-platform.1 +15 -5
  23. data/bundler/lib/bundler/man/bundle-platform.1.ronn +14 -7
  24. data/bundler/lib/bundler/man/bundle.1 +3 -6
  25. data/bundler/lib/bundler/man/bundle.1.ronn +3 -4
  26. data/bundler/lib/bundler/resolver.rb +2 -1
  27. data/bundler/lib/bundler/ruby_dsl.rb +1 -1
  28. data/bundler/lib/bundler/ruby_version.rb +5 -5
  29. data/bundler/lib/bundler/rubygems_ext.rb +13 -0
  30. data/bundler/lib/bundler/source/metadata.rb +1 -1
  31. data/bundler/lib/bundler/source_list.rb +4 -0
  32. data/bundler/lib/bundler/spec_set.rb +15 -28
  33. data/bundler/lib/bundler/version.rb +1 -1
  34. data/lib/rubygems/available_set.rb +3 -3
  35. data/lib/rubygems/basic_specification.rb +2 -2
  36. data/lib/rubygems/command.rb +6 -6
  37. data/lib/rubygems/commands/cert_command.rb +1 -1
  38. data/lib/rubygems/commands/cleanup_command.rb +1 -1
  39. data/lib/rubygems/commands/contents_command.rb +1 -1
  40. data/lib/rubygems/commands/dependency_command.rb +4 -4
  41. data/lib/rubygems/commands/fetch_command.rb +2 -2
  42. data/lib/rubygems/commands/generate_index_command.rb +2 -2
  43. data/lib/rubygems/commands/install_command.rb +7 -7
  44. data/lib/rubygems/commands/pristine_command.rb +5 -5
  45. data/lib/rubygems/commands/setup_command.rb +4 -4
  46. data/lib/rubygems/commands/sources_command.rb +3 -3
  47. data/lib/rubygems/commands/specification_command.rb +2 -2
  48. data/lib/rubygems/commands/uninstall_command.rb +4 -4
  49. data/lib/rubygems/commands/update_command.rb +5 -5
  50. data/lib/rubygems/commands/which_command.rb +1 -1
  51. data/lib/rubygems/config_file.rb +7 -7
  52. data/lib/rubygems/core_ext/kernel_warn.rb +1 -1
  53. data/lib/rubygems/defaults.rb +1 -1
  54. data/lib/rubygems/dependency.rb +5 -5
  55. data/lib/rubygems/dependency_installer.rb +5 -5
  56. data/lib/rubygems/dependency_list.rb +4 -4
  57. data/lib/rubygems/doctor.rb +4 -4
  58. data/lib/rubygems/exceptions.rb +1 -1
  59. data/lib/rubygems/ext/ext_conf_builder.rb +2 -2
  60. data/lib/rubygems/gemcutter_utilities.rb +1 -1
  61. data/lib/rubygems/indexer.rb +3 -3
  62. data/lib/rubygems/installer.rb +5 -13
  63. data/lib/rubygems/name_tuple.rb +3 -3
  64. data/lib/rubygems/package/tar_header.rb +17 -17
  65. data/lib/rubygems/package/tar_writer.rb +1 -1
  66. data/lib/rubygems/package.rb +19 -8
  67. data/lib/rubygems/platform.rb +15 -15
  68. data/lib/rubygems/query_utils.rb +6 -6
  69. data/lib/rubygems/remote_fetcher.rb +3 -3
  70. data/lib/rubygems/request/connection_pools.rb +2 -2
  71. data/lib/rubygems/request/http_pool.rb +1 -1
  72. data/lib/rubygems/request.rb +1 -1
  73. data/lib/rubygems/request_set/gem_dependency_api.rb +3 -3
  74. data/lib/rubygems/request_set/lockfile/parser.rb +12 -12
  75. data/lib/rubygems/request_set/lockfile/tokenizer.rb +2 -2
  76. data/lib/rubygems/request_set.rb +3 -3
  77. data/lib/rubygems/requirement.rb +1 -1
  78. data/lib/rubygems/resolver/api_specification.rb +4 -4
  79. data/lib/rubygems/resolver/best_set.rb +3 -3
  80. data/lib/rubygems/resolver/conflict.rb +3 -3
  81. data/lib/rubygems/resolver/git_specification.rb +3 -3
  82. data/lib/rubygems/resolver/index_specification.rb +3 -2
  83. data/lib/rubygems/resolver/installed_specification.rb +2 -2
  84. data/lib/rubygems/resolver/installer_set.rb +7 -12
  85. data/lib/rubygems/resolver/lock_set.rb +1 -1
  86. data/lib/rubygems/resolver/lock_specification.rb +1 -1
  87. data/lib/rubygems/resolver/vendor_specification.rb +3 -3
  88. data/lib/rubygems/resolver.rb +4 -4
  89. data/lib/rubygems/security/policy.rb +6 -6
  90. data/lib/rubygems/security/signer.rb +1 -1
  91. data/lib/rubygems/security.rb +1 -1
  92. data/lib/rubygems/source/git.rb +4 -4
  93. data/lib/rubygems/source.rb +1 -1
  94. data/lib/rubygems/spec_fetcher.rb +1 -1
  95. data/lib/rubygems/specification.rb +26 -24
  96. data/lib/rubygems/specification_policy.rb +4 -4
  97. data/lib/rubygems/uninstaller.rb +4 -4
  98. data/lib/rubygems/user_interaction.rb +2 -2
  99. data/lib/rubygems/version.rb +12 -4
  100. data/lib/rubygems.rb +8 -8
  101. data/rubygems-update.gemspec +1 -1
  102. data/setup.rb +1 -1
  103. data/test/rubygems/helper.rb +5 -5
  104. data/test/rubygems/test_gem_config_file.rb +17 -5
  105. data/test/rubygems/test_gem_dependency_installer.rb +2 -2
  106. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.lock +4 -4
  107. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.toml +1 -1
  108. data/test/rubygems/test_gem_ext_cargo_builder/custom_name/build.rb +1 -1
  109. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +4 -4
  110. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +1 -1
  111. data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/build.rb +1 -1
  112. data/test/rubygems/test_gem_installer.rb +6 -3
  113. data/test/rubygems/test_gem_package.rb +22 -0
  114. data/test/rubygems/test_gem_package_tar_reader.rb +1 -1
  115. data/test/rubygems/test_gem_requirement.rb +9 -3
  116. data/test/rubygems/test_gem_resolver_index_specification.rb +1 -1
  117. data/test/rubygems/test_gem_resolver_installer_set.rb +44 -0
  118. data/test/rubygems/test_gem_specification.rb +11 -2
  119. data/test/rubygems/test_gem_version.rb +9 -2
  120. data/test/rubygems/test_require.rb +1 -1
  121. data/test/rubygems/utilities.rb +4 -4
  122. metadata +3 -3
@@ -96,7 +96,7 @@ class Gem::Commands::UninstallCommand < Gem::Command
96
96
 
97
97
  def defaults_str # :nodoc:
98
98
  "--version '#{Gem::Requirement.default}' --no-force " +
99
- "--user-install"
99
+ "--user-install"
100
100
  end
101
101
 
102
102
  def description # :nodoc:
@@ -114,8 +114,8 @@ that is a dependency of an existing gem. You can use the
114
114
  end
115
115
 
116
116
  def check_version # :nodoc:
117
- if options[:version] != Gem::Requirement.default and
118
- get_all_gem_names.size > 1
117
+ if options[:version] != Gem::Requirement.default &&
118
+ get_all_gem_names.size > 1
119
119
  alert_error "Can't use --version with multiple gems. You can specify multiple gems with" \
120
120
  " version requirements using `gem uninstall 'my_gem:1.0.0' 'my_other_gem:~>2.0.0'`"
121
121
  terminate_interaction 1
@@ -125,7 +125,7 @@ that is a dependency of an existing gem. You can use the
125
125
  def execute
126
126
  check_version
127
127
 
128
- if options[:all] and not options[:args].empty?
128
+ if options[:all] && !options[:args].empty?
129
129
  uninstall_specific
130
130
  elsif options[:all]
131
131
  uninstall_all
@@ -56,7 +56,7 @@ class Gem::Commands::UpdateCommand < Gem::Command
56
56
 
57
57
  def defaults_str # :nodoc:
58
58
  "--no-force --install-dir #{Gem.dir}\n" +
59
- install_update_defaults_str
59
+ install_update_defaults_str
60
60
  end
61
61
 
62
62
  def description # :nodoc:
@@ -155,7 +155,7 @@ command to remove old versions.
155
155
  Gem::Specification.dirs = Gem.user_dir if options[:user_install]
156
156
 
157
157
  Gem::Specification.each do |spec|
158
- if hig[spec.name].nil? or hig[spec.name].version < spec.version
158
+ if hig[spec.name].nil? || hig[spec.name].version < spec.version
159
159
  hig[spec.name] = spec
160
160
  end
161
161
  end
@@ -292,8 +292,8 @@ command to remove old versions.
292
292
  args << "--no-document" unless options[:document].include?("rdoc") || options[:document].include?("ri")
293
293
  args << "--no-format-executable" if options[:no_format_executable]
294
294
  args << "--previous-version" << Gem::VERSION if
295
- options[:system] == true or
296
- Gem::Version.new(options[:system]) >= Gem::Version.new(2)
295
+ options[:system] == true ||
296
+ Gem::Version.new(options[:system]) >= Gem::Version.new(2)
297
297
  args
298
298
  end
299
299
 
@@ -301,7 +301,7 @@ command to remove old versions.
301
301
  result = []
302
302
 
303
303
  highest_installed_gems.each do |l_name, l_spec|
304
- next if not gem_names.empty? and
304
+ next if !gem_names.empty? &&
305
305
  gem_names.none? {|name| name == l_spec.name }
306
306
 
307
307
  highest_remote_tup = highest_remote_name_tuple l_spec
@@ -71,7 +71,7 @@ requiring to see why it does not behave as you expect.
71
71
  dirs.each do |dir|
72
72
  Gem.suffixes.each do |ext|
73
73
  full_path = File.join dir, "#{package_name}#{ext}"
74
- if File.exist? full_path and not File.directory? full_path
74
+ if File.exist?(full_path) && !File.directory?(full_path)
75
75
  result << full_path
76
76
  return result unless options[:show_all]
77
77
  end
@@ -39,7 +39,7 @@ require "rbconfig"
39
39
  class Gem::ConfigFile
40
40
  include Gem::UserInteraction
41
41
 
42
- DEFAULT_BACKTRACE = false
42
+ DEFAULT_BACKTRACE = true
43
43
  DEFAULT_BULK_THRESHOLD = 1000
44
44
  DEFAULT_VERBOSITY = true
45
45
  DEFAULT_UPDATE_SOURCES = true
@@ -368,7 +368,7 @@ if you believe they were disclosed to a third party.
368
368
 
369
369
  # True if the backtrace option has been specified, or debug is on.
370
370
  def backtrace
371
- @backtrace or $DEBUG
371
+ @backtrace || $DEBUG
372
372
  end
373
373
 
374
374
  # The name of the configuration file.
@@ -477,11 +477,11 @@ if you believe they were disclosed to a third party.
477
477
  end
478
478
 
479
479
  def ==(other) # :nodoc:
480
- self.class === other and
481
- @backtrace == other.backtrace and
482
- @bulk_threshold == other.bulk_threshold and
483
- @verbose == other.verbose and
484
- @update_sources == other.update_sources and
480
+ self.class === other &&
481
+ @backtrace == other.backtrace &&
482
+ @bulk_threshold == other.bulk_threshold &&
483
+ @verbose == other.verbose &&
484
+ @update_sources == other.update_sources &&
485
485
  @hash == other.hash
486
486
  end
487
487
 
@@ -39,7 +39,7 @@ if RUBY_VERSION >= "2.5" && !Gem::KERNEL_WARN_IGNORES_INTERNAL_ENTRIES
39
39
  start += 1
40
40
 
41
41
  if path = loc.path
42
- unless path.start_with?(rubygems_path) or path.start_with?("<internal:")
42
+ unless path.start_with?(rubygems_path) || path.start_with?("<internal:")
43
43
  # Non-rubygems frames
44
44
  uplevel -= 1
45
45
  end
@@ -161,7 +161,7 @@ module Gem
161
161
  path = []
162
162
  path << user_dir if user_home && File.exist?(user_home)
163
163
  path << default_dir
164
- path << vendor_dir if vendor_dir and File.directory? vendor_dir
164
+ path << vendor_dir if vendor_dir && File.directory?(vendor_dir)
165
165
  path
166
166
  end
167
167
 
@@ -115,7 +115,7 @@ class Gem::Dependency
115
115
  # What does this dependency require?
116
116
 
117
117
  def requirement
118
- return @requirement if defined?(@requirement) and @requirement
118
+ return @requirement if defined?(@requirement) && @requirement
119
119
 
120
120
  # @version_requirements and @version_requirement are legacy ivar
121
121
  # names, and supported here because older gems need to keep
@@ -230,10 +230,10 @@ class Gem::Dependency
230
230
 
231
231
  version = Gem::Version.new version
232
232
 
233
- return true if requirement.none? and not version.prerelease?
234
- return false if version.prerelease? and
235
- not allow_prerelease and
236
- not prerelease?
233
+ return true if requirement.none? && !version.prerelease?
234
+ return false if version.prerelease? &&
235
+ !allow_prerelease &&
236
+ !prerelease?
237
237
 
238
238
  requirement.satisfied_by? version
239
239
  end
@@ -109,7 +109,7 @@ class Gem::DependencyInstaller
109
109
  # gems should be considered.
110
110
 
111
111
  def consider_local?
112
- @domain == :both or @domain == :local
112
+ @domain == :both || @domain == :local
113
113
  end
114
114
 
115
115
  ##
@@ -117,7 +117,7 @@ class Gem::DependencyInstaller
117
117
  # gems should be considered.
118
118
 
119
119
  def consider_remote?
120
- @domain == :both or @domain == :remote
120
+ @domain == :both || @domain == :remote
121
121
  end
122
122
 
123
123
  ##
@@ -197,7 +197,7 @@ class Gem::DependencyInstaller
197
197
 
198
198
  def in_background(what) # :nodoc:
199
199
  fork_happened = false
200
- if @build_docs_in_background and Process.respond_to?(:fork)
200
+ if @build_docs_in_background && Process.respond_to?(:fork)
201
201
  begin
202
202
  Process.fork do
203
203
  yield
@@ -268,7 +268,7 @@ class Gem::DependencyInstaller
268
268
  end
269
269
 
270
270
  def install_development_deps # :nodoc:
271
- if @development and @dev_shallow
271
+ if @development && @dev_shallow
272
272
  :shallow
273
273
  elsif @development
274
274
  :all
@@ -289,7 +289,7 @@ class Gem::DependencyInstaller
289
289
  installer_set.force = @force
290
290
 
291
291
  if consider_local?
292
- if dep_or_name =~ /\.gem$/ and File.file? dep_or_name
292
+ if dep_or_name =~ /\.gem$/ && File.file?(dep_or_name)
293
293
  src = Gem::Source::SpecificFile.new dep_or_name
294
294
  installer_set.add_local dep_or_name, src.spec, src
295
295
  version = src.spec.version if version == Gem::Requirement.default
@@ -119,11 +119,11 @@ class Gem::DependencyList
119
119
  each do |spec|
120
120
  spec.runtime_dependencies.each do |dep|
121
121
  inst = Gem::Specification.any? do |installed_spec|
122
- dep.name == installed_spec.name and
123
- dep.requirement.satisfied_by? installed_spec.version
122
+ dep.name == installed_spec.name &&
123
+ dep.requirement.satisfied_by?(installed_spec.version)
124
124
  end
125
125
 
126
- unless inst or @specs.find {|s| s.satisfies_requirement? dep }
126
+ unless inst || @specs.find {|s| s.satisfies_requirement? dep }
127
127
  unsatisfied[spec.name] << dep
128
128
  return unsatisfied if quick
129
129
  end
@@ -175,7 +175,7 @@ class Gem::DependencyList
175
175
  def remove_specs_unsatisfied_by(dependencies)
176
176
  specs.reject! do |spec|
177
177
  dep = dependencies[spec.name]
178
- dep and not dep.requirement.satisfied_by? spec.version
178
+ dep && !dep.requirement.satisfied_by?(spec.version)
179
179
  end
180
180
  end
181
181
 
@@ -30,7 +30,7 @@ class Gem::Doctor
30
30
 
31
31
  missing =
32
32
  Gem::REPOSITORY_SUBDIRECTORIES.sort -
33
- REPOSITORY_EXTENSION_MAP.map {|(k,_)| k }.sort
33
+ REPOSITORY_EXTENSION_MAP.map {|(k,_)| k }.sort
34
34
 
35
35
  raise "Update REPOSITORY_EXTENSION_MAP, missing: #{missing.join ', '}" unless
36
36
  missing.empty?
@@ -59,7 +59,7 @@ class Gem::Doctor
59
59
  # Are we doctoring a gem repository?
60
60
 
61
61
  def gem_repository?
62
- not installed_specs.empty?
62
+ !installed_specs.empty?
63
63
  end
64
64
 
65
65
  ##
@@ -111,8 +111,8 @@ class Gem::Doctor
111
111
  basename = File.basename(child, extension)
112
112
  next if installed_specs.include? basename
113
113
  next if /^rubygems-\d/ =~ basename
114
- next if "specifications" == sub_directory and "default" == basename
115
- next if "plugins" == sub_directory and Gem.plugin_suffix_regexp =~ basename
114
+ next if "specifications" == sub_directory && "default" == basename
115
+ next if "plugins" == sub_directory && Gem.plugin_suffix_regexp =~ (basename)
116
116
 
117
117
  type = File.directory?(child) ? "directory" : "file"
118
118
 
@@ -254,7 +254,7 @@ class Gem::UnsatisfiableDependencyError < Gem::DependencyError
254
254
  # Gem::Resolver::DependencyRequest +dep+
255
255
 
256
256
  def initialize(dep, platform_mismatch=nil)
257
- if platform_mismatch and !platform_mismatch.empty?
257
+ if platform_mismatch && !platform_mismatch.empty?
258
258
  plats = platform_mismatch.map {|x| x.platform.to_s }.sort.uniq
259
259
  super "Unable to resolve dependency: No match for '#{dep}' on this platform. Found: #{plats.join(', ')}"
260
260
  else
@@ -44,7 +44,7 @@ class Gem::Ext::ExtConfBuilder < Gem::Ext::Builder
44
44
  full_tmp_dest = File.join(extension_dir, tmp_dest_relative)
45
45
 
46
46
  # TODO remove in RubyGems 4
47
- if Gem.install_extension_in_lib and lib_dir
47
+ if Gem.install_extension_in_lib && lib_dir
48
48
  FileUtils.mkdir_p lib_dir
49
49
  entries = Dir.entries(full_tmp_dest) - %w[. ..]
50
50
  entries = entries.map {|entry| File.join full_tmp_dest, entry }
@@ -53,7 +53,7 @@ class Gem::Ext::ExtConfBuilder < Gem::Ext::Builder
53
53
 
54
54
  FileUtils::Entry_.new(full_tmp_dest).traverse do |ent|
55
55
  destent = ent.class.new(dest_path, ent.rel)
56
- destent.exist? or FileUtils.mv(ent.path, destent.path)
56
+ destent.exist? || FileUtils.mv(ent.path, destent.path)
57
57
  end
58
58
  ensure
59
59
  ENV["DESTDIR"] = destdir
@@ -71,7 +71,7 @@ module Gem::GemcutterUtilities
71
71
  begin
72
72
  env_rubygems_host = ENV["RUBYGEMS_HOST"]
73
73
  env_rubygems_host = nil if
74
- env_rubygems_host and env_rubygems_host.empty?
74
+ env_rubygems_host && env_rubygems_host.empty?
75
75
 
76
76
  env_rubygems_host || configured_host
77
77
  end
@@ -149,7 +149,7 @@ class Gem::Indexer
149
149
  next
150
150
  end
151
151
 
152
- platform = Gem::Platform::RUBY if platform.nil? or platform.empty?
152
+ platform = Gem::Platform::RUBY if platform.nil? || platform.empty?
153
153
  [spec.name, spec.version, platform]
154
154
  end
155
155
 
@@ -296,7 +296,7 @@ class Gem::Indexer
296
296
  files = @files
297
297
  files.delete @quick_marshal_dir if files.include? @quick_dir
298
298
 
299
- if files.include? @quick_marshal_dir and not files.include? @quick_dir
299
+ if files.include?(@quick_marshal_dir) && !files.include?(@quick_dir)
300
300
  files.delete @quick_marshal_dir
301
301
 
302
302
  dst_name = File.join(@dest_directory, @quick_marshal_dir_base)
@@ -414,7 +414,7 @@ class Gem::Indexer
414
414
 
415
415
  index.each do |spec|
416
416
  platform = spec.original_platform
417
- platform = Gem::Platform::RUBY if platform.nil? or platform.empty?
417
+ platform = Gem::Platform::RUBY if platform.nil? || platform.empty?
418
418
  specs_index << [spec.name, spec.version, platform]
419
419
  end
420
420
 
@@ -251,7 +251,7 @@ class Gem::Installer
251
251
  return if spec.name == existing
252
252
 
253
253
  # somebody has written to RubyGems' directory, overwrite, too bad
254
- return if Gem.default_bindir != @bin_dir and not ruby_executable
254
+ return if Gem.default_bindir != @bin_dir && !ruby_executable
255
255
 
256
256
  question = "#{spec.name}'s executable \"#{filename}\" conflicts with ".dup
257
257
 
@@ -418,10 +418,10 @@ class Gem::Installer
418
418
  # True if the gems in the system satisfy +dependency+.
419
419
 
420
420
  def installation_satisfies_dependency?(dependency)
421
- return true if @options[:development] and dependency.type == :development
421
+ return true if @options[:development] && dependency.type == :development
422
422
  return true if installed_specs.detect {|s| dependency.matches_spec? s }
423
423
  return false if @only_install_dir
424
- not dependency.matching_specs.empty?
424
+ !dependency.matching_specs.empty?
425
425
  end
426
426
 
427
427
  ##
@@ -483,22 +483,14 @@ class Gem::Installer
483
483
  end
484
484
 
485
485
  def generate_bin # :nodoc:
486
- return if spec.executables.nil? or spec.executables.empty?
486
+ return if spec.executables.nil? || spec.executables.empty?
487
487
 
488
488
  ensure_writable_dir @bin_dir
489
489
 
490
490
  spec.executables.each do |filename|
491
491
  filename.tap(&Gem::UNTAINT)
492
492
  bin_path = File.join gem_dir, spec.bindir, filename
493
-
494
- unless File.exist? bin_path
495
- if File.symlink? bin_path
496
- alert_warning "`#{bin_path}` is dangling symlink pointing to `#{File.readlink bin_path}`"
497
- else
498
- alert_warning "`#{bin_path}` does not exist, maybe `gem pristine #{spec.name}` will fix it?"
499
- end
500
- next
501
- end
493
+ next unless File.exist? bin_path
502
494
 
503
495
  mode = File.stat(bin_path).mode
504
496
  dir_mode = options[:prog_mode] || (mode | 0111)
@@ -10,7 +10,7 @@ class Gem::NameTuple
10
10
  @version = version
11
11
 
12
12
  unless platform.kind_of? Gem::Platform
13
- platform = "ruby" if !platform or platform.empty?
13
+ platform = "ruby" if !platform || platform.empty?
14
14
  end
15
15
 
16
16
  @platform = platform
@@ -102,8 +102,8 @@ class Gem::NameTuple
102
102
  def ==(other)
103
103
  case other
104
104
  when self.class
105
- @name == other.name and
106
- @version == other.version and
105
+ @name == other.name &&
106
+ @version == other.version &&
107
107
  @platform == other.platform
108
108
  when Array
109
109
  to_a == other
@@ -173,23 +173,23 @@ class Gem::Package::TarHeader
173
173
  end
174
174
 
175
175
  def ==(other) # :nodoc:
176
- self.class === other and
177
- @checksum == other.checksum and
178
- @devmajor == other.devmajor and
179
- @devminor == other.devminor and
180
- @gid == other.gid and
181
- @gname == other.gname and
182
- @linkname == other.linkname and
183
- @magic == other.magic and
184
- @mode == other.mode and
185
- @mtime == other.mtime and
186
- @name == other.name and
187
- @prefix == other.prefix and
188
- @size == other.size and
189
- @typeflag == other.typeflag and
190
- @uid == other.uid and
191
- @uname == other.uname and
192
- @version == other.version
176
+ self.class === other &&
177
+ @checksum == other.checksum &&
178
+ @devmajor == other.devmajor &&
179
+ @devminor == other.devminor &&
180
+ @gid == other.gid &&
181
+ @gname == other.gname &&
182
+ @linkname == other.linkname &&
183
+ @magic == other.magic &&
184
+ @mode == other.mode &&
185
+ @mtime == other.mtime &&
186
+ @name == other.name &&
187
+ @prefix == other.prefix &&
188
+ @size == other.size &&
189
+ @typeflag == other.typeflag &&
190
+ @uid == other.uid &&
191
+ @uname == other.uname &&
192
+ @version == other.version
193
193
  end
194
194
 
195
195
  def to_s # :nodoc:
@@ -314,7 +314,7 @@ class Gem::Package::TarWriter
314
314
  prefix = parts.join("/")
315
315
  end
316
316
 
317
- if name.bytesize > 100 or prefix.empty?
317
+ if name.bytesize > 100 || prefix.empty?
318
318
  raise Gem::Package::TooLongFileName.new("File \"#{prefix}/#{name}\" has a too long name (should be 100 or less)")
319
319
  end
320
320
 
@@ -68,14 +68,14 @@ class Gem::Package
68
68
  class PathError < Error
69
69
  def initialize(destination, destination_dir)
70
70
  super "installing into parent path %s of %s is not allowed" %
71
- [destination, destination_dir]
71
+ [destination, destination_dir]
72
72
  end
73
73
  end
74
74
 
75
75
  class SymlinkError < Error
76
76
  def initialize(name, destination, destination_dir)
77
77
  super "installing symlink '%s' pointing to parent path %s of %s is not allowed" %
78
- [name, destination, destination_dir]
78
+ [name, destination, destination_dir]
79
79
  end
80
80
  end
81
81
 
@@ -409,18 +409,23 @@ EOM
409
409
 
410
410
  def extract_tar_gz(io, destination_dir, pattern = "*") # :nodoc:
411
411
  directories = []
412
+ symlinks = []
413
+
412
414
  open_tar_gz io do |tar|
413
415
  tar.each do |entry|
414
- next unless File.fnmatch pattern, entry.full_name, File::FNM_DOTMATCH
416
+ full_name = entry.full_name
417
+ next unless File.fnmatch pattern, full_name, File::FNM_DOTMATCH
415
418
 
416
- destination = install_location entry.full_name, destination_dir
419
+ destination = install_location full_name, destination_dir
417
420
 
418
421
  if entry.symlink?
419
422
  link_target = entry.header.linkname
420
423
  real_destination = link_target.start_with?("/") ? link_target : File.expand_path(link_target, File.dirname(destination))
421
424
 
422
- raise Gem::Package::SymlinkError.new(entry.full_name, real_destination, destination_dir) unless
425
+ raise Gem::Package::SymlinkError.new(full_name, real_destination, destination_dir) unless
423
426
  normalize_path(real_destination).start_with? normalize_path(destination_dir + "/")
427
+
428
+ symlinks << [full_name, link_target, destination, real_destination]
424
429
  end
425
430
 
426
431
  FileUtils.rm_rf destination
@@ -444,12 +449,18 @@ EOM
444
449
  FileUtils.chmod file_mode(entry.header.mode), destination
445
450
  end if entry.file?
446
451
 
447
- File.symlink(entry.header.linkname, destination) if entry.symlink?
448
-
449
452
  verbose destination
450
453
  end
451
454
  end
452
455
 
456
+ symlinks.each do |name, target, destination, real_destination|
457
+ if File.exist?(real_destination)
458
+ File.symlink(target, destination)
459
+ else
460
+ alert_warning "#{@spec.full_name} ships with a dangling symlink named #{name} pointing to missing #{target} file. Ignoring"
461
+ end
462
+ end
463
+
453
464
  if dir_mode
454
465
  File.chmod(dir_mode, *directories)
455
466
  end
@@ -676,7 +687,7 @@ EOM
676
687
  "package content (data.tar.gz) is missing", @gem
677
688
  end
678
689
 
679
- if duplicates = @files.group_by {|f| f }.select {|k,v| v.size > 1 }.map(&:first) and duplicates.any?
690
+ if (duplicates = @files.group_by {|f| f }.select {|k,v| v.size > 1 }.map(&:first)) && duplicates.any?
680
691
  raise Gem::Security::Exception, "duplicate files in the package: (#{duplicates.map(&:inspect).join(', ')})"
681
692
  end
682
693
  end
@@ -23,9 +23,9 @@ class Gem::Platform
23
23
 
24
24
  def self.match_platforms?(platform, platforms)
25
25
  platforms.any? do |local_platform|
26
- platform.nil? or
27
- local_platform == platform or
28
- (local_platform != Gem::Platform::RUBY and local_platform =~ platform)
26
+ platform.nil? ||
27
+ local_platform == platform ||
28
+ (local_platform != Gem::Platform::RUBY && local_platform =~ platform)
29
29
  end
30
30
  end
31
31
  private_class_method :match_platforms?
@@ -70,7 +70,7 @@ class Gem::Platform
70
70
  when String then
71
71
  arch = arch.split "-"
72
72
 
73
- if arch.length > 2 and arch.last !~ /\d/ # reassemble x86-linux-gnu
73
+ if arch.length > 2 && arch.last !~ (/\d/) # reassemble x86-linux-gnu
74
74
  extra = arch.pop
75
75
  arch.last << "-#{extra}"
76
76
  end
@@ -82,7 +82,7 @@ class Gem::Platform
82
82
  else cpu
83
83
  end
84
84
 
85
- if arch.length == 2 and arch.last =~ /^\d+(\.\d+)?$/ # for command-line
85
+ if arch.length == 2 && arch.last =~ /^\d+(\.\d+)?$/ # for command-line
86
86
  @os, @version = arch
87
87
  return
88
88
  end
@@ -107,7 +107,7 @@ class Gem::Platform
107
107
  when /mingw-?(\w+)?/ then [ "mingw", $1 ]
108
108
  when /(mswin\d+)(\_(\d+))?/ then
109
109
  os, version = $1, $3
110
- @cpu = "x86" if @cpu.nil? and os =~ /32$/
110
+ @cpu = "x86" if @cpu.nil? && os =~ /32$/
111
111
  [os, version]
112
112
  when /netbsdelf/ then [ "netbsdelf", nil ]
113
113
  when /openbsd(\d+\.\d+)?/ then [ "openbsd", $1 ]
@@ -139,7 +139,7 @@ class Gem::Platform
139
139
  # the same CPU, OS and version.
140
140
 
141
141
  def ==(other)
142
- self.class === other and to_a == other.to_a
142
+ self.class === other && to_a == other.to_a
143
143
  end
144
144
 
145
145
  alias :eql? :==
@@ -160,18 +160,18 @@ class Gem::Platform
160
160
  return nil unless Gem::Platform === other
161
161
 
162
162
  # universal-mingw32 matches x64-mingw-ucrt
163
- return true if (@cpu == "universal" or other.cpu == "universal") and
164
- @os.start_with?("mingw") and other.os.start_with?("mingw")
163
+ return true if (@cpu == "universal" || other.cpu == "universal") &&
164
+ @os.start_with?("mingw") && other.os.start_with?("mingw")
165
165
 
166
166
  # cpu
167
- ([nil,"universal"].include?(@cpu) or [nil, "universal"].include?(other.cpu) or @cpu == other.cpu or
168
- (@cpu == "arm" and other.cpu.start_with?("arm"))) and
167
+ ([nil,"universal"].include?(@cpu) || [nil, "universal"].include?(other.cpu) || @cpu == other.cpu ||
168
+ (@cpu == "arm" && other.cpu.start_with?("arm"))) &&
169
169
 
170
- # os
171
- @os == other.os and
170
+ # os
171
+ @os == other.os &&
172
172
 
173
- # version
174
- (@version.nil? or other.version.nil? or @version == other.version)
173
+ # version
174
+ (@version.nil? || other.version.nil? || @version == other.version)
175
175
  end
176
176
 
177
177
  ##
@@ -112,7 +112,7 @@ module Gem::QueryUtils
112
112
  end
113
113
 
114
114
  def display_header(type)
115
- if (ui.outs.tty? and Gem.configuration.verbose) or both?
115
+ if (ui.outs.tty? && Gem.configuration.verbose) || both?
116
116
  say
117
117
  say "*** #{type} GEMS ***"
118
118
  say
@@ -132,7 +132,7 @@ module Gem::QueryUtils
132
132
  name_matches = name ? s.name =~ name : true
133
133
  version_matches = show_prereleases? || !s.version.prerelease?
134
134
 
135
- name_matches and version_matches
135
+ name_matches && version_matches
136
136
  end
137
137
 
138
138
  spec_tuples = specs.map do |spec|
@@ -176,7 +176,7 @@ module Gem::QueryUtils
176
176
  # Check if gem +name+ version +version+ is installed.
177
177
 
178
178
  def installed?(name, req = Gem::Requirement.default)
179
- Gem::Specification.any? {|s| s.name =~ name and req =~ s.version }
179
+ Gem::Specification.any? {|s| s.name =~ name && req =~ s.version }
180
180
  end
181
181
 
182
182
  def output_query_results(spec_tuples)
@@ -242,7 +242,7 @@ module Gem::QueryUtils
242
242
  return unless options[:versions]
243
243
 
244
244
  list =
245
- if platforms.empty? or options[:details]
245
+ if platforms.empty? || options[:details]
246
246
  name_tuples.map {|n| n.version }.uniq
247
247
  else
248
248
  platforms.sort.reverse.map do |version, pls|
@@ -289,13 +289,13 @@ module Gem::QueryUtils
289
289
  end
290
290
 
291
291
  def spec_homepage(entry, spec)
292
- return if spec.homepage.nil? or spec.homepage.empty?
292
+ return if spec.homepage.nil? || spec.homepage.empty?
293
293
 
294
294
  entry << "\n" << format_text("Homepage: #{spec.homepage}", 68, 4)
295
295
  end
296
296
 
297
297
  def spec_license(entry, spec)
298
- return if spec.license.nil? or spec.license.empty?
298
+ return if spec.license.nil? || spec.license.empty?
299
299
 
300
300
  licenses = "License#{spec.licenses.length > 1 ? 's' : ''}: ".dup
301
301
  licenses << spec.licenses.join(", ")