rubygems-update 3.0.4 → 3.0.9
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/.travis.yml +2 -0
- data/History.txt +85 -0
- data/Manifest.txt +5 -3
- data/Rakefile +8 -6
- data/bundler/lib/bundler/build_metadata.rb +2 -2
- data/lib/rubygems.rb +6 -12
- data/lib/rubygems/commands/push_command.rb +2 -0
- data/lib/rubygems/commands/setup_command.rb +9 -11
- data/lib/rubygems/commands/uninstall_command.rb +16 -6
- data/lib/rubygems/commands/which_command.rb +1 -3
- data/lib/rubygems/defaults.rb +1 -8
- data/lib/rubygems/dependency.rb +1 -1
- data/lib/rubygems/dependency_installer.rb +1 -2
- data/lib/rubygems/exceptions.rb +0 -4
- data/lib/rubygems/gemcutter_utilities.rb +9 -5
- data/lib/rubygems/installer.rb +8 -5
- data/lib/rubygems/installer_test_case.rb +2 -2
- data/lib/rubygems/package/tar_header.rb +11 -2
- data/lib/rubygems/remote_fetcher.rb +15 -54
- data/lib/rubygems/request.rb +1 -1
- data/lib/rubygems/request_set/gem_dependency_api.rb +3 -5
- data/lib/rubygems/resolver.rb +4 -1
- data/lib/rubygems/s3_uri_signer.rb +183 -0
- data/lib/rubygems/security_option.rb +0 -1
- data/lib/rubygems/specification.rb +13 -14
- data/lib/rubygems/ssl_certs/{index.rubygems.org → rubygems.org}/GlobalSignRootCA.pem +0 -0
- data/lib/rubygems/ssl_certs/rubygems.org/GlobalSignRootCA_R3.pem +21 -0
- data/lib/rubygems/stub_specification.rb +1 -2
- data/lib/rubygems/test_case.rb +8 -4
- data/lib/rubygems/util.rb +12 -0
- data/rubygems-update.gemspec +1 -1
- data/test/rubygems/test_bundled_ca.rb +7 -4
- data/test/rubygems/test_gem.rb +40 -3
- data/test/rubygems/test_gem_commands_push_command.rb +15 -0
- data/test/rubygems/test_gem_commands_setup_command.rb +11 -7
- data/test/rubygems/test_gem_commands_uninstall_command.rb +80 -1
- data/test/rubygems/test_gem_indexer.rb +8 -8
- data/test/rubygems/test_gem_installer.rb +78 -19
- data/test/rubygems/test_gem_package_tar_header.rb +41 -0
- data/test/rubygems/test_gem_remote_fetcher.rb +133 -14
- data/test/rubygems/test_gem_request.rb +4 -4
- data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +20 -30
- data/test/rubygems/test_gem_specification.rb +29 -0
- data/test/rubygems/test_gem_util.rb +8 -0
- data/util/cops/deprecations.rb +52 -0
- data/util/create_certs.sh +27 -0
- data/util/update_bundled_ca_certificates.rb +1 -3
- metadata +12 -9
- data/lib/rubygems/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem +0 -23
- data/lib/rubygems/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem +0 -25
| @@ -2284,7 +2284,6 @@ class Gem::Specification < Gem::BasicSpecification | |
| 2284 2284 |  | 
| 2285 2285 | 
             
                e = Gem::LoadError.new msg
         | 
| 2286 2286 | 
             
                e.name = self.name
         | 
| 2287 | 
            -
                # TODO: e.requirement = dep.requirement
         | 
| 2288 2287 |  | 
| 2289 2288 | 
             
                raise e
         | 
| 2290 2289 | 
             
              end
         | 
| @@ -2349,18 +2348,18 @@ class Gem::Specification < Gem::BasicSpecification | |
| 2349 2348 |  | 
| 2350 2349 | 
             
              def ruby_code(obj)
         | 
| 2351 2350 | 
             
                case obj
         | 
| 2352 | 
            -
                when String | 
| 2353 | 
            -
                when Array | 
| 2354 | 
            -
                when Hash | 
| 2351 | 
            +
                when String             then obj.dump + ".freeze"
         | 
| 2352 | 
            +
                when Array              then '[' + obj.map { |x| ruby_code x }.join(", ") + ']'
         | 
| 2353 | 
            +
                when Hash               then
         | 
| 2355 2354 | 
             
                  seg = obj.keys.sort.map { |k| "#{k.to_s.dump} => #{obj[k].to_s.dump}" }
         | 
| 2356 2355 | 
             
                  "{ #{seg.join(', ')} }"
         | 
| 2357 | 
            -
                when Gem::Version | 
| 2358 | 
            -
                when DateLike | 
| 2359 | 
            -
                when Time | 
| 2360 | 
            -
                when Numeric | 
| 2361 | 
            -
                when true, false, nil | 
| 2362 | 
            -
                when Gem::Platform | 
| 2363 | 
            -
                when Gem::Requirement | 
| 2356 | 
            +
                when Gem::Version       then obj.to_s.dump
         | 
| 2357 | 
            +
                when DateLike           then obj.strftime('%Y-%m-%d').dump
         | 
| 2358 | 
            +
                when Time               then obj.strftime('%Y-%m-%d').dump
         | 
| 2359 | 
            +
                when Numeric            then obj.inspect
         | 
| 2360 | 
            +
                when true, false, nil   then obj.inspect
         | 
| 2361 | 
            +
                when Gem::Platform      then "Gem::Platform.new(#{obj.to_a.inspect})"
         | 
| 2362 | 
            +
                when Gem::Requirement   then
         | 
| 2364 2363 | 
             
                  list = obj.as_list
         | 
| 2365 2364 | 
             
                  "Gem::Requirement.new(#{ruby_code(list.size == 1 ? obj.to_s : list)})"
         | 
| 2366 2365 | 
             
                else raise Gem::Exception, "ruby_code case not handled: #{obj.class}"
         | 
| @@ -2479,6 +2478,7 @@ class Gem::Specification < Gem::BasicSpecification | |
| 2479 2478 | 
             
              # still have their default values are omitted.
         | 
| 2480 2479 |  | 
| 2481 2480 | 
             
              def to_ruby
         | 
| 2481 | 
            +
                require 'openssl'
         | 
| 2482 2482 | 
             
                mark_version
         | 
| 2483 2483 | 
             
                result = []
         | 
| 2484 2484 | 
             
                result << "# -*- encoding: utf-8 -*-"
         | 
| @@ -2517,9 +2517,8 @@ class Gem::Specification < Gem::BasicSpecification | |
| 2517 2517 | 
             
                @@attributes.each do |attr_name|
         | 
| 2518 2518 | 
             
                  next if handled.include? attr_name
         | 
| 2519 2519 | 
             
                  current_value = self.send(attr_name)
         | 
| 2520 | 
            -
                  if current_value != default_value(attr_name)  | 
| 2521 | 
            -
             | 
| 2522 | 
            -
                    result << "  s.#{attr_name} = #{ruby_code current_value}"
         | 
| 2520 | 
            +
                  if current_value != default_value(attr_name) || self.class.required_attribute?(attr_name)
         | 
| 2521 | 
            +
                    result << "  s.#{attr_name} = #{ruby_code current_value}" unless current_value.is_a?(OpenSSL::PKey::RSA)
         | 
| 2523 2522 | 
             
                  end
         | 
| 2524 2523 | 
             
                end
         | 
| 2525 2524 |  | 
| 
            File without changes
         | 
| @@ -0,0 +1,21 @@ | |
| 1 | 
            +
            -----BEGIN CERTIFICATE-----
         | 
| 2 | 
            +
            MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G
         | 
| 3 | 
            +
            A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp
         | 
| 4 | 
            +
            Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4
         | 
| 5 | 
            +
            MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG
         | 
| 6 | 
            +
            A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
         | 
| 7 | 
            +
            hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8
         | 
| 8 | 
            +
            RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT
         | 
| 9 | 
            +
            gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm
         | 
| 10 | 
            +
            KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd
         | 
| 11 | 
            +
            QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ
         | 
| 12 | 
            +
            XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw
         | 
| 13 | 
            +
            DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o
         | 
| 14 | 
            +
            LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU
         | 
| 15 | 
            +
            RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp
         | 
| 16 | 
            +
            jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK
         | 
| 17 | 
            +
            6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX
         | 
| 18 | 
            +
            mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs
         | 
| 19 | 
            +
            Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH
         | 
| 20 | 
            +
            WD9f
         | 
| 21 | 
            +
            -----END CERTIFICATE-----
         | 
| @@ -110,8 +110,7 @@ class Gem::StubSpecification < Gem::BasicSpecification | |
| 110 110 | 
             
                  begin
         | 
| 111 111 | 
             
                    saved_lineno = $.
         | 
| 112 112 |  | 
| 113 | 
            -
                     | 
| 114 | 
            -
                    open loaded_from, OPEN_MODE do |file|
         | 
| 113 | 
            +
                    File.open loaded_from, OPEN_MODE do |file|
         | 
| 115 114 | 
             
                      begin
         | 
| 116 115 | 
             
                        file.readline # discard encoding line
         | 
| 117 116 | 
             
                        stubline = file.readline.chomp
         | 
    
        data/lib/rubygems/test_case.rb
    CHANGED
    
    | @@ -140,6 +140,12 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni | |
| 140 140 | 
             
                assert File.exist?(path), msg
         | 
| 141 141 | 
             
              end
         | 
| 142 142 |  | 
| 143 | 
            +
              def assert_directory_exists(path, msg = nil)
         | 
| 144 | 
            +
                msg = message(msg) { "Expected path '#{path}' to be a directory" }
         | 
| 145 | 
            +
                assert_path_exists path
         | 
| 146 | 
            +
                assert File.directory?(path), msg
         | 
| 147 | 
            +
              end
         | 
| 148 | 
            +
             | 
| 143 149 | 
             
              ##
         | 
| 144 150 | 
             
              # Sets the ENABLE_SHARED entry in RbConfig::CONFIG to +value+ and restores
         | 
| 145 151 | 
             
              # the original value when the block ends
         | 
| @@ -256,6 +262,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni | |
| 256 262 | 
             
                @orig_gem_env_requirements = ENV.to_hash
         | 
| 257 263 |  | 
| 258 264 | 
             
                ENV['GEM_VENDOR'] = nil
         | 
| 265 | 
            +
                ENV['GEMRC'] = nil
         | 
| 259 266 | 
             
                ENV['SOURCE_DATE_EPOCH'] = nil
         | 
| 260 267 |  | 
| 261 268 | 
             
                @current_dir = Dir.pwd
         | 
| @@ -746,7 +753,7 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni | |
| 746 753 | 
             
              # Removes all installed gems from +@gemhome+.
         | 
| 747 754 |  | 
| 748 755 | 
             
              def util_clear_gems
         | 
| 749 | 
            -
                FileUtils.rm_rf File.join(@gemhome, "gems") | 
| 756 | 
            +
                FileUtils.rm_rf File.join(@gemhome, "gems")
         | 
| 750 757 | 
             
                FileUtils.mkdir File.join(@gemhome, "gems")
         | 
| 751 758 | 
             
                FileUtils.rm_rf File.join(@gemhome, "specifications")
         | 
| 752 759 | 
             
                FileUtils.mkdir File.join(@gemhome, "specifications")
         | 
| @@ -931,9 +938,6 @@ class Gem::TestCase < (defined?(Minitest::Test) ? Minitest::Test : MiniTest::Uni | |
| 931 938 | 
             
              # location are returned.
         | 
| 932 939 |  | 
| 933 940 | 
             
              def util_gem(name, version, deps = nil, &block)
         | 
| 934 | 
            -
                # TODO: deprecate
         | 
| 935 | 
            -
                raise "deps or block, not both" if deps and block
         | 
| 936 | 
            -
             | 
| 937 941 | 
             
                if deps
         | 
| 938 942 | 
             
                  block = proc do |s|
         | 
| 939 943 | 
             
                    # Since Hash#each is unordered in 1.8, sort
         | 
    
        data/lib/rubygems/util.rb
    CHANGED
    
    | @@ -128,4 +128,16 @@ module Gem::Util | |
| 128 128 | 
             
                end
         | 
| 129 129 | 
             
              end
         | 
| 130 130 |  | 
| 131 | 
            +
              ##
         | 
| 132 | 
            +
              # Corrects +path+ (usually returned by `URI.parse().path` on Windows), that
         | 
| 133 | 
            +
              # comes with a leading slash.
         | 
| 134 | 
            +
             | 
| 135 | 
            +
              def self.correct_for_windows_path(path)
         | 
| 136 | 
            +
                if path[0].chr == '/' && path[1].chr =~ /[a-z]/i && path[2].chr == ':'
         | 
| 137 | 
            +
                  path[1..-1]
         | 
| 138 | 
            +
                else
         | 
| 139 | 
            +
                  path
         | 
| 140 | 
            +
                end
         | 
| 141 | 
            +
              end
         | 
| 142 | 
            +
             | 
| 131 143 | 
             
            end
         | 
    
        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.0. | 
| 5 | 
            +
              s.version = "3.0.9"
         | 
| 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 |  | 
| @@ -51,13 +51,16 @@ if ENV["CI"] || ENV["TEST_SSL"] | |
| 51 51 | 
             
                  assert_https('rubygems.org')
         | 
| 52 52 | 
             
                end
         | 
| 53 53 |  | 
| 54 | 
            -
                def  | 
| 55 | 
            -
                  assert_https('rubygems. | 
| 54 | 
            +
                def test_accessing_www_rubygems
         | 
| 55 | 
            +
                  assert_https('www.rubygems.org')
         | 
| 56 56 | 
             
                end
         | 
| 57 57 |  | 
| 58 | 
            -
                def  | 
| 59 | 
            -
                  assert_https(' | 
| 58 | 
            +
                def test_accessing_staging
         | 
| 59 | 
            +
                  assert_https('staging.rubygems.org')
         | 
| 60 60 | 
             
                end
         | 
| 61 61 |  | 
| 62 | 
            +
                def test_accessing_new_index
         | 
| 63 | 
            +
                  assert_https('index.rubygems.org')
         | 
| 64 | 
            +
                end
         | 
| 62 65 | 
             
              end
         | 
| 63 66 | 
             
            end
         | 
    
        data/test/rubygems/test_gem.rb
    CHANGED
    
    | @@ -156,7 +156,7 @@ class TestGem < Gem::TestCase | |
| 156 156 | 
             
              end
         | 
| 157 157 |  | 
| 158 158 | 
             
              def assert_self_install_permissions
         | 
| 159 | 
            -
                mask =  | 
| 159 | 
            +
                mask = win_platform? ? 0700 : 0777
         | 
| 160 160 | 
             
                options = {
         | 
| 161 161 | 
             
                  :dir_mode => 0500,
         | 
| 162 162 | 
             
                  :prog_mode => 0510,
         | 
| @@ -195,6 +195,9 @@ class TestGem < Gem::TestCase | |
| 195 195 | 
             
                  'gems/foo-1/bin/foo.cmd' => prog_mode,
         | 
| 196 196 | 
             
                  'gems/foo-1/data/foo.txt' => data_mode,
         | 
| 197 197 | 
             
                }
         | 
| 198 | 
            +
                # below is for intermittent errors on Appveyor & Travis 2019-01,
         | 
| 199 | 
            +
                # see https://github.com/rubygems/rubygems/pull/2568
         | 
| 200 | 
            +
                sleep 0.2
         | 
| 198 201 | 
             
                result = {}
         | 
| 199 202 | 
             
                Dir.chdir @gemhome do
         | 
| 200 203 | 
             
                  expected.each_key do |n|
         | 
| @@ -320,6 +323,40 @@ class TestGem < Gem::TestCase | |
| 320 323 | 
             
                refute_includes e.message, "can't find gem bundler (>= 0.a) with executable bundle"
         | 
| 321 324 | 
             
              end
         | 
| 322 325 |  | 
| 326 | 
            +
              def test_activate_bin_path_respects_underscore_selection_if_given
         | 
| 327 | 
            +
                bundler_latest = util_spec 'bundler', '2.0.1' do |s|
         | 
| 328 | 
            +
                  s.executables = ['bundle']
         | 
| 329 | 
            +
                end
         | 
| 330 | 
            +
             | 
| 331 | 
            +
                bundler_previous = util_spec 'bundler', '1.17.3' do |s|
         | 
| 332 | 
            +
                  s.executables = ['bundle']
         | 
| 333 | 
            +
                end
         | 
| 334 | 
            +
             | 
| 335 | 
            +
                install_specs bundler_latest, bundler_previous
         | 
| 336 | 
            +
             | 
| 337 | 
            +
                File.open("Gemfile.lock", "w") do |f|
         | 
| 338 | 
            +
                  f.write <<-L.gsub(/ {8}/, "")
         | 
| 339 | 
            +
                    GEM
         | 
| 340 | 
            +
                      remote: https://rubygems.org/
         | 
| 341 | 
            +
                      specs:
         | 
| 342 | 
            +
             | 
| 343 | 
            +
                    PLATFORMS
         | 
| 344 | 
            +
                      ruby
         | 
| 345 | 
            +
             | 
| 346 | 
            +
                    DEPENDENCIES
         | 
| 347 | 
            +
             | 
| 348 | 
            +
                    BUNDLED WITH
         | 
| 349 | 
            +
                      2.0.1
         | 
| 350 | 
            +
                  L
         | 
| 351 | 
            +
                end
         | 
| 352 | 
            +
             | 
| 353 | 
            +
                File.open("Gemfile", "w") { |f| f.puts('source "https://rubygems.org"') }
         | 
| 354 | 
            +
             | 
| 355 | 
            +
                load Gem.activate_bin_path("bundler", "bundle", "= 1.17.3")
         | 
| 356 | 
            +
             | 
| 357 | 
            +
                assert_equal %w(bundler-1.17.3), loaded_spec_names
         | 
| 358 | 
            +
              end
         | 
| 359 | 
            +
             | 
| 323 360 | 
             
              def test_self_bin_path_no_exec_name
         | 
| 324 361 | 
             
                e = assert_raises ArgumentError do
         | 
| 325 362 | 
             
                  Gem.bin_path 'a'
         | 
| @@ -541,7 +578,7 @@ class TestGem < Gem::TestCase | |
| 541 578 |  | 
| 542 579 | 
             
                Gem.ensure_gem_subdirectories @gemhome, 0750
         | 
| 543 580 |  | 
| 544 | 
            -
                 | 
| 581 | 
            +
                assert_directory_exists File.join(@gemhome, "cache")
         | 
| 545 582 |  | 
| 546 583 | 
             
                assert_equal 0750, File::Stat.new(@gemhome).mode & 0777
         | 
| 547 584 | 
             
                assert_equal 0750, File::Stat.new(File.join(@gemhome, "cache")).mode & 0777
         | 
| @@ -570,7 +607,7 @@ class TestGem < Gem::TestCase | |
| 570 607 |  | 
| 571 608 | 
             
                Gem.ensure_gem_subdirectories gemdir
         | 
| 572 609 |  | 
| 573 | 
            -
                 | 
| 610 | 
            +
                assert_directory_exists util_cache_dir
         | 
| 574 611 | 
             
              end
         | 
| 575 612 |  | 
| 576 613 | 
             
              unless win_platform? || Process.uid.zero?  # only for FS that support write protection
         | 
| @@ -199,6 +199,21 @@ class TestGemCommandsPushCommand < Gem::TestCase | |
| 199 199 | 
             
                send_battery
         | 
| 200 200 | 
             
              end
         | 
| 201 201 |  | 
| 202 | 
            +
              def test_sending_gem_with_env_var_api_key
         | 
| 203 | 
            +
                @host = "http://privategemserver.example"
         | 
| 204 | 
            +
             | 
| 205 | 
            +
                @spec, @path = util_gem "freebird", "1.0.1" do |spec|
         | 
| 206 | 
            +
                  spec.metadata['allowed_push_host'] = @host
         | 
| 207 | 
            +
                end
         | 
| 208 | 
            +
             | 
| 209 | 
            +
                @api_key = "PRIVKEY"
         | 
| 210 | 
            +
                ENV["GEM_HOST_API_KEY"] = "PRIVKEY"
         | 
| 211 | 
            +
             | 
| 212 | 
            +
                @response = "Successfully registered gem: freebird (1.0.1)"
         | 
| 213 | 
            +
                @fetcher.data["#{@host}/api/v1/gems"]  = [@response, 200, 'OK']
         | 
| 214 | 
            +
                send_battery
         | 
| 215 | 
            +
              end
         | 
| 216 | 
            +
             | 
| 202 217 | 
             
              def test_sending_gem_to_allowed_push_host_with_basic_credentials
         | 
| 203 218 | 
             
                @sanitized_host = "http://privategemserver.example"
         | 
| 204 219 | 
             
                @host           = "http://user:password@privategemserver.example"
         | 
| @@ -38,6 +38,7 @@ class TestGemCommandsSetupCommand < Gem::TestCase | |
| 38 38 | 
             
                FileUtils.mkdir_p 'default/gems'
         | 
| 39 39 |  | 
| 40 40 | 
             
                gemspec = Gem::Specification.new
         | 
| 41 | 
            +
                gemspec.author = "Us"
         | 
| 41 42 | 
             
                gemspec.name = "bundler"
         | 
| 42 43 | 
             
                gemspec.version = BUNDLER_VERS
         | 
| 43 44 | 
             
                gemspec.bindir = "exe"
         | 
| @@ -166,16 +167,19 @@ class TestGemCommandsSetupCommand < Gem::TestCase | |
| 166 167 | 
             
              def test_install_default_bundler_gem
         | 
| 167 168 | 
             
                @cmd.extend FileUtils
         | 
| 168 169 |  | 
| 169 | 
            -
                @ | 
| 170 | 
            +
                bin_dir = File.join(@gemhome, 'bin')
         | 
| 171 | 
            +
                @cmd.install_default_bundler_gem bin_dir
         | 
| 170 172 |  | 
| 171 | 
            -
                 | 
| 172 | 
            -
             | 
| 173 | 
            -
             | 
| 174 | 
            -
                  spec = Gem::Specification.load(default_spec_path)
         | 
| 173 | 
            +
                bundler_spec = Gem::Specification.load("bundler/bundler.gemspec")
         | 
| 174 | 
            +
                default_spec_path = File.join(Gem::Specification.default_specifications_dir, "#{bundler_spec.full_name}.gemspec")
         | 
| 175 | 
            +
                spec = Gem::Specification.load(default_spec_path)
         | 
| 175 176 |  | 
| 176 | 
            -
             | 
| 177 | 
            -
             | 
| 177 | 
            +
                spec.executables.each do |e|
         | 
| 178 | 
            +
                  if Gem.win_platform?
         | 
| 179 | 
            +
                    assert_path_exists File.join(bin_dir, "#{e}.bat")
         | 
| 178 180 | 
             
                  end
         | 
| 181 | 
            +
             | 
| 182 | 
            +
                  assert_path_exists File.join bin_dir, e
         | 
| 179 183 | 
             
                end
         | 
| 180 184 |  | 
| 181 185 | 
             
                default_dir = Gem::Specification.default_specifications_dir
         | 
| @@ -192,6 +192,62 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase | |
| 192 192 | 
             
                assert File.exist? File.join(@gemhome, 'bin', 'executable')
         | 
| 193 193 | 
             
              end
         | 
| 194 194 |  | 
| 195 | 
            +
              def test_uninstall_selection
         | 
| 196 | 
            +
                ui = Gem::MockGemUi.new "1\n"
         | 
| 197 | 
            +
             | 
| 198 | 
            +
                util_make_gems
         | 
| 199 | 
            +
             | 
| 200 | 
            +
                list = Gem::Specification.find_all_by_name 'a'
         | 
| 201 | 
            +
             | 
| 202 | 
            +
                @cmd.options[:args] = ['a']
         | 
| 203 | 
            +
             | 
| 204 | 
            +
                use_ui ui do
         | 
| 205 | 
            +
                  @cmd.execute
         | 
| 206 | 
            +
                end
         | 
| 207 | 
            +
             | 
| 208 | 
            +
                updated_list = Gem::Specification.find_all_by_name('a')
         | 
| 209 | 
            +
                assert_equal list.length - 1, updated_list.length
         | 
| 210 | 
            +
             | 
| 211 | 
            +
                assert_match ' 1. a-1',          ui.output
         | 
| 212 | 
            +
                assert_match ' 2. a-2',          ui.output
         | 
| 213 | 
            +
                assert_match ' 3. a-3.a',        ui.output
         | 
| 214 | 
            +
                assert_match ' 4. All versions', ui.output
         | 
| 215 | 
            +
                assert_match 'uninstalled a-1',  ui.output
         | 
| 216 | 
            +
              end
         | 
| 217 | 
            +
             | 
| 218 | 
            +
              def test_uninstall_selection_multiple_gems
         | 
| 219 | 
            +
                ui = Gem::MockGemUi.new "1\n"
         | 
| 220 | 
            +
             | 
| 221 | 
            +
                util_make_gems
         | 
| 222 | 
            +
             | 
| 223 | 
            +
                a_list = Gem::Specification.find_all_by_name('a')
         | 
| 224 | 
            +
                b_list = Gem::Specification.find_all_by_name('b')
         | 
| 225 | 
            +
                list   = a_list + b_list
         | 
| 226 | 
            +
             | 
| 227 | 
            +
                @cmd.options[:args] = ['a', 'b']
         | 
| 228 | 
            +
             | 
| 229 | 
            +
                use_ui ui do
         | 
| 230 | 
            +
                  @cmd.execute
         | 
| 231 | 
            +
                end
         | 
| 232 | 
            +
             | 
| 233 | 
            +
                updated_a_list = Gem::Specification.find_all_by_name('a')
         | 
| 234 | 
            +
                updated_b_list = Gem::Specification.find_all_by_name('b')
         | 
| 235 | 
            +
                updated_list   = updated_a_list + updated_b_list
         | 
| 236 | 
            +
             | 
| 237 | 
            +
                assert_equal list.length - 2, updated_list.length
         | 
| 238 | 
            +
             | 
| 239 | 
            +
                out = ui.output.split("\n")
         | 
| 240 | 
            +
                assert_match 'uninstalled b-2',          out.shift
         | 
| 241 | 
            +
                assert_match '',                         out.shift
         | 
| 242 | 
            +
                assert_match 'Select gem to uninstall:', out.shift
         | 
| 243 | 
            +
                assert_match ' 1. a-1',                  out.shift
         | 
| 244 | 
            +
                assert_match ' 2. a-2',                  out.shift
         | 
| 245 | 
            +
                assert_match ' 3. a-3.a',                out.shift
         | 
| 246 | 
            +
                assert_match ' 4. All versions',         out.shift
         | 
| 247 | 
            +
                assert_match 'uninstalled a-1',          out.shift
         | 
| 248 | 
            +
                assert_empty                             out
         | 
| 249 | 
            +
              end
         | 
| 250 | 
            +
             | 
| 195 251 | 
             
              def test_execute_with_force_and_without_version_uninstalls_everything
         | 
| 196 252 | 
             
                ui = Gem::MockGemUi.new "y\n"
         | 
| 197 253 |  | 
| @@ -246,7 +302,7 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase | |
| 246 302 | 
             
                gemhome2 = "#{@gemhome}2"
         | 
| 247 303 |  | 
| 248 304 | 
             
                a_4, = util_gem 'a', 4
         | 
| 249 | 
            -
                install_gem a_4 | 
| 305 | 
            +
                install_gem a_4
         | 
| 250 306 |  | 
| 251 307 | 
             
                Gem::Specification.dirs = [@gemhome, gemhome2]
         | 
| 252 308 |  | 
| @@ -264,6 +320,29 @@ class TestGemCommandsUninstallCommand < Gem::InstallerTestCase | |
| 264 320 | 
             
                assert_equal %w[default-1], Gem::Specification.all_names.sort
         | 
| 265 321 | 
             
              end
         | 
| 266 322 |  | 
| 323 | 
            +
              def test_execute_outside_gem_home
         | 
| 324 | 
            +
                ui = Gem::MockGemUi.new "y\n"
         | 
| 325 | 
            +
             | 
| 326 | 
            +
                gemhome2 = "#{@gemhome}2"
         | 
| 327 | 
            +
             | 
| 328 | 
            +
                a_4, = util_gem 'a', 4
         | 
| 329 | 
            +
                install_gem a_4 , :install_dir => gemhome2
         | 
| 330 | 
            +
             | 
| 331 | 
            +
                Gem::Specification.dirs = [@gemhome, gemhome2]
         | 
| 332 | 
            +
             | 
| 333 | 
            +
                assert_includes Gem::Specification.all_names, 'a-4'
         | 
| 334 | 
            +
             | 
| 335 | 
            +
                @cmd.options[:args] = ['a:4']
         | 
| 336 | 
            +
             | 
| 337 | 
            +
                e = assert_raises Gem::InstallError do
         | 
| 338 | 
            +
                  use_ui ui do
         | 
| 339 | 
            +
                    @cmd.execute
         | 
| 340 | 
            +
                  end
         | 
| 341 | 
            +
                end
         | 
| 342 | 
            +
             | 
| 343 | 
            +
                assert_includes e.message, "a is not installed in GEM_HOME"
         | 
| 344 | 
            +
              end
         | 
| 345 | 
            +
             | 
| 267 346 | 
             
              def test_handle_options
         | 
| 268 347 | 
             
                @cmd.handle_options %w[]
         | 
| 269 348 |  | 
| @@ -103,8 +103,8 @@ class TestGemIndexer < Gem::TestCase | |
| 103 103 | 
             
                quickdir = File.join @tempdir, 'quick'
         | 
| 104 104 | 
             
                marshal_quickdir = File.join quickdir, "Marshal.#{@marshal_version}"
         | 
| 105 105 |  | 
| 106 | 
            -
                 | 
| 107 | 
            -
                 | 
| 106 | 
            +
                assert_directory_exists quickdir
         | 
| 107 | 
            +
                assert_directory_exists marshal_quickdir
         | 
| 108 108 |  | 
| 109 109 | 
             
                assert_indexed marshal_quickdir, "#{File.basename(@a1.spec_file)}.rz"
         | 
| 110 110 | 
             
                assert_indexed marshal_quickdir, "#{File.basename(@a2.spec_file)}.rz"
         | 
| @@ -133,8 +133,8 @@ class TestGemIndexer < Gem::TestCase | |
| 133 133 | 
             
                quickdir = File.join @tempdir, 'quick'
         | 
| 134 134 | 
             
                marshal_quickdir = File.join quickdir, "Marshal.#{@marshal_version}"
         | 
| 135 135 |  | 
| 136 | 
            -
                 | 
| 137 | 
            -
                 | 
| 136 | 
            +
                assert_directory_exists quickdir, 'quickdir should be directory'
         | 
| 137 | 
            +
                assert_directory_exists marshal_quickdir
         | 
| 138 138 |  | 
| 139 139 | 
             
                refute_indexed quickdir, "index"
         | 
| 140 140 | 
             
                refute_indexed quickdir, "index.rz"
         | 
| @@ -179,8 +179,8 @@ class TestGemIndexer < Gem::TestCase | |
| 179 179 | 
             
                quickdir = File.join @tempdir, 'quick'
         | 
| 180 180 | 
             
                marshal_quickdir = File.join quickdir, "Marshal.#{@marshal_version}"
         | 
| 181 181 |  | 
| 182 | 
            -
                 | 
| 183 | 
            -
                 | 
| 182 | 
            +
                assert_directory_exists quickdir
         | 
| 183 | 
            +
                assert_directory_exists marshal_quickdir
         | 
| 184 184 |  | 
| 185 185 | 
             
                assert_indexed marshal_quickdir, "#{File.basename(@a1.spec_file)}.rz"
         | 
| 186 186 | 
             
                assert_indexed marshal_quickdir, "#{File.basename(@a2.spec_file)}.rz"
         | 
| @@ -315,8 +315,8 @@ class TestGemIndexer < Gem::TestCase | |
| 315 315 | 
             
                quickdir = File.join @tempdir, 'quick'
         | 
| 316 316 | 
             
                marshal_quickdir = File.join quickdir, "Marshal.#{@marshal_version}"
         | 
| 317 317 |  | 
| 318 | 
            -
                 | 
| 319 | 
            -
                 | 
| 318 | 
            +
                assert_directory_exists quickdir
         | 
| 319 | 
            +
                assert_directory_exists marshal_quickdir
         | 
| 320 320 |  | 
| 321 321 | 
             
                @d2_1 = util_spec 'd', '2.1'
         | 
| 322 322 | 
             
                util_build_gem @d2_1
         |