rubygems-update 3.2.0 → 3.2.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (110) hide show
  1. checksums.yaml +4 -4
  2. data/{History.txt → CHANGELOG.md} +482 -457
  3. data/Manifest.txt +31 -27
  4. data/POLICIES.md +4 -3
  5. data/Rakefile +23 -18
  6. data/bundler/CHANGELOG.md +67 -20
  7. data/bundler/bundler.gemspec +1 -1
  8. data/bundler/lib/bundler.rb +8 -2
  9. data/bundler/lib/bundler/build_metadata.rb +2 -2
  10. data/bundler/lib/bundler/cli.rb +3 -6
  11. data/bundler/lib/bundler/cli/gem.rb +2 -0
  12. data/bundler/lib/bundler/cli/install.rb +14 -5
  13. data/bundler/lib/bundler/cli/outdated.rb +2 -2
  14. data/bundler/lib/bundler/cli/update.rb +1 -1
  15. data/bundler/lib/bundler/compact_index_client/cache.rb +5 -13
  16. data/bundler/lib/bundler/compact_index_client/gem_parser.rb +28 -0
  17. data/bundler/lib/bundler/compact_index_client/updater.rb +0 -8
  18. data/bundler/lib/bundler/definition.rb +24 -21
  19. data/bundler/lib/bundler/dependency.rb +3 -1
  20. data/bundler/lib/bundler/gem_helper.rb +3 -3
  21. data/bundler/lib/bundler/gem_helpers.rb +30 -24
  22. data/bundler/lib/bundler/lazy_specification.rb +16 -3
  23. data/bundler/{man → lib/bundler/man}/bundle-add.1 +0 -0
  24. data/bundler/{man → lib/bundler/man}/bundle-binstubs.1 +0 -0
  25. data/bundler/{man → lib/bundler/man}/bundle-cache.1 +0 -0
  26. data/bundler/{man → lib/bundler/man}/bundle-check.1 +0 -0
  27. data/bundler/{man → lib/bundler/man}/bundle-clean.1 +0 -0
  28. data/bundler/{man → lib/bundler/man}/bundle-config.1 +0 -0
  29. data/bundler/{man → lib/bundler/man}/bundle-doctor.1 +0 -0
  30. data/bundler/{man → lib/bundler/man}/bundle-exec.1 +0 -0
  31. data/bundler/{man → lib/bundler/man}/bundle-gem.1 +0 -0
  32. data/bundler/{man → lib/bundler/man}/bundle-info.1 +0 -0
  33. data/bundler/{man → lib/bundler/man}/bundle-init.1 +0 -0
  34. data/bundler/{man → lib/bundler/man}/bundle-inject.1 +0 -0
  35. data/bundler/{man → lib/bundler/man}/bundle-install.1 +0 -0
  36. data/bundler/{man → lib/bundler/man}/bundle-list.1 +0 -0
  37. data/bundler/{man → lib/bundler/man}/bundle-lock.1 +0 -0
  38. data/bundler/{man → lib/bundler/man}/bundle-open.1 +0 -0
  39. data/bundler/{man → lib/bundler/man}/bundle-outdated.1 +0 -0
  40. data/bundler/{man → lib/bundler/man}/bundle-platform.1 +0 -0
  41. data/bundler/{man → lib/bundler/man}/bundle-pristine.1 +0 -0
  42. data/bundler/{man → lib/bundler/man}/bundle-remove.1 +0 -0
  43. data/bundler/{man → lib/bundler/man}/bundle-show.1 +0 -0
  44. data/bundler/{man → lib/bundler/man}/bundle-update.1 +0 -0
  45. data/bundler/{man → lib/bundler/man}/bundle-viz.1 +0 -0
  46. data/bundler/{man → lib/bundler/man}/bundle.1 +0 -0
  47. data/bundler/{man → lib/bundler/man}/gemfile.5 +0 -0
  48. data/bundler/{man → lib/bundler/man}/index.txt +0 -0
  49. data/bundler/lib/bundler/resolver.rb +29 -27
  50. data/bundler/lib/bundler/resolver/spec_group.rb +19 -25
  51. data/bundler/lib/bundler/rubygems_integration.rb +0 -6
  52. data/bundler/lib/bundler/source/git.rb +18 -16
  53. data/bundler/lib/bundler/source/git/git_proxy.rb +54 -49
  54. data/bundler/lib/bundler/source/path/installer.rb +2 -0
  55. data/bundler/lib/bundler/source/rubygems.rb +10 -1
  56. data/bundler/lib/bundler/spec_set.rb +5 -8
  57. data/bundler/lib/bundler/stub_specification.rb +0 -2
  58. data/bundler/lib/bundler/templates/newgem/Gemfile.tt +1 -1
  59. data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +1 -1
  60. data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +3 -0
  61. data/bundler/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +8 -1
  62. data/bundler/lib/bundler/version.rb +1 -1
  63. data/lib/rubygems.rb +1 -1
  64. data/lib/rubygems/commands/owner_command.rb +0 -1
  65. data/lib/rubygems/commands/push_command.rb +0 -1
  66. data/lib/rubygems/commands/setup_command.rb +16 -62
  67. data/lib/rubygems/commands/yank_command.rb +0 -1
  68. data/lib/rubygems/dependency_installer.rb +1 -0
  69. data/lib/rubygems/ext/builder.rb +3 -3
  70. data/lib/rubygems/ext/cmake_builder.rb +1 -2
  71. data/lib/rubygems/ext/configure_builder.rb +1 -2
  72. data/lib/rubygems/ext/rake_builder.rb +1 -1
  73. data/lib/rubygems/gemcutter_utilities.rb +22 -17
  74. data/lib/rubygems/installer.rb +0 -23
  75. data/lib/rubygems/remote_fetcher.rb +4 -2
  76. data/lib/rubygems/request_set.rb +2 -13
  77. data/lib/rubygems/resolver.rb +6 -1
  78. data/lib/rubygems/resolver/api_set.rb +29 -20
  79. data/lib/rubygems/resolver/api_set/gem_parser.rb +20 -0
  80. data/lib/rubygems/resolver/api_specification.rb +4 -3
  81. data/lib/rubygems/resolver/best_set.rb +2 -2
  82. data/lib/rubygems/resolver/index_specification.rb +18 -0
  83. data/lib/rubygems/resolver/installer_set.rb +57 -7
  84. data/lib/rubygems/resolver/spec_specification.rb +14 -0
  85. data/lib/rubygems/resolver/specification.rb +12 -0
  86. data/lib/rubygems/server.rb +6 -1
  87. data/lib/rubygems/source.rb +11 -6
  88. data/lib/rubygems/specification.rb +18 -14
  89. data/lib/rubygems/test_case.rb +17 -4
  90. data/lib/rubygems/test_utilities.rb +6 -5
  91. data/rubygems-update.gemspec +2 -2
  92. data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
  93. data/test/rubygems/test_gem_commands_install_command.rb +131 -0
  94. data/test/rubygems/test_gem_commands_push_command.rb +41 -2
  95. data/test/rubygems/test_gem_commands_setup_command.rb +21 -37
  96. data/test/rubygems/test_gem_dependency_installer.rb +27 -47
  97. data/test/rubygems/test_gem_ext_builder.rb +6 -6
  98. data/test/rubygems/test_gem_ext_cmake_builder.rb +2 -4
  99. data/test/rubygems/test_gem_ext_configure_builder.rb +2 -2
  100. data/test/rubygems/test_gem_ext_rake_builder.rb +25 -0
  101. data/test/rubygems/test_gem_installer.rb +6 -60
  102. data/test/rubygems/test_gem_remote_fetcher.rb +1 -1
  103. data/test/rubygems/test_gem_resolver_api_set.rb +54 -51
  104. data/test/rubygems/test_gem_resolver_api_specification.rb +3 -3
  105. data/test/rubygems/test_gem_resolver_best_set.rb +26 -3
  106. data/test/rubygems/test_gem_source.rb +2 -2
  107. data/test/rubygems/test_gem_source_subpath_problem.rb +2 -2
  108. data/test/rubygems/test_gem_specification.rb +9 -3
  109. data/test/test_changelog_generator.rb +17 -0
  110. metadata +38 -58
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative "../../rubygems_gem_installer"
4
+
3
5
  module Bundler
4
6
  class Source
5
7
  class Path
@@ -145,6 +145,8 @@ module Bundler
145
145
 
146
146
  Bundler.mkdir_p bin_path, :no_sudo => true unless spec.executables.empty? || Bundler.rubygems.provides?(">= 2.7.5")
147
147
 
148
+ require_relative "../rubygems_gem_installer"
149
+
148
150
  installed_spec = Bundler::RubyGemsGemInstaller.at(
149
151
  path,
150
152
  :install_dir => install_path.to_s,
@@ -487,8 +489,15 @@ module Bundler
487
489
  uri = spec.remote.uri
488
490
  Bundler.ui.confirm("Fetching #{version_message(spec)}")
489
491
  rubygems_local_path = Bundler.rubygems.download_gem(spec, uri, download_path)
492
+
493
+ # older rubygems return varying file:// variants depending on version
494
+ rubygems_local_path = rubygems_local_path.gsub(/\Afile:/, "") unless Bundler.rubygems.provides?(">= 3.2.0.rc.2")
495
+ rubygems_local_path = rubygems_local_path.gsub(%r{\A//}, "") if Bundler.rubygems.provides?("< 3.1.0")
496
+
490
497
  if rubygems_local_path != local_path
491
- FileUtils.mv(rubygems_local_path, local_path)
498
+ SharedHelpers.filesystem_access(local_path) do
499
+ FileUtils.mv(rubygems_local_path, local_path)
500
+ end
492
501
  end
493
502
  cache_globally(spec, local_path)
494
503
  end
@@ -22,10 +22,11 @@ module Bundler
22
22
  break unless dep = deps.shift
23
23
  next if !handled.add?(dep) || skip.include?(dep.name)
24
24
 
25
- if spec = spec_for_dependency(dep, match_current_platform)
26
- specs << spec
25
+ specs_for_dep = spec_for_dependency(dep, match_current_platform)
26
+ if specs_for_dep.any?
27
+ specs += specs_for_dep
27
28
 
28
- spec.dependencies.each do |d|
29
+ specs_for_dep.first.dependencies.each do |d|
29
30
  next if d.type == :development
30
31
  d = DepProxy.new(d, dep.__platform) unless match_current_platform
31
32
  deps << d
@@ -184,11 +185,7 @@ module Bundler
184
185
  def spec_for_dependency(dep, match_current_platform)
185
186
  specs_for_platforms = lookup[dep.name]
186
187
  if match_current_platform
187
- Bundler.rubygems.platforms.reverse_each do |pl|
188
- match = GemHelpers.select_best_platform_match(specs_for_platforms, pl)
189
- return match if match
190
- end
191
- nil
188
+ GemHelpers.select_best_platform_match(specs_for_platforms, Bundler.local_platform)
192
189
  else
193
190
  GemHelpers.select_best_platform_match(specs_for_platforms, dep.__platform)
194
191
  end
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "remote_specification"
4
-
5
3
  module Bundler
6
4
  class StubSpecification < RemoteSpecification
7
5
  def self.from_stub(stub)
@@ -16,5 +16,5 @@ gem "<%= config[:test] %>", "~> <%= config[:test_framework_version] %>"
16
16
  <%- end -%>
17
17
  <%- if config[:rubocop] -%>
18
18
 
19
- gem "rubocop", "~> 0.80"
19
+ gem "rubocop", "~> <%= config[:rubocop_version] %>"
20
20
  <%- end -%>
@@ -14,7 +14,7 @@ Gem::Specification.new do |spec|
14
14
  <%- if config[:mit] -%>
15
15
  spec.license = "MIT"
16
16
  <%- end -%>
17
- spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
17
+ spec.required_ruby_version = Gem::Requirement.new(">= <%= config[:required_ruby_version] %>")
18
18
 
19
19
  spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
20
20
 
@@ -1,3 +1,6 @@
1
+ AllCops:
2
+ TargetRubyVersion: <%= ::Gem::Version.new(config[:required_ruby_version]).segments[0..1].join(".") %>
3
+
1
4
  Style/StringLiterals:
2
5
  Enabled: true
3
6
  EnforcedStyle: double_quotes
@@ -159,7 +159,14 @@ class Bundler::Persistent::Net::HTTP::Persistent
159
159
  # limits (typically windows).
160
160
 
161
161
  if Process.const_defined? :RLIMIT_NOFILE
162
- DEFAULT_POOL_SIZE = Process.getrlimit(Process::RLIMIT_NOFILE).first / 4
162
+ open_file_limits = Process.getrlimit(Process::RLIMIT_NOFILE)
163
+
164
+ # Under JRuby on Windows Process responds to `getrlimit` but returns something that does not match docs
165
+ if open_file_limits.respond_to?(:first)
166
+ DEFAULT_POOL_SIZE = open_file_limits.first / 4
167
+ else
168
+ DEFAULT_POOL_SIZE = 256
169
+ end
163
170
  else
164
171
  DEFAULT_POOL_SIZE = 256
165
172
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: false
2
2
 
3
3
  module Bundler
4
- VERSION = "2.2.0".freeze
4
+ VERSION = "2.2.5".freeze
5
5
 
6
6
  def self.bundler_major_version
7
7
  @bundler_major_version ||= VERSION.split(".").first.to_i
@@ -8,7 +8,7 @@
8
8
  require 'rbconfig'
9
9
 
10
10
  module Gem
11
- VERSION = "3.2.0".freeze
11
+ VERSION = "3.2.5".freeze
12
12
  end
13
13
 
14
14
  # Must be first since it unloads the prelude from 1.9.2
@@ -105,7 +105,6 @@ permission to.
105
105
  rubygems_api_request method, "api/v1/gems/#{name}/owners", scope: get_owner_scope(method: method) do |request|
106
106
  request.set_form_data 'email' => owner
107
107
  request.add_field "Authorization", api_key
108
- request.add_field "OTP", options[:otp] if options[:otp]
109
108
  end
110
109
  end
111
110
 
@@ -91,7 +91,6 @@ The push command will use ~/.gem/credentials to authenticate to a server, but yo
91
91
  request.add_field "Content-Length", request.body.size
92
92
  request.add_field "Content-Type", "application/octet-stream"
93
93
  request.add_field "Authorization", api_key
94
- request.add_field "OTP", options[:otp] if options[:otp]
95
94
  end
96
95
  end
97
96
 
@@ -6,8 +6,8 @@ require 'rubygems/command'
6
6
  # RubyGems checkout or tarball.
7
7
 
8
8
  class Gem::Commands::SetupCommand < Gem::Command
9
- HISTORY_HEADER = /^===\s*[\d.a-zA-Z]+\s*\/\s*\d{4}-\d{2}-\d{2}\s*$/.freeze
10
- VERSION_MATCHER = /^===\s*([\d.a-zA-Z]+)\s*\/\s*\d{4}-\d{2}-\d{2}\s*$/.freeze
9
+ HISTORY_HEADER = /^#\s*[\d.a-zA-Z]+\s*\/\s*\d{4}-\d{2}-\d{2}\s*$/.freeze
10
+ VERSION_MATCHER = /^#\s*([\d.a-zA-Z]+)\s*\/\s*\d{4}-\d{2}-\d{2}\s*$/.freeze
11
11
 
12
12
  ENV_PATHS = %w[/usr/bin/env /bin/env].freeze
13
13
 
@@ -167,19 +167,18 @@ By default, this RubyGems will install gem as:
167
167
  extend MakeDirs
168
168
 
169
169
  lib_dir, bin_dir = make_destination_dirs install_destdir
170
- man_dir = make_man_dir install_destdir
170
+ man_dir = generate_default_man_dir install_destdir
171
171
 
172
172
  install_lib lib_dir
173
173
 
174
- install_man man_dir
175
-
176
174
  install_executables bin_dir
177
175
 
178
176
  remove_old_bin_files bin_dir
179
177
 
180
178
  remove_old_lib_files lib_dir
181
179
 
182
- remove_old_man_files man_dir
180
+ # Can be removed one we drop support for bundler 2.2.3 (the last version installing man files to man_dir)
181
+ remove_old_man_files man_dir if man_dir && File.exist?(man_dir)
183
182
 
184
183
  install_default_bundler_gem bin_dir
185
184
 
@@ -330,21 +329,6 @@ By default, this RubyGems will install gem as:
330
329
  end
331
330
  end
332
331
 
333
- def install_man(man_dir)
334
- mans = { 'Bundler' => 'bundler/man' }
335
- mans.each do |tool, path|
336
- say "Installing #{tool} manpages" if @verbose
337
-
338
- bundler_man1_files = bundler_man1_files_in(path)
339
- bundler_man5_files = bundler_man5_files_in(path)
340
-
341
- Dir.chdir path do
342
- install_file_list(bundler_man1_files, "#{man_dir}/man1")
343
- install_file_list(bundler_man5_files, "#{man_dir}/man5")
344
- end
345
- end
346
- end
347
-
348
332
  def install_rdoc
349
333
  gem_doc_dir = File.join Gem.dir, 'doc'
350
334
  rubygems_name = "rubygems-#{Gem::VERSION}"
@@ -391,9 +375,7 @@ By default, this RubyGems will install gem as:
391
375
  specs_dir = File.join(options[:destdir], specs_dir) unless Gem.win_platform?
392
376
  mkdir_p specs_dir, :mode => 0755
393
377
 
394
- bundler_spec = Gem::Specification.load("bundler/bundler.gemspec")
395
- bundler_spec.files = Dir.chdir("bundler") { Dir["{*.md,{lib,exe,man}/**/*}"] }
396
- bundler_spec.executables -= %w[bundler bundle_ruby]
378
+ bundler_spec = Dir.chdir("bundler") { Gem::Specification.load("bundler.gemspec") }
397
379
 
398
380
  # Remove bundler-*.gemspec in default specification directory.
399
381
  Dir.entries(specs_dir).
@@ -455,19 +437,12 @@ By default, this RubyGems will install gem as:
455
437
  return lib_dir, bin_dir
456
438
  end
457
439
 
458
- def make_man_dir(install_destdir)
459
- man_dir = generate_default_man_dir(install_destdir)
460
-
461
- mkdir_p man_dir, :mode => 0755
462
-
463
- return man_dir
464
- end
465
-
466
440
  def generate_default_man_dir(install_destdir)
467
441
  prefix = options[:prefix]
468
442
 
469
443
  if prefix.empty?
470
444
  man_dir = RbConfig::CONFIG['mandir']
445
+ return unless man_dir
471
446
  else
472
447
  man_dir = File.join prefix, 'man'
473
448
  end
@@ -518,20 +493,6 @@ By default, this RubyGems will install gem as:
518
493
  end
519
494
  end
520
495
 
521
- # for installation of bundler as default gems
522
- def bundler_man1_files_in(dir)
523
- Dir.chdir dir do
524
- Dir['bundle*.1']
525
- end
526
- end
527
-
528
- # for installation of bundler as default gems
529
- def bundler_man5_files_in(dir)
530
- Dir.chdir dir do
531
- Dir['gemfile.5']
532
- end
533
- end
534
-
535
496
  def remove_old_bin_files(bin_dir)
536
497
  old_bin_files = {
537
498
  'gem_mirror' => 'gem mirror',
@@ -585,33 +546,26 @@ abort "#{deprecation_message}"
585
546
  end
586
547
  end
587
548
 
588
- def remove_old_man_files(man_dir)
589
- man_dirs = { man_dir => "bundler/man" }
590
- man_dirs.each do |old_man_dir, new_man_dir|
591
- man1_files = bundler_man1_files_in(new_man_dir)
592
-
593
- old_man1_dir = "#{old_man_dir}/man1"
594
- old_man1_files = bundler_man1_files_in(old_man1_dir)
595
- old_man1_files += Dir.chdir(old_man1_dir) { Dir["bundle*.1.{txt,ronn}"] }
549
+ def remove_old_man_files(old_man_dir)
550
+ old_man1_dir = "#{old_man_dir}/man1"
596
551
 
597
- man1_to_remove = old_man1_files - man1_files
552
+ if File.exist?(old_man1_dir)
553
+ man1_to_remove = Dir.chdir(old_man1_dir) { Dir["bundle*.1{,.txt,.ronn}"] }
598
554
 
599
555
  remove_file_list(man1_to_remove, old_man1_dir)
556
+ end
600
557
 
601
- man5_files = bundler_man5_files_in(new_man_dir)
602
-
603
- old_man5_dir = "#{old_man_dir}/man5"
604
- old_man5_files = bundler_man5_files_in(old_man5_dir)
605
- old_man5_files += Dir.chdir(old_man5_dir) { Dir["gemfile.5.{txt,ronn}"] }
558
+ old_man5_dir = "#{old_man_dir}/man5"
606
559
 
607
- man5_to_remove = old_man5_files - man5_files
560
+ if File.exist?(old_man5_dir)
561
+ man5_to_remove = Dir.chdir(old_man5_dir) { Dir["gemfile.5{,.txt,.ronn}"] }
608
562
 
609
563
  remove_file_list(man5_to_remove, old_man5_dir)
610
564
  end
611
565
  end
612
566
 
613
567
  def show_release_notes
614
- release_notes = File.join Dir.pwd, 'History.txt'
568
+ release_notes = File.join Dir.pwd, 'CHANGELOG.md'
615
569
 
616
570
  release_notes =
617
571
  if File.exist? release_notes
@@ -74,7 +74,6 @@ data you will need to change them immediately and yank your gem.
74
74
  name = get_one_gem_name
75
75
  response = rubygems_api_request(method, api, host, scope: get_yank_scope) do |request|
76
76
  request.add_field("Authorization", api_key)
77
- request.add_field("OTP", options[:otp]) if options[:otp]
78
77
 
79
78
  data = {
80
79
  'gem_name' => name,
@@ -286,6 +286,7 @@ class Gem::DependencyInstaller
286
286
 
287
287
  installer_set = Gem::Resolver::InstallerSet.new @domain
288
288
  installer_set.ignore_installed = (@minimal_deps == false) || @only_install_dir
289
+ installer_set.force = @force
289
290
 
290
291
  if consider_local?
291
292
  if dep_or_name =~ /\.gem$/ and File.file? dep_or_name
@@ -29,7 +29,7 @@ class Gem::Ext::Builder
29
29
  make_program = (/mswin/ =~ RUBY_PLATFORM) ? 'nmake' : 'make'
30
30
  end
31
31
 
32
- destdir = '"DESTDIR=%s"' % ENV['DESTDIR']
32
+ destdir = 'DESTDIR=%s' % ENV['DESTDIR']
33
33
 
34
34
  ['clean', '', 'install'].each do |target|
35
35
  # Pass DESTDIR via command line to override what's in MAKEFLAGS
@@ -37,7 +37,7 @@ class Gem::Ext::Builder
37
37
  make_program,
38
38
  destdir,
39
39
  target,
40
- ].join(' ').rstrip
40
+ ].reject(&:empty?)
41
41
  begin
42
42
  run(cmd, results, "make #{target}".rstrip, make_dir)
43
43
  rescue Gem::InstallError
@@ -56,7 +56,7 @@ class Gem::Ext::Builder
56
56
  p(command)
57
57
  end
58
58
  results << "current directory: #{dir}"
59
- results << (command.respond_to?(:shelljoin) ? command.shelljoin : command)
59
+ results << command.shelljoin
60
60
 
61
61
  require "open3"
62
62
  # Set $SOURCE_DATE_EPOCH for the subprocess.
@@ -4,8 +4,7 @@ require_relative '../command'
4
4
  class Gem::Ext::CmakeBuilder < Gem::Ext::Builder
5
5
  def self.build(extension, dest_path, results, args=[], lib_dir=nil, cmake_dir=Dir.pwd)
6
6
  unless File.exist?(File.join(cmake_dir, 'Makefile'))
7
- cmd = "cmake . -DCMAKE_INSTALL_PREFIX=#{dest_path}"
8
- cmd << " #{Gem::Command.build_args.join ' '}" unless Gem::Command.build_args.empty?
7
+ cmd = ["cmake", ".", "-DCMAKE_INSTALL_PREFIX=#{dest_path}", *Gem::Command.build_args]
9
8
 
10
9
  run cmd, results, class_name, cmake_dir
11
10
  end
@@ -8,8 +8,7 @@
8
8
  class Gem::Ext::ConfigureBuilder < Gem::Ext::Builder
9
9
  def self.build(extension, dest_path, results, args=[], lib_dir=nil, configure_dir=Dir.pwd)
10
10
  unless File.exist?(File.join(configure_dir, 'Makefile'))
11
- cmd = "sh ./configure --prefix=#{dest_path}"
12
- cmd << " #{args.join ' '}" unless args.empty?
11
+ cmd = ["sh", "./configure", "--prefix=#{dest_path}", *args]
13
12
 
14
13
  run cmd, results, class_name, configure_dir
15
14
  end
@@ -19,7 +19,7 @@ class Gem::Ext::RakeBuilder < Gem::Ext::Builder
19
19
  rake = rake.shellsplit
20
20
  else
21
21
  begin
22
- rake = [Gem.ruby, "-I#{File.expand_path("..", __dir__)}", "-rrubygems", Gem.bin_path('rake', 'rake')]
22
+ rake = [Gem.ruby, "-I#{File.expand_path("../..", __dir__)}", "-rrubygems", Gem.bin_path('rake', 'rake')]
23
23
  rescue Gem::Exception
24
24
  rake = [Gem.default_exec_format % 'rake']
25
25
  end
@@ -94,20 +94,16 @@ module Gem::GemcutterUtilities
94
94
  end
95
95
 
96
96
  uri = URI.parse "#{self.host}/#{path}"
97
-
98
- request_method = Net::HTTP.const_get method.to_s.capitalize
99
- response = Gem::RemoteFetcher.fetcher.request(uri, request_method, &block)
97
+ response = request_with_otp(method, uri, &block)
100
98
 
101
99
  if mfa_unauthorized?(response)
102
- response = Gem::RemoteFetcher.fetcher.request(uri, request_method) do |req|
103
- req.add_field "OTP", get_otp
104
- block.call(req)
105
- end
100
+ ask_otp
101
+ response = request_with_otp(method, uri, &block)
106
102
  end
107
103
 
108
104
  if api_key_forbidden?(response)
109
105
  update_scope(scope)
110
- Gem::RemoteFetcher.fetcher.request(uri, request_method, &block)
106
+ request_with_otp(method, uri, &block)
111
107
  else
112
108
  response
113
109
  end
@@ -117,11 +113,6 @@ module Gem::GemcutterUtilities
117
113
  response.kind_of?(Net::HTTPUnauthorized) && response.body.start_with?('You have enabled multifactor authentication')
118
114
  end
119
115
 
120
- def get_otp
121
- say 'You have enabled multi-factor authentication. Please enter OTP code.'
122
- ask 'Code: '
123
- end
124
-
125
116
  def update_scope(scope)
126
117
  sign_in_host = self.host
127
118
  pretty_host = pretty_host(sign_in_host)
@@ -135,7 +126,7 @@ module Gem::GemcutterUtilities
135
126
  response = rubygems_api_request(:put, "api/v1/api_key",
136
127
  sign_in_host, scope: scope) do |request|
137
128
  request.basic_auth email, password
138
- request.add_field "OTP", options[:otp] if options[:otp]
129
+ request["OTP"] = options[:otp] if options[:otp]
139
130
  request.body = URI.encode_www_form({:api_key => api_key }.merge(update_scope_params))
140
131
  end
141
132
 
@@ -168,7 +159,7 @@ module Gem::GemcutterUtilities
168
159
  response = rubygems_api_request(:post, "api/v1/api_key",
169
160
  sign_in_host, scope: scope) do |request|
170
161
  request.basic_auth email, password
171
- request.add_field "OTP", options[:otp] if options[:otp]
162
+ request["OTP"] = options[:otp] if options[:otp]
172
163
  request.body = URI.encode_www_form({ name: key_name }.merge(scope_params))
173
164
  end
174
165
 
@@ -229,6 +220,20 @@ module Gem::GemcutterUtilities
229
220
 
230
221
  private
231
222
 
223
+ def request_with_otp(method, uri, &block)
224
+ request_method = Net::HTTP.const_get method.to_s.capitalize
225
+
226
+ Gem::RemoteFetcher.fetcher.request(uri, request_method) do |req|
227
+ req["OTP"] = options[:otp] if options[:otp]
228
+ block.call(req)
229
+ end
230
+ end
231
+
232
+ def ask_otp
233
+ say 'You have enabled multi-factor authentication. Please enter OTP code.'
234
+ options[:otp] = ask 'Code: '
235
+ end
236
+
232
237
  def pretty_host(host)
233
238
  if Gem::DEFAULT_HOST == host
234
239
  'RubyGems.org'
@@ -255,8 +260,8 @@ module Gem::GemcutterUtilities
255
260
  end
256
261
 
257
262
  def get_key_name(scope)
258
- hostname = Socket.gethostname || "unkown-host"
259
- user = ENV["USER"] || ENV["USERNAME"] || "unkown-user"
263
+ hostname = Socket.gethostname || "unknown-host"
264
+ user = ENV["USER"] || ENV["USERNAME"] || "unknown-user"
260
265
  ts = Time.now.strftime("%Y%m%d%H%M%S")
261
266
  default_key_name = "#{hostname}-#{user}-#{ts}"
262
267