summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.azure-pipelines/rbreadline.diff41
-rw-r--r--.azure-pipelines/steps.yml39
-rw-r--r--.rubocop.yml821
-rw-r--r--.rubocop_todo.yml385
-rw-r--r--.travis.yml58
-rw-r--r--CHANGELOG.md45
-rw-r--r--CODE_OF_CONDUCT.md2
-rw-r--r--README.md3
-rw-r--r--Rakefile407
-rw-r--r--azure-pipelines.yml6
-rwxr-xr-xbin/rake17
-rwxr-xr-xbin/rspec13
-rwxr-xr-xbin/rubocop15
-rwxr-xr-xbin/with_rubygems20
-rw-r--r--bundler.gemspec20
-rw-r--r--doc/README.md4
-rw-r--r--doc/TROUBLESHOOTING.md4
-rw-r--r--doc/contributing/BUG_TRIAGE.md13
-rw-r--r--doc/contributing/COMMUNITY.md4
-rw-r--r--doc/contributing/GETTING_HELP.md2
-rw-r--r--doc/contributing/HOW_YOU_CAN_HELP.md6
-rw-r--r--doc/contributing/ISSUES.md4
-rw-r--r--doc/contributing/README.md2
-rw-r--r--doc/documentation/README.md4
-rw-r--r--doc/documentation/VISION.md2
-rw-r--r--doc/documentation/WRITING.md6
-rw-r--r--lib/bundler.rb77
-rw-r--r--lib/bundler/capistrano.rb4
-rw-r--r--lib/bundler/cli.rb209
-rw-r--r--lib/bundler/cli/cache.rb2
-rw-r--r--lib/bundler/cli/common.rb8
-rw-r--r--lib/bundler/cli/config.rb16
-rw-r--r--lib/bundler/cli/doctor.rb6
-rw-r--r--lib/bundler/cli/exec.rb4
-rw-r--r--lib/bundler/cli/gem.rb6
-rw-r--r--lib/bundler/cli/info.rb22
-rw-r--r--lib/bundler/cli/init.rb2
-rw-r--r--lib/bundler/cli/install.rb2
-rw-r--r--lib/bundler/cli/issue.rb6
-rw-r--r--lib/bundler/cli/outdated.rb4
-rw-r--r--lib/bundler/cli/package.rb4
-rw-r--r--lib/bundler/cli/plugin.rb2
-rw-r--r--lib/bundler/cli/show.rb2
-rw-r--r--lib/bundler/cli/update.rb25
-rw-r--r--lib/bundler/compact_index_client.rb34
-rw-r--r--lib/bundler/compact_index_client/updater.rb8
-rw-r--r--lib/bundler/compatibility_guard.rb7
-rw-r--r--lib/bundler/definition.rb14
-rw-r--r--lib/bundler/dependency.rb8
-rw-r--r--lib/bundler/deployment.rb2
-rw-r--r--lib/bundler/dsl.rb43
-rw-r--r--lib/bundler/env.rb9
-rw-r--r--lib/bundler/feature_flag.rb53
-rw-r--r--lib/bundler/fetcher.rb12
-rw-r--r--lib/bundler/fetcher/compact_index.rb36
-rw-r--r--lib/bundler/fetcher/dependency.rb2
-rw-r--r--lib/bundler/fetcher/downloader.rb2
-rw-r--r--lib/bundler/fetcher/index.rb2
-rw-r--r--lib/bundler/friendly_errors.rb7
-rw-r--r--lib/bundler/gem_helper.rb10
-rw-r--r--lib/bundler/gem_helpers.rb2
-rw-r--r--lib/bundler/gem_tasks.rb2
-rw-r--r--lib/bundler/graph.rb4
-rw-r--r--lib/bundler/injector.rb4
-rw-r--r--lib/bundler/inline.rb36
-rw-r--r--lib/bundler/installer.rb17
-rw-r--r--lib/bundler/installer/gem_installer.rb6
-rw-r--r--lib/bundler/installer/parallel_installer.rb4
-rw-r--r--lib/bundler/lazy_specification.rb4
-rw-r--r--lib/bundler/lockfile_parser.rb24
-rw-r--r--lib/bundler/match_platform.rb2
-rw-r--r--lib/bundler/plugin.rb2
-rw-r--r--lib/bundler/plugin/api/source.rb2
-rw-r--r--lib/bundler/plugin/index.rb4
-rw-r--r--lib/bundler/plugin/installer.rb7
-rw-r--r--lib/bundler/psyched_yaml.rb2
-rw-r--r--lib/bundler/resolver.rb30
-rw-r--r--lib/bundler/retry.rb2
-rw-r--r--lib/bundler/ruby_version.rb4
-rw-r--r--lib/bundler/rubygems_ext.rb78
-rw-r--r--lib/bundler/rubygems_gem_installer.rb2
-rw-r--r--lib/bundler/rubygems_integration.rb495
-rw-r--r--lib/bundler/runtime.rb2
-rw-r--r--lib/bundler/settings.rb44
-rw-r--r--lib/bundler/setup.rb11
-rw-r--r--lib/bundler/shared_helpers.rb88
-rw-r--r--lib/bundler/similarity_detector.rb2
-rw-r--r--lib/bundler/source/git.rb13
-rw-r--r--lib/bundler/source/git/git_proxy.rb2
-rw-r--r--lib/bundler/source/path.rb8
-rw-r--r--lib/bundler/source/rubygems.rb6
-rw-r--r--lib/bundler/source_list.rb21
-rw-r--r--lib/bundler/ssl_certs/.document1
-rw-r--r--lib/bundler/ssl_certs/certificate_manager.rb66
-rw-r--r--lib/bundler/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem21
-rw-r--r--lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem23
-rw-r--r--lib/bundler/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem25
-rw-r--r--lib/bundler/stub_specification.rb42
-rw-r--r--lib/bundler/templates/newgem/Gemfile.tt2
-rw-r--r--lib/bundler/templates/newgem/newgem.gemspec.tt12
-rw-r--r--lib/bundler/templates/newgem/test/test_helper.rb.tt4
-rw-r--r--lib/bundler/templates/newgem/travis.yml.tt1
-rw-r--r--lib/bundler/ui/rg_proxy.rb2
-rw-r--r--lib/bundler/ui/shell.rb8
-rw-r--r--lib/bundler/vendor/fileutils/lib/fileutils.rb199
-rw-r--r--lib/bundler/vendor/fileutils/lib/fileutils/version.rb5
-rw-r--r--lib/bundler/vendor/thor/lib/thor/actions.rb18
-rw-r--r--lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb13
-rw-r--r--lib/bundler/vendor/thor/lib/thor/base.rb7
-rw-r--r--lib/bundler/vendor/thor/lib/thor/error.rb82
-rw-r--r--lib/bundler/vendor/thor/lib/thor/group.rb4
-rw-r--r--lib/bundler/vendor/thor/lib/thor/parser/options.rb9
-rw-r--r--lib/bundler/vendor/thor/lib/thor/runner.rb4
-rw-r--r--lib/bundler/vendor/thor/lib/thor/shell.rb2
-rw-r--r--lib/bundler/vendor/thor/lib/thor/shell/basic.rb59
-rw-r--r--lib/bundler/vendor/thor/lib/thor/version.rb2
-rw-r--r--lib/bundler/vendored_fileutils.rb2
-rw-r--r--lib/bundler/vendored_molinillo.rb2
-rw-r--r--lib/bundler/vendored_persistent.rb2
-rw-r--r--lib/bundler/vendored_thor.rb2
-rw-r--r--lib/bundler/version.rb5
-rw-r--r--lib/bundler/vlad.rb4
-rw-r--r--lib/bundler/worker.rb4
-rw-r--r--lib/bundler/yaml_serializer.rb5
-rw-r--r--man/bundle-add.ronn8
-rw-r--r--man/bundle-config.ronn68
-rw-r--r--man/bundle-init.ronn2
-rw-r--r--man/bundle.ronn4
-rw-r--r--man/gemfile.5.ronn2
-rw-r--r--spec/bundler/bundler_spec.rb17
-rw-r--r--spec/bundler/cli_spec.rb32
-rw-r--r--spec/bundler/definition_spec.rb53
-rw-r--r--spec/bundler/dsl_spec.rb97
-rw-r--r--spec/bundler/env_spec.rb49
-rw-r--r--spec/bundler/fetcher/compact_index_spec.rb2
-rw-r--r--spec/bundler/friendly_errors_spec.rb19
-rw-r--r--spec/bundler/gem_helper_spec.rb9
-rw-r--r--spec/bundler/installer/gem_installer_spec.rb15
-rw-r--r--spec/bundler/mirror_spec.rb4
-rw-r--r--spec/bundler/rubygems_integration_spec.rb22
-rw-r--r--spec/bundler/shared_helpers_spec.rb17
-rw-r--r--spec/bundler/source_list_spec.rb22
-rw-r--r--spec/bundler/source_spec.rb12
-rw-r--r--spec/bundler/ssl_certs/certificate_manager_spec.rb140
-rw-r--r--spec/bundler/stub_specification_spec.rb10
-rw-r--r--spec/bundler/ui/shell_spec.rb36
-rw-r--r--spec/bundler/ui_spec.rb4
-rw-r--r--spec/bundler/vendored_persistent_spec.rb1
-rw-r--r--spec/cache/cache_path_spec.rb2
-rw-r--r--spec/cache/gems_spec.rb14
-rw-r--r--spec/cache/git_spec.rb12
-rw-r--r--spec/cache/path_spec.rb4
-rw-r--r--spec/cache/platform_spec.rb2
-rw-r--r--spec/commands/add_spec.rb58
-rw-r--r--spec/commands/binstubs_spec.rb44
-rw-r--r--spec/commands/check_spec.rb28
-rw-r--r--spec/commands/clean_spec.rb97
-rw-r--r--spec/commands/config_spec.rb140
-rw-r--r--spec/commands/console_spec.rb8
-rw-r--r--spec/commands/exec_spec.rb257
-rw-r--r--spec/commands/help_spec.rb11
-rw-r--r--spec/commands/info_spec.rb118
-rw-r--r--spec/commands/init_spec.rb104
-rw-r--r--spec/commands/inject_spec.rb14
-rw-r--r--spec/commands/install_spec.rb58
-rw-r--r--spec/commands/licenses_spec.rb4
-rw-r--r--spec/commands/list_spec.rb83
-rw-r--r--spec/commands/lock_spec.rb14
-rw-r--r--spec/commands/newgem_spec.rb44
-rw-r--r--spec/commands/open_spec.rb6
-rw-r--r--spec/commands/outdated_spec.rb28
-rw-r--r--spec/commands/package_spec.rb26
-rw-r--r--spec/commands/pristine_spec.rb25
-rw-r--r--spec/commands/remove_spec.rb16
-rw-r--r--spec/commands/show_spec.rb77
-rw-r--r--spec/commands/update_spec.rb140
-rw-r--r--spec/commands/version_spec.rb12
-rw-r--r--spec/commands/viz_spec.rb2
-rw-r--r--spec/install/allow_offline_install_spec.rb10
-rw-r--r--spec/install/binstubs_spec.rb21
-rw-r--r--spec/install/bundler_spec.rb20
-rw-r--r--spec/install/deploy_spec.rb134
-rw-r--r--spec/install/failure_spec.rb8
-rw-r--r--spec/install/gemfile/gemspec_spec.rb113
-rw-r--r--spec/install/gemfile/git_spec.rb116
-rw-r--r--spec/install/gemfile/groups_spec.rb14
-rw-r--r--spec/install/gemfile/lockfile_spec.rb2
-rw-r--r--spec/install/gemfile/path_spec.rb28
-rw-r--r--spec/install/gemfile/platform_spec.rb13
-rw-r--r--spec/install/gemfile/ruby_spec.rb2
-rw-r--r--spec/install/gemfile/sources_spec.rb122
-rw-r--r--spec/install/gemfile/specific_platform_spec.rb2
-rw-r--r--spec/install/gemfile_spec.rb27
-rw-r--r--spec/install/gems/compact_index_spec.rb62
-rw-r--r--spec/install/gems/dependency_api_spec.rb44
-rw-r--r--spec/install/gems/flex_spec.rb16
-rw-r--r--spec/install/gems/mirror_spec.rb4
-rw-r--r--spec/install/gems/native_extensions_spec.rb45
-rw-r--r--spec/install/gems/post_install_spec.rb4
-rw-r--r--spec/install/gems/resolving_spec.rb26
-rw-r--r--spec/install/gems/standalone_spec.rb28
-rw-r--r--spec/install/gems/sudo_spec.rb18
-rw-r--r--spec/install/gemspecs_spec.rb15
-rw-r--r--spec/install/git_spec.rb6
-rw-r--r--spec/install/global_cache_spec.rb10
-rw-r--r--spec/install/path_spec.rb26
-rw-r--r--spec/install/post_bundle_message_spec.rb20
-rw-r--r--spec/install/process_lock_spec.rb2
-rw-r--r--spec/install/redownload_spec.rb24
-rw-r--r--spec/install/security_policy_spec.rb13
-rw-r--r--spec/install/yanked_spec.rb14
-rw-r--r--spec/lock/lockfile_bundler_1_spec.rb1386
-rw-r--r--spec/lock/lockfile_spec.rb345
-rw-r--r--spec/other/cli_dispatch_spec.rb10
-rw-r--r--spec/other/compatibility_guard_spec.rb9
-rw-r--r--spec/other/ext_spec.rb7
-rw-r--r--spec/other/major_deprecation_spec.rb479
-rw-r--r--spec/other/platform_spec.rb40
-rw-r--r--spec/other/ssl_cert_spec.rb18
-rw-r--r--spec/plugins/command_spec.rb4
-rw-r--r--spec/plugins/install_spec.rb20
-rw-r--r--spec/plugins/list_spec.rb14
-rw-r--r--spec/plugins/source/example_spec.rb24
-rw-r--r--spec/quality_es_spec.rb11
-rw-r--r--spec/quality_spec.rb68
-rw-r--r--spec/realworld/dependency_api_spec.rb4
-rw-r--r--spec/realworld/double_check_spec.rb2
-rw-r--r--spec/realworld/edgecases_spec.rb63
-rw-r--r--spec/realworld/gemfile_source_header_spec.rb6
-rw-r--r--spec/realworld/mirror_probe_spec.rb22
-rw-r--r--spec/realworld/parallel_spec.rb14
-rw-r--r--spec/resolver/basic_spec.rb2
-rw-r--r--spec/runtime/executable_spec.rb21
-rw-r--r--spec/runtime/gem_tasks_spec.rb4
-rw-r--r--spec/runtime/inline_spec.rb31
-rw-r--r--spec/runtime/platform_spec.rb4
-rw-r--r--spec/runtime/require_spec.rb28
-rw-r--r--spec/runtime/setup_spec.rb154
-rw-r--r--spec/runtime/with_unbundled_env_spec.rb163
-rw-r--r--spec/spec_helper.rb35
-rw-r--r--spec/support/artifice/compact_index.rb10
-rw-r--r--spec/support/artifice/compact_index_api_missing.rb2
-rw-r--r--spec/support/artifice/compact_index_rate_limited.rb48
-rw-r--r--spec/support/artifice/endpoint.rb2
-rw-r--r--spec/support/artifice/endpoint_api_missing.rb2
-rw-r--r--spec/support/artifice/vcr.rb7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/api/v1/dependencies-gems=bundler/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/api/v1/dependencies-gems=bundler/GET/responsebin13564 -> 0 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/api/v1/dependencies/HEAD/request6
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/api/v1/dependencies/HEAD/response24
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/gems/bundler-1.12.3.gem/GET/responsebin280903 -> 0 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/quick/Marshal.4.8/bundler-1.12.3.gemspec.rz/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/quick/Marshal.4.8/bundler-1.12.3.gemspec.rz/GET/responsebin1425 -> 0 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/specs.4.8.gz/GET/responsebin3259479 -> 0 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/CFPropertyList/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/CFPropertyList/GET/responsebin2409 -> 2767 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ParseTree/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ParseTree/GET/responsebin3082 -> 3305 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/RedCloth/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/RedCloth/GET/responsebin3967 -> 4191 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/RubyInline/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/RubyInline/GET/responsebin2679 -> 2954 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/SexpProcessor/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/SexpProcessor/GET/responsebin1139 -> 1413 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ZenTest/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ZenTest/GET/responsebin3605 -> 3919 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/abstract/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/abstract/GET/responsebin1119 -> 1394 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actioncable/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actioncable/GET/responsebin2215 -> 4099 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionmailbox/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionmailbox/GET/responsebin0 -> 1533 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionmailer/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionmailer/GET/responsebin15980 -> 18435 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionpack/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionpack/GET/responsebin17131 -> 19473 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actiontext/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actiontext/GET/responsebin0 -> 1473 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionview/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionview/GET/responsebin5642 -> 7896 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionwebservice/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionwebservice/GET/responsebin2436 -> 2711 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activejob/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activejob/GET/responsebin3570 -> 5704 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activemodel-globalid/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activemodel-globalid/GET/responsebin1259 -> 1482 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activemodel-serializers-xml/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activemodel-serializers-xml/GET/responsebin0 -> 1534 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activemodel/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activemodel/GET/responsebin12759 -> 14915 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activerecord-deprecated_finders/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activerecord-deprecated_finders/GET/responsebin1396 -> 1671 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activerecord/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activerecord/GET/responsebin16487 -> 18794 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activeresource/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activeresource/GET/responsebin8619 -> 8975 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activestorage/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activestorage/GET/responsebin0 -> 2025 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activesupport/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activesupport/GET/responsebin14268 -> 16359 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/adamantium/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/adamantium/GET/responsebin1716 -> 1992 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/addressable/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/addressable/GET/responsebin2539 -> 2916 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/allison/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/allison/GET/responsebin1292 -> 1514 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ansi/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ansi/GET/responsebin1673 -> 1949 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/archive-tar-minitar/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/archive-tar-minitar/GET/responsebin983 -> 1611 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/arel/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/arel/GET/responsebin3489 -> 4120 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ast/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ast/GET/responsebin1459 -> 1713 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/astrolabe/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/astrolabe/GET/responsebin1632 -> 1844 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/atomic/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/atomic/GET/responsebin3388 -> 3747 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/autoparse/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/autoparse/GET/responsebin1542 -> 1753 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/axiom-types/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/axiom-types/GET/responsebin1484 -> 1760 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/backports/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/backports/GET/responsebin5492 -> 6218 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bacon/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bacon/GET/responsebin1290 -> 1515 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bcrypt-ruby/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bcrypt-ruby/GET/responsebin3733 -> 3944 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bcrypt/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bcrypt/GET/responsebin2290 -> 2885 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bcrypt_pbkdf/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bcrypt_pbkdf/GET/responsebin1409 -> 1676 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-extras/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-extras/GET/responsebin1472 -> 1747 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-git/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-git/GET/responsebin1624 -> 1899 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-rcov/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-rcov/GET/responsebin1188 -> 1463 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-rspec/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-rspec/GET/responsebin1331 -> 1606 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-rubyforge/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-rubyforge/GET/responsebin1150 -> 1424 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-zentest/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-zentest/GET/responsebin1210 -> 1420 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones/GET/responsebin3707 -> 4288 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/builder/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/builder/GET/responsebin2000 -> 2277 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bundler/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bundler/GET/responsebin11826 -> 13298 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/c21e/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/c21e/GET/responsebin0 -> 1452 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/camping/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/camping/GET/responsebin1815 -> 2090 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/capybara/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/capybara/GET/responsebin4161 -> 6623 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celerity/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celerity/GET/responsebin2444 -> 2667 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-essentials/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-essentials/GET/responsebin1814 -> 2025 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-extras/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-extras/GET/responsebin1572 -> 1847 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-fsm/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-fsm/GET/responsebin1533 -> 1808 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-io/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-io/GET/responsebin2502 -> 2713 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-pool/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-pool/GET/responsebin1495 -> 1718 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-supervision/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-supervision/GET/responsebin1618 -> 1893 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid/GET/responsebin3624 -> 4000 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cgi_multipart_eof_fix/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cgi_multipart_eof_fix/GET/responsebin1316 -> 1591 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/childprocess/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/childprocess/GET/responsebin3743 -> 4228 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/climate_control/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/climate_control/GET/responsebin1331 -> 1583 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cocaine/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cocaine/GET/responsebin1973 -> 2326 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coercible/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coercible/GET/responsebin1405 -> 1617 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coffee-rails/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coffee-rails/GET/responsebin1935 -> 2203 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coffee-script-source/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coffee-script-source/GET/responsebin2382 -> 2657 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coffee-script/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coffee-script/GET/responsebin2266 -> 2542 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/colorize/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/colorize/GET/responsebin1783 -> 2006 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/concurrent-ruby/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/concurrent-ruby/GET/responsebin5791 -> 6637 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/configuration/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/configuration/GET/responsebin1437 -> 1712 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coveralls/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coveralls/GET/responsebin3647 -> 3918 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/crass/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/crass/GET/responsebin1417 -> 1771 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-core/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-core/GET/responsebin1867 -> 2490 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-expressions/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-expressions/GET/responsebin0 -> 2648 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-formatter-dots/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-formatter-dots/GET/responsebin0 -> 1578 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-messages/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-messages/GET/responsebin0 -> 1679 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-tag_expressions/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-tag_expressions/GET/responsebin0 -> 1534 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-wire/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-wire/GET/responsebin1133 -> 1490 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber/GET/responsebin8723 -> 9533 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/culerity/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/culerity/GET/responsebin1646 -> 1857 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/curses/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/curses/GET/responsebin2166 -> 2960 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/daemons/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/daemons/GET/responsebin2369 -> 2819 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/database_cleaner/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/database_cleaner/GET/responsebin2825 -> 3223 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/declarative-option/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/declarative-option/GET/responsebin1183 -> 1394 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/declarative/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/declarative/GET/responsebin1449 -> 1766 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/descendants_tracker/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/descendants_tracker/GET/responsebin1266 -> 1542 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/diff-lcs/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/diff-lcs/GET/responsebin1552 -> 1765 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/docile/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/docile/GET/responsebin1690 -> 2093 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/domain_name/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/domain_name/GET/responsebin2706 -> 2973 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/dotenv-deployment/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/dotenv-deployment/GET/responsebin1322 -> 1533 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/dotenv/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/dotenv/GET/responsebin2171 -> 2677 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/echoe/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/echoe/GET/responsebin3497 -> 3771 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/em-hiredis/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/em-hiredis/GET/responsebin1475 -> 1686 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/english/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/english/GET/responsebin1473 -> 1748 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/equalizer/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/equalizer/GET/responsebin1624 -> 1837 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/erubi/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/erubi/GET/responsebin1457 -> 1828 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/erubis/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/erubis/GET/responsebin1909 -> 2185 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/escape_utils/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/escape_utils/GET/responsebin2132 -> 2343 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/et-orbi/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/et-orbi/GET/responsebin1347 -> 2141 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/event-bus/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/event-bus/GET/responsebin1280 -> 1555 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/eventmachine-le/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/eventmachine-le/GET/responsebin1550 -> 1826 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/eventmachine/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/eventmachine/GET/responsebin5984 -> 6704 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/execjs/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/execjs/GET/responsebin3128 -> 3403 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/extlib/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/extlib/GET/responsebin1731 -> 2006 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/facets/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/facets/GET/responsebin4020 -> 4244 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/facter/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/facter/GET/responsebin6040 -> 9040 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/faker/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/faker/GET/responsebin2506 -> 3205 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/faraday/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/faraday/GET/responsebin4140 -> 4760 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/fastthread/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/fastthread/GET/responsebin1678 -> 1954 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/faye-websocket/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/faye-websocket/GET/responsebin2954 -> 3165 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/fcgi/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/fcgi/GET/responsebin1394 -> 1669 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ffi-win32-extensions/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ffi-win32-extensions/GET/responsebin1247 -> 1523 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ffi/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ffi/GET/responsebin10317 -> 11708 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/flexmock/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/flexmock/GET/responsebin4115 -> 4433 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/fugit/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/fugit/GET/responsebin0 -> 2155 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/functional-ruby/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/functional-ruby/GET/responsebin1720 -> 1996 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gem_plugin/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gem_plugin/GET/responsebin1292 -> 1568 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gemcutter/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gemcutter/GET/responsebin2356 -> 2630 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gherkin/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gherkin/GET/responsebin24606 -> 25329 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gherkin3/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gherkin3/GET/responsebin1385 -> 1596 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/git/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/git/GET/responsebin1868 -> 2174 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/globalid/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/globalid/GET/responsebin1713 -> 2010 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/google-api-client/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/google-api-client/GET/responsebin4701 -> 8006 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/google-protobuf/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/google-protobuf/GET/responsebin0 -> 7618 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/googleauth/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/googleauth/GET/responsebin1604 -> 2377 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gxapi_rails/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gxapi_rails/GET/responsebin1461 -> 1685 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hashie/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hashie/GET/responsebin2836 -> 3237 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/highline/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/highline/GET/responsebin3414 -> 4055 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hike/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hike/GET/responsebin2159 -> 2382 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hiredis/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hiredis/GET/responsebin2409 -> 2751 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hitimes/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hitimes/GET/responsebin3196 -> 4106 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hoe/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hoe/GET/responsebin6300 -> 6753 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hooks/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hooks/GET/responsebin1870 -> 2081 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/http-accept/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/http-accept/GET/responsebin0 -> 1831 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/http-cookie/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/http-cookie/GET/responsebin1702 -> 2284 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/http_parser.rb/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/http_parser.rb/GET/responsebin1984 -> 2259 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/httpadapter/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/httpadapter/GET/responsebin1300 -> 1576 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/httpclient/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/httpclient/GET/responsebin3289 -> 3498 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hurley/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hurley/GET/responsebin1159 -> 1434 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/i18n/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/i18n/GET/responsebin2461 -> 3900 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ice_nine/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ice_nine/GET/responsebin1643 -> 1867 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/jar-dependencies/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/jar-dependencies/GET/responsebin0 -> 3227 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/jaro_winkler/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/jaro_winkler/GET/responsebin0 -> 2767 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/journey/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/journey/GET/responsebin1461 -> 1736 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/jruby-pageant/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/jruby-pageant/GET/responsebin1477 -> 1751 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/json/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/json/GET/responsebin5773 -> 6082 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/json_pure/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/json_pure/GET/responsebin3740 -> 4006 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/jwt/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/jwt/GET/responsebin1834 -> 2506 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/language/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/language/GET/responsebin1119 -> 1394 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/launchy/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/launchy/GET/responsebin2825 -> 3100 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/libwebsocket/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/libwebsocket/GET/responsebin1625 -> 1836 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/libxml-ruby/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/libxml-ruby/GET/responsebin5226 -> 5587 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/liquid/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/liquid/GET/responsebin2606 -> 2876 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/listen/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/listen/GET/responsebin5535 -> 5810 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/little-plugger/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/little-plugger/GET/responsebin1385 -> 1661 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/lockfile/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/lockfile/GET/responsebin1536 -> 1747 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/logging/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/logging/GET/responsebin3756 -> 3967 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/loofah/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/loofah/GET/responsebin2157 -> 2687 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/loquacious/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/loquacious/GET/responsebin2055 -> 2331 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mab/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mab/GET/responsebin1251 -> 1474 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mail/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mail/GET/responsebin4606 -> 5289 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/marcel/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/marcel/GET/responsebin0 -> 1552 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/markaby/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/markaby/GET/responsebin1626 -> 1984 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/maven-tools/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/maven-tools/GET/responsebin0 -> 3323 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/memcache-client/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/memcache-client/GET/responsebin2171 -> 2446 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/memoist/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/memoist/GET/responsebin1621 -> 1873 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/memoizable/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/memoizable/GET/responsebin1396 -> 1671 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/metaclass/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/metaclass/GET/responsebin1239 -> 1515 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/metaid/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/metaid/GET/responsebin1117 -> 1392 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/method_source/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/method_source/GET/responsebin2123 -> 2524 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mime-types-data/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mime-types-data/GET/responsebin1224 -> 1542 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mime-types/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mime-types/GET/responsebin2502 -> 2916 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mimemagic/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mimemagic/GET/responsebin1608 -> 1872 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mini_mime/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mini_mime/GET/responsebin0 -> 1633 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mini_portile/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mini_portile/GET/responsebin1860 -> 2135 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mini_portile2/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mini_portile2/GET/responsebin1319 -> 1717 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/minitar-cli/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/minitar-cli/GET/responsebin1270 -> 1565 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/minitar/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/minitar/GET/responsebin1254 -> 1609 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/minitest/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/minitest/GET/responsebin5382 -> 5979 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mkrf/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mkrf/GET/responsebin1354 -> 1629 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mocha/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mocha/GET/responsebin3771 -> 4322 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mongrel/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mongrel/GET/responsebin3434 -> 3645 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mono_logger/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mono_logger/GET/responsebin1252 -> 1475 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multi_json/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multi_json/GET/responsebin3387 -> 3796 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multi_test/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multi_test/GET/responsebin1315 -> 1590 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multimap/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multimap/GET/responsebin1171 -> 1394 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multipart-post/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multipart-post/GET/responsebin1600 -> 1812 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mustermann/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mustermann/GET/responsebin1524 -> 1951 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/needle/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/needle/GET/responsebin1395 -> 1669 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/nenv/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/nenv/GET/responsebin1372 -> 1595 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/net-scp/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/net-scp/GET/responsebin1517 -> 1847 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/net-ssh/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/net-ssh/GET/responsebin6107 -> 6844 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/netrc/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/netrc/GET/responsebin2064 -> 2276 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/newgem/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/newgem/GET/responsebin4664 -> 4884 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/nio4r/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/nio4r/GET/responsebin3204 -> 3768 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/nokogiri/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/nokogiri/GET/responsebin16546 -> 19159 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/os/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/os/GET/responsebin2022 -> 2297 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/paperclip/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/paperclip/GET/responsebin5136 -> 5610 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/parallel/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/parallel/GET/responsebin0 -> 4875 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/parser/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/parser/GET/responsebin4832 -> 5953 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/pattern-match/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/pattern-match/GET/responsebin1486 -> 1709 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/pkg-config/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/pkg-config/GET/responsebin1967 -> 2779 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/polyglot/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/polyglot/GET/responsebin1780 -> 2056 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/power_assert/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/power_assert/GET/responsebin1921 -> 2351 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/powerbar/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/powerbar/GET/responsebin1595 -> 2231 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/powerpack/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/powerpack/GET/responsebin1516 -> 1830 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/preforker/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/preforker/GET/responsebin1161 -> 1436 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/psych/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/psych/GET/responsebin0 -> 4931 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/public_suffix/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/public_suffix/GET/responsebin1992 -> 2753 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/raabro/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/raabro/GET/responsebin0 -> 1910 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/racc/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/racc/GET/responsebin1605 -> 1880 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-cache/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-cache/GET/responsebin2061 -> 2417 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-mount/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-mount/GET/responsebin3015 -> 3226 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-protection/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-protection/GET/responsebin1826 -> 2557 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-ssl/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-ssl/GET/responsebin1537 -> 1760 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-test/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-test/GET/responsebin1821 -> 2374 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack/GET/responsebin3633 -> 4683 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-deprecated_sanitizer/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-deprecated_sanitizer/GET/responsebin1320 -> 1544 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-dom-testing/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-dom-testing/GET/responsebin1706 -> 2014 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-html-sanitizer/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-html-sanitizer/GET/responsebin1308 -> 1585 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-observers/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-observers/GET/responsebin1297 -> 1605 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails/GET/responsebin21031 -> 24329 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/railties/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/railties/GET/responsebin13615 -> 15944 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rainbow/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rainbow/GET/responsebin1836 -> 2105 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rake-compiler/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rake-compiler/GET/responsebin2482 -> 2933 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rake/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rake/GET/responsebin4284 -> 4758 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-fchange/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-fchange/GET/responsebin1330 -> 1541 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-fsevent/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-fsevent/GET/responsebin2441 -> 2749 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-inotify/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-inotify/GET/responsebin2294 -> 2673 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-kqueue/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-kqueue/GET/responsebin1512 -> 1763 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rbnacl-libsodium/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rbnacl-libsodium/GET/responsebin1954 -> 2413 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rbnacl/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rbnacl/GET/responsebin1869 -> 2205 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rcov/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rcov/GET/responsebin2709 -> 2984 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rdoc/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rdoc/GET/responsebin3765 -> 4950 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/redis-namespace/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/redis-namespace/GET/responsebin2749 -> 3006 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/redis/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/redis/GET/responsebin3469 -> 3998 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ref/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ref/GET/responsebin1331 -> 1609 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/regexp_parser/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/regexp_parser/GET/responsebin0 -> 2710 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/representable/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/representable/GET/responsebin5461 -> 5684 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/resque-scheduler/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/resque-scheduler/GET/responsebin3413 -> 3687 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/resque/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/resque/GET/responsebin4325 -> 4608 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rest-client/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rest-client/GET/responsebin5867 -> 6295 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/retriable/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/retriable/GET/responsebin1988 -> 2337 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rexical/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rexical/GET/responsebin1320 -> 1594 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/right_aws/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/right_aws/GET/responsebin2220 -> 2443 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/right_http_connection/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/right_http_connection/GET/responsebin1463 -> 1688 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-core/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-core/GET/responsebin6529 -> 6990 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-expectations/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-expectations/GET/responsebin5082 -> 5899 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-logsplit/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-logsplit/GET/responsebin1145 -> 1420 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-mocks/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-mocks/GET/responsebin5744 -> 6160 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-support/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-support/GET/responsebin1803 -> 2554 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec/GET/responsebin9093 -> 9479 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubigen/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubigen/GET/responsebin2604 -> 2827 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubocop/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubocop/GET/responsebin5383 -> 6916 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-maven-libs/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-maven-libs/GET/responsebin0 -> 1515 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-maven/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-maven/GET/responsebin0 -> 3282 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-openid/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-openid/GET/responsebin2169 -> 2444 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-progressbar/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-progressbar/GET/responsebin2172 -> 2509 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-yadis/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-yadis/GET/responsebin1396 -> 1671 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby_dep/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby_dep/GET/responsebin1449 -> 1672 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby_parser/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby_parser/GET/responsebin3610 -> 3999 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubyforge/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubyforge/GET/responsebin2161 -> 2436 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubyzip/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubyzip/GET/responsebin2154 -> 2406 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rufus-scheduler/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rufus-scheduler/GET/responsebin4127 -> 4547 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sass-listen/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sass-listen/GET/responsebin1210 -> 1492 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sass-rails/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sass-rails/GET/responsebin3197 -> 3516 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sass/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sass/GET/responsebin14818 -> 15702 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/selenium-webdriver/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/selenium-webdriver/GET/responsebin8060 -> 9180 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sexp_processor/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sexp_processor/GET/responsebin2676 -> 3082 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/shotgun/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/shotgun/GET/responsebin1262 -> 1844 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/signet/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/signet/GET/responsebin2507 -> 3123 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/simplecov-html/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/simplecov-html/GET/responsebin1939 -> 2244 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/simplecov/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/simplecov/GET/responsebin2867 -> 3261 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sinatra/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sinatra/GET/responsebin4641 -> 5349 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/slop/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/slop/GET/responsebin3976 -> 4503 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/spicycode-rcov/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/spicycode-rcov/GET/responsebin1380 -> 1655 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/spoon/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/spoon/GET/responsebin984 -> 1565 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sprockets-rails/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sprockets-rails/GET/responsebin2411 -> 3038 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sprockets/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sprockets/GET/responsebin5490 -> 5985 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/spruz/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/spruz/GET/responsebin1758 -> 2033 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sqlite3/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sqlite3/GET/responsebin3024 -> 3649 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/syntax/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/syntax/GET/responsebin1320 -> 1631 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sys-admin/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sys-admin/GET/responsebin2482 -> 2884 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tenderlove-frex/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tenderlove-frex/GET/responsebin1127 -> 1402 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/term-ansicolor/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/term-ansicolor/GET/responsebin2152 -> 2449 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/termios/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/termios/GET/responsebin1120 -> 1394 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/terrapin/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/terrapin/GET/responsebin0 -> 1484 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/test-spec/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/test-spec/GET/responsebin1314 -> 1589 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/test-unit/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/test-unit/GET/responsebin3248 -> 4128 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/text-format/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/text-format/GET/responsebin1203 -> 1414 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/text-hyphen/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/text-hyphen/GET/responsebin1367 -> 1590 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thin/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thin/GET/responsebin4119 -> 4481 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thor/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thor/GET/responsebin2902 -> 3352 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thoughtbot-shoulda/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thoughtbot-shoulda/GET/responsebin1730 -> 1953 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thread_safe/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thread_safe/GET/responsebin1797 -> 2379 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tilt/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tilt/GET/responsebin2483 -> 2842 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/timers/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/timers/GET/responsebin1959 -> 2304 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tins/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tins/GET/responsebin4223 -> 5030 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tlsmail/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tlsmail/GET/responsebin1118 -> 1393 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tool/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tool/GET/responsebin1384 -> 1608 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/treetop/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/treetop/GET/responsebin2820 -> 3123 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/trollop/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/trollop/GET/responsebin2282 -> 2641 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tzinfo/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tzinfo/GET/responsebin4085 -> 4598 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/uber/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/uber/GET/responsebin1784 -> 1996 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/unf/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/unf/GET/responsebin1799 -> 2023 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/unf_ext/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/unf_ext/GET/responsebin1944 -> 2301 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/unicode-display_width/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/unicode-display_width/GET/responsebin1885 -> 2348 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/uuidtools/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/uuidtools/GET/responsebin2003 -> 2214 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/vegas/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/vegas/GET/responsebin1922 -> 2147 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/virtus/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/virtus/GET/responsebin2839 -> 3063 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/weakling/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/weakling/GET/responsebin1309 -> 1520 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/websocket-driver/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/websocket-driver/GET/responsebin2733 -> 3403 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/websocket-extensions/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/websocket-extensions/GET/responsebin1267 -> 1516 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/websocket/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/websocket/GET/responsebin1863 -> 2214 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32-api/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32-api/GET/responsebin3049 -> 3810 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32-dir/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32-dir/GET/responsebin1924 -> 2199 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32-security/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32-security/GET/responsebin1918 -> 2193 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32console/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32console/GET/responsebin2032 -> 2307 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/windows-api/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/windows-api/GET/responsebin1752 -> 1963 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/windows-pr/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/windows-pr/GET/responsebin3434 -> 4015 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/xpath/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/xpath/GET/responsebin1537 -> 1946 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/versions/GET/request2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/versions/GET/responsebin4840181 -> 10367473 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/activesupport-3.2.12.gem/GET/responsebin288578 -> 288492 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/activesupport-3.2.22.5.gem/GET/responsebin290666 -> 290578 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/bundler-1.12.3.gem/GET/responsebin280901 -> 0 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/concurrent-ruby-1.1.4.gem/GET/request (renamed from spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/gems/bundler-1.12.3.gem/GET/request)4
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/concurrent-ruby-1.1.4.gem/GET/responsebin0 -> 354578 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/diff-lcs-1.3.gem/GET/responsebin46952 -> 46864 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/faker-1.1.2.gem/GET/responsebin97089 -> 97002 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/i18n-0.6.11.gem/GET/responsebin62275 -> 62185 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/i18n-0.8.1.gem/GET/responsebin60267 -> 0 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/i18n-0.9.5.gem/GET/request (renamed from spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/i18n-0.8.1.gem/GET/request)2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/i18n-0.9.5.gem/GET/responsebin0 -> 62737 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/mono_logger-1.1.0.gem/GET/responsebin11073 -> 10986 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/multi_json-1.12.1.gem/GET/responsebin26949 -> 0 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/multi_json-1.13.1.gem/GET/request (renamed from spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/multi_json-1.12.1.gem/GET/request)2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/multi_json-1.13.1.gem/GET/responsebin0 -> 26385 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/mustermann-1.0.3.gem/GET/request (renamed from spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/bundler-1.12.3.gem/GET/request)2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/mustermann-1.0.3.gem/GET/responsebin0 -> 52496 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-1.0.1.gem/GET/responsebin135492 -> 135404 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-1.6.5.gem/GET/responsebin230247 -> 0 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-2.0.1.gem/GET/responsebin254790 -> 0 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-2.0.6.gem/GET/request (renamed from spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/specs.4.8.gz/GET/request)4
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-2.0.6.gem/GET/responsebin0 -> 256274 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-protection-1.5.3.gem/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-protection-1.5.3.gem/GET/responsebin19265 -> 0 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-protection-2.0.5.gem/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-protection-2.0.5.gem/GET/responsebin0 -> 17680 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/redis-3.3.3.gem/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/redis-3.3.3.gem/GET/responsebin93544 -> 0 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/redis-4.1.0.gem/GET/request (renamed from spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-2.0.1.gem/GET/request)2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/redis-4.1.0.gem/GET/responsebin0 -> 56593 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/redis-namespace-1.5.3.gem/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/redis-namespace-1.5.3.gem/GET/responsebin17766 -> 0 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/redis-namespace-1.6.0.gem/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/redis-namespace-1.6.0.gem/GET/responsebin0 -> 17681 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/resque-1.24.1.gem/GET/responsebin91457 -> 91371 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/resque-scheduler-2.2.0.gem/GET/responsebin37697 -> 37610 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rufus-scheduler-2.0.24.gem/GET/responsebin38721 -> 38634 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/sinatra-1.4.8.gem/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/sinatra-1.4.8.gem/GET/responsebin370024 -> 0 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/sinatra-2.0.5.gem/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/sinatra-2.0.5.gem/GET/responsebin0 -> 365329 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/thread_safe-0.3.6.gem/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/thread_safe-0.3.6.gem/GET/responsebin121705 -> 0 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/tilt-2.0.7.gem/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/tilt-2.0.7.gem/GET/responsebin55142 -> 0 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/tilt-2.0.9.gem/GET/request (renamed from spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-1.6.5.gem/GET/request)2
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/tilt-2.0.9.gem/GET/responsebin0 -> 56080 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/tzinfo-1.2.3.gem/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/tzinfo-1.2.3.gem/GET/responsebin152423 -> 0 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/tzinfo-2.0.0.gem/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/tzinfo-2.0.0.gem/GET/responsebin0 -> 70929 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/vegas-0.1.11.gem/GET/responsebin13633 -> 13546 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/quick/Marshal.4.8/bundler-1.12.3.gemspec.rz/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/quick/Marshal.4.8/bundler-1.12.3.gemspec.rz/GET/responsebin1425 -> 0 bytes
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/specs.4.8.gz/GET/request7
-rw-r--r--spec/support/artifice/vcr_cassettes/realworld/rubygems.org/specs.4.8.gz/GET/responsebin3248225 -> 0 bytes
-rw-r--r--spec/support/builders.rb4
-rw-r--r--spec/support/code_climate.rb26
-rw-r--r--spec/support/command_execution.rb8
-rw-r--r--spec/support/helpers.rb68
-rw-r--r--spec/support/less_than_proc.rb20
-rw-r--r--spec/support/matchers.rb58
-rw-r--r--spec/support/path.rb4
-rw-r--r--spec/support/platforms.rb7
-rw-r--r--spec/support/requirement_checker.rb11
-rw-r--r--spec/support/rubygems_ext.rb29
-rw-r--r--spec/update/gemfile_spec.rb25
-rw-r--r--spec/update/gems/post_install_spec.rb6
-rw-r--r--spec/update/git_spec.rb28
-rw-r--r--spec/update/redownload_spec.rb18
-rw-r--r--task/build_metadata.rake4
-rw-r--r--task/release.rake26
970 files changed, 5421 insertions, 6159 deletions
diff --git a/.azure-pipelines/rbreadline.diff b/.azure-pipelines/rbreadline.diff
new file mode 100644
index 0000000000..c139577610
--- /dev/null
+++ b/.azure-pipelines/rbreadline.diff
@@ -0,0 +1,41 @@
+diff --git a/rbreadline.rb b/rbreadline.rb
+index c710961..e35408c 100644
+--- a/rbreadline.rb
++++ b/rbreadline.rb
+@@ -16,6 +16,7 @@ end
+
+ module RbReadline
+ require 'etc'
++ require 'io/console'
+
+ RL_LIBRARY_VERSION = "5.2"
+ RL_READLINE_VERSION = 0x0502
+@@ -1092,6 +1093,9 @@ module RbReadline
+ @current_readline_init_include_level = 0
+ @current_readline_init_lineno = 0
+
++ # Used in windows
++ @is_pipe = false
++
+ ENV["HOME"] ||= "#{ENV["HOMEDRIVE"]}#{ENV["HOMEPATH"]}"
+ if !File.directory? ENV["HOME"]
+ raise RuntimeError.new("HOME environment variable (or HOMEDRIVE and HOMEPATH) must be set and point to a directory")
+@@ -4490,6 +4494,10 @@ module RbReadline
+ end
+
+ def rl_getc(stream)
++ # below added as test for whether we're connected to a pipe or a keyboard.
++ # Pipe connection is probably running under a test suite.
++ return (stream.getc || EOF rescue EOF) if @is_pipe
++
+ while (@kbhit.Call == 0)
+ # If there is no input, yield the processor for other threads
+ sleep(@_keyboard_input_timeout)
+@@ -4740,6 +4748,7 @@ module RbReadline
+ def readline_internal_charloop()
+ lastc = -1
+ eof_found = false
++ @is_pipe = (!@rl_outstream.winsize rescue true)
+
+ while (!@rl_done)
+ lk = @_rl_last_command_was_kill
diff --git a/.azure-pipelines/steps.yml b/.azure-pipelines/steps.yml
new file mode 100644
index 0000000000..b37a79f328
--- /dev/null
+++ b/.azure-pipelines/steps.yml
@@ -0,0 +1,39 @@
+steps:
+
+- task: UseRubyVersion@0
+ inputs:
+ versionSpec: '= 2.4'
+
+- script: |
+ ruby -v
+ ridk version
+ displayName: 'ruby -v + ridk version'
+
+- script: |
+ mkdir tmp
+ cd tmp
+ mkdir home
+ displayName: 'work around readline crash (for https://github.com/bundler/bundler/issues/6902)'
+
+- script: |
+ git apply --ignore-space-change --ignore-whitespace .azure-pipelines\rbreadline.diff --directory=C:/hostedtoolcache/windows/Ruby/2.4.3/x64/lib/ruby/site_ruby --unsafe-paths
+ displayName: 'patch local readline implementation (for https://github.com/bundler/bundler/issues/6907)'
+
+- script: |
+ ruby bin/rake spec:deps
+ displayName: 'ruby bin/rake spec:deps'
+
+- script: |
+ gem install --no-document --conservative rspec_junit_formatter
+ displayName: 'gem install rspec_junit_formatter'
+
+- script: |
+ timeout 50m bash -c 'ruby -r rspec_junit_formatter bin/rspec --format progress --format RspecJunitFormatter -o rspec/bundler-junit-results.xml' || exit 0
+ displayName: 'ruby bin/rspec'
+
+- task: PublishTestResults@2
+ inputs:
+ testRunner: JUnit
+ testResultsFiles: rspec/bundler-junit-results.xml
+ displayName: Publish test results
+ condition: succeededOrFailed()
diff --git a/.rubocop.yml b/.rubocop.yml
index a6412ecb13..586ec9e319 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -1,140 +1,813 @@
-inherit_from:
- - .rubocop_todo.yml
-
AllCops:
- TargetRubyVersion: 1.9
+ DisabledByDefault: true
+ TargetRubyVersion: 2.3
Exclude:
- tmp/**/*
- lib/bundler/vendor/**/*
DisplayCopNames: true
+ CacheRootDirectory: tmp/rubocop
+ MaxFilesInCache: 5000
+
+# Bundler
+
+Bundler/DuplicatedGem:
+ Enabled: true
+
+Bundler/InsecureProtocolSource:
+ Enabled: true
+
+Bundler/OrderedGems:
+ Enabled: true
+
+# Gemspec
+
+Gemspec/OrderedDependencies:
+ Enabled: true
+
+Gemspec/RequiredRubyVersion:
+ Enabled: true
# Lint
-# They are idiomatic
-Lint/AssignmentInCondition:
- Enabled: false
+Lint/AmbiguousOperator:
+ Enabled: true
-Lint/EndAlignment:
- EnforcedStyleAlignWith: variable
- AutoCorrect: true
+Lint/AmbiguousRegexpLiteral:
+ Enabled: true
+
+Lint/BigDecimalNew:
+ Enabled: true
+
+Lint/BooleanSymbol:
+ Enabled: true
+
+Lint/Debugger:
+ Enabled: true
+
+Lint/DeprecatedClassMethods:
+ Enabled: true
+
+Lint/DuplicateCaseCondition:
+ Enabled: true
+
+Lint/DuplicateMethods:
+ Enabled: true
+
+Lint/DuplicatedKey:
+ Enabled: true
+
+Lint/EachWithObjectArgument:
+ Enabled: true
+
+Lint/ElseLayout:
+ Enabled: true
+
+Lint/EmptyEnsure:
+ Enabled: true
+
+Lint/EmptyExpression:
+ Enabled: true
+
+Lint/EmptyInterpolation:
+ Enabled: true
+
+Lint/EndInMethod:
+ Enabled: true
+
+Lint/EnsureReturn:
+ Enabled: true
+
+Lint/ErbNewArguments:
+ Enabled: true
+
+Lint/FlipFlop:
+ Enabled: true
+
+Lint/FloatOutOfRange:
+ Enabled: true
+
+Lint/FormatParameterMismatch:
+ Enabled: true
+
+Lint/ImplicitStringConcatenation:
+ Enabled: true
+
+Lint/InheritException:
+ Enabled: true
+
+Lint/LiteralAsCondition:
+ Enabled: true
+
+Lint/LiteralInInterpolation:
+ Enabled: true
-Lint/UnusedMethodArgument:
- Enabled: false
+Lint/Loop:
+ Enabled: true
+
+Lint/MultipleCompare:
+ Enabled: true
+
+Lint/NestedPercentLiteral:
+ Enabled: true
+
+Lint/NextWithoutAccumulator:
+ Enabled: true
+
+Lint/NonLocalExitFromIterator:
+ Enabled: true
+
+Lint/OrderedMagicComments:
+ Enabled: true
+
+Lint/ParenthesesAsGroupedExpression:
+ Enabled: true
+
+Lint/PercentStringArray:
+ Enabled: true
+
+Lint/PercentSymbolArray:
+ Enabled: true
+
+Lint/RandOne:
+ Enabled: true
+
+Lint/RedundantWithIndex:
+ Enabled: true
+
+Lint/RedundantWithObject:
+ Enabled: true
+
+Lint/RegexpAsCondition:
+ Enabled: true
+
+Lint/RequireParentheses:
+ Enabled: true
+
+Lint/RescueException:
+ Enabled: true
+
+Lint/RescueType:
+ Enabled: true
+
+Lint/ReturnInVoidContext:
+ Enabled: true
+
+Lint/SafeNavigationChain:
+ Enabled: true
+
+Lint/SafeNavigationConsistency:
+ Enabled: true
Lint/ScriptPermission:
+ Enabled: true
Exclude:
- 'lib/bundler/templates/Executable'
+Lint/ShadowedArgument:
+ Enabled: true
+
+Lint/ShadowingOuterLocalVariable:
+ Enabled: true
+
+Lint/StringConversionInInterpolation:
+ Enabled: true
+
+Lint/Syntax:
+ Enabled: true
+
+Lint/UnderscorePrefixedVariableName:
+ Enabled: true
+
+Lint/UnifiedInteger:
+ Enabled: true
+
+Lint/UnneededCopDisableDirective:
+ Enabled: true
+
+Lint/UnneededCopEnableDirective:
+ Enabled: true
+
+Lint/UnneededSplatExpansion:
+ Enabled: true
+
+Lint/UnreachableCode:
+ Enabled: true
+
+Lint/UnusedBlockArgument:
+ Enabled: true
+
+Lint/UriEscapeUnescape:
+ Enabled: true
+
+Lint/UriRegexp:
+ Enabled: true
+
+Lint/UselessComparison:
+ Enabled: true
+
+Lint/UselessElseWithoutRescue:
+ Enabled: true
+
+Lint/UselessSetterCall:
+ Enabled: true
+
+Lint/Void:
+ Enabled: true
+
# Layout
Layout/AccessModifierIndentation:
+ Enabled: true
EnforcedStyle: outdent
+ Exclude:
+ - 'lib/bundler/cli.rb'
+ - 'lib/bundler/definition.rb'
+ - 'lib/bundler/feature_flag.rb'
+ - 'lib/bundler/gem_helpers.rb'
+ - 'lib/bundler/index.rb'
+ - 'lib/bundler/remote_specification.rb'
+ - 'lib/bundler/shared_helpers.rb'
+ - 'lib/bundler/source/path.rb'
+ - 'spec/realworld/gemfile_source_header_spec.rb'
+
+Layout/AlignArray:
+ Enabled: true
Layout/AlignParameters:
+ Enabled: true
EnforcedStyle: with_fixed_indentation
+Layout/BlockAlignment:
+ Enabled: true
+
+Layout/CaseIndentation:
+ Enabled: true
+
+Layout/ClosingParenthesisIndentation:
+ Enabled: true
+
+Layout/CommentIndentation:
+ Enabled: true
+
+Layout/ConditionPosition:
+ Enabled: true
+
+Layout/DefEndAlignment:
+ Enabled: true
+
+Layout/DotPosition:
+ Enabled: true
+ EnforcedStyle: trailing
+
+Layout/ElseAlignment:
+ Enabled: true
+
+Layout/EmptyComment:
+ Enabled: true
+
+Layout/EmptyLineAfterMagicComment:
+ Enabled: true
+
+Layout/EmptyLineBetweenDefs:
+ Enabled: true
+
+Layout/EmptyLines:
+ Enabled: true
+
+Layout/EmptyLinesAroundAccessModifier:
+ Enabled: true
+
+Layout/EmptyLinesAroundArguments:
+ Enabled: true
+
+Layout/EmptyLinesAroundBeginBody:
+ Enabled: true
+
+Layout/EmptyLinesAroundBlockBody:
+ Enabled: true
+
+Layout/EmptyLinesAroundClassBody:
+ Enabled: true
+
+Layout/EmptyLinesAroundExceptionHandlingKeywords:
+ Enabled: true
+
+Layout/EmptyLinesAroundMethodBody:
+ Enabled: true
+
+Layout/EmptyLinesAroundModuleBody:
+ Enabled: true
+
+Layout/EndAlignment:
+ Enabled: true
+ EnforcedStyleAlignWith: variable
+ AutoCorrect: true
+
+Layout/EndOfLine:
+ Enabled: true
+
+Layout/ExtraSpacing:
+ Enabled: true
+
+Layout/FirstParameterIndentation:
+ Enabled: true
+
+Layout/IndentArray:
+ Enabled: true
+ EnforcedStyle: consistent
+
+Layout/IndentAssignment:
+ Enabled: true
+
+Layout/IndentHash:
+ Enabled: true
+ EnforcedStyle: special_inside_parentheses
+
+Layout/IndentationConsistency:
+ Enabled: true
+
+Layout/IndentationWidth:
+ Enabled: true
+
+Layout/InitialIndentation:
+ Enabled: true
+
+Layout/LeadingBlankLines:
+ Enabled: true
+
+Layout/LeadingCommentSpace:
+ Enabled: true
+
+Layout/MultilineArrayBraceLayout:
+ Enabled: true
+
+Layout/MultilineBlockLayout:
+ Enabled: true
+
+Layout/MultilineHashBraceLayout:
+ Enabled: true
+
+Layout/MultilineMethodCallBraceLayout:
+ Enabled: true
+
+Layout/MultilineMethodDefinitionBraceLayout:
+ Enabled: true
+
Layout/MultilineOperationIndentation:
+ Enabled: true
EnforcedStyle: indented
+Layout/SpaceBeforeComma:
+ Enabled: true
+
+Layout/SpaceBeforeComment:
+ Enabled: true
+
+Layout/SpaceBeforeFirstArg:
+ Enabled: true
+
+Layout/SpaceBeforeSemicolon:
+ Enabled: true
+
+Layout/SpaceInLambdaLiteral:
+ Enabled: true
+
+Layout/SpaceInsideArrayLiteralBrackets:
+ Enabled: true
+
+Layout/SpaceInsideArrayPercentLiteral:
+ Enabled: true
+
Layout/SpaceInsideBlockBraces:
+ Enabled: true
SpaceBeforeBlockParameters: false
-Layout/DotPosition:
- EnforcedStyle: trailing
+Layout/SpaceInsideHashLiteralBraces:
+ Enabled: true
+
+Layout/SpaceInsideParens:
+ Enabled: true
+
+Layout/SpaceInsidePercentLiteralDelimiters:
+ Enabled: true
+
+Layout/SpaceInsideRangeLiteral:
+ Enabled: true
+
+Layout/SpaceInsideReferenceBrackets:
+ Enabled: true
+
+Layout/SpaceInsideStringInterpolation:
+ Enabled: true
+
+Layout/Tab:
+ Enabled: true
+
+Layout/TrailingBlankLines:
+ Enabled: true
+
+Layout/TrailingWhitespace:
+ Enabled: true
+
+# Naming
+
+Naming/AsciiIdentifiers:
+ Enabled: true
+
+Naming/BinaryOperatorParameterName:
+ Enabled: true
+
+Naming/ClassAndModuleCamelCase:
+ Enabled: true
+
+Naming/ConstantName:
+ Enabled: true
+
+Naming/FileName:
+ Enabled: true
+
+Naming/HeredocDelimiterCase:
+ Enabled: true
+
+Naming/MethodName:
+ Enabled: true
+
+Naming/UncommunicativeBlockParamName:
+ Enabled: true
+
+Naming/VariableName:
+ Enabled: true
+
+Naming/VariableNumber:
+ Enabled: true
+
+# Performance
+
+Performance/Casecmp:
+ Enabled: true
+
+Performance/CompareWithBlock:
+ Enabled: true
+
+Performance/Count:
+ Enabled: true
+
+Performance/Detect:
+ Enabled: true
+
+Performance/DoubleStartEndWith:
+ Enabled: true
+
+Performance/EndWith:
+ Enabled: true
+
+Performance/FixedSize:
+ Enabled: true
+
+Performance/LstripRstrip:
+ Enabled: true
+
+Performance/RedundantSortBy:
+ Enabled: true
+
+Performance/RegexpMatch:
+ Enabled: true
+
+Performance/ReverseEach:
+ Enabled: true
+
+Performance/Sample:
+ Enabled: true
+
+Performance/Size:
+ Enabled: true
+
+Performance/StartWith:
+ Enabled: true
+
+Performance/StringReplacement:
+ Enabled: true
+
+Performance/TimesMap:
+ Enabled: true
+
+Performance/UriDefaultParser:
+ Enabled: true
+
+# Security
+
+Security/JSONLoad:
+ Enabled: true
# Style
Style/Alias:
+ Enabled: true
EnforcedStyle: prefer_alias_method
-Style/FrozenStringLiteralComment:
+Style/AndOr:
+ Enabled: true
EnforcedStyle: always
-Style/MultilineBlockChain:
- Enabled: false
+Style/ArrayJoin:
+ Enabled: true
-Style/PerlBackrefs:
- Enabled: false
+Style/AsciiComments:
+ Enabled: true
-Style/SingleLineBlockParams:
- Enabled: false
+Style/Attr:
+ Enabled: true
-Style/TrivialAccessors:
- Enabled: false
+Style/BarePercentLiterals:
+ Enabled: true
-# We adopted raise instead of fail.
-Style/SignalException:
- EnforcedStyle: only_raise
+Style/BeginBlock:
+ Enabled: true
-Style/StringLiterals:
- EnforcedStyle: double_quotes
+Style/BlockComments:
+ Enabled: true
-Style/StringLiteralsInInterpolation:
- EnforcedStyle: double_quotes
+Style/BlockDelimiters:
+ Enabled: true
-# Having these make it easier to *not* forget to add one when adding a new
-# value and you can simply copy the previous line.
-Style/TrailingCommaInLiteral:
- EnforcedStyleForMultiline: comma
+Style/BracesAroundHashParameters:
+ Enabled: true
-Style/TrailingUnderscoreVariable:
- Enabled: false
+Style/CharacterLiteral:
+ Enabled: true
-# `String.new` is preferred style with enabled frozen string literal
-Style/EmptyLiteral:
- Enabled: false
+Style/ClassCheck:
+ Enabled: true
-# 1.8.7 support
+Style/ClassMethods:
+ Enabled: true
+
+Style/ClassVars:
+ Enabled: true
+
+Style/ColonMethodCall:
+ Enabled: true
+
+Style/ColonMethodDefinition:
+ Enabled: true
+
+Style/CommandLiteral:
+ Enabled: true
+
+Style/CommentAnnotation:
+ Enabled: true
+
+Style/DefWithParentheses:
+ Enabled: true
+
+Style/Dir:
+ Enabled: true
+
+Style/DoubleNegation:
+ Enabled: true
+
+Style/EachForSimpleLoop:
+ Enabled: true
+
+Style/EmptyBlockParameter:
+ Enabled: true
+
+Style/EmptyCaseCondition:
+ Enabled: true
+
+Style/EmptyElse:
+ Enabled: true
+
+Style/EmptyLambdaParameter:
+ Enabled: true
+
+Style/Encoding:
+ Enabled: true
+
+Style/EndBlock:
+ Enabled: true
+
+Style/EvenOdd:
+ Enabled: true
+
+Style/For:
+ Enabled: true
+
+Style/FormatString:
+ Enabled: true
+
+Style/FrozenStringLiteralComment:
+ Enabled: true
+ EnforcedStyle: always
+# 1.8.7 support
Style/HashSyntax:
+ Enabled: true
EnforcedStyle: hash_rockets
-Style/Lambda:
- Enabled: false
+Style/IdenticalConditionalBranches:
+ Enabled: true
+
+Style/IfInsideElse:
+ Enabled: true
+
+Style/IfUnlessModifierOfIfUnless:
+ Enabled: true
+
+Style/IfWithSemicolon:
+ Enabled: true
+
+Style/InfiniteLoop:
+ Enabled: true
+
+Style/LambdaCall:
+ Enabled: true
+
+Style/LineEndConcatenation:
+ Enabled: true
+
+Style/MethodCallWithoutArgsParentheses:
+ Enabled: true
+
+Style/MethodDefParentheses:
+ Enabled: true
+
+Style/MinMax:
+ Enabled: true
+
+Style/MixinGrouping:
+ Enabled: true
+
+Style/MultilineIfThen:
+ Enabled: true
+
+Style/MultilineMemoization:
+ Enabled: true
+
+Style/MultilineTernaryOperator:
+ Enabled: true
+
+Style/MultipleComparison:
+ Enabled: true
+
+Style/MutableConstant:
+ Enabled: true
+
+Style/NegatedIf:
+ Enabled: true
+
+Style/NegatedWhile:
+ Enabled: true
+
+Style/NestedModifier:
+ Enabled: true
+
+Style/NestedParenthesizedCalls:
+ Enabled: true
+
+Style/NestedTernaryOperator:
+ Enabled: true
+
+Style/Next:
+ Enabled: true
+
+Style/NilComparison:
+ Enabled: true
+
+Style/NonNilCheck:
+ Enabled: true
+
+Style/Not:
+ Enabled: true
+
+Style/NumericLiteralPrefix:
+ Enabled: true
+
+Style/NumericLiterals:
+ Enabled: true
+
+Style/OneLineConditional:
+ Enabled: true
+
+Style/OptionalArguments:
+ Enabled: true
+
+Style/OrAssignment:
+ Enabled: true
+
+Style/ParallelAssignment:
+ Enabled: true
-Style/EachWithObject:
- Enabled: false
+Style/ParenthesesAroundCondition:
+ Enabled: true
-Style/SpecialGlobalVars:
- Enabled: false
+Style/PercentLiteralDelimiters:
+ Enabled: true
-Style/TrailingCommaInArguments:
- Enabled: false
+Style/PercentQLiterals:
+ Enabled: true
-Performance/FlatMap:
- Enabled: false
+Style/PreferredHashMethods:
+ Enabled: true
-Security/YAMLLoad:
- Enabled: false
+Style/Proc:
+ Enabled: true
-# Metrics
+Style/RandomWithOffset:
+ Enabled: true
-# We've chosen to use Rubocop only for style, and not for complexity or quality checks.
-Metrics/ClassLength:
- Enabled: false
+Style/RedundantBegin:
+ Enabled: true
-Metrics/ModuleLength:
- Enabled: false
+Style/RedundantConditional:
+ Enabled: true
-Metrics/MethodLength:
- Enabled: false
+Style/RedundantException:
+ Enabled: true
-Metrics/BlockNesting:
- Enabled: false
+Style/RedundantParentheses:
+ Enabled: true
-Metrics/AbcSize:
- Enabled: false
+Style/RedundantSelf:
+ Enabled: true
-Metrics/CyclomaticComplexity:
- Enabled: false
+Style/RegexpLiteral:
+ Enabled: true
+
+Style/RescueModifier:
+ Enabled: true
+
+Style/RescueStandardError:
+ Enabled: true
+
+Style/SelfAssignment:
+ Enabled: true
+
+Style/Semicolon:
+ Enabled: true
+
+# We adopted raise instead of fail.
+Style/SignalException:
+ Enabled: true
+ EnforcedStyle: only_raise
+
+Style/SingleLineMethods:
+ Enabled: true
+
+Style/StabbyLambdaParentheses:
+ Enabled: true
+
+Style/StderrPuts:
+ Enabled: true
+
+Style/StringLiterals:
+ Enabled: true
+ EnforcedStyle: double_quotes
+
+Style/StringLiteralsInInterpolation:
+ Enabled: true
+ EnforcedStyle: double_quotes
+
+Style/StructInheritance:
+ Enabled: true
+
+Style/SymbolArray:
+ Enabled: true
+ EnforcedStyle: brackets
+
+Style/SymbolLiteral:
+ Enabled: true
+
+Style/SymbolProc:
+ Enabled: true
+
+Style/TernaryParentheses:
+ Enabled: true
+
+Style/TrailingBodyOnClass:
+ Enabled: true
+
+Style/TrailingBodyOnMethodDefinition:
+ Enabled: true
+
+Style/TrailingBodyOnModule:
+ Enabled: true
+
+# Having these make it easier to *not* forget to add one when adding a new
+# value and you can simply copy the previous line.
+Style/TrailingCommaInArrayLiteral:
+ Enabled: true
+ EnforcedStyleForMultiline: comma
+
+Style/TrailingCommaInHashLiteral:
+ Enabled: true
+ EnforcedStyleForMultiline: comma
-Metrics/ParameterLists:
- Enabled: false
+Style/TrailingMethodEndStatement:
+ Enabled: true
-Metrics/BlockLength:
- Enabled: false
+Style/UnlessElse:
+ Enabled: true
-# It will be obvious which code is complex, Rubocop should only lint simple
-# rules for us.
-Metrics/PerceivedComplexity:
- Enabled: false
+Style/YodaCondition:
+ Enabled: true
diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml
deleted file mode 100644
index e8c49c05c4..0000000000
--- a/.rubocop_todo.yml
+++ /dev/null
@@ -1,385 +0,0 @@
-# This configuration was generated by
-# `rubocop --auto-gen-config`
-# on 2017-09-17 16:46:43 +0900 using RuboCop version 0.50.0.
-# The point is for the user to remove these configuration records
-# one by one as the offenses are removed from the code base.
-# Note that changes in the inspected code, or installation of new
-# versions of RuboCop, may require this file to be generated again.
-
-# Offense count: 10
-# Cop supports --auto-correct.
-# Configuration parameters: SupportedStyles, IndentationWidth.
-# SupportedStyles: special_inside_parentheses, consistent, align_brackets
-Layout/IndentArray:
- EnforcedStyle: consistent
-
-# Offense count: 40
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, SupportedStyles.
-# SupportedStyles: auto_detection, squiggly, active_support, powerpack, unindent
-Layout/IndentHeredoc:
- Enabled: false
-
-# Offense count: 3
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
-# SupportedStyles: aligned, indented, indented_relative_to_receiver
-Layout/MultilineMethodCallIndentation:
- Exclude:
- - 'lib/bundler/cli/common.rb'
- - 'spec/bundler/plugin/source_list_spec.rb'
-
-# Offense count: 31
-Lint/AmbiguousBlockAssociation:
- Exclude:
- - 'lib/bundler/definition.rb'
- - 'lib/bundler/resolver.rb'
- - 'spec/bundler/compact_index_client/updater_spec.rb'
- - 'spec/commands/init_spec.rb'
- - 'spec/commands/install_spec.rb'
- - 'spec/install/gems/flex_spec.rb'
- - 'spec/lock/lockfile_bundler_1_spec.rb'
- - 'spec/lock/lockfile_spec.rb'
- - 'spec/other/major_deprecation_spec.rb'
- - 'spec/runtime/setup_spec.rb'
- - 'spec/support/helpers.rb'
- - 'spec/support/indexes.rb'
-
-# Offense count: 2
-Lint/EmptyWhen:
- Exclude:
- - 'lib/bundler/friendly_errors.rb'
- - 'spec/support/builders.rb'
-
-# Offense count: 3
-Lint/HandleExceptions:
- Exclude:
- - 'lib/bundler/psyched_yaml.rb'
- - 'lib/bundler/vendored_persistent.rb'
-
-# Offense count: 1
-Lint/IneffectiveAccessModifier:
- Exclude:
- - 'lib/bundler/settings.rb'
-
-# Offense count: 6
-Lint/InterpolationCheck:
- Exclude:
- - 'lib/bundler/dsl.rb'
- - 'lib/bundler/installer/standalone.rb'
- - 'spec/commands/binstubs_spec.rb'
- - 'spec/install/gems/standalone_spec.rb'
- - 'spec/other/major_deprecation_spec.rb'
-
-# Offense count: 3
-Lint/NestedMethodDefinition:
- Exclude:
- - 'lib/bundler/inline.rb'
- - 'spec/support/builders.rb'
-
-# Offense count: 5
-Lint/RescueException:
- Exclude:
- - 'lib/bundler/cli.rb'
- - 'lib/bundler/dsl.rb'
- - 'lib/bundler/friendly_errors.rb'
- - 'lib/bundler/rubygems_integration.rb'
- - 'lib/bundler/worker.rb'
-
-# Offense count: 29
-Lint/RescueWithoutErrorClass:
- Enabled: false
-
-# Offense count: 2
-Lint/ShadowedException:
- Exclude:
- - 'lib/bundler.rb'
- - 'lib/bundler/rubygems_integration.rb'
-
-# Offense count: 1
-# Configuration parameters: ContextCreatingMethods, MethodCreatingMethods.
-Lint/UselessAccessModifier:
- Exclude:
- - 'lib/bundler/fetcher.rb'
-
-# Offense count: 6
-Lint/UselessAssignment:
- Exclude:
- - 'lib/bundler/index.rb'
- - 'lib/bundler/installer.rb'
-
-# Offense count: 2564
-# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
-# URISchemes: http, https
-Metrics/LineLength:
- Max: 207
-
-# Offense count: 1
-Naming/AccessorMethodName:
- Exclude:
- - 'lib/bundler/source/git.rb'
-
-# Offense count: 31
-# Configuration parameters: Blacklist.
-# Blacklist: END, (?-mix:EO[A-Z]{1})
-Naming/HeredocDelimiterNaming:
- Enabled: false
-
-# Offense count: 9
-# Configuration parameters: NamePrefix, NamePrefixBlacklist, NameWhitelist.
-# NamePrefix: is_, has_, have_
-# NamePrefixBlacklist: is_, has_, have_
-# NameWhitelist: is_a?
-Naming/PredicateName:
- Exclude:
- - 'spec/**/*'
- - 'lib/bundler/definition.rb'
- - 'lib/bundler/installer/parallel_installer.rb'
- - 'lib/bundler/settings.rb'
- - 'lib/bundler/source/git.rb'
- - 'lib/bundler/source/git/git_proxy.rb'
- - 'lib/bundler/source/path.rb'
-
-# Offense count: 2
-Performance/Caller:
- Exclude:
- - 'lib/bundler/rubygems_integration.rb'
- - 'spec/support/builders.rb'
-
-# Offense count: 9
-# Cop supports --auto-correct.
-# Configuration parameters: AutoCorrect.
-Performance/HashEachMethods:
- Exclude:
- - 'lib/bundler/definition.rb'
- - 'lib/bundler/dependency.rb'
- - 'lib/bundler/dsl.rb'
- - 'lib/bundler/index.rb'
- - 'lib/bundler/plugin.rb'
- - 'spec/install/gems/standalone_spec.rb'
- - 'spec/support/builders.rb'
- - 'spec/support/helpers.rb'
-
-# Offense count: 7
-# Cop supports --auto-correct.
-Performance/RedundantBlockCall:
- Exclude:
- - 'lib/bundler/gem_helper.rb'
- - 'lib/bundler/retry.rb'
- - 'lib/bundler/shared_helpers.rb'
- - 'spec/support/helpers.rb'
-
-# Offense count: 2
-# Cop supports --auto-correct.
-Performance/RedundantMatch:
- Exclude:
- - 'lib/bundler/definition.rb'
- - 'lib/bundler/lockfile_parser.rb'
-
-# Offense count: 6
-# Cop supports --auto-correct.
-# Configuration parameters: MaxKeyValuePairs.
-Performance/RedundantMerge:
- Exclude:
- - 'lib/bundler/cli/gem.rb'
-
-# Offense count: 4
-Security/Eval:
- Exclude:
- - 'lib/bundler.rb'
- - 'lib/bundler/endpoint_specification.rb'
- - 'spec/support/streams.rb'
-
-# Offense count: 6
-Security/MarshalLoad:
- Exclude:
- - 'lib/bundler.rb'
- - 'spec/install/gems/resolving_spec.rb'
- - 'spec/support/artifice/compact_index.rb'
- - 'spec/support/artifice/endpoint.rb'
-
-# Offense count: 3
-Style/CaseEquality:
- Exclude:
- - 'lib/bundler/match_platform.rb'
- - 'lib/bundler/rubygems_ext.rb'
-
-# Offense count: 27
-# Configuration parameters: EnforcedStyle, SupportedStyles.
-# SupportedStyles: nested, compact
-Style/ClassAndModuleChildren:
- Enabled: false
-
-# Offense count: 9
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, SupportedStyles, SingleLineConditionsOnly, IncludeTernaryExpressions.
-# SupportedStyles: assign_to_condition, assign_inside_condition
-Style/ConditionalAssignment:
- Exclude:
- - 'lib/bundler/cli.rb'
- - 'lib/bundler/cli/gem.rb'
- - 'lib/bundler/cli/platform.rb'
- - 'lib/bundler/dsl.rb'
- - 'lib/bundler/lazy_specification.rb'
- - 'lib/bundler/psyched_yaml.rb'
- - 'lib/bundler/rubygems_integration.rb'
- - 'lib/bundler/source/git.rb'
- - 'lib/bundler/source/rubygems.rb'
-
-# Offense count: 167
-Style/Documentation:
- Enabled: false
-
-# Offense count: 17
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, SupportedStyles.
-# SupportedStyles: compact, expanded
-Style/EmptyMethod:
- Exclude:
- - 'exe/bundle_ruby'
- - 'lib/bundler/cli.rb'
- - 'lib/bundler/plugin/api/source.rb'
- - 'lib/bundler/rubygems_integration.rb'
- - 'lib/bundler/ui/silent.rb'
- - 'spec/support/artifice/fail.rb'
-
-# Offense count: 5
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, SupportedStyles, AutoCorrectEncodingComment.
-# SupportedStyles: when_needed, always, never
-Style/Encoding:
- Exclude:
- - 'Rakefile'
- - 'bundler.gemspec'
- - 'lib/bundler/friendly_errors.rb'
- - 'spec/bundler/bundler_spec.rb'
- - 'spec/install/gemfile_spec.rb'
- - 'spec/install/gemspecs_spec.rb'
- - 'spec/quality_es_spec.rb'
-
-# Offense count: 1
-# Configuration parameters: SupportedStyles.
-# SupportedStyles: annotated, template
-Style/FormatStringToken:
- EnforcedStyle: template
-
-# Offense count: 2
-# Configuration parameters: AllowedVariables.
-Style/GlobalVars:
- Exclude:
- - 'lib/bundler/cli.rb'
- - 'spec/spec_helper.rb'
-
-# Offense count: 12
-# Configuration parameters: MinBodyLength.
-Style/GuardClause:
- Exclude:
- - 'lib/bundler/cli/cache.rb'
- - 'lib/bundler/cli/install.rb'
- - 'lib/bundler/cli/outdated.rb'
- - 'lib/bundler/cli/package.rb'
- - 'lib/bundler/definition.rb'
- - 'lib/bundler/installer.rb'
- - 'lib/bundler/runtime.rb'
- - 'lib/bundler/source/path/installer.rb'
- - 'lib/bundler/source_list.rb'
- - 'spec/commands/newgem_spec.rb'
- - 'spec/support/sometimes.rb'
-
-# Offense count: 9
-# Cop supports --auto-correct.
-# Configuration parameters: InverseMethods, InverseBlocks.
-Style/InverseMethods:
- Exclude:
- - 'lib/bundler/cli/doctor.rb'
- - 'lib/bundler/definition.rb'
- - 'lib/bundler/dsl.rb'
- - 'lib/bundler/index.rb'
- - 'lib/bundler/resolver.rb'
- - 'lib/bundler/resolver/spec_group.rb'
-
-# Offense count: 6
-Style/MethodMissing:
- Exclude:
- - 'lib/bundler/dep_proxy.rb'
- - 'lib/bundler/dsl.rb'
- - 'lib/bundler/lazy_specification.rb'
- - 'lib/bundler/plugin/dsl.rb'
- - 'lib/bundler/remote_specification.rb'
- - 'spec/support/builders.rb'
-
-# Offense count: 2
-# Configuration parameters: EnforcedStyle, SupportedStyles.
-# SupportedStyles: module_function, extend_self
-Style/ModuleFunction:
- Exclude:
- - 'lib/bundler/shared_helpers.rb'
- - 'spec/support/path.rb'
-
-# Offense count: 10
-# Cop supports --auto-correct.
-Style/MultilineIfModifier:
- Exclude:
- - 'bin/with_rubygems'
- - 'lib/bundler/installer.rb'
- - 'lib/bundler/psyched_yaml.rb'
- - 'lib/bundler/rubygems_ext.rb'
- - 'lib/bundler/runtime.rb'
- - 'lib/bundler/source/rubygems.rb'
-
-# Offense count: 5
-# Cop supports --auto-correct.
-# Configuration parameters: AutoCorrect, EnforcedStyle, SupportedStyles.
-# SupportedStyles: predicate, comparison
-Style/NumericPredicate:
- Exclude:
- - 'spec/**/*'
- - 'lib/bundler/gem_helper.rb'
- - 'lib/bundler/mirror.rb'
- - 'lib/bundler/source/path.rb'
-
-# Offense count: 24
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, SupportedStyles.
-# SupportedStyles: compact, exploded
-Style/RaiseArgs:
- Exclude:
- - 'lib/bundler/cli/install.rb'
- - 'lib/bundler/deployment.rb'
- - 'lib/bundler/fetcher/downloader.rb'
- - 'lib/bundler/fetcher/index.rb'
- - 'lib/bundler/installer/standalone.rb'
- - 'lib/bundler/rubygems_integration.rb'
- - 'lib/bundler/shared_helpers.rb'
- - 'lib/bundler/source/git/git_proxy.rb'
- - 'lib/bundler/source/rubygems/remote.rb'
- - 'spec/bundler/endpoint_specification_spec.rb'
- - 'spec/bundler/fetcher/dependency_spec.rb'
- - 'spec/bundler/fetcher/downloader_spec.rb'
- - 'spec/bundler/fetcher/index_spec.rb'
- - 'spec/bundler/rubygems_integration_spec.rb'
- - 'spec/bundler/shared_helpers_spec.rb'
-
-# Offense count: 9
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyleForMultiline, SupportedStylesForMultiline.
-# SupportedStylesForMultiline: comma, consistent_comma, no_comma
-Style/TrailingCommaInLiteral:
- Exclude:
- - 'lib/bundler/cli/gem.rb'
- - 'lib/bundler/fetcher.rb'
- - 'lib/bundler/gem_helpers.rb'
- - 'lib/bundler/graph.rb'
- - 'lib/bundler/ruby_version.rb'
- - 'lib/bundler/similarity_detector.rb'
- - 'spec/support/artifice/endpoint.rb'
-
-# Offense count: 14
-# Cop supports --auto-correct.
-Style/UnneededInterpolation:
- Exclude:
- - 'lib/bundler/cli/config.rb'
- - 'lib/bundler/env.rb'
- - 'spec/bundler/shared_helpers_spec.rb'
- - 'spec/cache/git_spec.rb'
- - 'spec/commands/exec_spec.rb'
diff --git a/.travis.yml b/.travis.yml
index a1ab44d7f1..cff8821480 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,10 +1,10 @@
language: ruby
+dist: xenial
script: rake spec:travis
before_script:
- travis_retry rake -E 'module ::Bundler; VERSION = "0.0.0"; end' override_version
- travis_retry rake spec:travis:deps
- travis_retry rake man:build
- - travis_retry rake spec:rubygems:clone_rubygems_$RGV
branches:
only:
@@ -14,6 +14,10 @@ branches:
- /.+-dev$/
- /.+-stable$/
+cache:
+ directories:
+ - tmp/rubocop
+
notifications:
slack:
on_success: change
@@ -21,63 +25,51 @@ notifications:
rooms:
- secure: JxBi7DDJGkIF/7f/FSN/HUHpvV4EKfQccZHTPd1b2pNJn3GXo6u+tNVbAw2WjxYzPyPQI3ZcYBCU9SEXp/i7VmG8uMzh8Kyildw+miSKYKVb90uYqcsXWzbxwyNBgJLvyDkzST45H5lgnyAicee3WkFes/WDZikIajbH7ztdb04=
-addons:
- code_climate:
- repo_token:
- secure: "TrzIv116JLGUxm6PAUskCYrv8KTDguncKROVwbnjVPKTGDAgoDderd8JUdDEXrKoZ9qGLD2TPYKExt9/QDl71E+qHdWnVqWv4HKCUk2P9z/VLKzHuggOUBkCXiJUhjywUieCJhI3N92bfq2EjSBbu2/OFHqWOjLQ+QCooTEBjv8="
-
rvm:
- - 2.6.0
- - 2.5.3
- - 2.4.5
- - 2.3.8
+ - 2.6.3
+ - 2.5.5
+ - 2.4.6
stages:
- linting
- test
-# Rubygems versions MUST be available as rake tasks
-# see Rakefile:125 for the list of possible RGV values
env:
# We need to know if changes to rubygems will break bundler on release
+ - RGV=master BUNDLER_SPEC_SUB_VERSION=3.0.0
- RGV=master
# Test the latest rubygems release with all of our supported rubies
- - RGV=v3.0.1
+ - RGV=v3.0.3 BUNDLER_SPEC_SUB_VERSION=3.0.0
+ - RGV=v3.0.3
jobs:
include:
- - rvm: 2.6.0
+ - rvm: 2.6.3
script: rake rubocop
stage: linting
- # Ruby 2.5, Rubygems 2.7 and up
- - rvm: 2.5.3
- env: RGV=v2.7.7
- stage: test
- # Ruby 2.4, Rubygems 2.6 and up
- - rvm: 2.4.5
- env: RGV=v2.6.14
+ # Ruby 2.3 also tested in 2.x mode
+ - rvm: 2.3.8
+ env: RGV=master
stage: test
- - rvm: 2.4.5
- env: RGV=v2.7.7
+ - rvm: 2.3.8
+ env: RGV=v3.0.3
stage: test
- # Ruby 2.3, Rubygems 2.5 and up
- - rvm: 2.3.7
- env: RGV=v2.5.2
+ # Ruby 2.5, Rubygems 2.7
+ - rvm: 2.5.5
+ env: RGV=v2.7.9
stage: test
- - rvm: 2.3.7
+ # Ruby 2.4, Rubygems 2.6
+ - rvm: 2.4.6
env: RGV=v2.6.14
stage: test
- - rvm: 2.3.7
- env: RGV=v2.7.7
+ # Ruby 2.3, Rubygems 2.5
+ - rvm: 2.3.8
+ env: RGV=v2.5.2
stage: test
# Ruby-head (we want to know how we're doing, but not fail the build)
- rvm: ruby-head
env: RGV=master
stage: test
- # 1.x mode (we want to keep stuff passing in 1.x mode for now)
- - rvm: 2.6.0
- env: RGV=v2.7.7 BUNDLER_SPEC_SUB_VERSION=1.98
- stage: test
allow_failures:
- rvm: ruby-head
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d86054b2ff..7eafe43317 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,48 @@
+## 2.0.1 (2019-01-04)
+
+Changes:
+
+ - Relaxed RubyGems requirement to `>= 2.5.0` ([#6867](https://github.com/bundler/bundler/pull/6867))
+
+## 2.0.0 (2019-01-03)
+
+No new changes
+
+## 2.0.0.pre.3 (2018-12-30)
+
+Breaking Changes:
+
+ - Bundler 2 now requires RubyGems 3.0.0 at minimum
+
+Changes:
+
+ - Ruby 2.6 compatibility fixes (@segiddins)
+ - Import changes from Bundler 1.17.3 release
+
+Note: To upgrade your Gemfile to Bundler 2 you will need to run `bundle update --bundler`
+
+## 2.0.0.pre.2 (2018-11-27)
+
+Breaking Changes:
+
+ - `:github` source in the Gemfile now defaults to using HTTPS
+
+Changes
+
+ - Add compatibility for Bundler merge into ruby-src
+
+Note: To upgrade your Gemfile to Bundler 2 you will need to run `bundle update --bundler`
+
+## 2.0.0.pre.1 (2018-11-09)
+
+Breaking Changes:
+
+ - Dropped support for versions of Ruby < 2.3
+ - Dropped support for version of RubyGems < 2.5
+ - Moved error messages from STDOUT to STDERR
+
+Note: To upgrade your Gemfile to Bundler 2 you will need to run `bundle update --bundler`
+
## 1.17.3 (2018-12-27)
Bugfixes:
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
index fc4d57388d..cca34071bf 100644
--- a/CODE_OF_CONDUCT.md
+++ b/CODE_OF_CONDUCT.md
@@ -61,7 +61,7 @@ Once the admins get involved, they will follow a documented series of steps and
You may get in touch with the Bundler admin team through any of the following methods:
-- Email [the Bundler maintainers](http://bundler.io/contributors.html) as a group at [team@bundler.io](mailto:team@bundler.io).
+- Email [the Bundler maintainers](https://bundler.io/contributors.html) as a group at [team@bundler.io](mailto:team@bundler.io).
- Directly message any maintainer in private (through Slack, Twitter, email, or other available option) if that is more comfortable
### Further Enforcement
diff --git a/README.md b/README.md
index c596a32064..da7fd7c275 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,5 @@
[![Version ](https://img.shields.io/gem/v/bundler.svg?style=flat)](https://rubygems.org/gems/bundler)
[![Build Status](https://img.shields.io/travis/bundler/bundler/master.svg?style=flat)](https://travis-ci.org/bundler/bundler)
-[![Code Climate](https://img.shields.io/codeclimate/maintainability/bundler/bundler.svg?style=flat)](https://codeclimate.com/github/bundler/bundler)
[![Inline docs ](http://inch-ci.org/github/bundler/bundler.svg?style=flat)](http://inch-ci.org/github/bundler/bundler)
[![Slack ](http://bundler-slackin.herokuapp.com/badge.svg)](http://bundler-slackin.herokuapp.com)
@@ -29,7 +28,7 @@ bundle install
bundle exec rspec
```
-See [bundler.io](http://bundler.io) for the full documentation.
+See [bundler.io](https://bundler.io) for the full documentation.
### Troubleshooting
diff --git a/Rakefile b/Rakefile
index 746d110f86..fbbd3365b6 100644
--- a/Rakefile
+++ b/Rakefile
@@ -1,26 +1,16 @@
-# -*- encoding: utf-8 -*-
# frozen_string_literal: true
$:.unshift File.expand_path("../lib", __FILE__)
-require "shellwords"
require "benchmark"
-NULL_DEVICE = (Gem.win_platform? ? "NUL" : "/dev/null")
-RUBYGEMS_REPO = if `git -C "#{File.expand_path("..")}" remote --verbose 2> #{NULL_DEVICE}` =~ /rubygems/i
+RUBYGEMS_REPO = if `git -C "#{File.expand_path("..")}" remote --verbose 2> #{IO::NULL}` =~ /rubygems/i
File.expand_path("..")
else
File.expand_path("tmp/rubygems")
end
-def bundler_spec
- @bundler_spec ||= Gem::Specification.load("bundler.gemspec")
-end
-
-def safe_task(&block)
- yield
- true
-rescue
- false
+def development_dependencies
+ @development_dependencies ||= Gem::Specification.load("bundler.gemspec").development_dependencies
end
# Benchmark task execution
@@ -37,29 +27,32 @@ module Rake
end
end
+desc "Run specs"
+task :spec do
+ sh("bin/rspec")
+end
+
namespace :spec do
+ def safe_task(&block)
+ yield
+ true
+ rescue StandardError
+ false
+ end
+
desc "Ensure spec dependencies are installed"
task :deps do
- deps = Hash[bundler_spec.development_dependencies.map do |d|
+ deps = Hash[development_dependencies.map do |d|
[d.name, d.requirement.to_s]
end]
- deps["rubocop"] ||= "= 0.50.0" if RUBY_VERSION >= "2.0.0" # can't go in the gemspec because of the ruby version requirement
- # JRuby can't build ronn or rdiscount, so we skip that
- if defined?(RUBY_ENGINE) && RUBY_ENGINE == "jruby"
- deps.delete("ronn")
- deps.delete("rdiscount")
- end
+ # JRuby can't build ronn, so we skip that
+ deps.delete("ronn") if defined?(RUBY_ENGINE) && RUBY_ENGINE == "jruby"
gem_install_command = "install --no-document --conservative " + deps.sort_by {|name, _| name }.map do |name, version|
"'#{name}:#{version}'"
end.join(" ")
sh %(#{Gem.ruby} -S gem #{gem_install_command})
-
- # Download and install gems used inside tests
- $LOAD_PATH.unshift("./spec")
- require "support/rubygems_ext"
- Spec::Rubygems.setup
end
namespace :travis do
@@ -68,250 +61,236 @@ namespace :spec do
system "sudo sed -i 's/1000::/1000:Travis:/g' /etc/passwd"
# Strip secure_path so that RVM paths transmit through sudo -E
system "sudo sed -i '/secure_path/d' /etc/sudoers"
+ # Refresh packages index that the ones we need can be installed
+ sh "sudo apt-get update"
# Install groff so ronn can generate man/help pages
sh "sudo apt-get install groff-base -y"
# Install graphviz so that the viz specs can run
- sh "sudo apt-get install graphviz -y 2>&1 | tail -n 2"
+ sh "sudo apt-get install graphviz -y"
# Install the gems with a consistent version of RubyGems
- sh "gem update --system 2.6.13"
-
- $LOAD_PATH.unshift("./spec")
- require "support/rubygems_ext"
- Spec::Rubygems::DEPS["codeclimate-test-reporter"] = "~> 0.6.0" if RUBY_VERSION >= "2.2.0"
+ sh "gem update --system 3.0.3"
# Install the other gem deps, etc
Rake::Task["spec:deps"].invoke
end
end
-end
-begin
- rspec = bundler_spec.development_dependencies.find {|d| d.name == "rspec" }
- gem "rspec", rspec.requirement.to_s
- require "rspec/core/rake_task"
-
- desc "Run specs"
- RSpec::Core::RakeTask.new
- task :spec => "man:build"
-
- if RUBY_VERSION >= "2.0.0"
- # can't go in the gemspec because of the ruby version requirement
- gem "rubocop", "= 0.50.0"
- require "rubocop/rake_task"
- rubocop = RuboCop::RakeTask.new
- rubocop.options = ["--parallel"]
+ task :clean do
+ rm_rf "tmp"
end
- namespace :spec do
- task :clean do
- rm_rf "tmp"
- end
-
- desc "Run the real-world spec suite"
- task :realworld => %w[set_realworld spec]
-
- namespace :realworld do
- desc "Re-record cassettes for the realworld specs"
- task :record => %w[set_record realworld]
-
- task :set_record do
- ENV["BUNDLER_SPEC_FORCE_RECORD"] = "TRUE"
- end
- end
-
- task :set_realworld do
- ENV["BUNDLER_REALWORLD_TESTS"] = "1"
- end
-
- desc "Run the spec suite with the sudo tests"
- task :sudo => %w[set_sudo spec clean_sudo]
+ desc "Run the real-world spec suite"
+ task :realworld => %w[set_realworld spec]
- task :set_sudo do
- ENV["BUNDLER_SUDO_TESTS"] = "1"
- end
+ namespace :realworld do
+ desc "Re-record cassettes for the realworld specs"
+ task :record => %w[set_record realworld]
- task :clean_sudo do
- puts "Cleaning up sudo test files..."
- system "sudo rm -rf #{File.expand_path("../tmp/sudo_gem_home", __FILE__)}"
+ task :set_record do
+ ENV["BUNDLER_SPEC_FORCE_RECORD"] = "TRUE"
end
+ end
- # RubyGems specs by version
- namespace :rubygems do
- rubyopt = ENV["RUBYOPT"]
- # When editing this list, also edit .travis.yml!
- branches = %w[master]
- releases = %w[v2.5.2 v2.6.14 v2.7.7 v3.0.1]
- (branches + releases).each do |rg|
- desc "Run specs with RubyGems #{rg}"
- RSpec::Core::RakeTask.new(rg) do |t|
- t.rspec_opts = %w[--format progress --color]
- t.ruby_opts = %w[-w]
- end
+ task :set_realworld do
+ ENV["BUNDLER_REALWORLD_TESTS"] = "1"
+ end
- # Create tasks like spec:rubygems:v1.8.3:sudo to run the sudo specs
- namespace rg do
- task :sudo => ["set_sudo", rg, "clean_sudo"]
- task :realworld => ["set_realworld", rg]
- end
+ desc "Run the spec suite with the sudo tests"
+ task :sudo => %w[set_sudo spec clean_sudo]
- task "clone_rubygems_#{rg}" do
- unless File.directory?(RUBYGEMS_REPO)
- system("git clone https://github.com/rubygems/rubygems.git tmp/rubygems")
- end
- hash = nil
-
- if RUBYGEMS_REPO.start_with?(Dir.pwd)
- Dir.chdir(RUBYGEMS_REPO) do
- system("git remote update")
- if rg == "master"
- system("git checkout origin/master")
- else
- system("git checkout #{rg}") || raise("Unknown RubyGems ref #{rg}")
- end
- hash = `git rev-parse HEAD`.chomp
- end
- elsif rg != "master"
- raise "need to be running against master with bundler as a submodule"
- end
+ task :set_sudo do
+ ENV["BUNDLER_SUDO_TESTS"] = "1"
+ end
- puts "Checked out rubygems '#{rg}' at #{hash}"
- ENV["RUBYOPT"] = "-I#{File.join(RUBYGEMS_REPO, "lib")} #{rubyopt}"
- puts "RUBYOPT=#{ENV["RUBYOPT"]}"
- end
+ task :clean_sudo do
+ puts "Cleaning up sudo test files..."
+ system "sudo rm -rf #{File.expand_path("../tmp/sudo_gem_home", __FILE__)}"
+ end
- task rg => ["man:build", "clone_rubygems_#{rg}"]
- task "rubygems:all" => rg
+ # RubyGems specs by version
+ namespace :rubygems do
+ # When editing this list, also edit .travis.yml!
+ branches = %w[master]
+ releases = %w[v2.5.2 v2.6.14 v2.7.9 v3.0.3]
+ (branches + releases).each do |rg|
+ desc "Run specs with RubyGems #{rg}"
+ task rg do
+ sh("bin/rspec --format progress")
end
- desc "Run specs under a RubyGems checkout (set RG=path)"
- RSpec::Core::RakeTask.new("co") do |t|
- t.rspec_opts = %w[--format documentation --color]
- t.ruby_opts = %w[-w]
+ # Create tasks like spec:rubygems:v1.8.3:sudo to run the sudo specs
+ namespace rg do
+ task :sudo => ["set_sudo", rg, "clean_sudo"]
+ task :realworld => ["set_realworld", rg]
end
- task "setup_co" do
- rg = File.expand_path ENV["RG"]
- puts "Running specs against RubyGems in #{rg}..."
- ENV["RUBYOPT"] = "-I#{rg} #{rubyopt}"
+ task "set_#{rg}" do
+ ENV["RGV"] = rg
end
- task "co" => "setup_co"
- task "rubygems:all" => "co"
+ task rg => ["set_#{rg}"]
+ task "rubygems:all" => rg
end
- desc "Run the tests on Travis CI against a RubyGem version (using ENV['RGV'])"
- task :travis do
- rg = ENV["RGV"] || raise("RubyGems version is required on Travis!")
+ desc "Run specs under a RubyGems checkout (set RGV=path)"
+ task "co" do
+ sh("bin/rspec --format progress")
+ end
- # disallow making network requests on CI
- ENV["BUNDLER_SPEC_PRE_RECORDED"] = "TRUE"
+ namespace "co" do
+ task :sudo => ["set_sudo", "co", "clean_sudo"]
+ task :realworld => ["set_realworld", "co"]
+ end
- puts "\n\e[1;33m[Travis CI] Running bundler specs against RubyGems #{rg}\e[m\n\n"
- specs = safe_task { Rake::Task["spec:rubygems:#{rg}"].invoke }
+ task "setup_co" do
+ ENV["RGV"] = RUBYGEMS_REPO
+ end
- Rake::Task["spec:rubygems:#{rg}"].reenable
+ task "co" => "setup_co"
+ task "rubygems:all" => "co"
+ end
- puts "\n\e[1;33m[Travis CI] Running bundler sudo specs against RubyGems #{rg}\e[m\n\n"
- sudos = system("sudo -E rake spec:rubygems:#{rg}:sudo")
- # clean up by chowning the newly root-owned tmp directory back to the travis user
- system("sudo chown -R #{ENV["USER"]} #{File.join(File.dirname(__FILE__), "tmp")}")
+ desc "Run the tests on Travis CI against a RubyGem version (using ENV['RGV'])"
+ task :travis do
+ rg = ENV["RGV"] || raise("RubyGems version is required on Travis!")
- Rake::Task["spec:rubygems:#{rg}"].reenable
+ rg = "co" if File.directory?(File.expand_path(ENV["RGV"]))
- puts "\n\e[1;33m[Travis CI] Running bundler real world specs against RubyGems #{rg}\e[m\n\n"
- realworld = safe_task { Rake::Task["spec:rubygems:#{rg}:realworld"].invoke }
+ # disallow making network requests on CI
+ ENV["BUNDLER_SPEC_PRE_RECORDED"] = "TRUE"
- { "specs" => specs, "sudo" => sudos, "realworld" => realworld }.each do |name, passed|
- if passed
- puts "\e[0;32m[Travis CI] #{name} passed\e[m"
- else
- puts "\e[0;31m[Travis CI] #{name} failed\e[m"
- end
- end
+ puts "\n\e[1;33m[Travis CI] Running bundler specs against RubyGems #{rg}\e[m\n\n"
+ specs = safe_task { Rake::Task["spec:rubygems:#{rg}"].invoke }
+
+ Rake::Task["spec:rubygems:#{rg}"].reenable
+
+ puts "\n\e[1;33m[Travis CI] Running bundler sudo specs against RubyGems #{rg}\e[m\n\n"
+ sudos = system("sudo -E rake spec:rubygems:#{rg}:sudo")
+ # clean up by chowning the newly root-owned tmp directory back to the travis user
+ system("sudo chown -R #{ENV["USER"]} #{File.join(File.dirname(__FILE__), "tmp")}")
+
+ Rake::Task["spec:rubygems:#{rg}"].reenable
+
+ puts "\n\e[1;33m[Travis CI] Running bundler real world specs against RubyGems #{rg}\e[m\n\n"
+ realworld = safe_task { Rake::Task["spec:rubygems:#{rg}:realworld"].invoke }
- unless specs && sudos && realworld
- raise "Spec run failed, please review the log for more information"
+ { "specs" => specs, "sudo" => sudos, "realworld" => realworld }.each do |name, passed|
+ if passed
+ puts "\e[0;32m[Travis CI] #{name} passed\e[m"
+ else
+ puts "\e[0;31m[Travis CI] #{name} failed\e[m"
end
end
- end
-rescue LoadError
- task :spec do
- abort "Run `rake spec:deps` to be able to run the specs"
- end
- task :rubocop do
- abort "Run `rake spec:deps` to be able to run rubocop"
+ unless specs && sudos && realworld
+ raise "Spec run failed, please review the log for more information"
+ end
end
end
-begin
- require "ronn"
+desc "Run RuboCop"
+task :rubocop do
+ sh("bin/rubocop --parallel")
+end
- namespace :man do
- directory "man"
+namespace :man do
+ if RUBY_ENGINE == "jruby"
+ task(:build) {}
+ else
+ ronn_dep = development_dependencies.find do |dep|
+ dep.name == "ronn"
+ end
- index = []
- sources = Dir["man/*.ronn"].map {|f| File.basename(f, ".ronn") }
- sources.map do |basename|
- ronn = "man/#{basename}.ronn"
- manual_section = ".1" unless basename =~ /\.(\d+)\Z/
- roff = "man/#{basename}#{manual_section}"
+ ronn_requirement = ronn_dep.requirement.to_s
- index << [ronn, File.basename(roff)]
+ begin
+ gem "ronn", ronn_requirement
- file roff => ["man", ronn] do
- sh "#{Gem.ruby} -S ronn --roff --pipe #{ronn} > #{roff}"
- end
+ require "ronn"
+ rescue LoadError
+ task(:build) { abort "We couln't activate ronn (#{ronn_requirement}). Try `gem install ronn:'#{ronn_requirement}'` to be able to build the help pages" }
+ else
+ directory "man"
- file "#{roff}.txt" => roff do
- sh "groff -Wall -mtty-char -mandoc -Tascii #{roff} | col -b > #{roff}.txt"
- end
+ index = []
+ sources = Dir["man/*.ronn"].map {|f| File.basename(f, ".ronn") }
+ sources.map do |basename|
+ ronn = "man/#{basename}.ronn"
+ manual_section = ".1" unless basename =~ /\.(\d+)\Z/
+ roff = "man/#{basename}#{manual_section}"
- task :build_all_pages => "#{roff}.txt"
- end
+ index << [ronn, File.basename(roff)]
- file "index.txt" do
- index.map! do |(ronn, roff)|
- [File.read(ronn).split(" ").first, roff]
+ file roff => ["man", ronn] do
+ sh "#{Gem.ruby} -S ronn --roff --pipe #{ronn} > #{roff}"
+ end
+
+ file "#{roff}.txt" => roff do
+ sh "groff -Wall -mtty-char -mandoc -Tascii #{roff} | col -b > #{roff}.txt"
+ end
+
+ task :build_all_pages => "#{roff}.txt"
end
- index = index.sort_by(&:first)
- justification = index.map {|(n, _f)| n.length }.max + 4
- File.open("man/index.txt", "w") do |f|
- index.each do |name, filename|
- f << name.ljust(justification) << filename << "\n"
+
+ file "index.txt" do
+ index.map! do |(ronn, roff)|
+ [File.read(ronn).split(" ").first, roff]
+ end
+ index = index.sort_by(&:first)
+ justification = index.map {|(n, _f)| n.length }.max + 4
+ File.open("man/index.txt", "w") do |f|
+ index.each do |name, filename|
+ f << name.ljust(justification) << filename << "\n"
+ end
end
end
- end
- task :build_all_pages => "index.txt"
+ task :build_all_pages => "index.txt"
- task :clean do
- leftovers = Dir["man/*"].reject do |f|
- File.extname(f) == ".ronn"
+ task :clean do
+ leftovers = Dir["man/*"].reject do |f|
+ File.extname(f) == ".ronn"
+ end
+ rm leftovers if leftovers.any?
end
- rm leftovers if leftovers.any?
- end
- desc "Build the man pages"
- task :build => ["man:clean", "man:build_all_pages"]
+ desc "Build the man pages"
+ task :build => ["man:clean", "man:build_all_pages"]
- desc "Remove all built man pages"
- task :clobber do
- rm_rf "lib/bundler/man"
+ desc "Remove all built man pages"
+ task :clobber do
+ rm_rf "lib/bundler/man"
+ end
end
-
- task(:require) {}
- end
-rescue LoadError
- namespace :man do
- task(:require) { abort "Install the ronn gem to be able to release!" }
- task(:build) { warn "Install the ronn gem to build the help pages" }
end
end
+automatiek_dep = development_dependencies.find do |dep|
+ dep.name == "automatiek"
+end
+
+automatiek_requirement = automatiek_dep.requirement.to_s
+
begin
+ gem "automatiek", automatiek_requirement
+
require "automatiek"
+rescue LoadError
+ namespace :vendor do
+ desc "Vendor a specific version of molinillo"
+ task(:molinillo) { abort "We couldn't activate automatiek (#{automatiek_requirement}). Try `gem install automatiek:'#{automatiek_requirement}'` to be able to vendor gems" }
+ desc "Vendor a specific version of fileutils"
+ task(:fileutils) { abort "We couldn't activate automatiek (#{automatiek_requirement}). Try `gem install automatiek:'#{automatiek_requirement}'` to be able to vendor gems" }
+
+ desc "Vendor a specific version of thor"
+ task(:thor) { abort "We couldn't activate automatiek (#{automatiek_requirement}). Try `gem install automatiek:'#{automatiek_requirement}'` to be able to vendor gems" }
+
+ desc "Vendor a specific version of net-http-persistent"
+ task(:"net-http-persistent") { abort "We couldn't activate automatiek (#{automatiek_requirement}). Try `gem install automatiek:'#{automatiek_requirement}'` to be able to vendor gems" }
+ end
+else
+ desc "Vendor a specific version of molinillo"
Automatiek::RakeTask.new("molinillo") do |lib|
lib.download = { :github => "https://github.com/CocoaPods/Molinillo" }
lib.namespace = "Molinillo"
@@ -319,6 +298,7 @@ begin
lib.vendor_lib = "lib/bundler/vendor/molinillo"
end
+ desc "Vendor a specific version of thor"
Automatiek::RakeTask.new("thor") do |lib|
lib.download = { :github => "https://github.com/erikhuda/thor" }
lib.namespace = "Thor"
@@ -326,6 +306,7 @@ begin
lib.vendor_lib = "lib/bundler/vendor/thor"
end
+ desc "Vendor a specific version of fileutils"
Automatiek::RakeTask.new("fileutils") do |lib|
lib.download = { :github => "https://github.com/ruby/fileutils" }
lib.namespace = "FileUtils"
@@ -333,6 +314,7 @@ begin
lib.vendor_lib = "lib/bundler/vendor/fileutils"
end
+ desc "Vendor a specific version of net-http-persistent"
Automatiek::RakeTask.new("net-http-persistent") do |lib|
lib.download = { :github => "https://github.com/drbrain/net-http-persistent" }
lib.namespace = "Net::HTTP::Persistent"
@@ -349,13 +331,6 @@ begin
end
lib.send(:extend, mixin)
end
-rescue LoadError
- namespace :vendor do
- task(:fileutils) { abort "Install the automatiek gem to be able to vendor gems." }
- task(:molinillo) { abort "Install the automatiek gem to be able to vendor gems." }
- task(:thor) { abort "Install the automatiek gem to be able to vendor gems." }
- task("net-http-persistent") { abort "Install the automatiek gem to be able to vendor gems." }
- end
end
task :override_version do
@@ -368,14 +343,8 @@ task :override_version do
File.open(version_file, "w") {|f| f << contents }
end
-desc "Update vendored SSL certs to match the certs vendored by RubyGems"
-task :update_certs => "spec:rubygems:clone_rubygems_master" do
- require "bundler/ssl_certs/certificate_manager"
- Bundler::SSLCerts::CertificateManager.update_from!(RUBYGEMS_REPO)
-end
-
task :default => :spec
-Dir["task/*.{rb,rake}"].each(&method(:load))
+Dir["task/*.rake"].each(&method(:load))
task :generate_files => Rake::Task.tasks.select {|t| t.name.start_with?("lib/bundler/generated") }
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
new file mode 100644
index 0000000000..3aa8f82d3d
--- /dev/null
+++ b/azure-pipelines.yml
@@ -0,0 +1,6 @@
+jobs:
+- job: Windows
+ pool:
+ vmImage: 'vs2017-win2016'
+ steps:
+ - template: .azure-pipelines/steps.yml
diff --git a/bin/rake b/bin/rake
index ebb192fd50..cf4131d5b0 100755
--- a/bin/rake
+++ b/bin/rake
@@ -6,14 +6,15 @@ load File.expand_path("../with_rubygems", __FILE__) if ENV["RGV"]
require "rubygems"
bundler_spec = Gem::Specification.load(File.expand_path("../../bundler.gemspec", __FILE__))
-bundler_spec.dependencies.each do |dep|
- begin
- gem dep.name, dep.requirement
- rescue Gem::LoadError => e
- $stderr.puts "#{e.message} (#{e.class})"
- end
+rake = bundler_spec.development_dependencies.find do |dep|
+ dep.name == "rake"
end
-Gem.finish_resolve if Gem.respond_to?(:finish_resolve)
+rake_requirement = rake.requirement.to_s
-load Gem.bin_path("rake", "rake")
+begin
+ gem "rake", rake_requirement
+ load Gem.bin_path("rake", "rake")
+rescue Gem::LoadError
+ warn "We couln't activate rake (#{rake_requirement}). Run `gem install rake:'#{rake_requirement}'`"
+end
diff --git a/bin/rspec b/bin/rspec
index 39109d66f2..a3980e6744 100755
--- a/bin/rspec
+++ b/bin/rspec
@@ -6,10 +6,15 @@ load File.expand_path("../with_rubygems", __FILE__) if ENV["RGV"]
require "rubygems"
bundler_spec = Gem::Specification.load(File.expand_path("../../bundler.gemspec", __FILE__))
-bundler_spec.dependencies.each do |dep|
- gem dep.name, dep.requirement
+rspec = bundler_spec.development_dependencies.find do |dep|
+ dep.name == "rspec"
end
-Gem.finish_resolve if Gem.respond_to?(:finish_resolve)
+rspec_requirement = rspec.requirement.to_s
-load Gem.bin_path("rspec-core", "rspec")
+begin
+ gem "rspec", rspec_requirement
+ load Gem.bin_path("rspec-core", "rspec")
+rescue Gem::LoadError
+ warn "We couln't activate rspec (#{rspec_requirement}). Try `gem install rspec:'#{rspec_requirement}'`"
+end
diff --git a/bin/rubocop b/bin/rubocop
index 81f4679fb8..ef86f084a9 100755
--- a/bin/rubocop
+++ b/bin/rubocop
@@ -6,12 +6,15 @@ load File.expand_path("../with_rubygems", __FILE__) if ENV["RGV"]
require "rubygems"
bundler_spec = Gem::Specification.load(File.expand_path("../../bundler.gemspec", __FILE__))
-bundler_spec.dependencies.each do |dep|
- gem dep.name, dep.requirement
+rubocop = bundler_spec.dependencies.find do |dep|
+ dep.name == "rubocop"
end
-gem "rubocop", "= 0.50.0"
+rubocop_requirement = rubocop.requirement.to_s
-Gem.finish_resolve if Gem.respond_to?(:finish_resolve)
-
-load Gem.bin_path("rubocop", "rubocop")
+begin
+ gem "rubocop", rubocop_requirement
+ load Gem.bin_path("rubocop", "rubocop")
+rescue Gem::LoadError
+ warn "We couln't activate rubocop (#{rubocop_requirement}). Try `gem install rubocop:'#{rubocop_requirement}'`"
+end
diff --git a/bin/with_rubygems b/bin/with_rubygems
index d16c289822..96299669be 100755
--- a/bin/with_rubygems
+++ b/bin/with_rubygems
@@ -4,20 +4,24 @@
require "pathname"
def run(*cmd)
- return if system(*cmd)
+ return if system(*cmd, :out => IO::NULL)
raise "Running `#{cmd.join(" ")}` failed"
end
version = ENV.delete("RGV")
-rubygems_path = Pathname.new(__FILE__).join("../../tmp/rubygems").expand_path
+rubygems_path = Pathname.new(version).expand_path
unless rubygems_path.directory?
- rubygems_path.parent.mkpath unless rubygems_path.directory?
- run("git", "clone", "https://github.com/rubygems/rubygems.git", rubygems_path.to_s)
+ rubygems_path = Pathname.new("tmp/rubygems").expand_path
+ unless rubygems_path.directory?
+ rubygems_path.parent.mkpath unless rubygems_path.directory?
+ run("git", "clone", "https://github.com/rubygems/rubygems.git", rubygems_path.to_s)
+ end
+ Dir.chdir(rubygems_path) do
+ run("git remote update")
+ version = "v#{version}" if version =~ /\A\d/
+ run("git", "checkout", version, "--quiet")
+ end
end
-Dir.chdir(rubygems_path) do
- version = "v#{version}" if version =~ /\A\d/
- run("git", "checkout", version, "--quiet")
-end if version
rubygems_lib = rubygems_path + "lib"
ENV["RUBYOPT"] = %(-I#{rubygems_lib} #{ENV["RUBYOPT"]})
diff --git a/bundler.gemspec b/bundler.gemspec
index 8dda139c0a..bcc1027a40 100644
--- a/bundler.gemspec
+++ b/bundler.gemspec
@@ -1,11 +1,10 @@
-# coding: utf-8
# frozen_string_literal: true
begin
- require File.expand_path("../lib/bundler/version", __FILE__)
+ require_relative "lib/bundler/version"
rescue LoadError
# for Ruby core repository
- require File.expand_path("../bundler/version", __FILE__)
+ require_relative "version"
end
Gem::Specification.new do |s|
@@ -32,23 +31,16 @@ Gem::Specification.new do |s|
}
end
- if s.version >= Gem::Version.new("2.a".dup)
- s.required_ruby_version = ">= 2.3.0"
- s.required_rubygems_version = ">= 2.5.0"
- else
- s.required_ruby_version = ">= 1.8.7"
- s.required_rubygems_version = ">= 1.3.6"
- end
+ s.required_ruby_version = ">= 2.3.0"
+ s.required_rubygems_version = ">= 2.5.0"
s.add_development_dependency "automatiek", "~> 0.1.0"
- s.add_development_dependency "mustache", "0.99.6"
s.add_development_dependency "rake", "~> 12.0"
- s.add_development_dependency "rdiscount", "~> 2.2"
s.add_development_dependency "ronn", "~> 0.7.3"
s.add_development_dependency "rspec", "~> 3.6"
+ s.add_development_dependency "rubocop", "= 0.65.0"
- base_dir = File.dirname(__FILE__).gsub(%r{([^A-Za-z0-9_\-.,:\/@\n])}, "\\\\\\1")
- s.files = IO.popen("git -C #{base_dir} ls-files -z", &:read).split("\x0").select {|f| f.match(%r{^(lib|exe)/}) }
+ s.files = Dir.glob("{lib,exe}/**/*", File::FNM_DOTMATCH).reject {|f| File.directory?(f) }
# we don't check in man pages, but we need to ship them because
# we use them to generate the long-form help for each command.
diff --git a/doc/README.md b/doc/README.md
index 926a34823a..5fe78d3254 100644
--- a/doc/README.md
+++ b/doc/README.md
@@ -1,8 +1,8 @@
# Docs: Contributing and developing Bundler
-_If you're looking for documentation on how to use Bundler: visit [bundler.io](http://bundler.io/), or run `bundle help` from the command line. You may also be interested in [troubleshooting common issues](TROUBLESHOOTING.md) found when using Bundler._
+_If you're looking for documentation on how to use Bundler: visit [bundler.io](https://bundler.io/), or run `bundle help` from the command line. You may also be interested in [troubleshooting common issues](TROUBLESHOOTING.md) found when using Bundler._
-Bundler welcomes contributions from *everyone*. While contributing, please follow the project [code of conduct](http://bundler.io/conduct.html), so that everyone can be included. Maintainers are expected to work together with the community in accordance with [our project policies](POLICIES.md).
+Bundler welcomes contributions from *everyone*. While contributing, please follow the project [code of conduct](https://bundler.io/conduct.html), so that everyone can be included. Maintainers are expected to work together with the community in accordance with [our project policies](POLICIES.md).
If you'd like to help make Bundler better, you totally rock! Thanks for helping us make Bundler better.
diff --git a/doc/TROUBLESHOOTING.md b/doc/TROUBLESHOOTING.md
index 8bdac2c43c..d5ef596d34 100644
--- a/doc/TROUBLESHOOTING.md
+++ b/doc/TROUBLESHOOTING.md
@@ -25,10 +25,10 @@ Please open a ticket with [Heroku](https://www.heroku.com) if you're having trou
## Other problems
-First, figure out exactly what it is that you're trying to do (see [XY Problem](http://xyproblem.info/)). Then, go to the [Bundler documentation website](http://bundler.io) and see if we have instructions on how to do that.
+First, figure out exactly what it is that you're trying to do (see [XY Problem](http://xyproblem.info/)). Then, go to the [Bundler documentation website](https://bundler.io) and see if we have instructions on how to do that.
Second, check [the compatibility
-list](http://bundler.io/compatibility.html), and make sure that the version of Bundler that you are using works with the versions of Ruby and RubyGems that you are using. To see your versions:
+list](https://bundler.io/compatibility.html), and make sure that the version of Bundler that you are using works with the versions of Ruby and RubyGems that you are using. To see your versions:
# Bundler version
bundle -v
diff --git a/doc/contributing/BUG_TRIAGE.md b/doc/contributing/BUG_TRIAGE.md
index b70c1285fe..fab584c7be 100644
--- a/doc/contributing/BUG_TRIAGE.md
+++ b/doc/contributing/BUG_TRIAGE.md
@@ -14,7 +14,7 @@ When you're looking at a ticket, here are the main questions to ask:
* Are the steps to reproduce the bug clearly documented in the ticket?
* Which versions of Bundler (1.1.x, 1.2.x, git, etc.) manifest this bug?
* Which operating systems (OS X, Windows, Ubuntu, CentOS, etc.) manifest this bug?
- * Which rubies (MRI, JRuby, Rubinius, etc.) and which versions (1.8.7, 1.9.3, etc.) have this bug?
+ * Which rubies (MRI, JRuby, Rubinius, etc.) and which versions (2.5, 2.6, etc.) have this bug?
Strategies for triaging a ticket:
* Be sure to ask the user to output the entirety of their `bundle env`. Sometimes users forget to post all of their `bundle env` output in the issue.
@@ -22,6 +22,8 @@ Strategies for triaging a ticket:
* If you're having trouble replicating their issue with your current environment, slowly try to incorporate the user's environment setup. As in, this is where you begin matching their environment. For example, try switching to the user's version of Ruby, RubyGems, RVM, et cetera, step by step.
* Is the user running the latest version of bundler? If not, ask them to update by running `gem install bundler`. There's a chance that the newest version of bundler has already solved their problem.
+If the issue still requires user information, apply the label "user feedback required". This will help identify stale issues in the future.
+
If you can't reproduce the issue, chances are good that the bug has been fixed already (hurrah!). That's a good time to post to the ticket explaining what you did and how it worked.
If you can reproduce an issue, you're well on your way to fixing it. :)
@@ -40,3 +42,12 @@ Everyone is welcome and encouraged to fix any open bug, improve an error message
## Duplicates!
Finally, the ticket may be a duplicate of another older ticket. If you notice a ticket is a duplicate, simply comment on the ticket noting the original ticket’s number. For example, you could say “This is a duplicate of issue #42, and can be closed”.
+
+## Stale issues
+
+Any issue that is waiting for more information is what we could consider "stale". And the process is:
+
+1. If the issue is not updated in a while (2-4 weeks), we usually leave a comment saying "Hey :wave:, is this still a problem for you?".
+2. If they don't respond within a week or two, then we will close the ticket.
+3. If they do respond and they say it's still an issue, then we'll remind we are waiting for more information.
+4. If the user doesn't provide the required information after being reminded, the ticket will be closed.
diff --git a/doc/contributing/COMMUNITY.md b/doc/contributing/COMMUNITY.md
index 053938ad07..7196ae7d1c 100644
--- a/doc/contributing/COMMUNITY.md
+++ b/doc/contributing/COMMUNITY.md
@@ -4,10 +4,10 @@ Community is an important part of all we do. If you’d like to be part of the B
It would be tremendously helpful to have more people answering questions about Bundler (and often simply about [RubyGems](https://github.com/rubygems/rubygems) or Ruby itself) in our [issue tracker](https://github.com/bundler/bundler/issues) or on [Stack Overflow](http://stackoverflow.com/questions/tagged/bundler).
-Additional documentation and explanation is always helpful, too. If you have any suggestions for the Bundler website [bundler.io](http://bundler.io), we would absolutely love it if you opened an issue or pull request on the [bundler-site](https://github.com/bundler/bundler-site) repository.
+Additional documentation and explanation is always helpful, too. If you have any suggestions for the Bundler website [bundler.io](https://bundler.io), we would absolutely love it if you opened an issue or pull request on the [bundler-site](https://github.com/bundler/bundler-site) repository.
Sharing your experiences and discoveries by writing them up is a valuable way to help others who have similar problems or experiences in the future. You can write a blog post, create an example and commit it to GitHub, take screenshots, or make videos.
Publishing examples of how Bundler is used helps everyone, and we’ve discovered that people already use it in ways that we never imagined when we were writing it. If you’re still not sure what to write about, there are also several projects doing interesting things based on Bundler. They could probably use publicity too.
-Finally, all contributors to the Bundler project must agree to the contributor [code of conduct](http://bundler.io/conduct.html). By participating in this project you agree to abide by its terms.
+Finally, all contributors to the Bundler project must agree to the contributor [code of conduct](https://bundler.io/conduct.html). By participating in this project you agree to abide by its terms.
diff --git a/doc/contributing/GETTING_HELP.md b/doc/contributing/GETTING_HELP.md
index 55ccb5f5e9..11b5bf9b5e 100644
--- a/doc/contributing/GETTING_HELP.md
+++ b/doc/contributing/GETTING_HELP.md
@@ -5,7 +5,7 @@ If you have any questions after reading the documentation for contributing, plea
The best ways to get in touch are:
* [Bundler Slack](https://bundler.slack.com).
- * Not a member of the Slack? Join the Bundler team slack [here](http://slack.bundler.io/)!
+ * Not a member of the Slack? Join the Bundler team slack [here](https://slack.bundler.io/)!
* [Bundler mailing list](http://groups.google.com/group/ruby-bundler)
You may also find our guide on [filing issues](ISSUES.md) to be helpful as well!
diff --git a/doc/contributing/HOW_YOU_CAN_HELP.md b/doc/contributing/HOW_YOU_CAN_HELP.md
index 284bae07b2..46cf33e65c 100644
--- a/doc/contributing/HOW_YOU_CAN_HELP.md
+++ b/doc/contributing/HOW_YOU_CAN_HELP.md
@@ -14,7 +14,7 @@ Generally, great ways to get started helping out with Bundler are:
- [reporting bugs you encounter or suggesting new features](https://github.com/bundler/bundler/issues/new)
- see our [issues guide](ISSUES.md) for help on filing issues
- see the [new features documentation](../development/NEW_FEATURES.md) for more
- - adding to or editing [the Bundler documentation website](http://bundler.io) and [Bundler man pages](http://bundler.io/man/bundle.1.html)
+ - adding to or editing [the Bundler documentation website](https://bundler.io) and [Bundler man pages](https://bundler.io/man/bundle.1.html)
- [checking issues for completeness](BUG_TRIAGE.md)
- closing issues that are not complete
- adding a failing test for reproducible [reported bugs](https://github.com/bundler/bundler/issues)
@@ -22,6 +22,6 @@ Generally, great ways to get started helping out with Bundler are:
- improving existing code, including suggestions from [PullReview](https://www.pullreview.com/github/bundler/bundler/reviews/master) or [CodeClimate](https://codeclimate.com/github/bundler/bundler)
- writing code (no patch is too small! fix typos or bad whitespace)
- get started setting up your dev environment with [these instructions](../development/SETUP.md)
- - backfilling [unit tests](https://github.com/bundler/bundler/tree/master/spec/bundler) for modules that lack [coverage](https://codeclimate.com/github/bundler/bundler/coverage)
+ - backfilling [unit tests](https://github.com/bundler/bundler/tree/master/spec/bundler) for modules that lack coverage.
-If nothing on those lists looks good, [talk to us](http://slack.bundler.io/), and we'll figure out what you can help with. We can absolutely use your help, no matter what level of programming skill you have at the moment.
+If nothing on those lists looks good, [talk to us](https://slack.bundler.io/), and we'll figure out what you can help with. We can absolutely use your help, no matter what level of programming skill you have at the moment.
diff --git a/doc/contributing/ISSUES.md b/doc/contributing/ISSUES.md
index 219a775719..361350badd 100644
--- a/doc/contributing/ISSUES.md
+++ b/doc/contributing/ISSUES.md
@@ -6,9 +6,9 @@ Before filing an issue, check our [troubleshooting guide](../TROUBLESHOOTING.md)
## Documentation
-Instructions for common Bundler uses can be found on the [Bundler documentation site](http://bundler.io/).
+Instructions for common Bundler uses can be found on the [Bundler documentation site](https://bundler.io/).
-Detailed information about each Bundler command, including help with common problems, can be found in the [Bundler man pages](http://bundler.io/man/bundle.1.html) or [Bundler Command Line Reference](http://bundler.io/v1.11/commands.html).
+Detailed information about each Bundler command, including help with common problems, can be found in the [Bundler man pages](https://bundler.io/man/bundle.1.html) or [Bundler Command Line Reference](https://bundler.io/v1.11/commands.html).
## Reporting unresolved problems
diff --git a/doc/contributing/README.md b/doc/contributing/README.md
index 624e37cb73..a068ee5cb9 100644
--- a/doc/contributing/README.md
+++ b/doc/contributing/README.md
@@ -1,6 +1,6 @@
# Bundler Contributor Guidelines
-Thank you for your interest in making Bundler better! We welcome contributions from everyone. Dozens of contributors like you have submitted feature improvements, fixed bugs, and written new documentation. [Join the Bundler Slack community](http://slack.bundler.io/) to connect with the Bundler core team and other contributors like you.
+Thank you for your interest in making Bundler better! We welcome contributions from everyone. Dozens of contributors like you have submitted feature improvements, fixed bugs, and written new documentation. [Join the Bundler Slack community](https://slack.bundler.io/) to connect with the Bundler core team and other contributors like you.
Before submitting a contribution, read through the following guidelines:
diff --git a/doc/documentation/README.md b/doc/documentation/README.md
index bc2e1ceac6..0a9eceff8c 100644
--- a/doc/documentation/README.md
+++ b/doc/documentation/README.md
@@ -5,9 +5,9 @@ Code needs explanation, and sometimes those who know the code well have trouble
Currently, Bundler has two main sources of documentation:
1. built-in `help` (including usage information and man pages)
-2. [Bundler documentation site](http://bundler.io)
+2. [Bundler documentation site](https://bundler.io)
-If you have a suggestion or proposed change for [bundler.io](http://bundler.io), please open an issue or send a pull request to the [bundler-site](https://github.com/bundler/bundler-site) repository.
+If you have a suggestion or proposed change for [bundler.io](https://bundler.io), please open an issue or send a pull request to the [bundler-site](https://github.com/bundler/bundler-site) repository.
Not sure where to write documentation? In general, follow these guidelines:
diff --git a/doc/documentation/VISION.md b/doc/documentation/VISION.md
index 3d660ee36d..d401b94e77 100644
--- a/doc/documentation/VISION.md
+++ b/doc/documentation/VISION.md
@@ -3,7 +3,7 @@
Currently, documentation for using Bundler is spread across two places:
1. built-in `help` (including usage information and man pages)
-2. [Bundler documentation site](http://bundler.io)
+2. [Bundler documentation site](https://bundler.io)
Additional documentation about using Bundler to publish gems can also be found on the [RubyGems guides](http://guides.rubygems.org/).
diff --git a/doc/documentation/WRITING.md b/doc/documentation/WRITING.md
index 2fb3292e27..3975b57043 100644
--- a/doc/documentation/WRITING.md
+++ b/doc/documentation/WRITING.md
@@ -53,11 +53,11 @@ $ bin/rspec ./spec/commands/help_spec.rb
$ bin/rspec ./spec/quality_spec.rb
```
-# Writing docs for [the Bundler documentation site](http://www.bundler.io)
+# Writing docs for [the Bundler documentation site](https://bundler.io)
-If you'd like to submit a pull request for any of the primary commands or utilities on [the Bundler documentation site](http://www.bundler.io), please follow the instructions above for writing documentation for man pages from the `bundler/bundler` repository. They are the same in each case.
+If you'd like to submit a pull request for any of the primary commands or utilities on [the Bundler documentation site](https://bundler.io), please follow the instructions above for writing documentation for man pages from the `bundler/bundler` repository. They are the same in each case.
-Note: Editing `.ronn` files from the `bundler/bundler` repository for the primary commands and utilities documentation is all you need 🎉. There is no need to manually change anything in the `bundler/bundler-site` repository, because the man pages and the docs for primary commands and utilities on [the Bundler documentation site](http://www.bundler.io) are one in the same. They are generated automatically from the `bundler/bundler` repository's `.ronn` files from the `rake man/build` command. In other words, after updating `.ronn` file and running `rake man/build` in `bundler`, `.ronn` files map to the auto-generated files in the `source/man` directory of `bundler-site`.
+Note: Editing `.ronn` files from the `bundler/bundler` repository for the primary commands and utilities documentation is all you need 🎉. There is no need to manually change anything in the `bundler/bundler-site` repository, because the man pages and the docs for primary commands and utilities on [the Bundler documentation site](https://bundler.io) are one in the same. They are generated automatically from the `bundler/bundler` repository's `.ronn` files from the `rake man/build` command. In other words, after updating `.ronn` file and running `rake man/build` in `bundler`, `.ronn` files map to the auto-generated files in the `source/man` directory of `bundler-site`.
Additionally, if you'd like to add a guide or tutorial: in the `bundler/bundler-site` repository, go to `/bundler-site/source/current_version_of_bundler/guides` and add [a new Markdown file](https://guides.github.com/features/mastering-markdown/) (with an extension ending in `.md`). Be sure to correctly format the title of your new guide, like so:
```
diff --git a/lib/bundler.rb b/lib/bundler.rb
index 137d916cc6..8ad5ab6634 100644
--- a/lib/bundler.rb
+++ b/lib/bundler.rb
@@ -1,21 +1,20 @@
# frozen_string_literal: true
-require "bundler/compatibility_guard"
+require_relative "bundler/compatibility_guard"
-require "bundler/vendored_fileutils"
+require_relative "bundler/vendored_fileutils"
require "pathname"
require "rbconfig"
-require "thread"
-
-require "bundler/errors"
-require "bundler/environment_preserver"
-require "bundler/plugin"
-require "bundler/rubygems_ext"
-require "bundler/rubygems_integration"
-require "bundler/version"
-require "bundler/constants"
-require "bundler/current_ruby"
-require "bundler/build_metadata"
+
+require_relative "bundler/errors"
+require_relative "bundler/environment_preserver"
+require_relative "bundler/plugin"
+require_relative "bundler/rubygems_ext"
+require_relative "bundler/rubygems_integration"
+require_relative "bundler/version"
+require_relative "bundler/constants"
+require_relative "bundler/current_ruby"
+require_relative "bundler/build_metadata"
module Bundler
environment_preserver = EnvironmentPreserver.new(ENV, EnvironmentPreserver::BUNDLER_KEYS)
@@ -198,19 +197,19 @@ module Bundler
def user_bundle_path(dir = "home")
env_var, fallback = case dir
when "home"
- ["BUNDLE_USER_HOME", Pathname.new(user_home).join(".bundle")]
+ ["BUNDLE_USER_HOME", proc { Pathname.new(user_home).join(".bundle") }]
when "cache"
- ["BUNDLE_USER_CACHE", user_bundle_path.join("cache")]
+ ["BUNDLE_USER_CACHE", proc { user_bundle_path.join("cache") }]
when "config"
- ["BUNDLE_USER_CONFIG", user_bundle_path.join("config")]
+ ["BUNDLE_USER_CONFIG", proc { user_bundle_path.join("config") }]
when "plugin"
- ["BUNDLE_USER_PLUGIN", user_bundle_path.join("plugin")]
+ ["BUNDLE_USER_PLUGIN", proc { user_bundle_path.join("plugin") }]
else
raise BundlerError, "Unknown user path requested: #{dir}"
end
# `fallback` will already be a Pathname, but Pathname.new() is
# idempotent so it's OK
- Pathname.new(ENV.fetch(env_var, fallback))
+ Pathname.new(ENV.fetch(env_var, &fallback))
end
def user_cache
@@ -335,12 +334,46 @@ EOF
with_env(unbundled_env) { yield }
end
+ # Run subcommand with the environment present before Bundler was activated
+ def original_system(*args)
+ with_original_env { Kernel.system(*args) }
+ end
+
+ # @deprecated Use `unbundled_system` instead
def clean_system(*args)
- with_clean_env { Kernel.system(*args) }
+ Bundler::SharedHelpers.major_deprecation(
+ 2,
+ "`Bundler.clean_system` has been deprecated in favor of `Bundler.unbundled_system`. " \
+ "If you instead want to run the command in the environment before bundler was originally loaded, use `Bundler.original_system`"
+ )
+
+ with_env(unbundled_env) { Kernel.system(*args) }
+ end
+
+ # Run subcommand in an environment with all bundler related variables removed
+ def unbundled_system(*args)
+ with_unbundled_env { Kernel.system(*args) }
end
+ # Run a `Kernel.exec` to a subcommand with the environment present before Bundler was activated
+ def original_exec(*args)
+ with_original_env { Kernel.exec(*args) }
+ end
+
+ # @deprecated Use `unbundled_exec` instead
def clean_exec(*args)
- with_clean_env { Kernel.exec(*args) }
+ Bundler::SharedHelpers.major_deprecation(
+ 2,
+ "`Bundler.clean_exec` has been deprecated in favor of `Bundler.unbundled_exec`. " \
+ "If you instead want to exec to a command in the environment before bundler was originally loaded, use `Bundler.original_exec`"
+ )
+
+ with_env(unbundled_env) { Kernel.exec(*args) }
+ end
+
+ # Run a `Kernel.exec` to a subcommand in an environment with all bundler related variables removed
+ def unbundled_exec(*args)
+ with_env(unbundled_env) { Kernel.exec(*args) }
end
def local_platform
@@ -365,7 +398,7 @@ EOF
# system binaries. If you put '-n foo' in your .gemrc, RubyGems will
# install binstubs there instead. Unfortunately, RubyGems doesn't expose
# that directory at all, so rather than parse .gemrc ourselves, we allow
- # the directory to be set as well, via `bundle config bindir foo`.
+ # the directory to be set as well, via `bundle config set bindir foo`.
Bundler.settings[:system_bindir] || Bundler.rubygems.gem_bindir
end
@@ -545,7 +578,7 @@ EOF
rescue ScriptError, StandardError => e
msg = "There was an error while loading `#{path.basename}`: #{e.message}"
- if e.is_a?(LoadError) && RUBY_VERSION >= "1.9"
+ if e.is_a?(LoadError)
msg += "\nDoes it try to require a relative path? That's been removed in Ruby 1.9"
end
diff --git a/lib/bundler/capistrano.rb b/lib/bundler/capistrano.rb
index 1b7145b72b..573df95043 100644
--- a/lib/bundler/capistrano.rb
+++ b/lib/bundler/capistrano.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-require "bundler/shared_helpers"
+require_relative "shared_helpers"
Bundler::SharedHelpers.major_deprecation 2,
"The Bundler task for Capistrano. Please use http://github.com/capistrano/bundler"
@@ -8,7 +8,7 @@ Bundler::SharedHelpers.major_deprecation 2,
#
# Add "require 'bundler/capistrano'" in your Capistrano deploy.rb, and
# Bundler will be activated after each new deployment.
-require "bundler/deployment"
+require_relative "deployment"
require "capistrano/version"
if defined?(Capistrano::Version) && Gem::Version.new(Capistrano::Version).release >= Gem::Version.new("3.0")
diff --git a/lib/bundler/cli.rb b/lib/bundler/cli.rb
index c591884263..dd733a22ed 100644
--- a/lib/bundler/cli.rb
+++ b/lib/bundler/cli.rb
@@ -1,11 +1,10 @@
# frozen_string_literal: true
-require "bundler"
-require "bundler/vendored_thor"
+require_relative "vendored_thor"
module Bundler
class CLI < Thor
- require "bundler/cli/common"
+ require_relative "cli/common"
package_name "Bundler"
@@ -16,7 +15,7 @@ module Bundler
def self.start(*)
super
- rescue Exception => e
+ rescue Exception => e # rubocop:disable Lint/RescueException
Bundler.ui = UI::Shell.new
raise e
ensure
@@ -61,11 +60,6 @@ module Bundler
end
end
- def self.deprecated_option(*args, &blk)
- return if Bundler.feature_flag.forget_cli_options?
- method_option(*args, &blk)
- end
-
check_unknown_options!(:except => [:config, :exec])
stop_on_unknown_option! :exec
@@ -142,9 +136,9 @@ module Bundler
Gemfile to a gem with a gemspec, the --gemspec option will automatically add each
dependency listed in the gemspec file to the newly created Gemfile.
D
- deprecated_option "gemspec", :type => :string, :banner => "Use the specified .gemspec to create the Gemfile"
+ method_option "gemspec", :type => :string, :banner => "Use the specified .gemspec to create the Gemfile"
def init
- require "bundler/cli/init"
+ require_relative "cli/init"
Init.new(options.dup).run
end
@@ -162,7 +156,7 @@ module Bundler
"Specify a different path than the system default ($BUNDLE_PATH or $GEM_HOME).#{" Bundler will remember this value for future installs on this machine" unless Bundler.feature_flag.forget_cli_options?}"
map "c" => "check"
def check
- require "bundler/cli/check"
+ require_relative "cli/check"
Check.new(options).run
end
@@ -173,7 +167,7 @@ module Bundler
method_option "install", :type => :boolean, :banner =>
"Runs 'bundle install' after removing the gems from the Gemfile"
def remove(*gems)
- require "bundler/cli/remove"
+ require_relative "cli/remove"
Remove.new(gems, options).run
end
@@ -188,13 +182,13 @@ module Bundler
If the bundle has already been installed, bundler will tell you so and then exit.
D
- deprecated_option "binstubs", :type => :string, :lazy_default => "bin", :banner =>
+ method_option "binstubs", :type => :string, :lazy_default => "bin", :banner =>
"Generate bin stubs for bundled gems to ./bin"
- deprecated_option "clean", :type => :boolean, :banner =>
+ method_option "clean", :type => :boolean, :banner =>
"Run bundle clean automatically after install"
- deprecated_option "deployment", :type => :boolean, :banner =>
+ method_option "deployment", :type => :boolean, :banner =>
"Install using defaults tuned for deployment environments"
- deprecated_option "frozen", :type => :boolean, :banner =>
+ method_option "frozen", :type => :boolean, :banner =>
"Do not allow the Gemfile.lock to be updated after this install"
method_option "full-index", :type => :boolean, :banner =>
"Fall back to using the single-file index of all gems"
@@ -204,33 +198,38 @@ module Bundler
"Specify the number of jobs to run in parallel"
method_option "local", :type => :boolean, :banner =>
"Do not attempt to fetch gems remotely and use the gem cache instead"
- deprecated_option "no-cache", :type => :boolean, :banner =>
+ method_option "no-cache", :type => :boolean, :banner =>
"Don't update the existing gem cache."
method_option "redownload", :type => :boolean, :aliases => "--force", :banner =>
"Force downloading every gem."
- deprecated_option "no-prune", :type => :boolean, :banner =>
+ method_option "no-prune", :type => :boolean, :banner =>
"Don't remove stale gems from the cache."
- deprecated_option "path", :type => :string, :banner =>
+ method_option "path", :type => :string, :banner =>
"Specify a different path than the system default ($BUNDLE_PATH or $GEM_HOME). Bundler will remember this value for future installs on this machine"
method_option "quiet", :type => :boolean, :banner =>
"Only output warnings and errors."
- deprecated_option "shebang", :type => :string, :banner =>
+ method_option "shebang", :type => :string, :banner =>
"Specify a different shebang executable name than the default (usually 'ruby')"
method_option "standalone", :type => :array, :lazy_default => [], :banner =>
"Make a bundle that can work without the Bundler runtime"
- deprecated_option "system", :type => :boolean, :banner =>
+ method_option "system", :type => :boolean, :banner =>
"Install to the system location ($BUNDLE_PATH or $GEM_HOME) even if the bundle was previously installed somewhere else for this application"
method_option "trust-policy", :alias => "P", :type => :string, :banner =>
"Gem trust policy (like gem install -P). Must be one of " +
Bundler.rubygems.security_policy_keys.join("|")
- deprecated_option "without", :type => :array, :banner =>
+ method_option "without", :type => :array, :banner =>
"Exclude gems that are part of the specified named group."
- deprecated_option "with", :type => :array, :banner =>
+ method_option "with", :type => :array, :banner =>
"Include gems that are part of the specified named group."
map "i" => "install"
def install
SharedHelpers.major_deprecation(2, "The `--force` option has been renamed to `--redownload`") if ARGV.include?("--force")
- require "bundler/cli/install"
+
+ %w[clean deployment frozen no-cache no-prune path shebang system without with].each do |option|
+ remembered_flag_deprecation(option)
+ end
+
+ require_relative "cli/install"
Bundler.settings.temporary(:no_install => false) do
Install.new(options.dup).run
end
@@ -276,60 +275,63 @@ module Bundler
"Update everything."
def update(*gems)
SharedHelpers.major_deprecation(2, "The `--force` option has been renamed to `--redownload`") if ARGV.include?("--force")
- require "bundler/cli/update"
- Update.new(options, gems).run
+ require_relative "cli/update"
+ Bundler.settings.temporary(:no_install => false) do
+ Update.new(options, gems).run
+ end
end
- desc "show GEM [OPTIONS]", "Shows all gems that are part of the bundle, or the path to a given gem"
- long_desc <<-D
- Show lists the names and versions of all gems that are required by your Gemfile.
- Calling show with [GEM] will list the exact location of that gem on your machine.
- D
- method_option "paths", :type => :boolean,
- :banner => "List the paths of all gems that are required by your Gemfile."
- method_option "outdated", :type => :boolean,
- :banner => "Show verbose output including whether gems are outdated."
- def show(gem_name = nil)
- if ARGV[0] == "show"
- rest = ARGV[1..-1]
-
- new_command = rest.find {|arg| !arg.start_with?("--") } ? "info" : "list"
-
- new_arguments = rest.map do |arg|
- next arg if arg != "--paths"
- next "--path" if new_command == "info"
+ unless Bundler.feature_flag.bundler_3_mode?
+ desc "show GEM [OPTIONS]", "Shows all gems that are part of the bundle, or the path to a given gem"
+ long_desc <<-D
+ Show lists the names and versions of all gems that are required by your Gemfile.
+ Calling show with [GEM] will list the exact location of that gem on your machine.
+ D
+ method_option "paths", :type => :boolean,
+ :banner => "List the paths of all gems that are required by your Gemfile."
+ method_option "outdated", :type => :boolean,
+ :banner => "Show verbose output including whether gems are outdated."
+ def show(gem_name = nil)
+ if ARGV[0] == "show"
+ rest = ARGV[1..-1]
+
+ if flag = rest.find{|arg| ["--verbose", "--outdated"].include?(arg) }
+ Bundler::SharedHelpers.major_deprecation(2, "the `#{flag}` flag to `bundle show` was undocumented and will be removed without replacement")
+ else
+ new_command = rest.find {|arg| !arg.start_with?("--") } ? "info" : "list"
+
+ new_arguments = rest.map do |arg|
+ next arg if arg != "--paths"
+ next "--path" if new_command == "info"
+ end
+
+ old_argv = ARGV.join(" ")
+ new_argv = [new_command, *new_arguments.compact].join(" ")
+
+ Bundler::SharedHelpers.major_deprecation(2, "use `bundle #{new_argv}` instead of `bundle #{old_argv}`")
+ end
end
-
- old_argv = ARGV.join(" ")
- new_argv = [new_command, *new_arguments.compact].join(" ")
-
- Bundler::SharedHelpers.major_deprecation(2, "use `bundle #{new_argv}` instead of `bundle #{old_argv}`")
- end
- require "bundler/cli/show"
- Show.new(options, gem_name).run
- end
- # TODO: 2.0 remove `bundle show`
-
- if Bundler.feature_flag.list_command?
- desc "list", "List all gems in the bundle"
- method_option "name-only", :type => :boolean, :banner => "print only the gem names"
- method_option "only-group", :type => :string, :banner => "print gems from a particular group"
- method_option "without-group", :type => :string, :banner => "print all gems expect from a group"
- method_option "paths", :type => :boolean, :banner => "print the path to each gem in the bundle"
- def list
- require "bundler/cli/list"
- List.new(options).run
+ require_relative "cli/show"
+ Show.new(options, gem_name).run
end
+ end
- map %w[ls] => "list"
- else
- map %w[list] => "show"
+ desc "list", "List all gems in the bundle"
+ method_option "name-only", :type => :boolean, :banner => "print only the gem names"
+ method_option "only-group", :type => :string, :banner => "print gems from a particular group"
+ method_option "without-group", :type => :string, :banner => "print all gems except from a group"
+ method_option "paths", :type => :boolean, :banner => "print the path to each gem in the bundle"
+ def list
+ require_relative "cli/list"
+ List.new(options).run
end
+ map %w[ls] => "list"
+
desc "info GEM [OPTIONS]", "Show information for the given gem"
method_option "path", :type => :boolean, :banner => "Print full path to gem"
def info(gem_name)
- require "bundler/cli/info"
+ require_relative "cli/info"
Info.new(options, gem_name).run
end
@@ -350,7 +352,7 @@ module Bundler
method_option "all", :type => :boolean, :banner =>
"Install binstubs for all gems"
def binstubs(*gems)
- require "bundler/cli/binstubs"
+ require_relative "cli/binstubs"
Binstubs.new(options, gems).run
end
@@ -361,12 +363,14 @@ module Bundler
method_option "version", :aliases => "-v", :type => :string
method_option "group", :aliases => "-g", :type => :string
method_option "source", :aliases => "-s", :type => :string
+ method_option "git", :type => :string
+ method_option "branch", :type => :string
method_option "skip-install", :type => :boolean, :banner =>
"Adds gem to the Gemfile but does not install it"
method_option "optimistic", :type => :boolean, :banner => "Adds optimistic declaration of version to gem"
method_option "strict", :type => :boolean, :banner => "Adds strict declaration of version to gem"
def add(*gems)
- require "bundler/cli/add"
+ require_relative "cli/add"
Add.new(options.dup, gems).run
end
@@ -402,7 +406,7 @@ module Bundler
method_option "only-explicit", :type => :boolean, :banner =>
"Only list gems specified in your Gemfile, not their dependencies"
def outdated(*gems)
- require "bundler/cli/outdated"
+ require_relative "cli/outdated"
Outdated.new(options, gems).run
end
@@ -417,7 +421,7 @@ module Bundler
method_option "all-platforms", :type => :boolean, :banner => "Include gems for all platforms present in the lockfile, not only the current one"
method_option "no-prune", :type => :boolean, :banner => "Don't remove stale gems from the cache."
def cache
- require "bundler/cli/cache"
+ require_relative "cli/cache"
Cache.new(options).run
end
end
@@ -445,7 +449,7 @@ module Bundler
bundle without having to download any additional gems.
D
def package
- require "bundler/cli/package"
+ require_relative "cli/package"
Package.new(options).run
end
map %w[pack] => :package
@@ -460,7 +464,7 @@ module Bundler
D
map "e" => "exec"
def exec(*args)
- require "bundler/cli/exec"
+ require_relative "cli/exec"
Exec.new(options, args).run
end
@@ -476,19 +480,19 @@ module Bundler
will show the current value, as well as any superceded values and
where they were specified.
D
- require "bundler/cli/config"
+ require_relative "cli/config"
subcommand "config", Config
desc "open GEM", "Opens the source directory of the given bundled gem"
def open(name)
- require "bundler/cli/open"
+ require_relative "cli/open"
Open.new(options, name).run
end
- if Bundler.feature_flag.console_command?
+ unless Bundler.feature_flag.bundler_3_mode?
desc "console [GROUP]", "Opens an IRB session with the bundle pre-loaded"
def console(group = nil)
- require "bundler/cli/console"
+ require_relative "cli/console"
Console.new(options, group).run
end
end
@@ -522,7 +526,7 @@ module Bundler
end
end
- if Bundler.feature_flag.viz_command?
+ unless Bundler.feature_flag.bundler_3_mode?
desc "viz [OPTIONS]", "Generates a visual dependency graph", :hide => true
long_desc <<-D
Viz generates a PNG file of the current Gemfile as a dependency graph.
@@ -536,7 +540,7 @@ module Bundler
method_option :without, :type => :array, :default => [], :aliases => "-W", :banner => "GROUP[ GROUP...]", :desc => "Exclude gems that are part of the specified named group."
def viz
SharedHelpers.major_deprecation 2, "The `viz` command has been moved to the `bundle-viz` gem, see https://github.com/bundler/bundler-viz"
- require "bundler/cli/viz"
+ require_relative "cli/viz"
Viz.new(options.dup).run
end
end
@@ -545,14 +549,14 @@ module Bundler
desc "gem NAME [OPTIONS]", "Creates a skeleton for creating a rubygem"
method_option :exe, :type => :boolean, :default => false, :aliases => ["--bin", "-b"], :desc => "Generate a binary executable for your library."
- method_option :coc, :type => :boolean, :desc => "Generate a code of conduct file. Set a default with `bundle config gem.coc true`."
+ method_option :coc, :type => :boolean, :desc => "Generate a code of conduct file. Set a default with `bundle config set gem.coc true`."
method_option :edit, :type => :string, :aliases => "-e", :required => false, :banner => "EDITOR",
:lazy_default => [ENV["BUNDLER_EDITOR"], ENV["VISUAL"], ENV["EDITOR"]].find {|e| !e.nil? && !e.empty? },
:desc => "Open generated gemspec in the specified editor (defaults to $EDITOR or $BUNDLER_EDITOR)"
method_option :ext, :type => :boolean, :default => false, :desc => "Generate the boilerplate for C extension code"
- method_option :mit, :type => :boolean, :desc => "Generate an MIT license file. Set a default with `bundle config gem.mit true`."
+ method_option :mit, :type => :boolean, :desc => "Generate an MIT license file. Set a default with `bundle config set gem.mit true`."
method_option :test, :type => :string, :lazy_default => "rspec", :aliases => "-t", :banner => "rspec",
- :desc => "Generate a test directory for your library, either rspec or minitest. Set a default with `bundle config gem.test rspec`."
+ :desc => "Generate a test directory for your library, either rspec or minitest. Set a default with `bundle config set gem.test rspec`."
def gem(name)
end
@@ -560,7 +564,7 @@ module Bundler
def gem_command.run(instance, args = [])
arity = 1 # name
- require "bundler/cli/gem"
+ require_relative "cli/gem"
cmd_args = args + [instance]
cmd_args.unshift(instance.options)
@@ -588,7 +592,7 @@ module Bundler
method_option "force", :type => :boolean, :default => false, :banner =>
"Forces clean even if --path is not set"
def clean
- require "bundler/cli/clean"
+ require_relative "cli/clean"
Clean.new(options.dup).run
end
@@ -596,7 +600,7 @@ module Bundler
method_option "ruby", :type => :boolean, :default => false, :banner =>
"only display ruby related platform information"
def platform
- require "bundler/cli/platform"
+ require_relative "cli/platform"
Platform.new(options).run
end
@@ -607,7 +611,7 @@ module Bundler
"Install gem into a bundler group"
def inject(name, version)
SharedHelpers.major_deprecation 2, "The `inject` command has been replaced by the `add` command"
- require "bundler/cli/inject"
+ require_relative "cli/inject"
Inject.new(options.dup, name, version).run
end
@@ -639,7 +643,7 @@ module Bundler
method_option "conservative", :type => :boolean, :banner =>
"If updating, use bundle install conservative update behavior and do not allow shared dependencies to be updated"
def lock
- require "bundler/cli/lock"
+ require_relative "cli/lock"
Lock.new(options).run
end
@@ -659,13 +663,13 @@ module Bundler
method_option "quiet", :type => :boolean, :banner =>
"Only output warnings and errors."
def doctor
- require "bundler/cli/doctor"
+ require_relative "cli/doctor"
Doctor.new(options).run
end
desc "issue", "Learn how to report an issue in Bundler"
def issue
- require "bundler/cli/issue"
+ require_relative "cli/issue"
Issue.new.run
end
@@ -676,12 +680,12 @@ module Bundler
checkout --force`.
D
def pristine(*gems)
- require "bundler/cli/pristine"
+ require_relative "cli/pristine"
Pristine.new(gems).run
end
if Bundler.feature_flag.plugins?
- require "bundler/cli/plugin"
+ require_relative "cli/plugin"
desc "plugin", "Manage the bundler plugins"
subcommand "plugin", Plugin
end
@@ -714,7 +718,7 @@ module Bundler
# Automatically invoke `bundle install` and resume if
# Bundler.settings[:auto_install] exists. This is set through config cmd
- # `bundle config auto_install 1`.
+ # `bundle config set auto_install 1`.
#
# Note that this method `nil`s out the global Definition object, so it
# should be called first, before you instantiate anything like an
@@ -786,5 +790,22 @@ module Bundler
rescue RuntimeError
nil
end
+
+ def remembered_flag_deprecation(name)
+ option = current_command.options[name]
+ flag_name = option.switch_name
+
+ name_index = ARGV.find {|arg| flag_name == arg }
+ return unless name_index
+
+ value = options[name]
+ value = value.join(" ").to_s if option.type == :array
+
+ Bundler::SharedHelpers.major_deprecation 2,\
+ "The `#{flag_name}` flag is deprecated because it relies on being " \
+ "remembered accross bundler invokations, which bundler will no longer " \
+ "do in future versions. Instead please use `bundle config #{name} " \
+ "'#{value}'`, and stop using this flag"
+ end
end
end
diff --git a/lib/bundler/cli/cache.rb b/lib/bundler/cli/cache.rb
index 9d2ba87d34..cb7958e5d0 100644
--- a/lib/bundler/cli/cache.rb
+++ b/lib/bundler/cli/cache.rb
@@ -29,7 +29,7 @@ module Bundler
if Bundler.definition.has_local_dependencies? && !Bundler.feature_flag.cache_all?
Bundler.ui.warn "Your Gemfile contains path and git dependencies. If you want " \
"to package them as well, please pass the --all flag. This will be the default " \
- "on Bundler 2.0."
+ "on Bundler 3.0."
end
end
end
diff --git a/lib/bundler/cli/common.rb b/lib/bundler/cli/common.rb
index 09a1753337..5ec541f722 100644
--- a/lib/bundler/cli/common.rb
+++ b/lib/bundler/cli/common.rb
@@ -49,10 +49,6 @@ module Bundler
end
def self.ask_for_spec_from(specs)
- if !$stdout.tty? && ENV["BUNDLE_SPEC_RUN"].nil?
- raise GemNotFound, gem_not_found_message(name, Bundler.definition.dependencies)
- end
-
specs.each_with_index do |spec, index|
Bundler.ui.info "#{index.succ} : #{spec.name}", true
end
@@ -63,7 +59,7 @@ module Bundler
end
def self.gem_not_found_message(missing_gem_name, alternatives)
- require "bundler/similarity_detector"
+ require_relative "../similarity_detector"
message = "Could not find gem '#{missing_gem_name}'."
alternate_names = alternatives.map {|a| a.respond_to?(:name) ? a.name : a }
suggestions = SimilarityDetector.new(alternate_names).similar_word_list(missing_gem_name)
@@ -80,7 +76,9 @@ module Bundler
def self.configure_gem_version_promoter(definition, options)
patch_level = patch_level_options(options)
+ patch_level << :patch if patch_level.empty? && Bundler.settings[:prefer_patch]
raise InvalidOption, "Provide only one of the following options: #{patch_level.join(", ")}" unless patch_level.length <= 1
+
definition.gem_version_promoter.tap do |gvp|
gvp.level = patch_level.first || :major
gvp.strict = options[:strict] || options["update-strict"] || options["filter-strict"]
diff --git a/lib/bundler/cli/config.rb b/lib/bundler/cli/config.rb
index cc89465adc..1df2a55d9a 100644
--- a/lib/bundler/cli/config.rb
+++ b/lib/bundler/cli/config.rb
@@ -14,8 +14,20 @@ module Bundler
scope_options
method_option :delete, :type => :boolean, :banner => "delete"
def base(name = nil, *value)
- SharedHelpers.major_deprecation 3,
- "Using the `config` command without a subcommand [list, get, set, unset]"
+ new_args =
+ if ARGV.size == 1
+ ["config", "list"]
+ elsif ARGV.include?("--delete")
+ ARGV.map {|arg| arg == "--delete" ? "unset" : arg }
+ elsif ARGV.include?("--global") || ARGV.include?("--local") || ARGV.size == 3
+ ["config", "set", *ARGV[1..-1]]
+ else
+ ["config", "get", ARGV[1]]
+ end
+
+ SharedHelpers.major_deprecation 2,
+ "Using the `config` command without a subcommand [list, get, set, unset] is deprecated and will be removed in the future. Use `bundle #{new_args.join(" ")}` instead."
+
Base.new(options, name, value, self).run
end
diff --git a/lib/bundler/cli/doctor.rb b/lib/bundler/cli/doctor.rb
index 3e0898ff8a..1b3913a300 100644
--- a/lib/bundler/cli/doctor.rb
+++ b/lib/bundler/cli/doctor.rb
@@ -4,8 +4,8 @@ require "rbconfig"
module Bundler
class CLI::Doctor
- DARWIN_REGEX = /\s+(.+) \(compatibility /
- LDD_REGEX = /\t\S+ => (\S+) \(\S+\)/
+ DARWIN_REGEX = /\s+(.+) \(compatibility /.freeze
+ LDD_REGEX = /\t\S+ => (\S+) \(\S+\)/.freeze
attr_reader :options
@@ -56,7 +56,7 @@ module Bundler
end
def check!
- require "bundler/cli/check"
+ require_relative "check"
Bundler::CLI::Check.new({}).run
end
diff --git a/lib/bundler/cli/exec.rb b/lib/bundler/cli/exec.rb
index c29d632307..6fdd55d106 100644
--- a/lib/bundler/cli/exec.rb
+++ b/lib/bundler/cli/exec.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-require "bundler/current_ruby"
+require_relative "../current_ruby"
module Bundler
class CLI::Exec
@@ -69,7 +69,7 @@ module Bundler
Process.setproctitle(process_title(file, args)) if Process.respond_to?(:setproctitle)
ui = Bundler.ui
Bundler.ui = nil
- require "bundler/setup"
+ require_relative "../setup"
TRAPPED_SIGNALS.each {|s| trap(s, "DEFAULT") }
Kernel.load(file)
rescue SystemExit, SignalException
diff --git a/lib/bundler/cli/gem.rb b/lib/bundler/cli/gem.rb
index 58e2f8a3fd..3db1ec7843 100644
--- a/lib/bundler/cli/gem.rb
+++ b/lib/bundler/cli/gem.rb
@@ -11,7 +11,7 @@ module Bundler
class CLI::Gem
TEST_FRAMEWORK_VERSIONS = {
"rspec" => "3.0",
- "minitest" => "5.0"
+ "minitest" => "5.0",
}.freeze
attr_reader :options, :gem_name, :thor, :name, :target
@@ -57,7 +57,7 @@ module Bundler
:ext => options[:ext],
:exe => options[:exe],
:bundler_version => bundler_dependency_version,
- :github_username => github_username.empty? ? "[USERNAME]" : github_username
+ :github_username => github_username.empty? ? "[USERNAME]" : github_username,
}
ensure_safe_gem_name(name, constant_array)
@@ -69,7 +69,7 @@ module Bundler
"Rakefile.tt" => "Rakefile",
"README.md.tt" => "README.md",
"bin/console.tt" => "bin/console",
- "bin/setup.tt" => "bin/setup"
+ "bin/setup.tt" => "bin/setup",
}
executables = %w[
diff --git a/lib/bundler/cli/info.rb b/lib/bundler/cli/info.rb
index 958b525067..4733675e8c 100644
--- a/lib/bundler/cli/info.rb
+++ b/lib/bundler/cli/info.rb
@@ -9,18 +9,24 @@ module Bundler
end
def run
+ Bundler.ui.silence do
+ Bundler.definition.validate_runtime!
+ Bundler.load.lock
+ end
+
spec = spec_for_gem(gem_name)
- spec_not_found(gem_name) unless spec
- return print_gem_path(spec) if @options[:path]
- print_gem_info(spec)
+ if spec
+ return print_gem_path(spec) if @options[:path]
+ print_gem_info(spec)
+ end
end
private
def spec_for_gem(gem_name)
spec = Bundler.definition.specs.find {|s| s.name == gem_name }
- spec || default_gem_spec(gem_name)
+ spec || default_gem_spec(gem_name) || Bundler::CLI::Common.select_spec(gem_name, :regex_match)
end
def default_gem_spec(gem_name)
@@ -34,7 +40,13 @@ module Bundler
end
def print_gem_path(spec)
- Bundler.ui.info spec.full_gem_path
+ path = if spec.name == "bundler"
+ File.expand_path("../../../..", __FILE__)
+ else
+ spec.full_gem_path
+ end
+
+ Bundler.ui.info path
end
def print_gem_info(spec)
diff --git a/lib/bundler/cli/init.rb b/lib/bundler/cli/init.rb
index 40df797269..65dd08dfe9 100644
--- a/lib/bundler/cli/init.rb
+++ b/lib/bundler/cli/init.rb
@@ -41,7 +41,7 @@ module Bundler
private
def gemfile
- @gemfile ||= Bundler.feature_flag.init_gems_rb? ? "gems.rb" : "Gemfile"
+ @gemfile ||= Bundler.settings[:init_gems_rb] ? "gems.rb" : "Gemfile"
end
end
end
diff --git a/lib/bundler/cli/install.rb b/lib/bundler/cli/install.rb
index 03edc7fbd2..cf0c71d766 100644
--- a/lib/bundler/cli/install.rb
+++ b/lib/bundler/cli/install.rb
@@ -80,7 +80,7 @@ module Bundler
warn_ambiguous_gems
if CLI::Common.clean_after_install?
- require "bundler/cli/clean"
+ require_relative "clean"
Bundler::CLI::Clean.new(options).run
end
rescue GemNotFound, VersionConflict => e
diff --git a/lib/bundler/cli/issue.rb b/lib/bundler/cli/issue.rb
index 91f827ea99..054ce76315 100644
--- a/lib/bundler/cli/issue.rb
+++ b/lib/bundler/cli/issue.rb
@@ -13,10 +13,10 @@ module Bundler
https://github.com/bundler/bundler/blob/master/doc/TROUBLESHOOTING.md
2. Instructions for common Bundler uses can be found on the documentation
- site: http://bundler.io/
+ site: https://bundler.io/
3. Information about each Bundler command can be found in the Bundler
- man pages: http://bundler.io/man/bundle.1.html
+ man pages: https://bundler.io/man/bundle.1.html
Hopefully the troubleshooting steps above resolved your problem! If things
still aren't working the way you expect them to, please let us know so
@@ -33,7 +33,7 @@ module Bundler
end
def doctor
- require "bundler/cli/doctor"
+ require_relative "doctor"
Bundler::CLI::Doctor.new({}).run
end
end
diff --git a/lib/bundler/cli/outdated.rb b/lib/bundler/cli/outdated.rb
index 6cbb3452cb..3a0521de1e 100644
--- a/lib/bundler/cli/outdated.rb
+++ b/lib/bundler/cli/outdated.rb
@@ -221,9 +221,9 @@ module Bundler
def check_for_deployment_mode
return unless Bundler.frozen_bundle?
suggested_command = if Bundler.settings.locations("frozen")[:global]
- "bundle config --delete frozen"
+ "bundle config unset frozen"
elsif Bundler.settings.locations("deployment").keys.&([:global, :local]).any?
- "bundle config --delete deployment"
+ "bundle config unset deployment"
else
"bundle install --no-deployment"
end
diff --git a/lib/bundler/cli/package.rb b/lib/bundler/cli/package.rb
index 2dcd0e1e29..120a3fdcf3 100644
--- a/lib/bundler/cli/package.rb
+++ b/lib/bundler/cli/package.rb
@@ -25,7 +25,7 @@ module Bundler
private
def install
- require "bundler/cli/install"
+ require_relative "install"
options = self.options.dup
if Bundler.settings[:cache_all_platforms]
options["local"] = false
@@ -42,7 +42,7 @@ module Bundler
if Bundler.definition.has_local_dependencies? && !Bundler.feature_flag.cache_all?
Bundler.ui.warn "Your Gemfile contains path and git dependencies. If you want " \
"to package them as well, please pass the --all flag. This will be the default " \
- "on Bundler 2.0."
+ "on Bundler 3.0."
end
end
end
diff --git a/lib/bundler/cli/plugin.rb b/lib/bundler/cli/plugin.rb
index b5dd5b6d4b..1155c4ec9b 100644
--- a/lib/bundler/cli/plugin.rb
+++ b/lib/bundler/cli/plugin.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-require "bundler/vendored_thor"
+require_relative "../vendored_thor"
module Bundler
class CLI::Plugin < Thor
desc "install PLUGINS", "Install the plugin from the source"
diff --git a/lib/bundler/cli/show.rb b/lib/bundler/cli/show.rb
index 61756801b2..3748c25b89 100644
--- a/lib/bundler/cli/show.rb
+++ b/lib/bundler/cli/show.rb
@@ -24,7 +24,7 @@ module Bundler
return unless spec
path = spec.full_gem_path
unless File.directory?(path)
- Bundler.ui.warn "The gem #{gem_name} has been deleted. It was installed at:"
+ return Bundler.ui.warn "The gem #{gem_name} has been deleted. It was installed at: #{path}"
end
end
return Bundler.ui.info(path)
diff --git a/lib/bundler/cli/update.rb b/lib/bundler/cli/update.rb
index b088853768..45d0374eef 100644
--- a/lib/bundler/cli/update.rb
+++ b/lib/bundler/cli/update.rb
@@ -58,21 +58,32 @@ module Bundler
Bundler.settings.set_command_option_if_given :jobs, opts["jobs"]
Bundler.definition.validate_runtime!
+
+ if locked_gems = Bundler.definition.locked_gems
+ previous_locked_specs = locked_gems.specs.reduce({}) do |h, s|
+ h[s.name] = { :version => s.version, :source => s.source.to_s }
+ h
+ end
+ end
+
installer = Installer.install Bundler.root, Bundler.definition, opts
Bundler.load.cache if Bundler.app_cache.exist?
if CLI::Common.clean_after_install?
- require "bundler/cli/clean"
+ require_relative "clean"
Bundler::CLI::Clean.new(options).run
end
- if locked_gems = Bundler.definition.locked_gems
+ if locked_gems
gems.each do |name|
- locked_version = locked_gems.specs.find {|s| s.name == name }
- locked_version &&= locked_version.version
- next unless locked_version
- new_version = Bundler.definition.specs[name].first
- new_version &&= new_version.version
+ locked_spec = previous_locked_specs[name]
+ next unless locked_spec
+ locked_source = locked_spec[:source]
+ locked_version = locked_spec[:version]
+ new_spec = Bundler.definition.specs[name].first
+ new_source = new_spec.source.to_s
+ new_version = new_spec.version
+ next if locked_source != new_source
if !new_version
Bundler.ui.warn "Bundler attempted to update #{name} but it was removed from the bundle"
elsif new_version < locked_version
diff --git a/lib/bundler/compact_index_client.rb b/lib/bundler/compact_index_client.rb
index 6c241ca07a..a5120dbba4 100644
--- a/lib/bundler/compact_index_client.rb
+++ b/lib/bundler/compact_index_client.rb
@@ -13,16 +13,11 @@ module Bundler
class Error < StandardError; end
- require "bundler/compact_index_client/cache"
- require "bundler/compact_index_client/updater"
+ require_relative "compact_index_client/cache"
+ require_relative "compact_index_client/updater"
attr_reader :directory
- # @return [Lambda] A lambda that takes an array of inputs and a block, and
- # maps the inputs with the block in parallel.
- #
- attr_accessor :in_parallel
-
def initialize(directory, fetcher)
@directory = Pathname.new(directory)
@updater = Updater.new(fetcher)
@@ -31,7 +26,28 @@ module Bundler
@info_checksums_by_name = {}
@parsed_checksums = false
@mutex = Mutex.new
- @in_parallel = lambda do |inputs, &blk|
+ end
+
+ def execution_mode=(block)
+ Bundler::CompactIndexClient.debug { "execution_mode=" }
+ @endpoints = Set.new
+
+ @execution_mode = block
+ end
+
+ # @return [Lambda] A lambda that takes an array of inputs and a block, and
+ # maps the inputs with the block in parallel.
+ #
+ def execution_mode
+ @execution_mode || sequentially
+ end
+
+ def sequential_execution_mode!
+ self.execution_mode = sequentially
+ end
+
+ def sequentially
+ @sequentially ||= lambda do |inputs, &blk|
inputs.map(&blk)
end
end
@@ -51,7 +67,7 @@ module Bundler
def dependencies(names)
Bundler::CompactIndexClient.debug { "dependencies(#{names})" }
- in_parallel.call(names) do |name|
+ execution_mode.call(names) do |name|
update_info(name)
@cache.dependencies(name).map {|d| d.unshift(name) }
end.flatten(1)
diff --git a/lib/bundler/compact_index_client/updater.rb b/lib/bundler/compact_index_client/updater.rb
index 4d6eb80044..40232019bc 100644
--- a/lib/bundler/compact_index_client/updater.rb
+++ b/lib/bundler/compact_index_client/updater.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-require "bundler/vendored_fileutils"
+require_relative "../vendored_fileutils"
require "stringio"
require "zlib"
@@ -95,11 +95,7 @@ module Bundler
end
def slice_body(body, range)
- if body.respond_to?(:byteslice)
- body.byteslice(range)
- else # pre-1.9.3
- body.unpack("@#{range.first}a#{range.end + 1}").first
- end
+ body.byteslice(range)
end
def checksum_for_file(path)
diff --git a/lib/bundler/compatibility_guard.rb b/lib/bundler/compatibility_guard.rb
index 750a1db04f..eaff1a10d4 100644
--- a/lib/bundler/compatibility_guard.rb
+++ b/lib/bundler/compatibility_guard.rb
@@ -1,14 +1,9 @@
# frozen_string_literal: false
-require "rubygems"
-require "bundler/version"
+require_relative "version"
if Bundler::VERSION.split(".").first.to_i >= 2
if Gem::Version.new(Object::RUBY_VERSION.dup) < Gem::Version.new("2.3")
abort "Bundler 2 requires Ruby 2.3 or later. Either install bundler 1 or update to a supported Ruby version."
end
-
- if Gem::Version.new(Gem::VERSION.dup) < Gem::Version.new("2.5")
- abort "Bundler 2 requires RubyGems 2.5 or later. Either install bundler 1 or update to a supported RubyGems version."
- end
end
diff --git a/lib/bundler/definition.rb b/lib/bundler/definition.rb
index 9d6fbfff59..506b0620d2 100644
--- a/lib/bundler/definition.rb
+++ b/lib/bundler/definition.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-require "bundler/lockfile_parser"
+require_relative "lockfile_parser"
require "set"
module Bundler
@@ -385,7 +385,7 @@ module Bundler
end
def to_lock
- require "bundler/lockfile_generator"
+ require_relative "lockfile_generator"
LockfileGenerator.generate(self)
end
@@ -397,9 +397,9 @@ module Bundler
unless explicit_flag
suggested_command = if Bundler.settings.locations("frozen")[:global]
- "bundle config --delete frozen"
+ "bundle config unset frozen"
elsif Bundler.settings.locations("deployment").keys.&([:global, :local]).any?
- "bundle config --delete deployment"
+ "bundle config unset deployment"
else
"bundle install --no-deployment"
end
@@ -643,7 +643,7 @@ module Bundler
end
def converge_rubygems_sources
- return false if Bundler.feature_flag.lockfile_uses_separate_rubygems_sources?
+ return false if Bundler.feature_flag.disable_multisource?
changes = false
@@ -915,7 +915,7 @@ module Bundler
# look for that gemspec (or its dependencies)
default = sources.default_source
source_requirements = { :default => default }
- default = nil unless Bundler.feature_flag.lockfile_uses_separate_rubygems_sources?
+ default = nil unless Bundler.feature_flag.disable_multisource?
dependencies.each do |dep|
next unless source = dep.source || default
source_requirements[dep.name] = source
@@ -929,7 +929,7 @@ module Bundler
def pinned_spec_names(skip = nil)
pinned_names = []
- default = Bundler.feature_flag.lockfile_uses_separate_rubygems_sources? && sources.default_source
+ default = Bundler.feature_flag.disable_multisource? && sources.default_source
@dependencies.each do |dep|
next unless dep_source = dep.source || default
next if dep_source == skip
diff --git a/lib/bundler/dependency.rb b/lib/bundler/dependency.rb
index 8840ad6a9c..0d588bc892 100644
--- a/lib/bundler/dependency.rb
+++ b/lib/bundler/dependency.rb
@@ -1,13 +1,13 @@
# frozen_string_literal: true
require "rubygems/dependency"
-require "bundler/shared_helpers"
-require "bundler/rubygems_ext"
+require_relative "shared_helpers"
+require_relative "rubygems_ext"
module Bundler
class Dependency < Gem::Dependency
attr_reader :autorequire
- attr_reader :groups, :platforms, :gemfile
+ attr_reader :groups, :platforms, :gemfile, :git, :branch
PLATFORM_MAP = {
:ruby => Gem::Platform::RUBY,
@@ -84,6 +84,8 @@ module Bundler
@autorequire = nil
@groups = Array(options["group"] || :default).map(&:to_sym)
@source = options["source"]
+ @git = options["git"]
+ @branch = options["branch"]
@platforms = Array(options["platforms"])
@env = options["env"]
@should_include = options.fetch("should_include", true)
diff --git a/lib/bundler/deployment.rb b/lib/bundler/deployment.rb
index 291e158ca0..b432ae6ae1 100644
--- a/lib/bundler/deployment.rb
+++ b/lib/bundler/deployment.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-require "bundler/shared_helpers"
+require_relative "shared_helpers"
Bundler::SharedHelpers.major_deprecation 2, "Bundler no longer integrates with " \
"Capistrano, but Capistrano provides its own integration with " \
"Bundler via the capistrano-bundler gem. Use it instead."
diff --git a/lib/bundler/dsl.rb b/lib/bundler/dsl.rb
index 6707fc5893..d3ead2a1ff 100644
--- a/lib/bundler/dsl.rb
+++ b/lib/bundler/dsl.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
-require "bundler/dependency"
-require "bundler/ruby_dsl"
+require_relative "dependency"
+require_relative "ruby_dsl"
module Bundler
class Dsl
@@ -45,7 +45,7 @@ module Bundler
@gemfiles << expanded_gemfile_path
contents ||= Bundler.read_file(@gemfile.to_s)
instance_eval(contents.dup.untaint, gemfile.to_s, 1)
- rescue Exception => e
+ rescue Exception => e # rubocop:disable Lint/RescueException
message = "There was an error " \
"#{e.is_a?(GemfileEvalError) ? "evaluating" : "parsing"} " \
"`#{File.basename gemfile.to_s}`: #{e.message}"
@@ -290,37 +290,21 @@ module Bundler
warn_deprecated_git_source(:github, <<-'RUBY'.strip, 'Change any "reponame" :github sources to "username/reponame".')
"https://github.com/#{repo_name}.git"
RUBY
- # It would be better to use https instead of the git protocol, but this
- # can break deployment of existing locked bundles when switching between
- # different versions of Bundler. The change will be made in 2.0, which
- # does not guarantee compatibility with the 1.x series.
- #
- # See https://github.com/bundler/bundler/pull/2569 for discussion
- #
- # This can be overridden by adding this code to your Gemfiles:
- #
- # git_source(:github) do |repo_name|
- # repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
- # "https://github.com/#{repo_name}.git"
- # end
repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
- # TODO: 2.0 upgrade this setting to the default
if Bundler.feature_flag.github_https?
- Bundler::SharedHelpers.major_deprecation 2, "The `github.https` setting will be removed"
"https://github.com/#{repo_name}.git"
else
+ Bundler::SharedHelpers.major_deprecation 2, "Setting `github.https` to false is deprecated and won't be supported in the future."
"git://github.com/#{repo_name}.git"
end
end
- # TODO: 2.0 remove this deprecated git source
git_source(:gist) do |repo_name|
warn_deprecated_git_source(:gist, '"https://gist.github.com/#{repo_name}.git"')
"https://gist.github.com/#{repo_name}.git"
end
- # TODO: 2.0 remove this deprecated git source
git_source(:bitbucket) do |repo_name|
warn_deprecated_git_source(:bitbucket, <<-'RUBY'.strip)
user_name, repo_name = repo_name.split("/")
@@ -441,10 +425,10 @@ repo_name ||= user_name
message = String.new
message << "You passed #{invalid_keys.map {|k| ":" + k }.join(", ")} "
message << if invalid_keys.size > 1
- "as options for #{command}, but they are invalid."
- else
- "as an option for #{command}, but it is invalid."
- end
+ "as options for #{command}, but they are invalid."
+ else
+ "as an option for #{command}, but it is invalid."
+ end
message << " Valid options are: #{valid_keys.join(", ")}."
message << " You may be able to resolve this by upgrading Bundler to the newest version."
@@ -474,7 +458,7 @@ repo_name ||= user_name
"should come from that source"
unless Bundler.feature_flag.bundler_2_mode?
msg += ". To downgrade this error to a warning, run " \
- "`bundle config --delete disable_multisource`"
+ "`bundle config unset disable_multisource`"
end
raise GemfileEvalError, msg
else
@@ -482,13 +466,12 @@ repo_name ||= user_name
"Using `source` more than once without a block is a security risk, and " \
"may result in installing unexpected gems. To resolve this warning, use " \
"a block to indicate which gems should come from the secondary source. " \
- "To upgrade this warning to an error, run `bundle config " \
+ "To upgrade this warning to an error, run `bundle config set " \
"disable_multisource true`."
end
end
def warn_deprecated_git_source(name, replacement, additional_message = nil)
- # TODO: 2.0 remove deprecation
additional_message &&= " #{additional_message}"
replacement = if replacement.count("\n").zero?
"{|repo_name| #{replacement} }"
@@ -496,8 +479,8 @@ repo_name ||= user_name
"do |repo_name|\n#{replacement.to_s.gsub(/^/, " ")}\n end"
end
- Bundler::SharedHelpers.major_deprecation 2, <<-EOS
-The :#{name} git source is deprecated, and will be removed in Bundler 2.0.#{additional_message} Add this code to the top of your Gemfile to ensure it continues to work:
+ Bundler::SharedHelpers.major_deprecation 3, <<-EOS
+The :#{name} git source is deprecated, and will be removed in the future.#{additional_message} Add this code to the top of your Gemfile to ensure it continues to work:
git_source(:#{name}) #{replacement}
@@ -599,7 +582,7 @@ The :#{name} git source is deprecated, and will be removed in Bundler 2.0.#{addi
description = self.description
if dsl_path && description =~ /((#{Regexp.quote File.expand_path(dsl_path)}|#{Regexp.quote dsl_path.to_s}):\d+)/
trace_line = Regexp.last_match[1]
- description = description.sub(/#{Regexp.quote trace_line}:\s*/, "").sub("\n", " - ")
+ description = description.sub(/\n.*\n(\.\.\.)? *\^~+$/, "").sub(/#{Regexp.quote trace_line}:\s*/, "").sub("\n", " - ")
end
[trace_line, description]
end
diff --git a/lib/bundler/env.rb b/lib/bundler/env.rb
index 9cd9b8baca..a08db08aa0 100644
--- a/lib/bundler/env.rb
+++ b/lib/bundler/env.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
-require "bundler/rubygems_integration"
-require "bundler/source/git/git_proxy"
+require_relative "rubygems_integration"
+require_relative "source/git/git_proxy"
module Bundler
class Env
@@ -100,8 +100,9 @@ module Bundler
out << [" Full Path", Gem.ruby]
out << [" Config Dir", Pathname.new(Gem::ConfigFile::SYSTEM_WIDE_CONFIG_FILE).dirname]
out << ["RubyGems", Gem::VERSION]
- out << [" Gem Home", ENV.fetch("GEM_HOME") { Gem.dir }]
- out << [" Gem Path", ENV.fetch("GEM_PATH") { Gem.path.join(File::PATH_SEPARATOR) }]
+ out << [" Gem Home", Gem.dir]
+ out << [" Gem Path", Gem.path.join(File::PATH_SEPARATOR)]
+ out << [" User Home", Gem.user_home]
out << [" User Path", Gem.user_dir]
out << [" Bin Dir", Gem.bindir]
if defined?(OpenSSL)
diff --git a/lib/bundler/feature_flag.rb b/lib/bundler/feature_flag.rb
index 0adbd9190f..07106abad7 100644
--- a/lib/bundler/feature_flag.rb
+++ b/lib/bundler/feature_flag.rb
@@ -27,38 +27,31 @@ module Bundler
(1..10).each {|v| define_method("bundler_#{v}_mode?") { major_version >= v } }
- settings_flag(:allow_bundler_dependency_conflicts) { bundler_2_mode? }
- settings_flag(:allow_offline_install) { bundler_2_mode? }
- settings_flag(:auto_clean_without_path) { bundler_2_mode? }
- settings_flag(:auto_config_jobs) { bundler_2_mode? }
- settings_flag(:cache_all) { bundler_2_mode? }
- settings_flag(:cache_command_is_package) { bundler_2_mode? }
- settings_flag(:console_command) { !bundler_2_mode? }
- settings_flag(:default_install_uses_path) { bundler_2_mode? }
- settings_flag(:deployment_means_frozen) { bundler_2_mode? }
- settings_flag(:disable_multisource) { bundler_2_mode? }
- settings_flag(:error_on_stderr) { bundler_2_mode? }
- settings_flag(:forget_cli_options) { bundler_2_mode? }
- settings_flag(:global_path_appends_ruby_scope) { bundler_2_mode? }
- settings_flag(:global_gem_cache) { bundler_2_mode? }
- settings_flag(:init_gems_rb) { bundler_2_mode? }
- settings_flag(:list_command) { bundler_2_mode? }
- settings_flag(:lockfile_uses_separate_rubygems_sources) { bundler_2_mode? }
- settings_flag(:only_update_to_newer_versions) { bundler_2_mode? }
- settings_flag(:path_relative_to_cwd) { bundler_2_mode? }
+ settings_flag(:allow_bundler_dependency_conflicts) { bundler_3_mode? }
+ settings_flag(:allow_offline_install) { bundler_3_mode? }
+ settings_flag(:auto_clean_without_path) { bundler_3_mode? }
+ settings_flag(:auto_config_jobs) { bundler_3_mode? }
+ settings_flag(:cache_all) { bundler_3_mode? }
+ settings_flag(:cache_command_is_package) { bundler_3_mode? }
+ settings_flag(:default_install_uses_path) { bundler_3_mode? }
+ settings_flag(:deployment_means_frozen) { bundler_3_mode? }
+ settings_flag(:disable_multisource) { bundler_3_mode? }
+ settings_flag(:forget_cli_options) { bundler_3_mode? }
+ settings_flag(:global_path_appends_ruby_scope) { bundler_3_mode? }
+ settings_flag(:global_gem_cache) { bundler_3_mode? }
+ settings_flag(:only_update_to_newer_versions) { bundler_3_mode? }
+ settings_flag(:path_relative_to_cwd) { bundler_3_mode? }
settings_flag(:plugins) { @bundler_version >= Gem::Version.new("1.14") }
- settings_flag(:prefer_gems_rb) { bundler_2_mode? }
- settings_flag(:print_only_version_number) { bundler_2_mode? }
- settings_flag(:setup_makes_kernel_gem_public) { !bundler_2_mode? }
- settings_flag(:skip_default_git_sources) { bundler_2_mode? }
- settings_flag(:specific_platform) { bundler_2_mode? }
- settings_flag(:suppress_install_using_messages) { bundler_2_mode? }
- settings_flag(:unlock_source_unlocks_spec) { !bundler_2_mode? }
- settings_flag(:update_requires_all_flag) { bundler_2_mode? }
- settings_flag(:use_gem_version_promoter_for_major_updates) { bundler_2_mode? }
- settings_flag(:viz_command) { !bundler_2_mode? }
+ settings_flag(:print_only_version_number) { bundler_3_mode? }
+ settings_flag(:setup_makes_kernel_gem_public) { !bundler_3_mode? }
+ settings_flag(:skip_default_git_sources) { bundler_4_mode? }
+ settings_flag(:specific_platform) { bundler_3_mode? }
+ settings_flag(:suppress_install_using_messages) { bundler_3_mode? }
+ settings_flag(:unlock_source_unlocks_spec) { !bundler_3_mode? }
+ settings_flag(:update_requires_all_flag) { bundler_3_mode? }
+ settings_flag(:use_gem_version_promoter_for_major_updates) { bundler_3_mode? }
- settings_option(:default_cli_command) { bundler_2_mode? ? :cli_help : :install }
+ settings_option(:default_cli_command) { bundler_3_mode? ? :cli_help : :install }
settings_method(:github_https?, "github.https") { bundler_2_mode? }
diff --git a/lib/bundler/fetcher.rb b/lib/bundler/fetcher.rb
index 4dd42e42ff..7ec41d62c0 100644
--- a/lib/bundler/fetcher.rb
+++ b/lib/bundler/fetcher.rb
@@ -1,9 +1,10 @@
# frozen_string_literal: true
-require "bundler/vendored_persistent"
+require_relative "vendored_persistent"
require "cgi"
require "securerandom"
require "zlib"
+require "rubygems/request"
module Bundler
# Handles all the fetching with the rubygems server
@@ -15,6 +16,8 @@ module Bundler
# This error is raised when it looks like the network is down
class NetworkDownError < HTTPError; end
+ # This error is raised if we should rate limit our requests to the API
+ class TooManyRequestsError < HTTPError; end
# This error is raised if the API returns a 413 (only printed in verbose)
class FallbackError < HTTPError; end
# This is the error raised if OpenSSL fails the cert verification
@@ -44,7 +47,7 @@ module Bundler
remote_uri = filter_uri(remote_uri)
super "Authentication is required for #{remote_uri}.\n" \
"Please supply credentials for this source. You can do this by running:\n" \
- " bundle config #{remote_uri} username:password"
+ " bundle config set #{remote_uri} username:password"
end
end
# This error is raised if HTTP authentication is provided, but incorrect.
@@ -226,7 +229,7 @@ module Bundler
"GO_SERVER_URL" => "go",
"SNAP_CI" => "snap",
"CI_NAME" => ENV["CI_NAME"],
- "CI" => "ci"
+ "CI" => "ci",
}
env_cis.find_all {|env, _| ENV[env] }.map {|_, ci| ci }
end
@@ -293,8 +296,7 @@ module Bundler
end
else
store.set_default_paths
- certs = File.expand_path("../ssl_certs/*/*.pem", __FILE__)
- Dir.glob(certs).each {|c| store.add_file c }
+ Gem::Request.get_cert_files.each {|c| store.add_file c }
end
store
end
diff --git a/lib/bundler/fetcher/compact_index.rb b/lib/bundler/fetcher/compact_index.rb
index cfc74d642c..1efd3e03af 100644
--- a/lib/bundler/fetcher/compact_index.rb
+++ b/lib/bundler/fetcher/compact_index.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
-require "bundler/fetcher/base"
-require "bundler/worker"
+require_relative "base"
+require_relative "../worker"
module Bundler
autoload :CompactIndexClient, "bundler/compact_index_client"
@@ -39,7 +39,13 @@ module Bundler
until remaining_gems.empty?
log_specs "Looking up gems #{remaining_gems.inspect}"
- deps = compact_index_client.dependencies(remaining_gems)
+ deps = begin
+ parallel_compact_index_client.dependencies(remaining_gems)
+ rescue TooManyRequestsError
+ @bundle_worker.stop if @bundle_worker
+ @bundle_worker = nil # reset it. Not sure if necessary
+ serial_compact_index_client.dependencies(remaining_gems)
+ end
next_gems = deps.map {|d| d[3].map(&:first).flatten(1) }.flatten(1).uniq
deps.each {|dep| gem_info << dep }
complete_gems.concat(deps.map(&:first)).uniq!
@@ -80,18 +86,26 @@ module Bundler
private
def compact_index_client
- @compact_index_client ||= begin
+ @compact_index_client ||=
SharedHelpers.filesystem_access(cache_path) do
CompactIndexClient.new(cache_path, client_fetcher)
- end.tap do |client|
- client.in_parallel = lambda do |inputs, &blk|
- func = lambda {|object, _index| blk.call(object) }
- worker = bundle_worker(func)
- inputs.each {|input| worker.enq(input) }
- inputs.map { worker.deq }
- end
end
+ end
+
+ def parallel_compact_index_client
+ compact_index_client.execution_mode = lambda do |inputs, &blk|
+ func = lambda {|object, _index| blk.call(object) }
+ worker = bundle_worker(func)
+ inputs.each {|input| worker.enq(input) }
+ inputs.map { worker.deq }
end
+
+ compact_index_client
+ end
+
+ def serial_compact_index_client
+ compact_index_client.sequential_execution_mode!
+ compact_index_client
end
def bundle_worker(func = nil)
diff --git a/lib/bundler/fetcher/dependency.rb b/lib/bundler/fetcher/dependency.rb
index 1430d1ebeb..c52c32fb5b 100644
--- a/lib/bundler/fetcher/dependency.rb
+++ b/lib/bundler/fetcher/dependency.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-require "bundler/fetcher/base"
+require_relative "base"
require "cgi"
module Bundler
diff --git a/lib/bundler/fetcher/downloader.rb b/lib/bundler/fetcher/downloader.rb
index e0c5d13e50..73f125af91 100644
--- a/lib/bundler/fetcher/downloader.rb
+++ b/lib/bundler/fetcher/downloader.rb
@@ -34,6 +34,8 @@ module Bundler
fetch(uri, new_headers)
when Net::HTTPRequestEntityTooLarge
raise FallbackError, response.body
+ when Net::HTTPTooManyRequests
+ raise TooManyRequestsError, response.body
when Net::HTTPUnauthorized
raise BadAuthenticationError, uri.host if uri.userinfo
raise AuthenticationRequiredError, uri.host
diff --git a/lib/bundler/fetcher/index.rb b/lib/bundler/fetcher/index.rb
index eb32186eea..9beb0e27d8 100644
--- a/lib/bundler/fetcher/index.rb
+++ b/lib/bundler/fetcher/index.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-require "bundler/fetcher/base"
+require_relative "base"
require "rubygems/remote_fetcher"
module Bundler
diff --git a/lib/bundler/friendly_errors.rb b/lib/bundler/friendly_errors.rb
index ae3299a7c8..45faf02020 100644
--- a/lib/bundler/friendly_errors.rb
+++ b/lib/bundler/friendly_errors.rb
@@ -1,8 +1,7 @@
-# encoding: utf-8
# frozen_string_literal: true
require "cgi"
-require "bundler/vendored_thor"
+require_relative "vendored_thor"
module Bundler
module FriendlyErrors
@@ -45,7 +44,7 @@ module Bundler
"Alternatively, you can increase the amount of memory the JVM is able to use by running Bundler with jruby -J-Xmx1024m -S bundle (JRuby defaults to 500MB)."
else request_issue_report_for(error)
end
- rescue
+ rescue StandardError
raise error
end
@@ -124,7 +123,7 @@ module Bundler
yield
rescue SignalException
raise
- rescue Exception => e
+ rescue Exception => e # rubocop:disable Lint/RescueException
FriendlyErrors.log_error(e)
exit FriendlyErrors.exit_status(e)
end
diff --git a/lib/bundler/gem_helper.rb b/lib/bundler/gem_helper.rb
index ca39f122e9..33f1d51592 100644
--- a/lib/bundler/gem_helper.rb
+++ b/lib/bundler/gem_helper.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
-require "bundler/vendored_thor" unless defined?(Thor)
-require "bundler"
+require_relative "vendored_thor" unless defined?(Thor)
+require_relative "../bundler"
require "shellwords"
module Bundler
@@ -75,7 +75,8 @@ module Bundler
def build_gem
file_name = nil
- sh(%W[gem build -V #{spec_path}]) do
+ gem = ENV["BUNDLE_GEM"] ? ENV["BUNDLE_GEM"] : "gem"
+ sh(%W[#{gem} build -V #{spec_path}]) do
file_name = File.basename(built_gem_path)
SharedHelpers.filesystem_access(File.join(base, "pkg")) {|p| FileUtils.mkdir_p(p) }
FileUtils.mv(built_gem_path, "pkg")
@@ -86,7 +87,8 @@ module Bundler
def install_gem(built_gem_path = nil, local = false)
built_gem_path ||= build_gem
- cmd = %W[gem install #{built_gem_path}]
+ gem = ENV["BUNDLE_GEM"] ? ENV["BUNDLE_GEM"] : "gem"
+ cmd = %W[#{gem} install #{built_gem_path}]
cmd << "--local" if local
out, status = sh_with_status(cmd)
unless status.success? && out[/Successfully installed/]
diff --git a/lib/bundler/gem_helpers.rb b/lib/bundler/gem_helpers.rb
index 019ae10c66..9d35169b99 100644
--- a/lib/bundler/gem_helpers.rb
+++ b/lib/bundler/gem_helpers.rb
@@ -10,7 +10,7 @@ module Bundler
[Gem::Platform.new("universal-mingw32"), Gem::Platform.new("universal-mingw32")],
[Gem::Platform.new("x64-mingw32"), Gem::Platform.new("x64-mingw32")],
[Gem::Platform.new("x86_64-mingw32"), Gem::Platform.new("x64-mingw32")],
- [Gem::Platform.new("mingw32"), Gem::Platform.new("x86-mingw32")]
+ [Gem::Platform.new("mingw32"), Gem::Platform.new("x86-mingw32")],
].freeze
def generic(p)
diff --git a/lib/bundler/gem_tasks.rb b/lib/bundler/gem_tasks.rb
index f736517bd7..bc725d3602 100644
--- a/lib/bundler/gem_tasks.rb
+++ b/lib/bundler/gem_tasks.rb
@@ -3,5 +3,5 @@
require "rake/clean"
CLOBBER.include "pkg"
-require "bundler/gem_helper"
+require_relative "gem_helper"
Bundler::GemHelper.install_tasks
diff --git a/lib/bundler/graph.rb b/lib/bundler/graph.rb
index de6bba0214..5644e41079 100644
--- a/lib/bundler/graph.rb
+++ b/lib/bundler/graph.rb
@@ -117,7 +117,7 @@ module Bundler
:style => "filled",
:fillcolor => "#B9B9D5",
:shape => "box3d",
- :fontsize => 16
+ :fontsize => 16,
}.merge(@node_options[group])
)
end
@@ -142,7 +142,7 @@ module Bundler
g.output @output_format.to_sym => "#{@output_file}.#{@output_format}"
Bundler.ui.info "#{@output_file}.#{@output_format}"
rescue ArgumentError => e
- $stderr.puts "Unsupported output format. See Ruby-Graphviz/lib/graphviz/constants.rb"
+ warn "Unsupported output format. See Ruby-Graphviz/lib/graphviz/constants.rb"
raise e
end
end
diff --git a/lib/bundler/injector.rb b/lib/bundler/injector.rb
index e67469f2dd..2cdda578e2 100644
--- a/lib/bundler/injector.rb
+++ b/lib/bundler/injector.rb
@@ -111,8 +111,10 @@ module Bundler
end
source = ", :source => \"#{d.source}\"" unless d.source.nil?
+ git = ", :git => \"#{d.git}\"" unless d.git.nil?
+ branch = ", :branch => \"#{d.branch}\"" unless d.branch.nil?
- %(gem #{name}#{requirement}#{group}#{source})
+ %(gem #{name}#{requirement}#{group}#{source}#{git}#{branch})
end.join("\n")
end
diff --git a/lib/bundler/inline.rb b/lib/bundler/inline.rb
index 93355c9460..317bf892ab 100644
--- a/lib/bundler/inline.rb
+++ b/lib/bundler/inline.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-require "bundler/compatibility_guard"
+require_relative "compatibility_guard"
# Allows for declaring a Gemfile inline in a ruby script, optionally installing
# any gems that aren't already installed on the user's system.
@@ -32,7 +32,7 @@ require "bundler/compatibility_guard"
# puts Pod::VERSION # => "0.34.4"
#
def gemfile(install = false, options = {}, &gemfile)
- require "bundler"
+ require_relative "../bundler"
opts = options.dup
ui = opts.delete(:ui) { Bundler::UI::Shell.new }
@@ -49,26 +49,28 @@ def gemfile(install = false, options = {}, &gemfile)
builder = Bundler::Dsl.new
builder.instance_eval(&gemfile)
- definition = builder.to_definition(nil, true)
- def definition.lock(*); end
- definition.validate_runtime!
+ Bundler.settings.temporary(:frozen => false) do
+ definition = builder.to_definition(nil, true)
+ def definition.lock(*); end
+ definition.validate_runtime!
- missing_specs = proc do
- definition.missing_specs?
- end
+ missing_specs = proc do
+ definition.missing_specs?
+ end
- Bundler.ui = ui if install
- if install || missing_specs.call
- Bundler.settings.temporary(:inline => true) do
- installer = Bundler::Installer.install(Bundler.root, definition, :system => true)
- installer.post_install_messages.each do |name, message|
- Bundler.ui.info "Post-install message from #{name}:\n#{message}"
+ Bundler.ui = ui if install
+ if install || missing_specs.call
+ Bundler.settings.temporary(:inline => true, :disable_platform_warnings => true) do
+ installer = Bundler::Installer.install(Bundler.root, definition, :system => true)
+ installer.post_install_messages.each do |name, message|
+ Bundler.ui.info "Post-install message from #{name}:\n#{message}"
+ end
end
end
- end
- runtime = Bundler::Runtime.new(nil, definition)
- runtime.setup.require
+ runtime = Bundler::Runtime.new(nil, definition)
+ runtime.setup.require
+ end
ensure
bundler_module = class << Bundler; self; end
bundler_module.send(:define_method, :root, old_root) if old_root
diff --git a/lib/bundler/installer.rb b/lib/bundler/installer.rb
index dd30bd5b64..5bc53a8b61 100644
--- a/lib/bundler/installer.rb
+++ b/lib/bundler/installer.rb
@@ -2,10 +2,10 @@
require "erb"
require "rubygems/dependency_installer"
-require "bundler/worker"
-require "bundler/installer/parallel_installer"
-require "bundler/installer/standalone"
-require "bundler/installer/gem_installer"
+require_relative "worker"
+require_relative "installer/parallel_installer"
+require_relative "installer/standalone"
+require_relative "installer/gem_installer"
module Bundler
class Installer
@@ -275,14 +275,7 @@ module Bundler
end
def can_install_in_parallel?
- if Bundler.rubygems.provides?(">= 2.1.0")
- true
- else
- Bundler.ui.warn "RubyGems #{Gem::VERSION} is not threadsafe, so your "\
- "gems will be installed one at a time. Upgrade to RubyGems 2.1.0 " \
- "or higher to enable parallel gem installation."
- false
- end
+ true
end
def install_in_parallel(size, standalone, force = false)
diff --git a/lib/bundler/installer/gem_installer.rb b/lib/bundler/installer/gem_installer.rb
index e5e245f970..9689911d6c 100644
--- a/lib/bundler/installer/gem_installer.rb
+++ b/lib/bundler/installer/gem_installer.rb
@@ -1,5 +1,7 @@
# frozen_string_literal: true
+require "shellwords"
+
module Bundler
class GemInstaller
attr_reader :spec, :standalone, :worker, :force, :installer
@@ -56,7 +58,9 @@ module Bundler
def spec_settings
# Fetch the build settings, if there are any
- Bundler.settings["build.#{spec.name}"]
+ if settings = Bundler.settings["build.#{spec.name}"]
+ Shellwords.shellsplit(settings)
+ end
end
def install
diff --git a/lib/bundler/installer/parallel_installer.rb b/lib/bundler/installer/parallel_installer.rb
index 469b15b96c..391540af0b 100644
--- a/lib/bundler/installer/parallel_installer.rb
+++ b/lib/bundler/installer/parallel_installer.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
-require "bundler/worker"
-require "bundler/installer/gem_installer"
+require_relative "../worker"
+require_relative "gem_installer"
module Bundler
class ParallelInstaller
diff --git a/lib/bundler/lazy_specification.rb b/lib/bundler/lazy_specification.rb
index d9cb01f810..cbd04b2c90 100644
--- a/lib/bundler/lazy_specification.rb
+++ b/lib/bundler/lazy_specification.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
require "uri"
-require "bundler/match_platform"
+require_relative "match_platform"
module Bundler
class LazySpecification
@@ -77,7 +77,7 @@ module Bundler
if search && Gem::Platform.new(search.platform) != Gem::Platform.new(platform) && !search.runtime_dependencies.-(dependencies.reject {|d| d.type == :development }).empty?
Bundler.ui.warn "Unable to use the platform-specific (#{search.platform}) version of #{name} (#{version}) " \
"because it has different dependencies from the #{platform} version. " \
- "To use the platform-specific version of the gem, run `bundle config specific_platform true` and install again."
+ "To use the platform-specific version of the gem, run `bundle config set specific_platform true` and install again."
search = source.specs.search(self).last
end
search.dependencies = dependencies if search && (search.is_a?(RemoteSpecification) || search.is_a?(EndpointSpecification))
diff --git a/lib/bundler/lockfile_parser.rb b/lib/bundler/lockfile_parser.rb
index a7d4dc56b7..5658ec1205 100644
--- a/lib/bundler/lockfile_parser.rb
+++ b/lib/bundler/lockfile_parser.rb
@@ -23,7 +23,7 @@ module Bundler
PATH = "PATH".freeze
PLUGIN = "PLUGIN SOURCE".freeze
SPECS = " specs:".freeze
- OPTIONS = /^ ([a-z]+): (.*)$/i
+ OPTIONS = /^ ([a-z]+): (.*)$/i.freeze
SOURCE = [GIT, GEM, PATH, PLUGIN].freeze
SECTIONS_BY_VERSION_INTRODUCED = {
@@ -88,7 +88,7 @@ module Bundler
send("parse_#{@state}", line)
end
end
- @sources << @rubygems_aggregate unless Bundler.feature_flag.lockfile_uses_separate_rubygems_sources?
+ @sources << @rubygems_aggregate unless Bundler.feature_flag.disable_multisource?
@specs = @specs.values.sort_by(&:identifier)
warn_for_outdated_bundler_version
rescue ArgumentError => e
@@ -101,17 +101,11 @@ module Bundler
return unless bundler_version
prerelease_text = bundler_version.prerelease? ? " --pre" : ""
current_version = Gem::Version.create(Bundler::VERSION)
- case current_version.segments.first <=> bundler_version.segments.first
- when -1
- raise LockfileError, "You must use Bundler #{bundler_version.segments.first} or greater with this lockfile."
- when 0
- if current_version < bundler_version
- Bundler.ui.warn "Warning: the running version of Bundler (#{current_version}) is older " \
- "than the version that created the lockfile (#{bundler_version}). We suggest you " \
- "upgrade to the latest version of Bundler by running `gem " \
- "install bundler#{prerelease_text}`.\n"
- end
- end
+ return unless current_version < bundler_version
+ Bundler.ui.warn "Warning: the running version of Bundler (#{current_version}) is older " \
+ "than the version that created the lockfile (#{bundler_version}). We suggest you to " \
+ "upgrade to the version that created the lockfile by running `gem install " \
+ "bundler:#{bundler_version}#{prerelease_text}`.\n"
end
private
@@ -139,7 +133,7 @@ module Bundler
@sources << @current_source
end
when GEM
- if Bundler.feature_flag.lockfile_uses_separate_rubygems_sources?
+ if Bundler.feature_flag.disable_multisource?
@opts["remotes"] = @opts.delete("remote")
@current_source = TYPES[@type].from_lock(@opts)
@sources << @current_source
@@ -183,7 +177,7 @@ module Bundler
(?:-(.*))?\))? # Optional platform
(!)? # Optional pinned marker
$ # Line end
- /xo
+ /xo.freeze
def parse_dependency(line)
return unless line =~ NAME_VERSION
diff --git a/lib/bundler/match_platform.rb b/lib/bundler/match_platform.rb
index 56cbbfb95d..69074925a6 100644
--- a/lib/bundler/match_platform.rb
+++ b/lib/bundler/match_platform.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-require "bundler/gem_helpers"
+require_relative "gem_helpers"
module Bundler
module MatchPlatform
diff --git a/lib/bundler/plugin.rb b/lib/bundler/plugin.rb
index 996d29aafb..02985fa9b0 100644
--- a/lib/bundler/plugin.rb
+++ b/lib/bundler/plugin.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-require "bundler/plugin/api"
+require_relative "plugin/api"
module Bundler
module Plugin
diff --git a/lib/bundler/plugin/api/source.rb b/lib/bundler/plugin/api/source.rb
index 586477efb5..b33926a181 100644
--- a/lib/bundler/plugin/api/source.rb
+++ b/lib/bundler/plugin/api/source.rb
@@ -37,7 +37,7 @@ module Bundler
#
# @!attribute [rw] dependency_names
# @return [Array<String>] Names of dependencies that the source should
- # try to resolve. It is not necessary to use this list intenally. This
+ # try to resolve. It is not necessary to use this list internally. This
# is present to be compatible with `Definition` and is used by
# rubygems source.
module Source
diff --git a/lib/bundler/plugin/index.rb b/lib/bundler/plugin/index.rb
index faabf3a8d1..2d70a046bb 100644
--- a/lib/bundler/plugin/index.rb
+++ b/lib/bundler/plugin/index.rb
@@ -139,7 +139,7 @@ module Bundler
data = index_f.read
- require "bundler/yaml_serializer"
+ require_relative "../yaml_serializer"
index = YAMLSerializer.load(data)
@commands.merge!(index["commands"])
@@ -162,7 +162,7 @@ module Bundler
"sources" => @sources,
}
- require "bundler/yaml_serializer"
+ require_relative "../yaml_serializer"
SharedHelpers.filesystem_access(index_file) do |index_f|
FileUtils.mkdir_p(index_f.dirname)
File.open(index_f, "w") {|f| f.puts YAMLSerializer.dump(index) }
diff --git a/lib/bundler/plugin/installer.rb b/lib/bundler/plugin/installer.rb
index 713d679f12..4a262efac2 100644
--- a/lib/bundler/plugin/installer.rb
+++ b/lib/bundler/plugin/installer.rb
@@ -16,7 +16,7 @@ module Bundler
version = options[:version] || [">= 0"]
- Bundler.settings.temporary(:lockfile_uses_separate_rubygems_sources => false, :disable_multisource => false) do
+ Bundler.settings.temporary(:disable_multisource => false) do
if options[:git]
install_git(names, version, options)
elsif options[:local_git]
@@ -43,16 +43,11 @@ module Bundler
private
- # Rubocop misunderstands the semantics of this method, assuming an `else` code block
- # that doesn't exist. See https://github.com/bbatsov/rubocop/issues/5702.
- #
- # rubocop:disable Style/GuardClause
def check_sources_consistency!(options)
if options.key?(:git) && options.key?(:local_git)
raise InvalidOption, "Remote and local plugin git sources can't be both specified"
end
end
- # rubocop:enable Style/GuardClause
def install_git(names, version, options)
uri = options.delete(:git)
diff --git a/lib/bundler/psyched_yaml.rb b/lib/bundler/psyched_yaml.rb
index e654416a5a..c086b7651c 100644
--- a/lib/bundler/psyched_yaml.rb
+++ b/lib/bundler/psyched_yaml.rb
@@ -27,7 +27,7 @@ module Bundler
end
end
-require "bundler/deprecate"
+require_relative "deprecate"
begin
Bundler::Deprecate.skip_during do
require "rubygems/safe_yaml"
diff --git a/lib/bundler/resolver.rb b/lib/bundler/resolver.rb
index aaa7bb7583..d3e5f268cf 100644
--- a/lib/bundler/resolver.rb
+++ b/lib/bundler/resolver.rb
@@ -2,8 +2,8 @@
module Bundler
class Resolver
- require "bundler/vendored_molinillo"
- require "bundler/resolver/spec_group"
+ require_relative "vendored_molinillo"
+ require_relative "resolver/spec_group"
# Figures out the best possible configuration of gems that satisfies
# the list of passed dependencies and any child dependencies without
@@ -39,7 +39,7 @@ module Bundler
@gem_version_promoter = gem_version_promoter
@allow_bundler_dependency_conflicts = Bundler.feature_flag.allow_bundler_dependency_conflicts?
@use_gvp = Bundler.feature_flag.use_gem_version_promoter_for_major_updates? || !@gem_version_promoter.major?
- @lockfile_uses_separate_rubygems_sources = Bundler.feature_flag.lockfile_uses_separate_rubygems_sources?
+ @lockfile_uses_separate_rubygems_sources = Bundler.feature_flag.disable_multisource?
end
def start(requirements)
@@ -172,13 +172,13 @@ module Bundler
def name_for_explicit_dependency_source
Bundler.default_gemfile.basename.to_s
- rescue
+ rescue StandardError
"Gemfile"
end
def name_for_locking_dependency_source
Bundler.default_lockfile.basename.to_s
- rescue
+ rescue StandardError
"Gemfile.lock"
end
@@ -279,10 +279,10 @@ module Bundler
versions_with_platforms = specs.map {|s| [s.version, s.platform] }
message = String.new("Could not find gem '#{SharedHelpers.pretty_dependency(requirement)}' in #{source}#{cache_message}.\n")
message << if versions_with_platforms.any?
- "The source contains '#{name}' at: #{formatted_versions_with_platforms(versions_with_platforms)}"
- else
- "The source does not contain any versions of '#{name}'"
- end
+ "The source contains '#{name}' at: #{formatted_versions_with_platforms(versions_with_platforms)}"
+ else
+ "The source does not contain any versions of '#{name}'"
+ end
else
message = "Could not find gem '#{requirement}' in any of the gem sources " \
"listed in your Gemfile#{cache_message}."
@@ -375,12 +375,12 @@ module Bundler
o << " "
o << if relevant_sources.empty?
- "in any of the sources.\n"
- elsif metadata_requirement
- "is not available in #{relevant_sources.join(" or ")}"
- else
- "in any of the relevant sources:\n #{relevant_sources * "\n "}\n"
- end
+ "in any of the sources.\n"
+ elsif metadata_requirement
+ "is not available in #{relevant_sources.join(" or ")}"
+ else
+ "in any of the relevant sources:\n #{relevant_sources * "\n "}\n"
+ end
end
end,
:version_for_spec => lambda {|spec| spec.version },
diff --git a/lib/bundler/retry.rb b/lib/bundler/retry.rb
index 5e4f0c502d..d64958ba70 100644
--- a/lib/bundler/retry.rb
+++ b/lib/bundler/retry.rb
@@ -38,7 +38,7 @@ module Bundler
@failed = false
@current_run += 1
@result = block.call
- rescue => e
+ rescue StandardError => e
fail_attempt(e)
end
diff --git a/lib/bundler/ruby_version.rb b/lib/bundler/ruby_version.rb
index e6c31a94c9..80dc444f93 100644
--- a/lib/bundler/ruby_version.rb
+++ b/lib/bundler/ruby_version.rb
@@ -49,7 +49,7 @@ module Bundler
([\d.]+) # ruby version
(?:p(-?\d+))? # optional patchlevel
(?:\s\((\S+)\s(.+)\))? # optional engine info
- /xo
+ /xo.freeze
# Returns a RubyVersion from the given string.
# @param [String] the version string to match.
@@ -74,7 +74,7 @@ module Bundler
@host ||= [
RbConfig::CONFIG["host_cpu"],
RbConfig::CONFIG["host_vendor"],
- RbConfig::CONFIG["host_os"]
+ RbConfig::CONFIG["host_os"],
].join("-")
end
diff --git a/lib/bundler/rubygems_ext.rb b/lib/bundler/rubygems_ext.rb
index d746bdb41b..96b93836c7 100644
--- a/lib/bundler/rubygems_ext.rb
+++ b/lib/bundler/rubygems_ext.rb
@@ -2,48 +2,27 @@
require "pathname"
-if defined?(Gem::QuickLoader)
- # Gem Prelude makes me a sad panda :'(
- Gem::QuickLoader.load_full_rubygems_library
-end
-
-require "rubygems"
require "rubygems/specification"
-begin
- # Possible use in Gem::Specification#source below and require
- # shouldn't be deferred.
- require "rubygems/source"
-rescue LoadError
- # Not available before RubyGems 2.0.0, ignore
- nil
-end
+# Possible use in Gem::Specification#source below and require
+# shouldn't be deferred.
+require "rubygems/source"
-require "bundler/match_platform"
+require_relative "match_platform"
module Gem
- @loaded_stacks = Hash.new {|h, k| h[k] = [] }
-
class Specification
attr_accessor :remote, :location, :relative_loaded_from
- if instance_methods(false).map(&:to_sym).include?(:source)
- remove_method :source
- attr_writer :source
- def source
- (defined?(@source) && @source) || Gem::Source::Installed.new
- end
- else
- # rubocop:disable Lint/DuplicateMethods
- attr_accessor :source
- # rubocop:enable Lint/DuplicateMethods
+ remove_method :source
+ attr_writer :source
+ def source
+ (defined?(@source) && @source) || Gem::Source::Installed.new
end
alias_method :rg_full_gem_path, :full_gem_path
alias_method :rg_loaded_from, :loaded_from
- attr_writer :full_gem_path unless instance_methods.include?(:full_gem_path=)
-
def full_gem_path
# this cannot check source.is_a?(Bundler::Plugin::API::Source)
# because that _could_ trip the autoload, and if there are unresolved
@@ -65,15 +44,7 @@ module Gem
end
def load_paths
- return full_require_paths if respond_to?(:full_require_paths)
-
- require_paths.map do |require_path|
- if require_path.include?(full_gem_path)
- require_path
- else
- File.join(full_gem_path, require_path)
- end
- end
+ full_require_paths
end
if method_defined?(:extension_dir)
@@ -87,10 +58,7 @@ module Gem
end
end
- # RubyGems 1.8+ used only.
- methods = instance_methods(false)
- gem_dir = methods.first.is_a?(String) ? "gem_dir" : :gem_dir
- remove_method :gem_dir if methods.include?(gem_dir)
+ remove_method :gem_dir if instance_methods(false).include?(:gem_dir)
def gem_dir
full_gem_path
end
@@ -160,32 +128,6 @@ module Gem
end
out
end
-
- # Backport of performance enhancement added to RubyGems 1.4
- def matches_spec?(spec)
- # name can be a Regexp, so use ===
- return false unless name === spec.name
- return true if requirement.none?
-
- requirement.satisfied_by?(spec.version)
- end unless allocate.respond_to?(:matches_spec?)
- end
-
- class Requirement
- # Backport of performance enhancement added to RubyGems 1.4
- def none?
- # note that it might be tempting to replace with with RubyGems 2.0's
- # improved implementation. Don't. It requires `DefaultRequirement` to be
- # defined, and more importantantly, these overrides are not used when the
- # running RubyGems defines these methods
- to_s == ">= 0"
- end unless allocate.respond_to?(:none?)
-
- # Backport of performance enhancement added to RubyGems 2.2
- def exact?
- return false unless @requirements.size == 1
- @requirements[0][0] == "="
- end unless allocate.respond_to?(:exact?)
end
class Platform
diff --git a/lib/bundler/rubygems_gem_installer.rb b/lib/bundler/rubygems_gem_installer.rb
index 2b7fa8e0f6..b1076b4554 100644
--- a/lib/bundler/rubygems_gem_installer.rb
+++ b/lib/bundler/rubygems_gem_installer.rb
@@ -66,7 +66,7 @@ module Bundler
If you wish to continue installing the downloaded gem, and are certain it does not pose a \
security issue despite the mismatching checksum, do the following:
- 1. run `bundle config disable_checksum_validation true` to turn off checksum verification
+ 1. run `bundle config set disable_checksum_validation true` to turn off checksum verification
2. run `bundle install`
(More info: The expected SHA256 checksum was #{checksum.inspect}, but the \
diff --git a/lib/bundler/rubygems_integration.rb b/lib/bundler/rubygems_integration.rb
index 783d106e7b..ae1c1943e5 100644
--- a/lib/bundler/rubygems_integration.rb
+++ b/lib/bundler/rubygems_integration.rb
@@ -1,14 +1,12 @@
# frozen_string_literal: true
-require "monitor"
-require "rubygems"
-require "rubygems/config_file"
-
module Bundler
class RubygemsIntegration
if defined?(Gem::Ext::Builder::CHDIR_MONITOR)
EXT_LOCK = Gem::Ext::Builder::CHDIR_MONITOR
else
+ require "monitor"
+
EXT_LOCK = Monitor.new
end
@@ -22,6 +20,7 @@ module Bundler
def initialize
@replaced_methods = {}
+ backport_ext_builder_monitor
end
def version
@@ -112,7 +111,7 @@ module Bundler
end
def configuration
- require "bundler/psyched_yaml"
+ require_relative "psyched_yaml"
Gem.configuration
rescue Gem::SystemExitException, LoadError => e
Bundler.ui.error "#{e.class}: #{e.message}"
@@ -200,10 +199,6 @@ module Bundler
Gem::ConfigMap
end
- def repository_subdirectories
- %w[cache doc gems specifications]
- end
-
def clear_paths
Gem.clear_paths
end
@@ -212,26 +207,14 @@ module Bundler
Gem.bin_path(gem, bin, ver)
end
- def path_separator
- File::PATH_SEPARATOR
- end
-
def preserve_paths
# this is a no-op outside of RubyGems 1.8
yield
end
def loaded_gem_paths
- # RubyGems 2.2+ can put binary extension into dedicated folders,
- # therefore use RubyGems facilities to obtain their load paths.
- if Gem::Specification.method_defined? :full_require_paths
- loaded_gem_paths = Gem.loaded_specs.map {|_, s| s.full_require_paths }
- loaded_gem_paths.flatten
- else
- $LOAD_PATH.select do |p|
- Bundler.rubygems.gem_path.any? {|gp| p =~ /^#{Regexp.escape(gp)}/ }
- end
- end
+ loaded_gem_paths = Gem.loaded_specs.map {|_, s| s.full_require_paths }
+ loaded_gem_paths.flatten
end
def load_plugins
@@ -250,36 +233,12 @@ module Bundler
EXT_LOCK
end
- def fetch_specs(all, pre, &blk)
- require "rubygems/spec_fetcher"
- specs = Gem::SpecFetcher.new.list(all, pre)
- specs.each { yield } if block_given?
- specs
- end
-
def fetch_prerelease_specs
fetch_specs(false, true)
rescue Gem::RemoteFetcher::FetchError
{} # if we can't download them, there aren't any
end
- # TODO: This is for older versions of RubyGems... should we support the
- # X-Gemfile-Source header on these old versions?
- # Maybe the newer implementation will work on older RubyGems?
- # It seems difficult to keep this implementation and still send the header.
- def fetch_all_remote_specs(remote)
- old_sources = Bundler.rubygems.sources
- Bundler.rubygems.sources = [remote.uri.to_s]
- # Fetch all specs, minus prerelease specs
- spec_list = fetch_specs(true, false)
- # Then fetch the prerelease specs
- fetch_prerelease_specs.each {|k, v| spec_list[k].concat(v) }
-
- spec_list.values.first
- ensure
- Bundler.rubygems.sources = old_sources
- end
-
def with_build_args(args)
ext_lock.synchronize do
old_args = build_args
@@ -292,22 +251,13 @@ module Bundler
end
end
- def install_with_build_args(args)
- with_build_args(args) { yield }
- end
-
- def gem_from_path(path, policy = nil)
- require "rubygems/format"
- Gem::Format.from_file_by_path(path, policy)
- end
-
def spec_from_gem(path, policy = nil)
require "rubygems/security"
- require "bundler/psyched_yaml"
+ require_relative "psyched_yaml"
gem_from_path(path, security_policies[policy]).spec
rescue Gem::Package::FormatError
raise GemspecError, "Could not read gem at #{path}. It may be corrupted."
- rescue Exception, Gem::Exception, Gem::Security::Exception => e
+ rescue Exception, Gem::Exception, Gem::Security::Exception => e # rubocop:disable Lint/RescueException
if e.is_a?(Gem::Security::Exception) ||
e.message =~ /unknown trust policy|unsigned gem/i ||
e.message =~ /couldn't verify (meta)?data signature/i
@@ -319,23 +269,10 @@ module Bundler
end
end
- def build(spec, skip_validation = false)
- require "rubygems/builder"
- Gem::Builder.new(spec).build
- end
-
def build_gem(gem_dir, spec)
build(spec)
end
- def download_gem(spec, uri, path)
- uri = Bundler.settings.mirror_for(uri)
- fetcher = Gem::RemoteFetcher.new(configuration[:http_proxy])
- Bundler::Retry.new("download gem from #{uri}").attempts do
- fetcher.download(spec, uri, path)
- end
- end
-
def security_policy_keys
%w[High Medium Low AlmostNo No].map {|level| "#{level}Security" }
end
@@ -359,12 +296,17 @@ module Bundler
end
end
+ # RubyGems-generated binstubs call Kernel#gem
def binstubs_call_gem?
- true
+ !provides?(">= 2.5.2")
end
+ # only 2.5.2+ has all of the stub methods we want to use, and since this
+ # is a performance optimization _only_,
+ # we'll restrict ourselves to the most
+ # recent RG versions instead of all versions that have stubs
def stubs_provide_full_functionality?
- false
+ provides?(">= 2.5.2")
end
def replace_gem(specs, specs_by_name)
@@ -413,63 +355,45 @@ module Bundler
end
end
- def stub_source_index(specs)
- Gem::SourceIndex.send(:alias_method, :old_initialize, :initialize)
- redefine_method(Gem::SourceIndex, :initialize) do |*args|
- @gems = {}
- # You're looking at this thinking: Oh! This is how I make those
- # rubygems deprecations go away!
- #
- # You'd be correct BUT using of this method in production code
- # must be approved by the rubygems team itself!
- #
- # This is your warning. If you use this and don't have approval
- # we can't protect you.
- #
- Deprecate.skip_during do
- self.spec_dirs = *args
- add_specs(*specs)
- end
- end
- end
-
# Used to make bin stubs that are not created by bundler work
# under bundler. The new Gem.bin_path only considers gems in
# +specs+
- def replace_bin_path(specs, specs_by_name)
+ def replace_bin_path(specs_by_name)
gem_class = (class << Gem; self; end)
redefine_method(gem_class, :find_spec_for_exe) do |gem_name, *args|
exec_name = args.first
+ raise ArgumentError, "you must supply exec_name" unless exec_name
spec_with_name = specs_by_name[gem_name]
- spec = if exec_name
- if spec_with_name && spec_with_name.executables.include?(exec_name)
- spec_with_name
- else
- specs.find {|s| s.executables.include?(exec_name) }
- end
- else
- spec_with_name
- end
+ matching_specs_by_exec_name = specs_by_name.values.select {|s| s.executables.include?(exec_name) }
+ spec = matching_specs_by_exec_name.delete(spec_with_name)
- unless spec
+ unless spec || !matching_specs_by_exec_name.empty?
message = "can't find executable #{exec_name} for gem #{gem_name}"
- if !exec_name || spec_with_name.nil?
+ if spec_with_name.nil?
message += ". #{gem_name} is not currently included in the bundle, " \
"perhaps you meant to add it to your #{Bundler.default_gemfile.basename}?"
end
raise Gem::Exception, message
end
- raise Gem::Exception, "no default executable for #{spec.full_name}" unless exec_name ||= spec.default_executable
-
- unless spec.name == gem_name
- Bundler::SharedHelpers.major_deprecation 2,
+ unless spec
+ spec = matching_specs_by_exec_name.shift
+ warn \
"Bundler is using a binstub that was created for a different gem (#{spec.name}).\n" \
"You should run `bundle binstub #{gem_name}` " \
"to work around a system/bundle conflict."
end
+
+ unless matching_specs_by_exec_name.empty?
+ conflicting_names = matching_specs_by_exec_name.map(&:name).join(", ")
+ warn \
+ "The `#{exec_name}` executable in the `#{spec.name}` gem is being loaded, but it's also present in other gems (#{conflicting_names}).\n" \
+ "If you meant to run the executable for another gem, make sure you use a project specific binstub (`bundle binstub <gem_name>`).\n" \
+ "If you plan to use multiple conflicting executables, generate binstubs for them and disambiguate their names."
+ end
+
spec
end
@@ -514,33 +438,23 @@ module Bundler
h
end
+ Bundler.rubygems.default_stubs.each do |stub|
+ default_spec = stub.to_spec
+ default_spec_name = default_spec.name
+ next if specs_by_name.key?(default_spec_name)
+
+ specs << default_spec
+ specs_by_name[default_spec_name] = default_spec
+ end
+
replace_gem(specs, specs_by_name)
stub_rubygems(specs)
- replace_bin_path(specs, specs_by_name)
+ replace_bin_path(specs_by_name)
replace_refresh
Gem.clear_paths
end
- # This backports the correct segment generation code from RubyGems 1.4+
- # by monkeypatching it into the method in RubyGems 1.3.6 and 1.3.7.
- def backport_segment_generation
- redefine_method(Gem::Version, :segments) do
- @segments ||= @version.scan(/[0-9]+|[a-z]+/i).map do |s|
- /^\d+$/ =~ s ? s.to_i : s
- end
- end
- end
-
- # This backport fixes the marshaling of @segments.
- def backport_yaml_initialize
- redefine_method(Gem::Version, :yaml_initialize) do |_, map|
- @version = map["version"]
- @segments = nil
- @hash = nil
- end
- end
-
# This backports base_dir which replaces installation path
# RubyGems 1.8+
def backport_base_dir
@@ -613,286 +527,129 @@ module Bundler
end
end
- # RubyGems 1.4 through 1.6
- class Legacy < RubygemsIntegration
- def initialize
- super
- backport_base_dir
- backport_cache_file
- backport_spec_file
- backport_yaml_initialize
- end
+ def stub_rubygems(specs)
+ Gem::Specification.all = specs
- def stub_rubygems(specs)
- # RubyGems versions lower than 1.7 use SourceIndex#from_gems_in
- source_index_class = (class << Gem::SourceIndex; self; end)
- redefine_method(source_index_class, :from_gems_in) do |*args|
- Gem::SourceIndex.new.tap do |source_index|
- source_index.spec_dirs = *args
- source_index.add_specs(*specs)
- end
- end
+ Gem.post_reset do
+ Gem::Specification.all = specs
end
- def all_specs
- Gem.source_index.gems.values
+ redefine_method((class << Gem; self; end), :finish_resolve) do |*|
+ []
end
+ end
- def find_name(name)
- Gem.source_index.find_name(name)
- end
+ def fetch_specs(source, remote, name)
+ path = source + "#{name}.#{Gem.marshal_version}.gz"
+ fetcher = gem_remote_fetcher
+ fetcher.headers = { "X-Gemfile-Source" => remote.original_uri.to_s } if remote.original_uri
+ string = fetcher.fetch_path(path)
+ Bundler.load_marshal(string)
+ rescue Gem::RemoteFetcher::FetchError => e
+ # it's okay for prerelease to fail
+ raise e unless name == "prerelease_specs"
+ end
- def validate(spec)
- # These versions of RubyGems always validate in "packaging" mode,
- # which is too strict for the kinds of checks we care about. As a
- # result, validation is disabled on versions of RubyGems below 1.7.
- end
+ def fetch_all_remote_specs(remote)
+ source = remote.uri.is_a?(URI) ? remote.uri : URI.parse(source.to_s)
- def post_reset_hooks
- []
- end
+ specs = fetch_specs(source, remote, "specs")
+ pres = fetch_specs(source, remote, "prerelease_specs") || []
- def reset
- end
+ specs.concat(pres)
end
- # RubyGems versions 1.3.6 and 1.3.7
- class Ancient < Legacy
- def initialize
- super
- backport_segment_generation
+ def download_gem(spec, uri, path)
+ uri = Bundler.settings.mirror_for(uri)
+ fetcher = gem_remote_fetcher
+ fetcher.headers = { "X-Gemfile-Source" => spec.remote.original_uri.to_s } if spec.remote.original_uri
+ Bundler::Retry.new("download gem from #{uri}").attempts do
+ fetcher.download(spec, uri, path)
end
end
- # RubyGems 1.7
- class Transitional < Legacy
- def stub_rubygems(specs)
- stub_source_index(specs)
- end
-
- def validate(spec)
- # Missing summary is downgraded to a warning in later versions,
- # so we set it to an empty string to prevent an exception here.
- spec.summary ||= ""
- RubygemsIntegration.instance_method(:validate).bind(self).call(spec)
- end
+ def gem_remote_fetcher
+ require "resolv"
+ proxy = configuration[:http_proxy]
+ dns = Resolv::DNS.new
+ Bundler::GemRemoteFetcher.new(proxy, dns)
end
- # RubyGems 1.8.5-1.8.19
- class Modern < RubygemsIntegration
- def stub_rubygems(specs)
- Gem::Specification.all = specs
-
- Gem.post_reset do
- Gem::Specification.all = specs
- end
+ def gem_from_path(path, policy = nil)
+ require "rubygems/package"
+ p = Gem::Package.new(path)
+ p.security_policy = policy if policy
+ p
+ end
- stub_source_index(specs)
- end
+ def build(spec, skip_validation = false)
+ require "rubygems/package"
+ Gem::Package.build(spec, skip_validation)
+ end
- def all_specs
- Gem::Specification.to_a
- end
+ def repository_subdirectories
+ Gem::REPOSITORY_SUBDIRECTORIES
+ end
- def find_name(name)
- Gem::Specification.find_all_by_name name
- end
+ def install_with_build_args(args)
+ yield
end
- # RubyGems 1.8.0 to 1.8.4
- class AlmostModern < Modern
- # RubyGems [>= 1.8.0, < 1.8.5] has a bug that changes Gem.dir whenever
- # you call Gem::Installer#install with an :install_dir set. We have to
- # change it back for our sudo mode to work.
- def preserve_paths
- old_dir = gem_dir
- old_path = gem_path
- yield
- Gem.use_paths(old_dir, old_path)
- end
+ def path_separator
+ Gem.path_separator
end
- # RubyGems 1.8.20+
- class MoreModern < Modern
- # RubyGems 1.8.20 and adds the skip_validation parameter, so that's
- # when we start passing it through.
- def build(spec, skip_validation = false)
- require "rubygems/builder"
- Gem::Builder.new(spec).build(skip_validation)
+ def all_specs
+ require_relative "remote_specification"
+ Gem::Specification.stubs.map do |stub|
+ StubSpecification.from_stub(stub)
end
end
- # RubyGems 2.0
- class Future < RubygemsIntegration
- def stub_rubygems(specs)
- Gem::Specification.all = specs
-
- Gem.post_reset do
- Gem::Specification.all = specs
+ def backport_ext_builder_monitor
+ # So we can avoid requiring "rubygems/ext" in its entirety
+ Gem.module_eval <<-RB, __FILE__, __LINE__ + 1
+ module Ext
end
+ RB
- redefine_method((class << Gem; self; end), :finish_resolve) do |*|
- []
- end
- end
-
- def all_specs
- Gem::Specification.to_a
- end
-
- def find_name(name)
- Gem::Specification.find_all_by_name name
- end
-
- def fetch_specs(source, remote, name)
- path = source + "#{name}.#{Gem.marshal_version}.gz"
- fetcher = gem_remote_fetcher
- fetcher.headers = { "X-Gemfile-Source" => remote.original_uri.to_s } if remote.original_uri
- string = fetcher.fetch_path(path)
- Bundler.load_marshal(string)
- rescue Gem::RemoteFetcher::FetchError => e
- # it's okay for prerelease to fail
- raise e unless name == "prerelease_specs"
- end
-
- def fetch_all_remote_specs(remote)
- source = remote.uri.is_a?(URI) ? remote.uri : URI.parse(source.to_s)
-
- specs = fetch_specs(source, remote, "specs")
- pres = fetch_specs(source, remote, "prerelease_specs") || []
-
- specs.concat(pres)
- end
+ require "rubygems/ext/builder"
- def download_gem(spec, uri, path)
- uri = Bundler.settings.mirror_for(uri)
- fetcher = gem_remote_fetcher
- fetcher.headers = { "X-Gemfile-Source" => spec.remote.original_uri.to_s } if spec.remote.original_uri
- Bundler::Retry.new("download gem from #{uri}").attempts do
- fetcher.download(spec, uri, path)
+ Gem::Ext::Builder.class_eval do
+ unless const_defined?(:CHDIR_MONITOR)
+ const_set(:CHDIR_MONITOR, EXT_LOCK)
end
- end
-
- def gem_remote_fetcher
- require "resolv"
- proxy = configuration[:http_proxy]
- dns = Resolv::DNS.new
- Bundler::GemRemoteFetcher.new(proxy, dns)
- end
-
- def gem_from_path(path, policy = nil)
- require "rubygems/package"
- p = Gem::Package.new(path)
- p.security_policy = policy if policy
- p
- end
-
- def build(spec, skip_validation = false)
- require "rubygems/package"
- Gem::Package.build(spec, skip_validation)
- end
-
- def repository_subdirectories
- Gem::REPOSITORY_SUBDIRECTORIES
- end
- def install_with_build_args(args)
- yield
- end
-
- def path_separator
- Gem.path_separator
+ remove_const(:CHDIR_MUTEX) if const_defined?(:CHDIR_MUTEX)
+ const_set(:CHDIR_MUTEX, const_get(:CHDIR_MONITOR))
end
end
- # RubyGems 2.1.0
- class MoreFuture < Future
- def initialize
- super
- backport_ext_builder_monitor
- end
-
- def all_specs
- require "bundler/remote_specification"
- Gem::Specification.stubs.map do |stub|
- StubSpecification.from_stub(stub)
- end
- end
-
- def backport_ext_builder_monitor
- # So we can avoid requiring "rubygems/ext" in its entirety
- Gem.module_eval <<-RB, __FILE__, __LINE__ + 1
- module Ext
- end
- RB
-
- require "rubygems/ext/builder"
-
- Gem::Ext::Builder.class_eval do
- unless const_defined?(:CHDIR_MONITOR)
- const_set(:CHDIR_MONITOR, EXT_LOCK)
- end
-
- remove_const(:CHDIR_MUTEX) if const_defined?(:CHDIR_MUTEX)
- const_set(:CHDIR_MUTEX, const_get(:CHDIR_MONITOR))
- end
- end
+ def find_name(name)
+ Gem::Specification.stubs_for(name).map(&:to_spec)
+ end
- if Gem::Specification.respond_to?(:stubs_for)
- def find_name(name)
- Gem::Specification.stubs_for(name).map(&:to_spec)
- end
- else
- def find_name(name)
- Gem::Specification.stubs.find_all do |spec|
- spec.name == name
- end.map(&:to_spec)
- end
+ if Gem::Specification.respond_to?(:default_stubs)
+ def default_stubs
+ Gem::Specification.default_stubs("*.gemspec")
end
-
- def use_gemdeps(gemfile)
- ENV["BUNDLE_GEMFILE"] ||= File.expand_path(gemfile)
- require "bundler/gemdeps"
- runtime = Bundler.setup
- Bundler.ui = nil
- activated_spec_names = runtime.requested_specs.map(&:to_spec).sort_by(&:name)
- [Gemdeps.new(runtime), activated_spec_names]
+ else
+ def default_stubs
+ Gem::Specification.send(:default_stubs, "*.gemspec")
end
+ end
- if provides?(">= 2.5.2")
- # RubyGems-generated binstubs call Kernel#gem
- def binstubs_call_gem?
- false
- end
-
- # only 2.5.2+ has all of the stub methods we want to use, and since this
- # is a performance optimization _only_,
- # we'll restrict ourselves to the most
- # recent RG versions instead of all versions that have stubs
- def stubs_provide_full_functionality?
- true
- end
- end
+ def use_gemdeps(gemfile)
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path(gemfile)
+ require_relative "gemdeps"
+ runtime = Bundler.setup
+ Bundler.ui = nil
+ activated_spec_names = runtime.requested_specs.map(&:to_spec).sort_by(&:name)
+ [Gemdeps.new(runtime), activated_spec_names]
end
end
def self.rubygems
- @rubygems ||= if RubygemsIntegration.provides?(">= 2.1.0")
- RubygemsIntegration::MoreFuture.new
- elsif RubygemsIntegration.provides?(">= 1.99.99")
- RubygemsIntegration::Future.new
- elsif RubygemsIntegration.provides?(">= 1.8.20")
- RubygemsIntegration::MoreModern.new
- elsif RubygemsIntegration.provides?(">= 1.8.5")
- RubygemsIntegration::Modern.new
- elsif RubygemsIntegration.provides?(">= 1.8.0")
- RubygemsIntegration::AlmostModern.new
- elsif RubygemsIntegration.provides?(">= 1.7.0")
- RubygemsIntegration::Transitional.new
- elsif RubygemsIntegration.provides?(">= 1.4.0")
- RubygemsIntegration::Legacy.new
- else # RubyGems 1.3.6 and 1.3.7
- RubygemsIntegration::Ancient.new
- end
+ @rubygems ||= RubygemsIntegration.new
end
end
diff --git a/lib/bundler/runtime.rb b/lib/bundler/runtime.rb
index 762e7b3ec6..83945868f9 100644
--- a/lib/bundler/runtime.rb
+++ b/lib/bundler/runtime.rb
@@ -163,7 +163,7 @@ module Bundler
gem_dirs = Dir["#{Gem.dir}/gems/*"]
gem_files = Dir["#{Gem.dir}/cache/*.gem"]
gemspec_files = Dir["#{Gem.dir}/specifications/*.gemspec"]
- extension_dirs = Dir["#{Gem.dir}/extensions/*/*/*"]
+ extension_dirs = Dir["#{Gem.dir}/extensions/*/*/*"] + Dir["#{Gem.dir}/bundler/gems/extensions/*/*/*"]
spec_gem_paths = []
# need to keep git sources around
spec_git_paths = @definition.spec_git_paths
diff --git a/lib/bundler/settings.rb b/lib/bundler/settings.rb
index fe68d510ff..2d0c4174ae 100644
--- a/lib/bundler/settings.rb
+++ b/lib/bundler/settings.rb
@@ -18,7 +18,6 @@ module Bundler
cache_all
cache_all_platforms
cache_command_is_package
- console_command
default_install_uses_path
deployment
deployment_means_frozen
@@ -29,28 +28,26 @@ module Bundler
disable_platform_warnings
disable_shared_gems
disable_version_check
- error_on_stderr
force_ruby_platform
forget_cli_options
frozen
gem.coc
gem.mit
+ github.https
global_path_appends_ruby_scope
global_gem_cache
ignore_messages
init_gems_rb
- list_command
- lockfile_uses_separate_rubygems_sources
- major_deprecations
no_install
no_prune
only_update_to_newer_versions
path_relative_to_cwd
path.system
plugins
- prefer_gems_rb
+ prefer_patch
print_only_version_number
setup_makes_kernel_gem_public
+ silence_deprecations
silence_root_warning
skip_default_git_sources
specific_platform
@@ -58,7 +55,6 @@ module Bundler
unlock_source_unlocks_spec
update_requires_all_flag
use_gem_version_promoter_for_major_updates
- viz_command
].freeze
NUMBER_KEYS = %w[
@@ -75,7 +71,9 @@ module Bundler
].freeze
DEFAULT_CONFIG = {
+ :silence_deprecations => false,
:disable_version_check => true,
+ :prefer_patch => false,
:redirect => 5,
:retry => 3,
:timeout => 10,
@@ -106,18 +104,6 @@ module Bundler
temporary(key => value)
value
else
- command = if value.nil?
- "bundle config --delete #{key}"
- else
- "bundle config #{key} #{Array(value).join(":")}"
- end
-
- Bundler::SharedHelpers.major_deprecation 2,\
- "flags passed to commands " \
- "will no longer be automatically remembered. Instead please set flags " \
- "you want remembered between commands using `bundle config " \
- "<setting name> <setting value>`, i.e. `#{command}`"
-
set_local(key, value)
end
end
@@ -371,7 +357,7 @@ module Bundler
return unless file
SharedHelpers.filesystem_access(file) do |p|
FileUtils.mkdir_p(p.dirname)
- require "bundler/yaml_serializer"
+ require_relative "yaml_serializer"
p.open("w") {|f| f.write(YAMLSerializer.dump(hash)) }
end
end
@@ -406,26 +392,12 @@ module Bundler
Pathname.new(@root).join("config") if @root
end
- CONFIG_REGEX = %r{ # rubocop:disable Style/RegexpLiteral
- ^
- (BUNDLE_.+):\s # the key
- (?: !\s)? # optional exclamation mark found with ruby 1.9.3
- (['"]?) # optional opening quote
- (.* # contents of the value
- (?: # optionally, up until the next key
- (\n(?!BUNDLE).+)*
- )
- )
- \2 # matching closing quote
- $
- }xo
-
def load_config(config_file)
return {} if !config_file || ignore_config?
SharedHelpers.filesystem_access(config_file, :read) do |file|
valid_file = file.exist? && !file.size.zero?
return {} unless valid_file
- require "bundler/yaml_serializer"
+ require_relative "yaml_serializer"
YAMLSerializer.load file.read
end
end
@@ -441,7 +413,7 @@ module Bundler
(https?.*?) # URI
(\.#{Regexp.union(PER_URI_OPTIONS)})? # optional suffix key
\z
- /ix
+ /ix.freeze
# TODO: duplicates Rubygems#normalize_uri
# TODO: is this the correct place to validate mirror URIs?
diff --git a/lib/bundler/setup.rb b/lib/bundler/setup.rb
index ac6a5bf861..d156f494a8 100644
--- a/lib/bundler/setup.rb
+++ b/lib/bundler/setup.rb
@@ -1,18 +1,19 @@
# frozen_string_literal: true
-require "bundler/shared_helpers"
+require_relative "shared_helpers"
if Bundler::SharedHelpers.in_bundle?
- require "bundler"
+ require_relative "../bundler"
if STDOUT.tty? || ENV["BUNDLER_FORCE_TTY"]
+ Bundler.ui = Bundler::UI::Shell.new
begin
Bundler.setup
rescue Bundler::BundlerError => e
- puts "\e[31m#{e.message}\e[0m"
- puts e.backtrace.join("\n") if ENV["DEBUG"]
+ Bundler.ui.warn "\e[31m#{e.message}\e[0m"
+ Bundler.ui.warn e.backtrace.join("\n") if ENV["DEBUG"]
if e.is_a?(Bundler::GemNotFound)
- puts "\e[33mRun `bundle install` to install missing gems.\e[0m"
+ Bundler.ui.warn "\e[33mRun `bundle install` to install missing gems.\e[0m"
end
exit e.status_code
end
diff --git a/lib/bundler/shared_helpers.rb b/lib/bundler/shared_helpers.rb
index e09e5e8b74..a0982f561f 100644
--- a/lib/bundler/shared_helpers.rb
+++ b/lib/bundler/shared_helpers.rb
@@ -1,25 +1,15 @@
# frozen_string_literal: true
-require "bundler/compatibility_guard"
+require_relative "compatibility_guard"
require "pathname"
+require "rbconfig"
require "rubygems"
-require "bundler/version"
-require "bundler/constants"
-require "bundler/rubygems_integration"
-require "bundler/current_ruby"
-
-module Gem
- class Dependency
- # This is only needed for RubyGems < 1.4
- unless method_defined? :requirement
- def requirement
- version_requirements
- end
- end
- end
-end
+require_relative "version"
+require_relative "constants"
+require_relative "rubygems_integration"
+require_relative "current_ruby"
module Bundler
module SharedHelpers
@@ -113,9 +103,7 @@ module Bundler
#
# @see {Bundler::PermissionError}
def filesystem_access(path, action = :write, &block)
- # Use block.call instead of yield because of a bug in Ruby 2.2.2
- # See https://github.com/bundler/bundler/issues/5341 for details
- block.call(path.dup.untaint)
+ yield(path.dup.untaint)
rescue Errno::EACCES
raise PermissionError.new(path, action)
rescue Errno::EAGAIN
@@ -142,32 +130,26 @@ module Bundler
def major_deprecation(major_version, message)
bundler_major_version = Bundler.bundler_major_version
if bundler_major_version > major_version
- require "bundler/errors"
- raise DeprecatedError, "[REMOVED FROM #{major_version.succ}.0] #{message}"
+ require_relative "errors"
+ raise DeprecatedError, "[REMOVED] #{message}"
end
- return unless bundler_major_version >= major_version || prints_major_deprecations?
+ return unless bundler_major_version >= major_version && prints_major_deprecations?
@major_deprecation_ui ||= Bundler::UI::Shell.new("no-color" => true)
ui = Bundler.ui.is_a?(@major_deprecation_ui.class) ? Bundler.ui : @major_deprecation_ui
- ui.warn("[DEPRECATED FOR #{major_version}.0] #{message}")
+ ui.warn("[DEPRECATED] #{message}")
end
def print_major_deprecations!
multiple_gemfiles = search_up(".") do |dir|
gemfiles = gemfile_names.select {|gf| File.file? File.expand_path(gf, dir) }
next if gemfiles.empty?
- break false if gemfiles.size == 1
- end
- if multiple_gemfiles && Bundler.bundler_major_version == 1
- Bundler::SharedHelpers.major_deprecation 2, \
- "gems.rb and gems.locked will be preferred to Gemfile and Gemfile.lock."
+ break gemfiles.size != 1
end
-
- if RUBY_VERSION < "2"
- major_deprecation(2, "Bundler will only support ruby >= 2.0, you are running #{RUBY_VERSION}")
- end
- return if Bundler.rubygems.provides?(">= 2")
- major_deprecation(2, "Bundler will only support rubygems >= 2.0, you are running #{Bundler.rubygems.version}")
+ return unless multiple_gemfiles
+ message = "Multiple gemfiles (gems.rb and Gemfile) detected. " \
+ "Make sure you remove Gemfile and Gemfile.lock since bundler is ignoring them in favor of gems.rb and gems.rb.locked."
+ Bundler.ui.warn message
end
def trap(signal, override = false, &block)
@@ -247,13 +229,11 @@ module Bundler
def find_gemfile(order_matters = false)
given = ENV["BUNDLE_GEMFILE"]
return given if given && !given.empty?
- names = gemfile_names
- names.reverse! if order_matters && Bundler.feature_flag.prefer_gems_rb?
- find_file(*names)
+ find_file(*gemfile_names)
end
def gemfile_names
- ["Gemfile", "gems.rb"]
+ ["gems.rb", "Gemfile"]
end
def find_file(*names)
@@ -277,7 +257,7 @@ module Bundler
# avoid stepping above the tmp directory when testing
gemspec = if ENV["BUNDLE_RUBY"] && ENV["BUNDLE_GEM"]
# for Ruby Core
- "lib/bundler.gemspec"
+ "lib/bundler/bundler.gemspec"
else
"bundler.gemspec"
end
@@ -307,20 +287,10 @@ module Bundler
public :set_env
def set_bundle_variables
- begin
- exe_file = Bundler.rubygems.bin_path("bundler", "bundle", VERSION)
- unless File.exist?(exe_file)
- exe_file = File.expand_path("../../../exe/bundle", __FILE__)
- end
- Bundler::SharedHelpers.set_env "BUNDLE_BIN_PATH", exe_file
- rescue Gem::GemNotFoundException
- exe_file = File.expand_path("../../../exe/bundle", __FILE__)
- # for Ruby core repository
- exe_file = File.expand_path("../../../../bin/bundle", __FILE__) unless File.exist?(exe_file)
- Bundler::SharedHelpers.set_env "BUNDLE_BIN_PATH", exe_file
- end
-
- # Set BUNDLE_GEMFILE
+ exe_file = File.expand_path("../../../exe/bundle", __FILE__)
+ # for Ruby core repository
+ exe_file = File.expand_path("../../../../bin/bundle", __FILE__) unless File.exist?(exe_file)
+ Bundler::SharedHelpers.set_env "BUNDLE_BIN_PATH", exe_file
Bundler::SharedHelpers.set_env "BUNDLE_GEMFILE", find_gemfile(:order_matters).to_s
Bundler::SharedHelpers.set_env "BUNDLER_VERSION", Bundler::VERSION
end
@@ -341,7 +311,7 @@ module Bundler
def set_rubylib
rubylib = (ENV["RUBYLIB"] || "").split(File::PATH_SEPARATOR)
- rubylib.unshift bundler_ruby_lib
+ rubylib.unshift bundler_ruby_lib unless RbConfig::CONFIG["rubylibdir"] == bundler_ruby_lib
Bundler::SharedHelpers.set_env "RUBYLIB", rubylib.uniq.join(File::PATH_SEPARATOR)
end
@@ -350,9 +320,6 @@ module Bundler
end
def clean_load_path
- # handle 1.9 where system gems are always on the load path
- return unless defined?(::Gem)
-
bundler_lib = bundler_ruby_lib
loaded_gem_paths = Bundler.rubygems.loaded_gem_paths
@@ -372,10 +339,9 @@ module Bundler
end
def prints_major_deprecations?
- require "bundler"
- deprecation_release = Bundler::VERSION.split(".").drop(1).include?("99")
- return false if !deprecation_release && !Bundler.settings[:major_deprecations]
- require "bundler/deprecate"
+ require_relative "../bundler"
+ return false if Bundler.settings[:silence_deprecations]
+ require_relative "deprecate"
return false if Bundler::Deprecate.skip
true
end
diff --git a/lib/bundler/similarity_detector.rb b/lib/bundler/similarity_detector.rb
index b7f3ee7afa..f698f46a4c 100644
--- a/lib/bundler/similarity_detector.rb
+++ b/lib/bundler/similarity_detector.rb
@@ -51,7 +51,7 @@ module Bundler
dm[i][j] = [
dm[i - 1][j - 1] + (this[j - 1] == that[i - 1] ? 0 : sub),
dm[i][j - 1] + ins,
- dm[i - 1][j] + del
+ dm[i - 1][j] + del,
].min
end
end
diff --git a/lib/bundler/source/git.rb b/lib/bundler/source/git.rb
index 8a31fa307f..aa24a87ed7 100644
--- a/lib/bundler/source/git.rb
+++ b/lib/bundler/source/git.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-require "bundler/vendored_fileutils"
+require_relative "../vendored_fileutils"
require "uri"
module Bundler
@@ -118,18 +118,19 @@ module Bundler
def local_override!(path)
return false if local?
+ original_path = path
path = Pathname.new(path)
path = path.expand_path(Bundler.root) unless path.relative?
unless options["branch"] || Bundler.settings[:disable_local_branch_check]
raise GitError, "Cannot use local override for #{name} at #{path} because " \
- ":branch is not specified in Gemfile. Specify a branch or use " \
- "`bundle config --delete` to remove the local override"
+ ":branch is not specified in Gemfile. Specify a branch or run " \
+ "`bundle config unset local.#{override_for(original_path)}` to remove the local override"
end
unless path.exist?
raise GitError, "Cannot use local override for #{name} because #{path} " \
- "does not exist. Check `bundle config --delete` to remove the local override"
+ "does not exist. Run `bundle config unset local.#{override_for(original_path)}` to remove the local override"
end
set_local!(path)
@@ -328,6 +329,10 @@ module Bundler
def extension_cache_slug(_)
extension_dir_name
end
+
+ def override_for(path)
+ Bundler.settings.local_overrides.key(path)
+ end
end
end
end
diff --git a/lib/bundler/source/git/git_proxy.rb b/lib/bundler/source/git/git_proxy.rb
index cd964f7e56..3db31f0237 100644
--- a/lib/bundler/source/git/git_proxy.rb
+++ b/lib/bundler/source/git/git_proxy.rb
@@ -253,7 +253,7 @@ module Bundler
ensure
STDERR.reopen backup_stderr
end
- $stderr.puts URICredentialsFilter.credential_filtered_string(captured_err, uri) if uri && !captured_err.empty?
+ Bundler.ui.warn URICredentialsFilter.credential_filtered_string(captured_err, uri) if uri && !captured_err.empty?
return_value
end
end
diff --git a/lib/bundler/source/path.rb b/lib/bundler/source/path.rb
index ed734bf549..5f3f1bc2e4 100644
--- a/lib/bundler/source/path.rb
+++ b/lib/bundler/source/path.rb
@@ -191,10 +191,10 @@ module Bundler
else
message = String.new("The path `#{expanded_path}` ")
message << if File.exist?(expanded_path)
- "is not a directory."
- else
- "does not exist."
- end
+ "is not a directory."
+ else
+ "does not exist."
+ end
raise PathError, message
end
diff --git a/lib/bundler/source/rubygems.rb b/lib/bundler/source/rubygems.rb
index 9e5032c079..86fd329089 100644
--- a/lib/bundler/source/rubygems.rb
+++ b/lib/bundler/source/rubygems.rb
@@ -51,7 +51,7 @@ module Bundler
end
def can_lock?(spec)
- return super if Bundler.feature_flag.lockfile_uses_separate_rubygems_sources?
+ return super if Bundler.feature_flag.disable_multisource?
spec.source.is_a?(Rubygems)
end
@@ -106,7 +106,7 @@ module Bundler
end
end
- if installed?(spec) && !force
+ if (installed?(spec) || Plugin.installed?(spec.name)) && !force
print_using_message "Using #{version_message(spec)}"
return nil # no post-install message
end
@@ -124,7 +124,7 @@ module Bundler
begin
s = Bundler.rubygems.spec_from_gem(path, Bundler.settings["trust-policy"])
spec.__swap__(s)
- rescue
+ rescue StandardError
Bundler.rm_rf(path)
raise
end
diff --git a/lib/bundler/source_list.rb b/lib/bundler/source_list.rb
index ac2adacb3d..d3f649a12c 100644
--- a/lib/bundler/source_list.rb
+++ b/lib/bundler/source_list.rb
@@ -1,5 +1,7 @@
# frozen_string_literal: true
+require "set"
+
module Bundler
class SourceList
attr_reader :path_sources,
@@ -41,17 +43,14 @@ module Bundler
end
def global_rubygems_source=(uri)
- if Bundler.feature_flag.lockfile_uses_separate_rubygems_sources?
+ if Bundler.feature_flag.disable_multisource?
@global_rubygems_source ||= rubygems_aggregate_class.new("remotes" => uri)
end
add_rubygems_remote(uri)
end
def add_rubygems_remote(uri)
- if Bundler.feature_flag.lockfile_uses_separate_rubygems_sources?
- return if Bundler.feature_flag.disable_multisource?
- raise InvalidOption, "`lockfile_uses_separate_rubygems_sources` cannot be set without `disable_multisource` being set"
- end
+ return if Bundler.feature_flag.disable_multisource?
@rubygems_aggregate.add_remote(uri)
@rubygems_aggregate
end
@@ -77,12 +76,10 @@ module Bundler
end
def lock_sources
- if Bundler.feature_flag.lockfile_uses_separate_rubygems_sources?
- [[default_source], @rubygems_sources, git_sources, path_sources, plugin_sources].map do |sources|
- sources.sort_by(&:to_s)
- end.flatten(1)
+ lock_sources = (path_sources + git_sources + plugin_sources).sort_by(&:to_s)
+ if Bundler.feature_flag.disable_multisource?
+ lock_sources + rubygems_sources.sort_by(&:to_s)
else
- lock_sources = (path_sources + git_sources + plugin_sources).sort_by(&:to_s)
lock_sources << combine_rubygems_sources
end
end
@@ -97,7 +94,7 @@ module Bundler
end
end
- replacement_rubygems = !Bundler.feature_flag.lockfile_uses_separate_rubygems_sources? &&
+ replacement_rubygems = !Bundler.feature_flag.disable_multisource? &&
replacement_sources.detect {|s| s.is_a?(Source::Rubygems) }
@rubygems_aggregate = replacement_rubygems if replacement_rubygems
@@ -150,7 +147,7 @@ module Bundler
if source.uri =~ /^git\:/
Bundler.ui.warn "The git source `#{source.uri}` uses the `git` protocol, " \
"which transmits data without encryption. Disable this warning with " \
- "`bundle config git.allow_insecure true`, or switch to the `https` " \
+ "`bundle config set git.allow_insecure true`, or switch to the `https` " \
"protocol to keep your data secure."
end
end
diff --git a/lib/bundler/ssl_certs/.document b/lib/bundler/ssl_certs/.document
deleted file mode 100644
index fb66f13c33..0000000000
--- a/lib/bundler/ssl_certs/.document
+++ /dev/null
@@ -1 +0,0 @@
-# Ignore all files in this directory
diff --git a/lib/bundler/ssl_certs/certificate_manager.rb b/lib/bundler/ssl_certs/certificate_manager.rb
deleted file mode 100644
index 26fc38ec18..0000000000
--- a/lib/bundler/ssl_certs/certificate_manager.rb
+++ /dev/null
@@ -1,66 +0,0 @@
-# frozen_string_literal: true
-
-require "bundler/vendored_fileutils"
-require "net/https"
-require "openssl"
-
-module Bundler
- module SSLCerts
- class CertificateManager
- attr_reader :bundler_cert_path, :bundler_certs, :rubygems_certs
-
- def self.update_from!(rubygems_path)
- new(rubygems_path).update!
- end
-
- def initialize(rubygems_path = nil)
- if rubygems_path
- rubygems_cert_path = File.join(rubygems_path, "lib/rubygems/ssl_certs")
- @rubygems_certs = certificates_in(rubygems_cert_path)
- end
-
- @bundler_cert_path = File.expand_path("..", __FILE__)
- @bundler_certs = certificates_in(bundler_cert_path)
- end
-
- def up_to_date?
- rubygems_certs.all? do |rc|
- bundler_certs.find do |bc|
- File.basename(bc) == File.basename(rc) && FileUtils.compare_file(bc, rc)
- end
- end
- end
-
- def update!
- return if up_to_date?
-
- FileUtils.rm bundler_certs
- FileUtils.cp rubygems_certs, bundler_cert_path
- end
-
- def connect_to(host)
- http = Net::HTTP.new(host, 443)
- http.use_ssl = true
- http.verify_mode = OpenSSL::SSL::VERIFY_PEER
- http.cert_store = store
- http.head("/")
- end
-
- private
-
- def certificates_in(path)
- Dir[File.join(path, "**/*.pem")].sort
- end
-
- def store
- @store ||= begin
- store = OpenSSL::X509::Store.new
- bundler_certs.each do |cert|
- store.add_file cert
- end
- store
- end
- end
- end
- end
-end
diff --git a/lib/bundler/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem b/lib/bundler/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem
deleted file mode 100644
index f4ce4ca43d..0000000000
--- a/lib/bundler/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem
+++ /dev/null
@@ -1,21 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG
-A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
-b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw
-MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
-YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT
-aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ
-jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp
-xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp
-1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG
-snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ
-U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8
-9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E
-BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B
-AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz
-yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE
-38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP
-AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad
-DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME
-HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
------END CERTIFICATE-----
diff --git a/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem b/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem
deleted file mode 100644
index 9e6810ab70..0000000000
--- a/lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem
+++ /dev/null
@@ -1,23 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
-MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
-ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL
-MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
-LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug
-RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm
-+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW
-PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM
-xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB
-Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3
-hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg
-EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF
-MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA
-FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec
-nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z
-eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF
-hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2
-Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
-vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
-+OkuE6N36B9K
------END CERTIFICATE-----
diff --git a/lib/bundler/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem b/lib/bundler/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem
deleted file mode 100644
index 20585f1c01..0000000000
--- a/lib/bundler/ssl_certs/rubygems.org/AddTrustExternalCARoot.pem
+++ /dev/null
@@ -1,25 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs
-IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290
-MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux
-FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h
-bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt
-H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9
-uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX
-mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX
-a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN
-E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0
-WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD
-VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0
-Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
-cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx
-IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN
-AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH
-YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
-6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC
-Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX
-c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a
-mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
------END CERTIFICATE-----
diff --git a/lib/bundler/stub_specification.rb b/lib/bundler/stub_specification.rb
index 0dd024024a..bad69c9a14 100644
--- a/lib/bundler/stub_specification.rb
+++ b/lib/bundler/stub_specification.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-require "bundler/remote_specification"
+require_relative "remote_specification"
module Bundler
class StubSpecification < RemoteSpecification
@@ -13,17 +13,13 @@ module Bundler
attr_accessor :stub, :ignored
- # Pre 2.2.0 did not include extension_dir
- # https://github.com/rubygems/rubygems/commit/9485ca2d101b82a946d6f327f4bdcdea6d4946ea
- if Bundler.rubygems.provides?(">= 2.2.0")
- def source=(source)
- super
- # Stub has no concept of source, which means that extension_dir may be wrong
- # This is the case for git-based gems. So, instead manually assign the extension dir
- return unless source.respond_to?(:extension_dir_name)
- path = File.join(stub.extensions_dir, source.extension_dir_name)
- stub.extension_dir = File.expand_path(path)
- end
+ def source=(source)
+ super
+ # Stub has no concept of source, which means that extension_dir may be wrong
+ # This is the case for git-based gems. So, instead manually assign the extension dir
+ return unless source.respond_to?(:extension_dir_name)
+ path = File.join(stub.extensions_dir, source.extension_dir_name)
+ stub.extension_dir = File.expand_path(path)
end
def to_yaml
@@ -32,11 +28,9 @@ module Bundler
# @!group Stub Delegates
- if Bundler.rubygems.provides?(">= 2.3")
- # This is defined directly to avoid having to load every installed spec
- def missing_extensions?
- stub.missing_extensions?
- end
+ # This is defined directly to avoid having to load every installed spec
+ def missing_extensions?
+ stub.missing_extensions?
end
def activated
@@ -57,16 +51,12 @@ module Bundler
stub.full_gem_path || method_missing(:full_gem_path)
end
- if Bundler.rubygems.provides?(">= 2.2.0")
- def full_require_paths
- stub.full_require_paths
- end
+ def full_require_paths
+ stub.full_require_paths
+ end
- # This is what we do in bundler/rubygems_ext
- # full_require_paths is always implemented in >= 2.2.0
- def load_paths
- full_require_paths
- end
+ def load_paths
+ full_require_paths
end
def loaded_from
diff --git a/lib/bundler/templates/newgem/Gemfile.tt b/lib/bundler/templates/newgem/Gemfile.tt
index c114bd6665..4cd2e40f4f 100644
--- a/lib/bundler/templates/newgem/Gemfile.tt
+++ b/lib/bundler/templates/newgem/Gemfile.tt
@@ -1,6 +1,4 @@
source "https://rubygems.org"
-git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
-
# Specify your gem's dependencies in <%= config[:name] %>.gemspec
gemspec
diff --git a/lib/bundler/templates/newgem/newgem.gemspec.tt b/lib/bundler/templates/newgem/newgem.gemspec.tt
index c1a50fe912..18060942c3 100644
--- a/lib/bundler/templates/newgem/newgem.gemspec.tt
+++ b/lib/bundler/templates/newgem/newgem.gemspec.tt
@@ -1,12 +1,4 @@
-<%- if RUBY_VERSION < "2.0.0" -%>
-# coding: utf-8
-
-lib = File.expand_path("../lib", __FILE__)
-<%- else -%>
-lib = File.expand_path("lib", __dir__)
-<%- end -%>
-$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
-require "<%= config[:namespaced_path] %>/version"
+require_relative 'lib/<%=config[:namespaced_path]%>/version'
Gem::Specification.new do |spec|
spec.name = <%= config[:name].inspect %>
@@ -40,7 +32,7 @@ Gem::Specification.new do |spec|
<%- end -%>
spec.add_development_dependency "bundler", "~> <%= config[:bundler_version] %>"
- spec.add_development_dependency "rake", "~> 10.0"
+ spec.add_development_dependency "rake", "~> 12.0"
<%- if config[:ext] -%>
spec.add_development_dependency "rake-compiler"
<%- end -%>
diff --git a/lib/bundler/templates/newgem/test/test_helper.rb.tt b/lib/bundler/templates/newgem/test/test_helper.rb.tt
index 335c4704ec..7d7db165ec 100644
--- a/lib/bundler/templates/newgem/test/test_helper.rb.tt
+++ b/lib/bundler/templates/newgem/test/test_helper.rb.tt
@@ -1,8 +1,4 @@
-<%- if RUBY_VERSION < "2.0.0" -%>
-$LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
-<%- else -%>
$LOAD_PATH.unshift File.expand_path("../lib", __dir__)
-<%- end -%>
require "<%= config[:namespaced_path] %>"
require "minitest/autorun"
diff --git a/lib/bundler/templates/newgem/travis.yml.tt b/lib/bundler/templates/newgem/travis.yml.tt
index 7a3381a889..eab16addca 100644
--- a/lib/bundler/templates/newgem/travis.yml.tt
+++ b/lib/bundler/templates/newgem/travis.yml.tt
@@ -1,5 +1,4 @@
---
-sudo: false
language: ruby
cache: bundler
rvm:
diff --git a/lib/bundler/ui/rg_proxy.rb b/lib/bundler/ui/rg_proxy.rb
index e2f98481db..ef6def225b 100644
--- a/lib/bundler/ui/rg_proxy.rb
+++ b/lib/bundler/ui/rg_proxy.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-require "bundler/ui"
+require_relative "../ui"
require "rubygems/user_interaction"
module Bundler
diff --git a/lib/bundler/ui/shell.rb b/lib/bundler/ui/shell.rb
index 16e3d15713..8e49fa5885 100644
--- a/lib/bundler/ui/shell.rb
+++ b/lib/bundler/ui/shell.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-require "bundler/vendored_thor"
+require_relative "../vendored_thor"
module Bundler
module UI
@@ -35,14 +35,12 @@ module Bundler
return if @warning_history.include? msg
@warning_history << msg
- return tell_err(msg, :yellow, newline) if Bundler.feature_flag.error_on_stderr?
- tell_me(msg, :yellow, newline)
+ tell_err(msg, :yellow, newline)
end
def error(msg, newline = nil)
return unless level("error")
- return tell_err(msg, :red, newline) if Bundler.feature_flag.error_on_stderr?
- tell_me(msg, :red, newline)
+ tell_err(msg, :red, newline)
end
def debug(msg, newline = nil)
diff --git a/lib/bundler/vendor/fileutils/lib/fileutils.rb b/lib/bundler/vendor/fileutils/lib/fileutils.rb
index cc69740845..fb7777eb49 100644
--- a/lib/bundler/vendor/fileutils/lib/fileutils.rb
+++ b/lib/bundler/vendor/fileutils/lib/fileutils.rb
@@ -1,4 +1,13 @@
# frozen_string_literal: true
+
+begin
+ require 'rbconfig'
+rescue LoadError
+ # for make mjit-headers
+end
+
+require "bundler/vendor/fileutils/lib/fileutils/version"
+
#
# = fileutils.rb
#
@@ -56,7 +65,7 @@
#
# There are some `low level' methods, which do not accept any option:
#
-# Bundler::FileUtils.copy_entry(src, dest, preserve = false, dereference = false)
+# Bundler::FileUtils.copy_entry(src, dest, preserve = false, dereference_root = false, remove_destination = false)
# Bundler::FileUtils.copy_file(src, dest, preserve = false, dereference = true)
# Bundler::FileUtils.copy_stream(srcstream, deststream)
# Bundler::FileUtils.remove_entry(path, force = false)
@@ -84,7 +93,6 @@
# files/directories. This equates to passing the <tt>:noop</tt> and
# <tt>:verbose</tt> flags to methods in Bundler::FileUtils.
#
-
module Bundler::FileUtils
def self.private_module_function(name) #:nodoc:
@@ -106,19 +114,22 @@ module Bundler::FileUtils
#
# Changes the current directory to the directory +dir+.
#
- # If this method is called with block, resumes to the old
- # working directory after the block execution finished.
+ # If this method is called with block, resumes to the previous
+ # working directory after the block execution has finished.
#
- # Bundler::FileUtils.cd('/', :verbose => true) # chdir and report it
+ # Bundler::FileUtils.cd('/') # change directory
#
- # Bundler::FileUtils.cd('/') do # chdir
+ # Bundler::FileUtils.cd('/', :verbose => true) # change directory and report it
+ #
+ # Bundler::FileUtils.cd('/') do # change directory
# # ... # do something
# end # return to original directory
#
def cd(dir, verbose: nil, &block) # :yield: dir
fu_output_message "cd #{dir}" if verbose
- Dir.chdir(dir, &block)
+ result = Dir.chdir(dir, &block)
fu_output_message 'cd -' if verbose and block
+ result
end
module_function :cd
@@ -245,15 +256,15 @@ module Bundler::FileUtils
fu_output_message "rmdir #{parents ? '-p ' : ''}#{list.join ' '}" if verbose
return if noop
list.each do |dir|
- begin
- Dir.rmdir(dir = remove_trailing_slash(dir))
- if parents
+ Dir.rmdir(dir = remove_trailing_slash(dir))
+ if parents
+ begin
until (parent = File.dirname(dir)) == '.' or parent == dir
dir = parent
Dir.rmdir(dir)
end
+ rescue Errno::ENOTEMPTY, Errno::EEXIST, Errno::ENOENT
end
- rescue Errno::ENOTEMPTY, Errno::EEXIST, Errno::ENOENT
end
end
end
@@ -295,6 +306,39 @@ module Bundler::FileUtils
#
# :call-seq:
+ # Bundler::FileUtils.cp_lr(src, dest, noop: nil, verbose: nil, dereference_root: true, remove_destination: false)
+ #
+ # Hard link +src+ to +dest+. If +src+ is a directory, this method links
+ # all its contents recursively. If +dest+ is a directory, links
+ # +src+ to +dest/src+.
+ #
+ # +src+ can be a list of files.
+ #
+ # # Installing the library "mylib" under the site_ruby directory.
+ # Bundler::FileUtils.rm_r site_ruby + '/mylib', :force => true
+ # Bundler::FileUtils.cp_lr 'lib/', site_ruby + '/mylib'
+ #
+ # # Examples of linking several files to target directory.
+ # Bundler::FileUtils.cp_lr %w(mail.rb field.rb debug/), site_ruby + '/tmail'
+ # Bundler::FileUtils.cp_lr Dir.glob('*.rb'), '/home/aamine/lib/ruby', :noop => true, :verbose => true
+ #
+ # # If you want to link all contents of a directory instead of the
+ # # directory itself, c.f. src/x -> dest/x, src/y -> dest/y,
+ # # use the following code.
+ # Bundler::FileUtils.cp_lr 'src/.', 'dest' # cp_lr('src', 'dest') makes dest/src, but this doesn't.
+ #
+ def cp_lr(src, dest, noop: nil, verbose: nil,
+ dereference_root: true, remove_destination: false)
+ fu_output_message "cp -lr#{remove_destination ? ' --remove-destination' : ''} #{[src,dest].flatten.join ' '}" if verbose
+ return if noop
+ fu_each_src_dest(src, dest) do |s, d|
+ link_entry s, d, dereference_root, remove_destination
+ end
+ end
+ module_function :cp_lr
+
+ #
+ # :call-seq:
# Bundler::FileUtils.ln_s(target, link, force: nil, noop: nil, verbose: nil)
# Bundler::FileUtils.ln_s(target, dir, force: nil, noop: nil, verbose: nil)
# Bundler::FileUtils.ln_s(targets, dir, force: nil, noop: nil, verbose: nil)
@@ -340,6 +384,26 @@ module Bundler::FileUtils
module_function :ln_sf
#
+ # Hard links a file system entry +src+ to +dest+.
+ # If +src+ is a directory, this method links its contents recursively.
+ #
+ # Both of +src+ and +dest+ must be a path name.
+ # +src+ must exist, +dest+ must not exist.
+ #
+ # If +dereference_root+ is true, this method dereferences the tree root.
+ #
+ # If +remove_destination+ is true, this method removes each destination file before copy.
+ #
+ def link_entry(src, dest, dereference_root = false, remove_destination = false)
+ Entry_.new(src, nil, dereference_root).traverse do |ent|
+ destent = Entry_.new(dest, ent.rel, false)
+ File.unlink destent.path if remove_destination && File.file?(destent.path)
+ ent.link destent.path
+ end
+ end
+ module_function :link_entry
+
+ #
# Copies a file content +src+ to +dest+. If +dest+ is a directory,
# copies +src+ to +dest/src+.
#
@@ -412,7 +476,7 @@ module Bundler::FileUtils
def copy_entry(src, dest, preserve = false, dereference_root = false, remove_destination = false)
Entry_.new(src, nil, dereference_root).wrap_traverse(proc do |ent|
destent = Entry_.new(dest, ent.rel, false)
- File.unlink destent.path if remove_destination && File.file?(destent.path)
+ File.unlink destent.path if remove_destination && (File.file?(destent.path) || File.symlink?(destent.path))
ent.copy destent.path
end, proc do |ent|
destent = Entry_.new(dest, ent.rel, false)
@@ -461,13 +525,12 @@ module Bundler::FileUtils
if destent.exist?
if destent.directory?
raise Errno::EEXIST, d
- else
- destent.remove_file if rename_cannot_overwrite_file?
end
end
begin
File.rename s, d
- rescue Errno::EXDEV
+ rescue Errno::EXDEV,
+ Errno::EPERM # move from unencrypted to encrypted dir (ext4)
copy_entry s, d, true
if secure
remove_entry_secure s, force
@@ -485,11 +548,6 @@ module Bundler::FileUtils
alias move mv
module_function :move
- def rename_cannot_overwrite_file? #:nodoc:
- /emx/ =~ RUBY_PLATFORM
- end
- private_module_function :rename_cannot_overwrite_file?
-
#
# Remove file(s) specified in +list+. This method cannot remove directories.
# All StandardErrors are ignored when the :force option is set.
@@ -601,8 +659,8 @@ module Bundler::FileUtils
#
# For details of this security vulnerability, see Perl's case:
#
- # * http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2005-0448
- # * http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2004-0452
+ # * https://cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2005-0448
+ # * https://cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2004-0452
#
# For fileutils.rb, this vulnerability is reported in [ruby-dev:26100].
#
@@ -626,22 +684,38 @@ module Bundler::FileUtils
unless parent_st.sticky?
raise ArgumentError, "parent directory is world writable, Bundler::FileUtils#remove_entry_secure does not work; abort: #{path.inspect} (parent directory mode #{'%o' % parent_st.mode})"
end
+
# freeze tree root
euid = Process.euid
- File.open(fullpath + '/.') {|f|
- unless fu_stat_identical_entry?(st, f.stat)
- # symlink (TOC-to-TOU attack?)
- File.unlink fullpath
- return
- end
- f.chown euid, -1
- f.chmod 0700
- unless fu_stat_identical_entry?(st, File.lstat(fullpath))
- # TOC-to-TOU attack?
- File.unlink fullpath
- return
- end
- }
+ dot_file = fullpath + "/."
+ begin
+ File.open(dot_file) {|f|
+ unless fu_stat_identical_entry?(st, f.stat)
+ # symlink (TOC-to-TOU attack?)
+ File.unlink fullpath
+ return
+ end
+ f.chown euid, -1
+ f.chmod 0700
+ }
+ rescue Errno::EISDIR # JRuby in non-native mode can't open files as dirs
+ File.lstat(dot_file).tap {|fstat|
+ unless fu_stat_identical_entry?(st, fstat)
+ # symlink (TOC-to-TOU attack?)
+ File.unlink fullpath
+ return
+ end
+ File.chown euid, -1, dot_file
+ File.chmod 0700, dot_file
+ }
+ end
+
+ unless fu_stat_identical_entry?(st, File.lstat(fullpath))
+ # TOC-to-TOU attack?
+ File.unlink fullpath
+ return
+ end
+
# ---- tree root is frozen ----
root = Entry_.new(path)
root.preorder_traverse do |ent|
@@ -742,8 +816,15 @@ module Bundler::FileUtils
#
def compare_stream(a, b)
bsize = fu_stream_blksize(a, b)
- sa = String.new(capacity: bsize)
- sb = String.new(capacity: bsize)
+
+ if RUBY_VERSION > "2.4"
+ sa = String.new(capacity: bsize)
+ sb = String.new(capacity: bsize)
+ else
+ sa = String.new
+ sb = String.new
+ end
+
begin
a.read(bsize, sa)
b.read(bsize, sb)
@@ -1001,11 +1082,6 @@ module Bundler::FileUtils
end
module_function :chown_R
- begin
- require 'etc'
- rescue LoadError # rescue LoadError for miniruby
- end
-
def fu_get_uid(user) #:nodoc:
return nil unless user
case user
@@ -1014,6 +1090,7 @@ module Bundler::FileUtils
when /\A\d+\z/
user.to_i
else
+ require 'etc'
Etc.getpwnam(user) ? Etc.getpwnam(user).uid : nil
end
end
@@ -1027,6 +1104,7 @@ module Bundler::FileUtils
when /\A\d+\z/
group.to_i
else
+ require 'etc'
Etc.getgrnam(group) ? Etc.getgrnam(group).gid : nil
end
end
@@ -1067,8 +1145,11 @@ module Bundler::FileUtils
module StreamUtils_
private
- def fu_windows?
- /mswin|mingw|bccwin|emx/ =~ RUBY_PLATFORM
+ case (defined?(::RbConfig) ? ::RbConfig::CONFIG['host_os'] : ::RUBY_PLATFORM)
+ when /mswin|mingw/
+ def fu_windows?; true end
+ else
+ def fu_windows?; false end
end
def fu_copy_stream0(src, dest, blksize = nil) #:nodoc:
@@ -1193,9 +1274,15 @@ module Bundler::FileUtils
def entries
opts = {}
opts[:encoding] = ::Encoding::UTF_8 if fu_windows?
- Dir.entries(path(), opts)\
- .reject {|n| n == '.' or n == '..' }\
- .map {|n| Entry_.new(prefix(), join(rel(), n.untaint)) }
+
+ files = if Dir.respond_to?(:children)
+ Dir.children(path, opts)
+ else
+ Dir.entries(path(), opts)
+ .reject {|n| n == '.' or n == '..' }
+ end
+
+ files.map {|n| Entry_.new(prefix(), join(rel(), n.untaint)) }
end
def stat
@@ -1250,6 +1337,22 @@ module Bundler::FileUtils
end
end
+ def link(dest)
+ case
+ when directory?
+ if !File.exist?(dest) and descendant_directory?(dest, path)
+ raise ArgumentError, "cannot link directory %s to itself %s" % [path, dest]
+ end
+ begin
+ Dir.mkdir dest
+ rescue
+ raise unless File.directory?(dest)
+ end
+ else
+ File.link path(), dest
+ end
+ end
+
def copy(dest)
lstat
case
diff --git a/lib/bundler/vendor/fileutils/lib/fileutils/version.rb b/lib/bundler/vendor/fileutils/lib/fileutils/version.rb
new file mode 100644
index 0000000000..6d8504ccd5
--- /dev/null
+++ b/lib/bundler/vendor/fileutils/lib/fileutils/version.rb
@@ -0,0 +1,5 @@
+# frozen_string_literal: true
+
+module Bundler::FileUtils
+ VERSION = "1.2.0"
+end
diff --git a/lib/bundler/vendor/thor/lib/thor/actions.rb b/lib/bundler/vendor/thor/lib/thor/actions.rb
index e6698572a9..b06feac2a0 100644
--- a/lib/bundler/vendor/thor/lib/thor/actions.rb
+++ b/lib/bundler/vendor/thor/lib/thor/actions.rb
@@ -113,8 +113,10 @@ class Bundler::Thor
# the script started).
#
def relative_to_original_destination_root(path, remove_dot = true)
- path = path.dup
- if path.gsub!(@destination_stack[0], ".")
+ root = @destination_stack[0]
+ if path.start_with?(root) && [File::SEPARATOR, File::ALT_SEPARATOR, nil, ''].include?(path[root.size..root.size])
+ path = path.dup
+ path[0...root.size] = '.'
remove_dot ? (path[2..-1] || "") : path
else
path
@@ -217,6 +219,7 @@ class Bundler::Thor
shell.padding += 1 if verbose
contents = if is_uri
+ require "open-uri"
open(path, "Accept" => "application/x-thor-template", &:read)
else
open(path, &:read)
@@ -252,9 +255,16 @@ class Bundler::Thor
say_status :run, desc, config.fetch(:verbose, true)
- unless options[:pretend]
- config[:capture] ? `#{command}` : system(command.to_s)
+ return if options[:pretend]
+
+ result = config[:capture] ? `#{command}` : system(command.to_s)
+
+ if config[:abort_on_failure]
+ success = config[:capture] ? $?.success? : result
+ abort unless success
end
+
+ result
end
# Executes a ruby script (taking into account WIN32 platform quirks).
diff --git a/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb b/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb
index 4c83bebc86..cc29db05a8 100644
--- a/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb
+++ b/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb
@@ -60,6 +60,9 @@ class Bundler::Thor
# destination. If a block is given instead of destination, the content of
# the url is yielded and used as location.
#
+ # +get+ relies on open-uri, so passing application user input would provide
+ # a command injection attack vector.
+ #
# ==== Parameters
# source<String>:: the address of the given content.
# destination<String>:: the relative path to the destination root.
@@ -117,7 +120,13 @@ class Bundler::Thor
context = config.delete(:context) || instance_eval("binding")
create_file destination, nil, config do
- content = CapturableERB.new(::File.binread(source), nil, "-", "@output_buffer").tap do |erb|
+ match = ERB.version.match(/(\d+\.\d+\.\d+)/)
+ capturable_erb = if match && match[1] >= "2.2.0" # Ruby 2.6+
+ CapturableERB.new(::File.binread(source), :trim_mode => "-", :eoutvar => "@output_buffer")
+ else
+ CapturableERB.new(::File.binread(source), nil, "-", "@output_buffer")
+ end
+ content = capturable_erb.tap do |erb|
erb.filename = source
end.result(context)
content = yield(content) if block
@@ -301,7 +310,7 @@ class Bundler::Thor
def comment_lines(path, flag, *args)
flag = flag.respond_to?(:source) ? flag.source : flag
- gsub_file(path, /^(\s*)([^#|\n]*#{flag})/, '\1# \2', *args)
+ gsub_file(path, /^(\s*)([^#\n]*#{flag})/, '\1# \2', *args)
end
# Removes a file at the given location.
diff --git a/lib/bundler/vendor/thor/lib/thor/base.rb b/lib/bundler/vendor/thor/lib/thor/base.rb
index 7e41dc226b..e79d03d087 100644
--- a/lib/bundler/vendor/thor/lib/thor/base.rb
+++ b/lib/bundler/vendor/thor/lib/thor/base.rb
@@ -466,13 +466,13 @@ class Bundler::Thor
dispatch(nil, given_args.dup, nil, config)
rescue Bundler::Thor::Error => e
config[:debug] || ENV["THOR_DEBUG"] == "1" ? (raise e) : config[:shell].error(e.message)
- exit(1) if exit_on_failure?
+ exit(false) if exit_on_failure?
rescue Errno::EPIPE
# This happens if a thor command is piped to something like `head`,
# which closes the pipe when it's done reading. This will also
# mean that if the pipe is closed, further unnecessary
# computation will not occur.
- exit(0)
+ exit(true)
end
# Allows to use private methods from parent in child classes as commands.
@@ -493,8 +493,7 @@ class Bundler::Thor
alias_method :public_task, :public_command
def handle_no_command_error(command, has_namespace = $thor_runner) #:nodoc:
- raise UndefinedCommandError, "Could not find command #{command.inspect} in #{namespace.inspect} namespace." if has_namespace
- raise UndefinedCommandError, "Could not find command #{command.inspect}."
+ raise UndefinedCommandError.new(command, all_commands.keys, (namespace if has_namespace))
end
alias_method :handle_no_task_error, :handle_no_command_error
diff --git a/lib/bundler/vendor/thor/lib/thor/error.rb b/lib/bundler/vendor/thor/lib/thor/error.rb
index 2f816081f3..16c68294e4 100644
--- a/lib/bundler/vendor/thor/lib/thor/error.rb
+++ b/lib/bundler/vendor/thor/lib/thor/error.rb
@@ -1,4 +1,23 @@
class Bundler::Thor
+ Correctable =
+ begin
+ require 'did_you_mean'
+
+ # In order to support versions of Ruby that don't have keyword
+ # arguments, we need our own spell checker class that doesn't take key
+ # words. Even though this code wouldn't be hit because of the check
+ # above, it's still necessary because the interpreter would otherwise be
+ # unable to parse the file.
+ class NoKwargSpellChecker < DidYouMean::SpellChecker # :nodoc:
+ def initialize(dictionary)
+ @dictionary = dictionary
+ end
+ end
+
+ DidYouMean::Correctable
+ rescue LoadError, NameError
+ end
+
# Bundler::Thor::Error is raised when it's caused by wrong usage of thor classes. Those
# errors have their backtrace suppressed and are nicely shown to the user.
#
@@ -10,6 +29,35 @@ class Bundler::Thor
# Raised when a command was not found.
class UndefinedCommandError < Error
+ class SpellChecker
+ attr_reader :error
+
+ def initialize(error)
+ @error = error
+ end
+
+ def corrections
+ @corrections ||= spell_checker.correct(error.command).map(&:inspect)
+ end
+
+ def spell_checker
+ NoKwargSpellChecker.new(error.all_commands)
+ end
+ end
+
+ attr_reader :command, :all_commands
+
+ def initialize(command, all_commands, namespace)
+ @command = command
+ @all_commands = all_commands
+
+ message = "Could not find command #{command.inspect}"
+ message = namespace ? "#{message} in #{namespace.inspect} namespace." : "#{message}."
+
+ super(message)
+ end
+
+ prepend Correctable if Correctable
end
UndefinedTaskError = UndefinedCommandError
@@ -22,6 +70,33 @@ class Bundler::Thor
end
class UnknownArgumentError < Error
+ class SpellChecker
+ attr_reader :error
+
+ def initialize(error)
+ @error = error
+ end
+
+ def corrections
+ @corrections ||=
+ error.unknown.flat_map { |unknown| spell_checker.correct(unknown) }.uniq.map(&:inspect)
+ end
+
+ def spell_checker
+ @spell_checker ||= NoKwargSpellChecker.new(error.switches)
+ end
+ end
+
+ attr_reader :switches, :unknown
+
+ def initialize(switches, unknown)
+ @switches = switches
+ @unknown = unknown
+
+ super("Unknown switches #{unknown.map(&:inspect).join(', ')}")
+ end
+
+ prepend Correctable if Correctable
end
class RequiredArgumentMissingError < InvocationError
@@ -29,4 +104,11 @@ class Bundler::Thor
class MalformattedArgumentError < InvocationError
end
+
+ if Correctable
+ DidYouMean::SPELL_CHECKERS.merge!(
+ 'Bundler::Thor::UndefinedCommandError' => UndefinedCommandError::SpellChecker,
+ 'Bundler::Thor::UnknownArgumentError' => UnknownArgumentError::SpellChecker
+ )
+ end
end
diff --git a/lib/bundler/vendor/thor/lib/thor/group.rb b/lib/bundler/vendor/thor/lib/thor/group.rb
index 05ddc10cd3..30db46529e 100644
--- a/lib/bundler/vendor/thor/lib/thor/group.rb
+++ b/lib/bundler/vendor/thor/lib/thor/group.rb
@@ -61,7 +61,7 @@ class Bundler::Thor::Group
invocations[name] = false
invocation_blocks[name] = block if block_given?
- class_eval <<-METHOD, __FILE__, __LINE__
+ class_eval <<-METHOD, __FILE__, __LINE__ + 1
def _invoke_#{name.to_s.gsub(/\W/, '_')}
klass, command = self.class.prepare_for_invocation(nil, #{name.inspect})
@@ -120,7 +120,7 @@ class Bundler::Thor::Group
invocations[name] = true
invocation_blocks[name] = block if block_given?
- class_eval <<-METHOD, __FILE__, __LINE__
+ class_eval <<-METHOD, __FILE__, __LINE__ + 1
def _invoke_from_option_#{name.to_s.gsub(/\W/, '_')}
return unless options[#{name.inspect}]
diff --git a/lib/bundler/vendor/thor/lib/thor/parser/options.rb b/lib/bundler/vendor/thor/lib/thor/parser/options.rb
index 70f6366842..179f4fa015 100644
--- a/lib/bundler/vendor/thor/lib/thor/parser/options.rb
+++ b/lib/bundler/vendor/thor/lib/thor/parser/options.rb
@@ -44,6 +44,7 @@ class Bundler::Thor
@shorts = {}
@switches = {}
@extra = []
+ @stopped_parsing_after_extra_index = nil
options.each do |option|
@switches[option.switch_name] = option
@@ -66,6 +67,7 @@ class Bundler::Thor
if result == OPTS_END
shift
@parsing_options = false
+ @stopped_parsing_after_extra_index ||= @extra.size
super
else
result
@@ -99,6 +101,7 @@ class Bundler::Thor
elsif @stop_on_unknown
@parsing_options = false
@extra << shifted
+ @stopped_parsing_after_extra_index ||= @extra.size
@extra << shift while peek
break
elsif match
@@ -120,9 +123,11 @@ class Bundler::Thor
end
def check_unknown!
+ to_check = @stopped_parsing_after_extra_index ? @extra[0...@stopped_parsing_after_extra_index] : @extra
+
# an unknown option starts with - or -- and has no more --'s afterward.
- unknown = @extra.select { |str| str =~ /^--?(?:(?!--).)*$/ }
- raise UnknownArgumentError, "Unknown switches '#{unknown.join(', ')}'" unless unknown.empty?
+ unknown = to_check.select { |str| str =~ /^--?(?:(?!--).)*$/ }
+ raise UnknownArgumentError.new(@switches.keys, unknown) unless unknown.empty?
end
protected
diff --git a/lib/bundler/vendor/thor/lib/thor/runner.rb b/lib/bundler/vendor/thor/lib/thor/runner.rb
index b110b8d478..65ae422d7f 100644
--- a/lib/bundler/vendor/thor/lib/thor/runner.rb
+++ b/lib/bundler/vendor/thor/lib/thor/runner.rb
@@ -3,7 +3,7 @@ require "bundler/vendor/thor/lib/thor/group"
require "bundler/vendor/thor/lib/thor/core_ext/io_binary_read"
require "yaml"
-require "digest"
+require "digest/md5"
require "pathname"
class Bundler::Thor::Runner < Bundler::Thor #:nodoc: # rubocop:disable ClassLength
@@ -90,7 +90,7 @@ class Bundler::Thor::Runner < Bundler::Thor #:nodoc: # rubocop:disable ClassLeng
end
thor_yaml[as] = {
- :filename => Digest(:MD5).hexdigest(name + as),
+ :filename => Digest::MD5.hexdigest(name + as),
:location => location,
:namespaces => Bundler::Thor::Util.namespaces_in_content(contents, base)
}
diff --git a/lib/bundler/vendor/thor/lib/thor/shell.rb b/lib/bundler/vendor/thor/lib/thor/shell.rb
index e945549324..a68cdf8a98 100644
--- a/lib/bundler/vendor/thor/lib/thor/shell.rb
+++ b/lib/bundler/vendor/thor/lib/thor/shell.rb
@@ -55,7 +55,7 @@ class Bundler::Thor
# Common methods that are delegated to the shell.
SHELL_DELEGATED_METHODS.each do |method|
- module_eval <<-METHOD, __FILE__, __LINE__
+ module_eval <<-METHOD, __FILE__, __LINE__ + 1
def #{method}(*args,&block)
shell.#{method}(*args,&block)
end
diff --git a/lib/bundler/vendor/thor/lib/thor/shell/basic.rb b/lib/bundler/vendor/thor/lib/thor/shell/basic.rb
index 5162390efd..52648fee8f 100644
--- a/lib/bundler/vendor/thor/lib/thor/shell/basic.rb
+++ b/lib/bundler/vendor/thor/lib/thor/shell/basic.rb
@@ -1,6 +1,8 @@
class Bundler::Thor
module Shell
class Basic
+ DEFAULT_TERMINAL_WIDTH = 80
+
attr_accessor :base
attr_reader :padding
@@ -45,6 +47,10 @@ class Bundler::Thor
# Asks something to the user and receives a response.
#
+ # If a default value is specified it will be presented to the user
+ # and allows them to select that value with an empty response. This
+ # option is ignored when limited answers are supplied.
+ #
# If asked to limit the correct responses, you can pass in an
# array of acceptable answers. If one of those is not supplied,
# they will be shown a message stating that one of those answers
@@ -61,6 +67,8 @@ class Bundler::Thor
# ==== Example
# ask("What is your name?")
#
+ # ask("What is the planet furthest from the sun?", :default => "Pluto")
+ #
# ask("What is your favorite Neopolitan flavor?", :limited_to => ["strawberry", "chocolate", "vanilla"])
#
# ask("What is your password?", :echo => false)
@@ -222,8 +230,20 @@ class Bundler::Thor
paras = message.split("\n\n")
paras.map! do |unwrapped|
- unwrapped.strip.tr("\n", " ").squeeze(" ").gsub(/.{1,#{width}}(?:\s|\Z)/) { ($& + 5.chr).gsub(/\n\005/, "\n").gsub(/\005/, "\n") }
- end
+ counter = 0
+ unwrapped.split(" ").inject do |memo, word|
+ word = word.gsub(/\n\005/, "\n").gsub(/\005/, "\n")
+ counter = 0 if word.include? "\n"
+ if (counter + word.length + 1) < width
+ memo = "#{memo} #{word}"
+ counter += (word.length + 1)
+ else
+ memo = "#{memo}\n#{word}"
+ counter = word.length
+ end
+ memo
+ end
+ end.compact!
paras.each do |para|
para.split("\n").each do |line|
@@ -239,11 +259,11 @@ class Bundler::Thor
#
# ==== Parameters
# destination<String>:: the destination file to solve conflicts
- # block<Proc>:: an optional block that returns the value to be used in diff
+ # block<Proc>:: an optional block that returns the value to be used in diff and merge
#
def file_collision(destination)
return true if @always_force
- options = block_given? ? "[Ynaqdh]" : "[Ynaqh]"
+ options = block_given? ? "[Ynaqdhm]" : "[Ynaqh]"
loop do
answer = ask(
@@ -267,6 +287,13 @@ class Bundler::Thor
when is?(:diff)
show_diff(destination, yield) if block_given?
say "Retrying..."
+ when is?(:merge)
+ if block_given? && !merge_tool.empty?
+ merge(destination, yield)
+ return nil
+ end
+
+ say "Please specify merge tool to `THOR_MERGE` env."
else
say file_collision_help
end
@@ -279,11 +306,11 @@ class Bundler::Thor
result = if ENV["THOR_COLUMNS"]
ENV["THOR_COLUMNS"].to_i
else
- unix? ? dynamic_width : 80
+ unix? ? dynamic_width : DEFAULT_TERMINAL_WIDTH
end
- result < 10 ? 80 : result
+ result < 10 ? DEFAULT_TERMINAL_WIDTH : result
rescue
- 80
+ DEFAULT_TERMINAL_WIDTH
end
# Called if something goes wrong during the execution. This is used by Bundler::Thor
@@ -344,6 +371,7 @@ class Bundler::Thor
q - quit, abort
d - diff, show the differences between the old and the new
h - help, show this help
+ m - merge, run merge tool
HELP
end
@@ -432,6 +460,23 @@ class Bundler::Thor
end
correct_answer
end
+
+ def merge(destination, content) #:nodoc:
+ require "tempfile"
+ Tempfile.open([File.basename(destination), File.extname(destination)], File.dirname(destination)) do |temp|
+ temp.write content
+ temp.rewind
+ system %(#{merge_tool} "#{temp.path}" "#{destination}")
+ end
+ end
+
+ def merge_tool #:nodoc:
+ @merge_tool ||= ENV["THOR_MERGE"] || git_merge_tool
+ end
+
+ def git_merge_tool #:nodoc:
+ `git config merge.tool`.rstrip rescue ""
+ end
end
end
end
diff --git a/lib/bundler/vendor/thor/lib/thor/version.rb b/lib/bundler/vendor/thor/lib/thor/version.rb
index df8f18821a..98f2b79081 100644
--- a/lib/bundler/vendor/thor/lib/thor/version.rb
+++ b/lib/bundler/vendor/thor/lib/thor/version.rb
@@ -1,3 +1,3 @@
class Bundler::Thor
- VERSION = "0.20.0"
+ VERSION = "0.20.3"
end
diff --git a/lib/bundler/vendored_fileutils.rb b/lib/bundler/vendored_fileutils.rb
index d14e98baf7..4b71759224 100644
--- a/lib/bundler/vendored_fileutils.rb
+++ b/lib/bundler/vendored_fileutils.rb
@@ -2,7 +2,7 @@
module Bundler; end
if RUBY_VERSION >= "2.4"
- require "bundler/vendor/fileutils/lib/fileutils"
+ require_relative "vendor/fileutils/lib/fileutils"
else
# the version we vendor is 2.4+
require "fileutils"
diff --git a/lib/bundler/vendored_molinillo.rb b/lib/bundler/vendored_molinillo.rb
index 061b634f72..d1976f5cb4 100644
--- a/lib/bundler/vendored_molinillo.rb
+++ b/lib/bundler/vendored_molinillo.rb
@@ -1,4 +1,4 @@
# frozen_string_literal: true
module Bundler; end
-require "bundler/vendor/molinillo/lib/molinillo"
+require_relative "vendor/molinillo/lib/molinillo"
diff --git a/lib/bundler/vendored_persistent.rb b/lib/bundler/vendored_persistent.rb
index de9c42fcc1..7670b83992 100644
--- a/lib/bundler/vendored_persistent.rb
+++ b/lib/bundler/vendored_persistent.rb
@@ -15,7 +15,7 @@ module Bundler
end
end
end
-require "bundler/vendor/net-http-persistent/lib/net/http/persistent"
+require_relative "vendor/net-http-persistent/lib/net/http/persistent"
module Bundler
class PersistentHTTP < Persistent::Net::HTTP::Persistent
diff --git a/lib/bundler/vendored_thor.rb b/lib/bundler/vendored_thor.rb
index 8cca090f55..b0b7e7be84 100644
--- a/lib/bundler/vendored_thor.rb
+++ b/lib/bundler/vendored_thor.rb
@@ -5,4 +5,4 @@ module Bundler
Kernel.send(:require, "bundler/vendor/thor/lib/thor/actions")
end
end
-require "bundler/vendor/thor/lib/thor"
+require_relative "vendor/thor/lib/thor"
diff --git a/lib/bundler/version.rb b/lib/bundler/version.rb
index 75d0817cca..cfd6300950 100644
--- a/lib/bundler/version.rb
+++ b/lib/bundler/version.rb
@@ -1,13 +1,10 @@
# frozen_string_literal: false
-# Ruby 1.9.3 and old RubyGems don't play nice with frozen version strings
-# rubocop:disable MutableConstant
-
module Bundler
# We're doing this because we might write tests that deal
# with other versions of bundler and we are unsure how to
# handle this better.
- VERSION = "2.0.0.dev" unless defined?(::Bundler::VERSION)
+ VERSION = "2.1.0.pre.1".freeze unless defined?(::Bundler::VERSION)
def self.overwrite_loaded_gem_version
begin
diff --git a/lib/bundler/vlad.rb b/lib/bundler/vlad.rb
index 68181e7db8..538e8c3e74 100644
--- a/lib/bundler/vlad.rb
+++ b/lib/bundler/vlad.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-require "bundler/shared_helpers"
+require_relative "shared_helpers"
Bundler::SharedHelpers.major_deprecation 2,
"The Bundler task for Vlad"
@@ -8,7 +8,7 @@ Bundler::SharedHelpers.major_deprecation 2,
#
# Add "require 'bundler/vlad'" in your Vlad deploy.rb, and
# include the vlad:bundle:install task in your vlad:deploy task.
-require "bundler/deployment"
+require_relative "deployment"
include Rake::DSL if defined? Rake::DSL
diff --git a/lib/bundler/worker.rb b/lib/bundler/worker.rb
index e91cfa7805..3471654b43 100644
--- a/lib/bundler/worker.rb
+++ b/lib/bundler/worker.rb
@@ -1,7 +1,5 @@
# frozen_string_literal: true
-require "thread"
-
module Bundler
class Worker
POISON = Object.new
@@ -62,7 +60,7 @@ module Bundler
def apply_func(obj, i)
@func.call(obj, i)
- rescue Exception => e
+ rescue Exception => e # rubocop:disable Lint/RescueException
WrappedException.new(e)
end
diff --git a/lib/bundler/yaml_serializer.rb b/lib/bundler/yaml_serializer.rb
index 0fd81c40ef..374b3bb5e3 100644
--- a/lib/bundler/yaml_serializer.rb
+++ b/lib/bundler/yaml_serializer.rb
@@ -32,7 +32,7 @@ module Bundler
(.*) # value
\1 # matching closing quote
$
- /xo
+ /xo.freeze
HASH_REGEX = /
^
@@ -40,12 +40,11 @@ module Bundler
(.+) # key
(?::(?=(?:\s|$))) # : (without the lookahead the #key includes this when : is present in value)
[ ]?
- (?: !\s)? # optional exclamation mark found with ruby 1.9.3
(['"]?) # optional opening quote
(.*) # value
\3 # matching closing quote
$
- /xo
+ /xo.freeze
def load(str)
res = {}
diff --git a/man/bundle-add.ronn b/man/bundle-add.ronn
index 1e2d732ec6..26cbe55647 100644
--- a/man/bundle-add.ronn
+++ b/man/bundle-add.ronn
@@ -3,7 +3,7 @@ bundle-add(1) -- Add gem to the Gemfile and run bundle install
## SYNOPSIS
-`bundle add` <GEM_NAME> [--group=GROUP] [--version=VERSION] [--source=SOURCE] [--skip-install] [--strict] [--optimistic]
+`bundle add` <GEM_NAME> [--group=GROUP] [--version=VERSION] [--source=SOURCE] [--git=GIT] [--branch=BRANCH] [--skip-install] [--strict] [--optimistic]
## DESCRIPTION
Adds the named gem to the Gemfile and run `bundle install`. `bundle install` can be avoided by using the flag `--skip-install`.
@@ -30,6 +30,12 @@ bundle add rails --group "development, test"
* `--source`, , `-s`:
Specify the source for the added gem.
+* `--git`:
+ Specify the git source for the added gem.
+
+* `--branch`:
+ Specify the git branch for the added gem.
+
* `--skip-install`:
Adds the gem to the Gemfile but does not install it.
diff --git a/man/bundle-config.ronn b/man/bundle-config.ronn
index 379b778348..9242a59f95 100644
--- a/man/bundle-config.ronn
+++ b/man/bundle-config.ronn
@@ -3,7 +3,7 @@ bundle-config(1) -- Set bundler configuration options
## SYNOPSIS
-`bundle config` [<name> [<value>]]
+`bundle config` [list|get|set|unset] [<name> [<value>]]
## DESCRIPTION
@@ -16,39 +16,45 @@ Bundler loads configuration settings in this order:
3. Global config (`~/.bundle/config`)
4. Bundler default config
-Executing `bundle config` with no parameters will print a list of all
-bundler configuration for the current bundle, and where that configuration
+Executing `bundle config list` with will print a list of all bundler
+configuration for the current bundle, and where that configuration
was set.
-Executing `bundle config <name>` will print the value of that configuration
+Executing `bundle config get <name>` will print the value of that configuration
setting, and where it was set.
-Executing `bundle config <name> <value>` will set that configuration to the
+Executing `bundle config set <name> <value>` will set that configuration to the
value specified for all bundles executed as the current user. The configuration
will be stored in `~/.bundle/config`. If <name> already is set, <name> will be
overridden and user will be warned.
-Executing `bundle config --global <name> <value>` works the same as above.
+Executing `bundle config set --global <name> <value>` works the same as above.
-Executing `bundle config --local <name> <value>` will set that configuration to
+Executing `bundle config set --local <name> <value>` will set that configuration to
the local application. The configuration will be stored in `app/.bundle/config`.
-Executing `bundle config --delete <name>` will delete the configuration in both
-local and global sources. Not compatible with --global or --local flag.
+Executing `bundle config unset <name>` will delete the configuration in both
+local and global sources.
+
+Executing `bundle config unset --global <name>` will delete the configuration
+only from the user configuration.
+
+Executing `bundle config unset --local <name> <value>` will delete the
+configuration only from the local application.
Executing bundle with the `BUNDLE_IGNORE_CONFIG` environment variable set will
cause it to ignore all configuration.
-Executing `bundle config disable_multisource true` upgrades the warning about
+Executing `bundle config set disable_multisource true` upgrades the warning about
the Gemfile containing multiple primary sources to an error. Executing `bundle
-config --delete disable_multisource` downgrades this error to a warning.
+config unset disable_multisource` downgrades this error to a warning.
## REMEMBERING OPTIONS
Flags passed to `bundle install` or the Bundler runtime,
such as `--path foo` or `--without production`, are not remembered between commands.
-If these options must be remembered,they must be set using `bundle config`
-(e.g., `bundle config path foo`).
+If these options must be remembered, they must be set using `bundle config`
+(e.g., `bundle config set path foo`).
The options that can be configured are:
@@ -92,7 +98,7 @@ pass configuration flags to `gem install` to specify where to find the
Since the specific location of that executable can change from machine
to machine, you can specify these flags on a per-machine basis.
- bundle config build.mysql --with-mysql-config=/usr/local/mysql/bin/mysql_config
+ bundle config set build.mysql --with-mysql-config=/usr/local/mysql/bin/mysql_config
After running this command, every time bundler needs to install the
`mysql` gem, it will pass along the flags you specified.
@@ -169,7 +175,7 @@ learn more about their operation in [bundle install(1)](bundle-install.1.html).
* `disable_multisource` (`BUNDLE_DISABLE_MULTISOURCE`):
When set, Gemfiles containing multiple sources will produce errors
instead of warnings.
- Use `bundle config --delete disable_multisource` to unset.
+ Use `bundle config unset disable_multisource` to unset.
* `disable_platform_warnings` (`BUNDLE_DISABLE_PLATFORM_WARNINGS`):
Disable warnings during bundle install when a dependency is unused on the current platform.
* `disable_shared_gems` (`BUNDLE_DISABLE_SHARED_GEMS`):
@@ -177,8 +183,6 @@ learn more about their operation in [bundle install(1)](bundle-install.1.html).
* `disable_version_check` (`BUNDLE_DISABLE_VERSION_CHECK`):
Stop Bundler from checking if a newer Bundler version is available on
rubygems.org.
-* `error_on_stderr` (`BUNDLE_ERROR_ON_STDERR`):
- Print Bundler errors to stderr.
* `force_ruby_platform` (`BUNDLE_FORCE_RUBY_PLATFORM`):
Ignore the current machine's platform and install only `ruby` platform gems.
As a result, gems with native extensions will be compiled from source.
@@ -208,11 +212,6 @@ learn more about their operation in [bundle install(1)](bundle-install.1.html).
Generate a `gems.rb` instead of a `Gemfile` when running `bundle init`.
* `jobs` (`BUNDLE_JOBS`):
The number of gems Bundler can install in parallel. Defaults to 1.
-* `list_command` (`BUNDLE_LIST_COMMAND`)
- Enable new list command feature
-* `major_deprecations` (`BUNDLE_MAJOR_DEPRECATIONS`):
- Whether Bundler should print deprecation warnings for behavior that will
- be changed in the next major version.
* `no_install` (`BUNDLE_NO_INSTALL`):
Whether `bundle package` should skip installing gems.
* `no_prune` (`BUNDLE_NO_PRUNE`):
@@ -231,8 +230,8 @@ learn more about their operation in [bundle install(1)](bundle-install.1.html).
Makes `--path` relative to the CWD instead of the `Gemfile`.
* `plugins` (`BUNDLE_PLUGINS`):
Enable Bundler's experimental plugin system.
-* `prefer_gems_rb` (`BUNDLE_PREFER_GEMS_RB`)
- Prefer `gems.rb` to `Gemfile` when Bundler is searching for a Gemfile.
+* `prefer_patch` (BUNDLE_PREFER_PATCH):
+ Prefer updating only to next patch version during updates. Makes `bundle update` calls equivalent to `bundler update --patch`.
* `print_only_version_number` (`BUNDLE_PRINT_ONLY_VERSION_NUMBER`)
Print only version number from `bundler --version`.
* `redirect` (`BUNDLE_REDIRECT`):
@@ -245,6 +244,9 @@ learn more about their operation in [bundle install(1)](bundle-install.1.html).
* `shebang` (`BUNDLE_SHEBANG`):
The program name that should be invoked for generated binstubs. Defaults to
the ruby install name used to generate the binstub.
+* `silence_deprecations` (`BUNDLE_SILENCE_DEPRECATIONS`):
+ Whether Bundler should silence deprecation warnings for behavior that will
+ be changed in the next major version.
* `silence_root_warning` (`BUNDLE_SILENCE_ROOT_WARNING`):
Silence the warning Bundler prints when installing gems as root.
* `skip_default_git_sources` (`BUNDLE_SKIP_DEFAULT_GIT_SOURCES`):
@@ -300,11 +302,11 @@ Bundler also allows you to work against a git repository locally
instead of using the remote version. This can be achieved by setting
up a local override:
- bundle config local.GEM_NAME /path/to/local/git/repository
+ bundle config set local.GEM_NAME /path/to/local/git/repository
For example, in order to use a local Rack repository, a developer could call:
- bundle config local.rack ~/Work/git/rack
+ bundle config set local.rack ~/Work/git/rack
Now instead of checking out the remote git repository, the local
override will be used. Similar to a path source, every time the local
@@ -334,21 +336,21 @@ Bundler supports overriding gem sources with mirrors. This allows you to
configure rubygems.org as the gem source in your Gemfile while still using your
mirror to fetch gems.
- bundle config mirror.SOURCE_URL MIRROR_URL
+ bundle config set mirror.SOURCE_URL MIRROR_URL
For example, to use a mirror of rubygems.org hosted at rubygems-mirror.org:
- bundle config mirror.http://rubygems.org http://rubygems-mirror.org
+ bundle config set mirror.http://rubygems.org http://rubygems-mirror.org
Each mirror also provides a fallback timeout setting. If the mirror does not
respond within the fallback timeout, Bundler will try to use the original
server instead of the mirror.
- bundle config mirror.SOURCE_URL.fallback_timeout TIMEOUT
+ bundle config set mirror.SOURCE_URL.fallback_timeout TIMEOUT
For example, to fall back to rubygems.org after 3 seconds:
- bundle config mirror.https://rubygems.org.fallback_timeout 3
+ bundle config set mirror.https://rubygems.org.fallback_timeout 3
The default fallback timeout is 0.1 seconds, but the setting can currently
only accept whole seconds (for example, 1, 15, or 30).
@@ -358,12 +360,12 @@ only accept whole seconds (for example, 1, 15, or 30).
Bundler allows you to configure credentials for any gem source, which allows
you to avoid putting secrets into your Gemfile.
- bundle config SOURCE_HOSTNAME USERNAME:PASSWORD
+ bundle config set SOURCE_HOSTNAME USERNAME:PASSWORD
For example, to save the credentials of user `claudette` for the gem source at
`gems.longerous.com`, you would run:
- bundle config gems.longerous.com claudette:s00pers3krit
+ bundle config set gems.longerous.com claudette:s00pers3krit
Or you can set the credentials as an environment variable like this:
@@ -371,7 +373,7 @@ Or you can set the credentials as an environment variable like this:
For gems with a git source with HTTP(S) URL you can specify credentials like so:
- bundle config https://github.com/bundler/bundler.git username:password
+ bundle config set https://github.com/bundler/bundler.git username:password
Or you can set the credentials as an environment variable like so:
diff --git a/man/bundle-init.ronn b/man/bundle-init.ronn
index 7504af7bab..9d3d97deea 100644
--- a/man/bundle-init.ronn
+++ b/man/bundle-init.ronn
@@ -26,4 +26,4 @@ results in all string literals in the file being implicitly frozen.
## SEE ALSO
-[Gemfile(5)](http://bundler.io/man/gemfile.5.html)
+[Gemfile(5)](https://bundler.io/man/gemfile.5.html)
diff --git a/man/bundle.ronn b/man/bundle.ronn
index 0005692abd..5b1712394a 100644
--- a/man/bundle.ronn
+++ b/man/bundle.ronn
@@ -10,7 +10,7 @@ bundle(1) -- Ruby Dependency Management
Bundler manages an `application's dependencies` through its entire life
across many machines systematically and repeatably.
-See [the bundler website](http://bundler.io) for information on getting
+See [the bundler website](https://bundler.io) for information on getting
started, and Gemfile(5) for more information on the `Gemfile` format.
## OPTIONS
@@ -73,7 +73,7 @@ We divide `bundle` subcommands into primary commands and utilities:
* [`bundle open(1)`](bundle-open.1.html):
Open an installed gem in the editor
-* [`bundle lock(1)`](bundle-lock.1.hmtl):
+* [`bundle lock(1)`](bundle-lock.1.html):
Generate a lockfile for your dependencies
* [`bundle viz(1)`](bundle-viz.1.html):
diff --git a/man/gemfile.5.ronn b/man/gemfile.5.ronn
index c941463edc..9fe4176a30 100644
--- a/man/gemfile.5.ronn
+++ b/man/gemfile.5.ronn
@@ -176,7 +176,7 @@ are not available).
Note that on `bundle install`, bundler downloads and evaluates all gems, in order to
create a single canonical list of all of the required gems and their dependencies.
This means that you cannot list different versions of the same gems in different
-groups. For more details, see [Understanding Bundler](http://bundler.io/rationale.html).
+groups. For more details, see [Understanding Bundler](https://bundler.io/rationale.html).
### PLATFORMS
diff --git a/spec/bundler/bundler_spec.rb b/spec/bundler/bundler_spec.rb
index 194d6752b2..9b772bffef 100644
--- a/spec/bundler/bundler_spec.rb
+++ b/spec/bundler/bundler_spec.rb
@@ -1,4 +1,3 @@
-# encoding: utf-8
# frozen_string_literal: true
require "bundler"
@@ -313,10 +312,9 @@ EOF
let(:bundle_path) { Pathname("#{tmpdir}/bundle") }
def clear_cached_requires_sudo
- # Private in ruby 1.8.7
return unless Bundler.instance_variable_defined?(:@requires_sudo_ran)
- Bundler.send(:remove_instance_variable, :@requires_sudo_ran)
- Bundler.send(:remove_instance_variable, :@requires_sudo)
+ Bundler.remove_instance_variable(:@requires_sudo_ran)
+ Bundler.remove_instance_variable(:@requires_sudo)
end
before do
@@ -383,14 +381,8 @@ EOF
after do
FileUtils.rm_rf("tmp/vendor/bundle")
FileUtils.rm_rf("tmp/vendor/bin_dir")
- if Bundler.respond_to?(:remove_instance_variable)
- Bundler.remove_instance_variable(:@requires_sudo_ran)
- Bundler.remove_instance_variable(:@requires_sudo)
- else
- # TODO: Remove these code when Bundler drops Ruby 1.8.7 support
- Bundler.send(:remove_instance_variable, :@requires_sudo_ran)
- Bundler.send(:remove_instance_variable, :@requires_sudo)
- end
+ Bundler.remove_instance_variable(:@requires_sudo_ran)
+ Bundler.remove_instance_variable(:@requires_sudo)
end
context "writable paths" do
it "should return false and display nothing" do
@@ -465,6 +457,7 @@ MESSAGE
it "should use custom home path as root for other paths" do
ENV["BUNDLE_USER_HOME"] = bundle_user_home_custom.to_s
+ allow(Bundler.rubygems).to receive(:user_home).and_raise
expect(Bundler.user_bundle_path).to eq(bundle_user_home_custom)
expect(Bundler.user_bundle_path("home")).to eq(bundle_user_home_custom)
expect(Bundler.user_bundle_path("cache")).to eq(bundle_user_home_custom.join("cache"))
diff --git a/spec/bundler/cli_spec.rb b/spec/bundler/cli_spec.rb
index c82d46587e..2e12fbfc6b 100644
--- a/spec/bundler/cli_spec.rb
+++ b/spec/bundler/cli_spec.rb
@@ -28,10 +28,10 @@ RSpec.describe "bundle executable" do
end
context "with no arguments" do
- it "prints a concise help message", :bundler => "2" do
+ it "prints a concise help message", :bundler => "3" do
bundle! ""
- expect(last_command.stderr).to be_empty
- expect(last_command.stdout).to include("Bundler version #{Bundler::VERSION}").
+ expect(err).to be_empty
+ expect(out).to include("Bundler version #{Bundler::VERSION}").
and include("\n\nBundler commands:\n\n").
and include("\n\n Primary commands:\n").
and include("\n\n Utilities:\n").
@@ -60,11 +60,11 @@ RSpec.describe "bundle executable" do
G
bundle :install, :env => { "RUBYGEMS_GEMDEPS" => "foo" }
- expect(out).to include("RUBYGEMS_GEMDEPS")
- expect(out).to include("conflict with Bundler")
+ expect(err).to include("RUBYGEMS_GEMDEPS")
+ expect(err).to include("conflict with Bundler")
bundle :install, :env => { "RUBYGEMS_GEMDEPS" => "" }
- expect(out).not_to include("RUBYGEMS_GEMDEPS")
+ expect(err).not_to include("RUBYGEMS_GEMDEPS")
end
end
@@ -72,17 +72,17 @@ RSpec.describe "bundle executable" do
it "prints the running command" do
gemfile ""
bundle! "info bundler", :verbose => true
- expect(last_command.stdout).to start_with("Running `bundle info bundler --verbose` with bundler #{Bundler::VERSION}")
+ expect(out).to start_with("Running `bundle info bundler --verbose` with bundler #{Bundler::VERSION}")
end
it "doesn't print defaults" do
install_gemfile! "", :verbose => true
- expect(last_command.stdout).to start_with("Running `bundle install --retry 0 --verbose` with bundler #{Bundler::VERSION}")
+ expect(out).to start_with("Running `bundle install --retry 0 --verbose` with bundler #{Bundler::VERSION}")
end
it "doesn't print defaults" do
install_gemfile! "", :verbose => true
- expect(last_command.stdout).to start_with("Running `bundle install --retry 0 --verbose` with bundler #{Bundler::VERSION}")
+ expect(out).to start_with("Running `bundle install --retry 0 --verbose` with bundler #{Bundler::VERSION}")
end
end
@@ -97,7 +97,7 @@ RSpec.describe "bundle executable" do
let(:bundler_version) { "1.1" }
let(:latest_version) { nil }
before do
- bundle! "config --global disable_version_check false"
+ bundle! "config set --global disable_version_check false"
simulate_bundler_version(bundler_version)
if latest_version
@@ -125,20 +125,20 @@ RSpec.describe "bundle executable" do
let(:latest_version) { "222.0" }
it "prints the version warning" do
bundle "fail"
- expect(last_command.stdout).to start_with(<<-EOS.strip)
+ expect(err).to start_with(<<-EOS.strip)
The latest bundler is #{latest_version}, but you are currently running #{bundler_version}.
To install the latest version, run `gem install bundler`
EOS
end
context "and disable_version_check is set" do
- before { bundle! "config disable_version_check true" }
+ before { bundle! "config set disable_version_check true" }
include_examples "no warning"
end
context "running a parseable command" do
it "prints no warning" do
- bundle! "config --parseable foo"
+ bundle! "config get --parseable foo"
expect(last_command.stdboth).to eq ""
bundle "platform --ruby"
@@ -150,7 +150,7 @@ To install the latest version, run `gem install bundler`
let(:latest_version) { "222.0.0.pre.4" }
it "prints the version warning" do
bundle "fail"
- expect(last_command.stdout).to start_with(<<-EOS.strip)
+ expect(err).to start_with(<<-EOS.strip)
The latest bundler is #{latest_version}, but you are currently running #{bundler_version}.
To install the latest version, run `gem install bundler --pre`
EOS
@@ -161,12 +161,12 @@ To install the latest version, run `gem install bundler --pre`
end
RSpec.describe "bundler executable" do
- it "shows the bundler version just as the `bundle` executable does", :bundler => "< 2" do
+ it "shows the bundler version just as the `bundle` executable does", :bundler => "< 3" do
bundler "--version"
expect(out).to eq("Bundler version #{Bundler::VERSION}")
end
- it "shows the bundler version just as the `bundle` executable does", :bundler => "2" do
+ it "shows the bundler version just as the `bundle` executable does", :bundler => "3" do
bundler "--version"
expect(out).to eq(Bundler::VERSION)
end
diff --git a/spec/bundler/definition_spec.rb b/spec/bundler/definition_spec.rb
index ceb7b4bf05..f048728a9f 100644
--- a/spec/bundler/definition_spec.rb
+++ b/spec/bundler/definition_spec.rb
@@ -34,7 +34,7 @@ RSpec.describe Bundler::Definition do
end
describe "detects changes" do
- it "for a path gem with changes", :bundler => "< 2" do
+ it "for a path gem with changes", :bundler => "< 3" do
build_lib "foo", "1.0", :path => lib_path("foo")
install_gemfile <<-G
@@ -72,7 +72,7 @@ RSpec.describe Bundler::Definition do
G
end
- it "for a path gem with changes", :bundler => "2" do
+ it "for a path gem with changes", :bundler => "3" do
build_lib "foo", "1.0", :path => lib_path("foo")
install_gemfile <<-G
@@ -88,17 +88,17 @@ RSpec.describe Bundler::Definition do
expect(out).to match(/re-resolving dependencies/)
lockfile_should_be <<-G
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
- rack (1.0.0)
-
PATH
remote: #{lib_path("foo")}
specs:
foo (1.0)
rack (= 1.0)
+ GEM
+ remote: file://localhost#{gem_repo1}/
+ specs:
+ rack (1.0.0)
+
PLATFORMS
#{lockfile_platforms}
@@ -110,7 +110,7 @@ RSpec.describe Bundler::Definition do
G
end
- it "for a path gem with deps and no changes", :bundler => "< 2" do
+ it "for a path gem with deps and no changes" do
build_lib "foo", "1.0", :path => lib_path("foo") do |s|
s.add_dependency "rack", "1.0"
s.add_development_dependency "net-ssh", "1.0"
@@ -137,43 +137,6 @@ RSpec.describe Bundler::Definition do
rack (1.0.0)
PLATFORMS
- ruby
-
- DEPENDENCIES
- foo!
-
- BUNDLED WITH
- #{Bundler::VERSION}
- G
- end
-
- it "for a path gem with deps and no changes", :bundler => "2" do
- build_lib "foo", "1.0", :path => lib_path("foo") do |s|
- s.add_dependency "rack", "1.0"
- s.add_development_dependency "net-ssh", "1.0"
- end
-
- install_gemfile <<-G
- source "file://localhost#{gem_repo1}"
- gem "foo", :path => "#{lib_path("foo")}"
- G
-
- bundle :check, :env => { "DEBUG" => 1 }
-
- expect(out).to match(/using resolution from the lockfile/)
- lockfile_should_be <<-G
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
- rack (1.0.0)
-
- PATH
- remote: #{lib_path("foo")}
- specs:
- foo (1.0)
- rack (= 1.0)
-
- PLATFORMS
#{lockfile_platforms}
DEPENDENCIES
diff --git a/spec/bundler/dsl_spec.rb b/spec/bundler/dsl_spec.rb
index 89528eb745..a17bfd4938 100644
--- a/spec/bundler/dsl_spec.rb
+++ b/spec/bundler/dsl_spec.rb
@@ -27,25 +27,58 @@ RSpec.describe Bundler::Dsl do
context "github_https feature flag" do
it "is true when github.https is true" do
- bundle "config github.https true"
- expect(Bundler.feature_flag.github_https?).to eq "true"
+ bundle "config set github.https true"
+ expect(Bundler.feature_flag.github_https?).to eq true
end
end
- context "default hosts (git, gist)", :bundler => "< 2" do
- context "when github.https config is true" do
- before { bundle "config github.https true" }
- it "converts :github to :git using https" do
- subject.gem("sparks", :github => "indirect/sparks")
- github_uri = "https://github.com/indirect/sparks.git"
+ shared_examples_for "the github DSL" do |protocol|
+ context "when full repo is used" do
+ let(:repo) { "indirect/sparks" }
+
+ it "converts :github to URI using #{protocol}" do
+ subject.gem("sparks", :github => repo)
+ github_uri = "#{protocol}://github.com/#{repo}.git"
expect(subject.dependencies.first.source.uri).to eq(github_uri)
end
end
- it "converts :github to :git" do
- subject.gem("sparks", :github => "indirect/sparks")
- github_uri = "git://github.com/indirect/sparks.git"
- expect(subject.dependencies.first.source.uri).to eq(github_uri)
+ context "when shortcut repo is used" do
+ let(:repo) { "rails" }
+
+ it "converts :github to URI using #{protocol}" do
+ subject.gem("sparks", :github => repo)
+ github_uri = "#{protocol}://github.com/#{repo}/#{repo}.git"
+ expect(subject.dependencies.first.source.uri).to eq(github_uri)
+ end
+ end
+ end
+
+ context "default hosts (git, gist)" do
+ context "when github.https config is true" do
+ before { bundle "config set github.https true" }
+
+ it_behaves_like "the github DSL", "https"
+ end
+
+ context "when github.https config is false", :bundler => "2" do
+ before { bundle "config set github.https false" }
+
+ it_behaves_like "the github DSL", "git"
+ end
+
+ context "when github.https config is false", :bundler => "3" do
+ before { bundle "config set github.https false" }
+
+ pending "should show a proper message about the removed setting"
+ end
+
+ context "by default", :bundler => "2" do
+ it_behaves_like "the github DSL", "https"
+ end
+
+ context "by default", :bundler => "3" do
+ it_behaves_like "the github DSL", "https"
end
it "converts numeric :gist to :git" do
@@ -60,12 +93,6 @@ RSpec.describe Bundler::Dsl do
expect(subject.dependencies.first.source.uri).to eq(github_uri)
end
- it "converts 'rails' to 'rails/rails'" do
- subject.gem("rails", :github => "rails")
- github_uri = "git://github.com/rails/rails.git"
- expect(subject.dependencies.first.source.uri).to eq(github_uri)
- end
-
it "converts :bitbucket to :git" do
subject.gem("not-really-a-gem", :bitbucket => "mcorp/flatlab-rails")
bitbucket_uri = "https://mcorp@bitbucket.org/mcorp/flatlab-rails.git"
@@ -79,7 +106,7 @@ RSpec.describe Bundler::Dsl do
end
end
- context "default git sources", :bundler => "2" do
+ context "default git sources", :bundler => "4" do
it "has none" do
expect(subject.instance_variable_get(:@git_sources)).to eq({})
end
@@ -245,7 +272,33 @@ RSpec.describe Bundler::Dsl do
# gem 'spree_api'
# gem 'spree_backend'
# end
- describe "#github", :bundler => "< 2" do
+ describe "#github", :bundler => "< 3" do
+ it "from github" do
+ spree_gems = %w[spree_core spree_api spree_backend]
+ subject.github "spree" do
+ spree_gems.each {|spree_gem| subject.send :gem, spree_gem }
+ end
+
+ subject.dependencies.each do |d|
+ expect(d.source.uri).to eq("https://github.com/spree/spree.git")
+ end
+ end
+ end
+
+ describe "#github", :bundler => "3" do
+ it "from github" do
+ spree_gems = %w[spree_core spree_api spree_backend]
+ subject.github "spree" do
+ spree_gems.each {|spree_gem| subject.send :gem, spree_gem }
+ end
+
+ subject.dependencies.each do |d|
+ expect(d.source.uri).to eq("https://github.com/spree/spree.git")
+ end
+ end
+ end
+
+ describe "#github", :bundler => "3" do
it "from github" do
spree_gems = %w[spree_core spree_api spree_backend]
subject.github "spree" do
@@ -253,12 +306,12 @@ RSpec.describe Bundler::Dsl do
end
subject.dependencies.each do |d|
- expect(d.source.uri).to eq("git://github.com/spree/spree.git")
+ expect(d.source.uri).to eq("https://github.com/spree/spree.git")
end
end
end
- describe "#github", :bundler => "2" do
+ describe "#github", :bundler => "4" do
it "from github" do
expect do
spree_gems = %w[spree_core spree_api spree_backend]
diff --git a/spec/bundler/env_spec.rb b/spec/bundler/env_spec.rb
index 20bd38b021..8323a9a7b3 100644
--- a/spec/bundler/env_spec.rb
+++ b/spec/bundler/env_spec.rb
@@ -1,5 +1,6 @@
# frozen_string_literal: true
+require "openssl"
require "bundler/settings"
RSpec.describe Bundler::Env do
@@ -17,6 +18,54 @@ RSpec.describe Bundler::Env do
expect(out).to include(OpenSSL::OPENSSL_VERSION)
end
+ describe "rubygems paths" do
+ it "prints gem home" do
+ with_clear_paths("GEM_HOME", "/a/b/c") do
+ out = described_class.report
+ expect(out).to include("Gem Home /a/b/c")
+ end
+ end
+
+ it "prints gem path" do
+ with_clear_paths("GEM_PATH", "/a/b/c:/d/e/f") do
+ out = described_class.report
+ expect(out).to include("Gem Path /a/b/c:/d/e/f")
+ end
+ end
+
+ it "prints user home" do
+ with_clear_paths("HOME", "/a/b/c") do
+ out = described_class.report
+ expect(out).to include("User Home /a/b/c")
+ end
+ end
+
+ it "prints user path" do
+ with_clear_paths("HOME", "/a/b/c") do
+ out = described_class.report
+ expect(out).to include("User Path /a/b/c/.gem")
+ end
+ end
+
+ it "prints bin dir" do
+ with_clear_paths("GEM_HOME", "/a/b/c") do
+ out = described_class.report
+ expect(out).to include("Bin Dir /a/b/c/bin")
+ end
+ end
+
+ private
+
+ def with_clear_paths(env_var, env_value)
+ old_env_var = ENV[env_var]
+ ENV[env_var] = env_value
+ Gem.clear_paths
+ yield
+ ensure
+ ENV[env_var] = old_env_var
+ end
+ end
+
context "when there is a Gemfile and a lockfile and print_gemfile is true" do
before do
gemfile "gem 'rack', '1.0.0'"
diff --git a/spec/bundler/fetcher/compact_index_spec.rb b/spec/bundler/fetcher/compact_index_spec.rb
index e0f58766ea..5a2d22193a 100644
--- a/spec/bundler/fetcher/compact_index_spec.rb
+++ b/spec/bundler/fetcher/compact_index_spec.rb
@@ -44,7 +44,7 @@ RSpec.describe Bundler::Fetcher::CompactIndex do
end
end
- context "when OpenSSL is FIPS-enabled", :ruby => ">= 2.0.0" do
+ context "when OpenSSL is FIPS-enabled" do
def remove_cached_md5_availability
return unless Bundler::SharedHelpers.instance_variable_defined?(:@md5_available)
Bundler::SharedHelpers.remove_instance_variable(:@md5_available)
diff --git a/spec/bundler/friendly_errors_spec.rb b/spec/bundler/friendly_errors_spec.rb
index 2a1be491ef..07ec196b86 100644
--- a/spec/bundler/friendly_errors_spec.rb
+++ b/spec/bundler/friendly_errors_spec.rb
@@ -16,7 +16,7 @@ RSpec.describe Bundler, "friendly errors" do
FileUtils.rm(Gem.configuration.config_file_name)
end
- it "reports a relevant friendly error message", :ruby => ">= 1.9", :rubygems => "< 2.5.0" do
+ it "reports a relevant friendly error message" do
gemfile <<-G
source "file://#{gem_repo1}"
gem "rack"
@@ -24,22 +24,7 @@ RSpec.describe Bundler, "friendly errors" do
bundle :install, :env => { "DEBUG" => true }
- expect(out).to include("Your RubyGems configuration")
- expect(out).to include("invalid YAML syntax")
- expect(out).to include("Psych::SyntaxError")
- expect(out).not_to include("ERROR REPORT TEMPLATE")
- expect(exitstatus).to eq(25) if exitstatus
- end
-
- it "reports a relevant friendly error message", :ruby => ">= 1.9", :rubygems => ">= 2.5.0" do
- gemfile <<-G
- source "file://#{gem_repo1}"
- gem "rack"
- G
-
- bundle :install, :env => { "DEBUG" => true }
-
- expect(last_command.stderr).to include("Failed to load #{home(".gemrc")}")
+ expect(err).to include("Failed to load #{home(".gemrc")}")
expect(exitstatus).to eq(0) if exitstatus
end
end
diff --git a/spec/bundler/gem_helper_spec.rb b/spec/bundler/gem_helper_spec.rb
index e2cd7e8bc6..315a2290c7 100644
--- a/spec/bundler/gem_helper_spec.rb
+++ b/spec/bundler/gem_helper_spec.rb
@@ -49,7 +49,7 @@ RSpec.describe Bundler::GemHelper do
end
end
- context "gem management" do
+ context "gem management", :ruby_repo do
def mock_confirm_message(message)
expect(Bundler.ui).to receive(:confirm).with(message)
end
@@ -209,11 +209,12 @@ RSpec.describe Bundler::GemHelper do
end
context "succeeds" do
+ let(:repo) { build_git("foo", :bare => true) }
+
before do
- Dir.chdir(gem_repo1) { `git init --bare` }
Dir.chdir(app_path) do
- `git remote add origin file://#{gem_repo1}`
- `git commit -a -m "initial commit"`
+ sys_exec("git remote add origin file://#{repo.path}")
+ sys_exec('git commit -a -m "initial commit"')
end
end
diff --git a/spec/bundler/installer/gem_installer_spec.rb b/spec/bundler/installer/gem_installer_spec.rb
index 7340a3acc0..8f8d1c6d15 100644
--- a/spec/bundler/installer/gem_installer_spec.rb
+++ b/spec/bundler/installer/gem_installer_spec.rb
@@ -10,14 +10,14 @@ RSpec.describe Bundler::GemInstaller do
subject { described_class.new(spec, installer) }
context "spec_settings is nil" do
- it "invokes install method with empty build_args", :rubygems => ">= 2" do
+ it "invokes install method with empty build_args" do
allow(spec_source).to receive(:install).with(spec, :force => false, :ensure_builtin_gems_cached => false, :build_args => [])
subject.install_from_spec
end
end
context "spec_settings is build option" do
- it "invokes install method with build_args", :rubygems => ">= 2" do
+ it "invokes install method with build_args" do
allow(Bundler.settings).to receive(:[]).with(:bin)
allow(Bundler.settings).to receive(:[]).with(:inline)
allow(Bundler.settings).to receive(:[]).with(:forget_cli_options)
@@ -26,4 +26,15 @@ RSpec.describe Bundler::GemInstaller do
subject.install_from_spec
end
end
+
+ context "spec_settings is build option with spaces" do
+ it "invokes install method with build_args" do
+ allow(Bundler.settings).to receive(:[]).with(:bin)
+ allow(Bundler.settings).to receive(:[]).with(:inline)
+ allow(Bundler.settings).to receive(:[]).with(:forget_cli_options)
+ allow(Bundler.settings).to receive(:[]).with("build.dummy").and_return("--with-dummy-config=dummy --with-another-dummy-config")
+ expect(spec_source).to receive(:install).with(spec, :force => false, :ensure_builtin_gems_cached => false, :build_args => ["--with-dummy-config=dummy", "--with-another-dummy-config"])
+ subject.install_from_spec
+ end
+ end
end
diff --git a/spec/bundler/mirror_spec.rb b/spec/bundler/mirror_spec.rb
index acd0895f2f..fb476b8465 100644
--- a/spec/bundler/mirror_spec.rb
+++ b/spec/bundler/mirror_spec.rb
@@ -298,8 +298,8 @@ RSpec.describe Bundler::Settings::TCPSocketProbe do
context "with a listening TCP Server" do
def with_server_and_mirror
- server = TCPServer.new("127.0.0.1", 0)
- mirror = Bundler::Settings::Mirror.new("http://localhost:#{server.addr[1]}", 1)
+ server = TCPServer.new("0.0.0.0", 0)
+ mirror = Bundler::Settings::Mirror.new("http://0.0.0.0:#{server.addr[1]}", 1)
yield server, mirror
server.close unless server.closed?
end
diff --git a/spec/bundler/rubygems_integration_spec.rb b/spec/bundler/rubygems_integration_spec.rb
index b1b15d9e5d..26cbaa630b 100644
--- a/spec/bundler/rubygems_integration_spec.rb
+++ b/spec/bundler/rubygems_integration_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
RSpec.describe Bundler::RubygemsIntegration do
- it "uses the same chdir lock as rubygems", :rubygems => "2.1" do
+ it "uses the same chdir lock as rubygems" do
expect(Bundler.rubygems.ext_lock).to eq(Gem::Ext::Builder::CHDIR_MONITOR)
end
@@ -15,30 +15,18 @@ RSpec.describe Bundler::RubygemsIntegration do
end
subject { Bundler.rubygems.validate(spec) }
- it "skips overly-strict gemspec validation", :rubygems => "< 1.7" do
- expect(spec).to_not receive(:validate)
- subject
- end
-
- it "validates with packaging mode disabled", :rubygems => "1.7" do
+ it "validates with packaging mode disabled" do
expect(spec).to receive(:validate).with(false)
subject
end
- it "should set a summary to avoid an overly-strict error", :rubygems => "~> 1.7.0" do
- spec.summary = nil
- expect { subject }.not_to raise_error
- expect(spec.summary).to eq("")
- end
-
context "with an invalid spec" do
before do
expect(spec).to receive(:validate).with(false).
and_raise(Gem::InvalidSpecificationException.new("TODO is not an author"))
end
- it "should raise a Gem::InvalidSpecificationException and produce a helpful warning message",
- :rubygems => "1.7" do
+ it "should raise a Gem::InvalidSpecificationException and produce a helpful warning message" do
expect { subject }.to raise_error(Gem::InvalidSpecificationException,
"The gemspec at #{__FILE__} is not valid. "\
"Please fix this gemspec.\nThe validation error was 'TODO is not an author'\n")
@@ -53,7 +41,7 @@ RSpec.describe Bundler::RubygemsIntegration do
end
end
- describe "#download_gem", :rubygems => ">= 2.0" do
+ describe "#download_gem" do
let(:bundler_retry) { double(Bundler::Retry) }
let(:retry) { double("Bundler::Retry") }
let(:uri) { URI.parse("https://foo.bar") }
@@ -78,7 +66,7 @@ RSpec.describe Bundler::RubygemsIntegration do
end
end
- describe "#fetch_all_remote_specs", :rubygems => ">= 2.0" do
+ describe "#fetch_all_remote_specs" do
let(:uri) { URI("https://example.com") }
let(:fetcher) { double("gem_remote_fetcher") }
let(:specs_response) { Marshal.dump(["specs"]) }
diff --git a/spec/bundler/shared_helpers_spec.rb b/spec/bundler/shared_helpers_spec.rb
index b66c43fd92..f42d9ed485 100644
--- a/spec/bundler/shared_helpers_spec.rb
+++ b/spec/bundler/shared_helpers_spec.rb
@@ -14,7 +14,7 @@ RSpec.describe Bundler::SharedHelpers do
before { ENV["BUNDLE_GEMFILE"] = "/path/Gemfile" }
context "Gemfile is present" do
- let(:expected_gemfile_path) { Pathname.new("/path/Gemfile") }
+ let(:expected_gemfile_path) { Pathname.new("/path/Gemfile").expand_path }
it "returns the Gemfile path" do
expect(subject.default_gemfile).to eq(expected_gemfile_path)
@@ -261,6 +261,15 @@ RSpec.describe Bundler::SharedHelpers do
subject.set_bundle_environment
end
+ it "ignores if bundler_ruby_lib is same as rubylibdir" do
+ allow(Bundler::SharedHelpers).to receive(:bundler_ruby_lib).and_return(RbConfig::CONFIG["rubylibdir"])
+
+ subject.set_bundle_environment
+
+ paths = (ENV["RUBYLIB"]).split(File::PATH_SEPARATOR)
+ expect(paths.count(RbConfig::CONFIG["rubylibdir"])).to eq(0)
+ end
+
it "exits if bundle path contains the unix-like path separator" do
if Gem.respond_to?(:path_separator)
allow(Gem).to receive(:path_separator).and_return(":")
@@ -279,7 +288,7 @@ RSpec.describe Bundler::SharedHelpers do
)
end
- context "with a jruby path_separator regex", :ruby => "1.9" do
+ context "with a jruby path_separator regex" do
# In versions of jruby that supported ruby 1.8, the path separator was the standard File::PATH_SEPARATOR
let(:regex) { Regexp.new("(?<!jar:file|jar|file|classpath|uri:classloader|uri|http|https):") }
it "does not exit if bundle path is the standard uri path" do
@@ -380,7 +389,7 @@ RSpec.describe Bundler::SharedHelpers do
context "bundle executable in ENV['BUNDLE_BIN_PATH'] does not exist" do
before { ENV["BUNDLE_BIN_PATH"] = "/does/not/exist" }
- before { Bundler.rubygems.replace_bin_path [], [] }
+ before { Bundler.rubygems.replace_bin_path [] }
it "sets BUNDLE_BIN_PATH to the bundle executable file" do
subject.set_bundle_environment
@@ -446,7 +455,7 @@ RSpec.describe Bundler::SharedHelpers do
end
end
- context "system throws Errno::ENOTSUP", :ruby => "1.9" do
+ context "system throws Errno::ENOTSUP" do
let(:file_op_block) { proc {|_path| raise Errno::ENOTSUP } }
it "raises a OperationNotSupportedError" do
diff --git a/spec/bundler/source_list_spec.rb b/spec/bundler/source_list_spec.rb
index ce3353012c..a78b80ec3b 100644
--- a/spec/bundler/source_list_spec.rb
+++ b/spec/bundler/source_list_spec.rb
@@ -75,7 +75,7 @@ RSpec.describe Bundler::SourceList do
let(:msg) do
"The git source `git://existing-git.org/path.git` " \
"uses the `git` protocol, which transmits data without encryption. " \
- "Disable this warning with `bundle config git.allow_insecure true`, " \
+ "Disable this warning with `bundle config set git.allow_insecure true`, " \
"or switch to the `https` protocol to keep your data secure."
end
@@ -115,7 +115,7 @@ RSpec.describe Bundler::SourceList do
end
end
- describe "#add_rubygems_remote", :bundler => "< 2" do
+ describe "#add_rubygems_remote", :bundler => "< 3" do
let!(:returned_source) { source_list.add_rubygems_remote("https://rubygems.org/") }
it "returns the aggregate rubygems source" do
@@ -372,7 +372,7 @@ RSpec.describe Bundler::SourceList do
source_list.add_git_source("uri" => "git://first-git.org/path.git")
end
- it "combines the rubygems sources into a single instance, removing duplicate remotes from the end", :bundler => "< 2" do
+ it "combines the rubygems sources into a single instance, removing duplicate remotes from the end", :bundler => "< 3" do
expect(source_list.lock_sources).to eq [
Bundler::Source::Git.new("uri" => "git://first-git.org/path.git"),
Bundler::Source::Git.new("uri" => "git://second-git.org/path.git"),
@@ -391,21 +391,21 @@ RSpec.describe Bundler::SourceList do
]
end
- it "returns all sources, without combining rubygems sources", :bundler => "2" do
+ it "returns all sources, without combining rubygems sources", :bundler => "3" do
expect(source_list.lock_sources).to eq [
- Bundler::Source::Rubygems.new,
- Bundler::Source::Rubygems.new("remotes" => ["https://duplicate-rubygems.org"]),
- Bundler::Source::Rubygems.new("remotes" => ["https://first-rubygems.org"]),
- Bundler::Source::Rubygems.new("remotes" => ["https://second-rubygems.org"]),
- Bundler::Source::Rubygems.new("remotes" => ["https://third-rubygems.org"]),
Bundler::Source::Git.new("uri" => "git://first-git.org/path.git"),
Bundler::Source::Git.new("uri" => "git://second-git.org/path.git"),
Bundler::Source::Git.new("uri" => "git://third-git.org/path.git"),
+ ASourcePlugin.new("uri" => "https://second-plugin.org/random"),
+ ASourcePlugin.new("uri" => "https://third-bar.org/foo"),
Bundler::Source::Path.new("path" => "/first/path/to/gem"),
Bundler::Source::Path.new("path" => "/second/path/to/gem"),
Bundler::Source::Path.new("path" => "/third/path/to/gem"),
- ASourcePlugin.new("uri" => "https://second-plugin.org/random"),
- ASourcePlugin.new("uri" => "https://third-bar.org/foo"),
+ Bundler::Source::Rubygems.new,
+ Bundler::Source::Rubygems.new("remotes" => ["https://duplicate-rubygems.org"]),
+ Bundler::Source::Rubygems.new("remotes" => ["https://first-rubygems.org"]),
+ Bundler::Source::Rubygems.new("remotes" => ["https://second-rubygems.org"]),
+ Bundler::Source::Rubygems.new("remotes" => ["https://third-rubygems.org"]),
]
end
end
diff --git a/spec/bundler/source_spec.rb b/spec/bundler/source_spec.rb
index 9ef8e7e50f..d70fd7e549 100644
--- a/spec/bundler/source_spec.rb
+++ b/spec/bundler/source_spec.rb
@@ -60,6 +60,10 @@ RSpec.describe Bundler::Source do
before { Bundler.ui = Bundler::UI::Shell.new }
it "should return a string with the spec name and version and locked spec version" do
+ if Bundler.ui.instance_variable_get(:@shell).is_a?(Bundler::Thor::Shell::Basic)
+ skip "tty color is not supported with Thor::Shell::Basic environment."
+ end
+
expect(subject.version_message(spec)).to eq("nokogiri >= 1.6\e[32m (was < 1.5)\e[0m")
end
end
@@ -79,6 +83,10 @@ RSpec.describe Bundler::Source do
before { Bundler.ui = Bundler::UI::Shell.new }
it "should return a string with the locked spec version in yellow" do
+ if Bundler.ui.instance_variable_get(:@shell).is_a?(Bundler::Thor::Shell::Basic)
+ skip "tty color is not supported with Thor::Shell::Basic environment."
+ end
+
expect(subject.version_message(spec)).to eq("nokogiri 1.6.1\e[33m (was 1.7.0)\e[0m")
end
end
@@ -92,6 +100,10 @@ RSpec.describe Bundler::Source do
before { Bundler.ui = Bundler::UI::Shell.new }
it "should return a string with the locked spec version in green" do
+ if Bundler.ui.instance_variable_get(:@shell).is_a?(Bundler::Thor::Shell::Basic)
+ skip "tty color is not supported with Thor::Shell::Basic environment."
+ end
+
expect(subject.version_message(spec)).to eq("nokogiri 1.7.1\e[32m (was 1.7.0)\e[0m")
end
end
diff --git a/spec/bundler/ssl_certs/certificate_manager_spec.rb b/spec/bundler/ssl_certs/certificate_manager_spec.rb
deleted file mode 100644
index 8403b554b5..0000000000
--- a/spec/bundler/ssl_certs/certificate_manager_spec.rb
+++ /dev/null
@@ -1,140 +0,0 @@
-# frozen_string_literal: true
-
-require "bundler/ssl_certs/certificate_manager"
-
-RSpec.describe Bundler::SSLCerts::CertificateManager do
- let(:rubygems_path) { root }
- let(:stub_cert) { File.join(root.to_s, "lib", "rubygems", "ssl_certs", "rubygems.org", "ssl-cert.pem") }
- let(:rubygems_certs_dir) { File.join(root.to_s, "lib", "rubygems", "ssl_certs", "rubygems.org") }
-
- subject { described_class.new(rubygems_path) }
-
- # Pretend bundler root is rubygems root
- before do
- # Backing up rubygems certificates
- FileUtils.mv(rubygems_certs_dir, rubygems_certs_dir + ".back") if ruby_core?
-
- FileUtils.mkdir_p(rubygems_certs_dir)
- FileUtils.touch(stub_cert)
- end
-
- after do
- FileUtils.rm_rf(rubygems_certs_dir)
-
- # Restore rubygems certificates
- FileUtils.mv(rubygems_certs_dir + ".back", rubygems_certs_dir) if ruby_core?
- end
-
- describe "#update_from" do
- let(:cert_manager) { double(:cert_manager) }
-
- before { allow(described_class).to receive(:new).with(rubygems_path).and_return(cert_manager) }
-
- it "should update the certs through a new certificate manager" do
- allow(cert_manager).to receive(:update!)
- expect(described_class.update_from!(rubygems_path)).to be_nil
- end
- end
-
- describe "#initialize" do
- it "should set bundler_cert_path as path of the subdir with bundler ssl certs" do
- expect(subject.bundler_cert_path).to eq(File.join(root, "lib/bundler/ssl_certs"))
- end
-
- it "should set bundler_certs as the paths of the bundler ssl certs" do
- expect(subject.bundler_certs).to include(File.join(root, "lib/bundler/ssl_certs/rubygems.global.ssl.fastly.net/DigiCertHighAssuranceEVRootCA.pem"))
- expect(subject.bundler_certs).to include(File.join(root, "lib/bundler/ssl_certs/index.rubygems.org/GlobalSignRootCA.pem"))
- end
-
- context "when rubygems_path is not nil" do
- it "should set rubygems_certs" do
- expect(subject.rubygems_certs).to include(File.join(root, "lib", "rubygems", "ssl_certs", "rubygems.org", "ssl-cert.pem"))
- end
- end
- end
-
- describe "#up_to_date?" do
- context "when bundler certs and rubygems certs are the same" do
- before do
- bundler_certs = Dir[File.join(root.to_s, "lib", "bundler", "ssl_certs", "**", "*.pem")]
- FileUtils.rm(stub_cert)
- FileUtils.cp(bundler_certs, rubygems_certs_dir)
- end
-
- it "should return true" do
- expect(subject).to be_up_to_date
- end
- end
-
- context "when bundler certs and rubygems certs are not the same" do
- it "should return false" do
- expect(subject).to_not be_up_to_date
- end
- end
- end
-
- describe "#update!" do
- context "when certificate manager is not up to date" do
- before do
- allow(subject).to receive(:up_to_date?).and_return(false)
- allow(bundler_fileutils).to receive(:rm)
- allow(bundler_fileutils).to receive(:cp)
- end
-
- it "should remove the current bundler certs" do
- expect(bundler_fileutils).to receive(:rm).with(subject.bundler_certs)
- subject.update!
- end
-
- it "should copy the rubygems certs into bundler certs" do
- expect(bundler_fileutils).to receive(:cp).with(subject.rubygems_certs, subject.bundler_cert_path)
- subject.update!
- end
-
- it "should return nil" do
- expect(subject.update!).to be_nil
- end
- end
-
- context "when certificate manager is up to date" do
- before { allow(subject).to receive(:up_to_date?).and_return(true) }
-
- it "should return nil" do
- expect(subject.update!).to be_nil
- end
- end
- end
-
- describe "#connect_to" do
- let(:host) { "http://www.host.com" }
- let(:http) { Net::HTTP.new(host, 443) }
- let(:cert_store) { OpenSSL::X509::Store.new }
- let(:http_header_response) { double(:http_header_response) }
-
- before do
- allow(Net::HTTP).to receive(:new).with(host, 443).and_return(http)
- allow(OpenSSL::X509::Store).to receive(:new).and_return(cert_store)
- allow(http).to receive(:head).with("/").and_return(http_header_response)
- end
-
- it "should use ssl for the http request" do
- expect(http).to receive(:use_ssl=).with(true)
- subject.connect_to(host)
- end
-
- it "use verify peer mode" do
- expect(http).to receive(:verify_mode=).with(OpenSSL::SSL::VERIFY_PEER)
- subject.connect_to(host)
- end
-
- it "set its cert store as a OpenSSL::X509::Store populated with bundler certs" do
- expect(cert_store).to receive(:add_file).at_least(:once)
- expect(http).to receive(:cert_store=).with(cert_store)
- subject.connect_to(host)
- end
-
- it "return the headers of the request response" do
- expect(subject.connect_to(host)).to eq(http_header_response)
- end
- end
-end
diff --git a/spec/bundler/stub_specification_spec.rb b/spec/bundler/stub_specification_spec.rb
index 5521d83769..7495b5d661 100644
--- a/spec/bundler/stub_specification_spec.rb
+++ b/spec/bundler/stub_specification_spec.rb
@@ -13,12 +13,10 @@ RSpec.describe Bundler::StubSpecification do
described_class.from_stub(gemspec)
end
- if Bundler.rubygems.provides?(">= 2.1")
- describe "#from_stub" do
- it "returns the same stub if already a Bundler::StubSpecification" do
- stub = described_class.from_stub(with_bundler_stub_spec)
- expect(stub).to be(with_bundler_stub_spec)
- end
+ describe "#from_stub" do
+ it "returns the same stub if already a Bundler::StubSpecification" do
+ stub = described_class.from_stub(with_bundler_stub_spec)
+ expect(stub).to be(with_bundler_stub_spec)
end
end
end
diff --git a/spec/bundler/ui/shell_spec.rb b/spec/bundler/ui/shell_spec.rb
index 951a446aff..632477096e 100644
--- a/spec/bundler/ui/shell_spec.rb
+++ b/spec/bundler/ui/shell_spec.rb
@@ -21,20 +21,9 @@ RSpec.describe Bundler::UI::Shell do
describe "#warn" do
before { subject.level = "warn" }
- it "prints to stdout", :bundler => "< 2" do
- expect { subject.warn("warning") }.to output("warning\n").to_stdout
- end
-
- it "prints to stderr", :bundler => "2" do
+ it "prints to stderr" do
expect { subject.warn("warning") }.to output("warning\n").to_stderr
end
-
- context "when stderr flag is enabled" do
- before { Bundler.settings.temporary(:error_on_stderr => true) }
- it "prints to stderr" do
- expect { subject.warn("warning!") }.to output("warning!\n").to_stderr
- end
- end
end
describe "#debug" do
@@ -46,27 +35,16 @@ RSpec.describe Bundler::UI::Shell do
describe "#error" do
before { subject.level = "error" }
- it "prints to stdout", :bundler => "< 2" do
- expect { subject.error("error!!!") }.to output("error!!!\n").to_stdout
- end
-
- it "prints to stderr", :bundler => "2" do
+ it "prints to stderr" do
expect { subject.error("error!!!") }.to output("error!!!\n").to_stderr
end
- context "when stderr flag is enabled" do
- before { Bundler.settings.temporary(:error_on_stderr => true) }
- it "prints to stderr" do
- expect { subject.error("error!!!") }.to output("error!!!\n").to_stderr
- end
-
- context "when stderr is closed" do
- it "doesn't report anything" do
- output = capture(:stderr, :closed => true) do
- subject.error("Something went wrong")
- end
- expect(output).to_not eq("Something went wrong\n")
+ context "when stderr is closed" do
+ it "doesn't report anything" do
+ output = capture(:stderr, :closed => true) do
+ subject.error("Something went wrong")
end
+ expect(output).to_not eq("Something went wrong\n")
end
end
end
diff --git a/spec/bundler/ui_spec.rb b/spec/bundler/ui_spec.rb
index 6ef8729277..6df0d2e290 100644
--- a/spec/bundler/ui_spec.rb
+++ b/spec/bundler/ui_spec.rb
@@ -2,7 +2,7 @@
RSpec.describe Bundler::UI do
describe Bundler::UI::Silent do
- it "has the same instance methods as Shell", :ruby => ">= 1.9" do
+ it "has the same instance methods as Shell" do
shell = Bundler::UI::Shell
methods = proc do |cls|
cls.instance_methods.map do |i|
@@ -13,7 +13,7 @@ RSpec.describe Bundler::UI do
expect(methods.call(described_class)).to eq(methods.call(shell))
end
- it "has the same instance class as Shell", :ruby => ">= 1.9" do
+ it "has the same instance class as Shell" do
shell = Bundler::UI::Shell
methods = proc do |cls|
cls.methods.map do |i|
diff --git a/spec/bundler/vendored_persistent_spec.rb b/spec/bundler/vendored_persistent_spec.rb
index d62279447d..c760c067e0 100644
--- a/spec/bundler/vendored_persistent_spec.rb
+++ b/spec/bundler/vendored_persistent_spec.rb
@@ -1,6 +1,5 @@
# frozen_string_literal: true
-require "spec_helper"
require "bundler/vendored_persistent"
RSpec.describe Bundler::PersistentHTTP do
diff --git a/spec/cache/cache_path_spec.rb b/spec/cache/cache_path_spec.rb
index 69d3809964..a4572af11e 100644
--- a/spec/cache/cache_path_spec.rb
+++ b/spec/cache/cache_path_spec.rb
@@ -17,7 +17,7 @@ RSpec.describe "bundle package" do
context "with config cache_path" do
it "caches gems at given path" do
- bundle "config cache_path vendor/cache-foo"
+ bundle "config set cache_path vendor/cache-foo"
bundle :package
expect(bundled_app("vendor/cache-foo/rack-1.0.0.gem")).to exist
end
diff --git a/spec/cache/gems_spec.rb b/spec/cache/gems_spec.rb
index 4a0b953830..4fc43a50a0 100644
--- a/spec/cache/gems_spec.rb
+++ b/spec/cache/gems_spec.rb
@@ -74,16 +74,16 @@ RSpec.describe "bundle cache" do
end
context "using system gems" do
- before { bundle! "config path.system true" }
+ before { bundle! "config set path.system true" }
it_behaves_like "when there are only gemsources"
end
context "installing into a local path" do
- before { bundle! "config path ./.bundle" }
+ before { bundle! "config set path ./.bundle" }
it_behaves_like "when there are only gemsources"
end
- describe "when there is a built-in gem", :ruby => "2.0" do
+ describe "when there is a built-in gem" do
before :each do
build_repo2 do
build_gem "builtin_gem", "1.0.2"
@@ -97,7 +97,7 @@ RSpec.describe "bundle cache" do
end
it "uses builtin gems when installing to system gems" do
- bundle! "config path.system true"
+ bundle! "config set path.system true"
install_gemfile %(gem 'builtin_gem', '1.0.2')
expect(the_bundle).to include_gems("builtin_gem 1.0.2")
end
@@ -129,7 +129,7 @@ RSpec.describe "bundle cache" do
end
it "errors if the builtin gem isn't available to cache" do
- bundle! "config path.system true"
+ bundle! "config set path.system true"
install_gemfile <<-G
gem 'builtin_gem', '1.0.2'
@@ -137,7 +137,7 @@ RSpec.describe "bundle cache" do
bundle :cache
expect(exitstatus).to_not eq(0) if exitstatus
- expect(out).to include("builtin_gem-1.0.2 is built in to Ruby, and can't be cached")
+ expect(err).to include("builtin_gem-1.0.2 is built in to Ruby, and can't be cached")
end
end
@@ -196,7 +196,7 @@ RSpec.describe "bundle cache" do
it "adds and removes when gems are updated" do
update_repo2
- bundle "update", :all => bundle_update_requires_all?
+ bundle "update", :all => true
expect(cached_gem("rack-1.2")).to exist
expect(cached_gem("rack-1.0.0")).not_to exist
end
diff --git a/spec/cache/git_spec.rb b/spec/cache/git_spec.rb
index 33387dbbb2..d31d607d25 100644
--- a/spec/cache/git_spec.rb
+++ b/spec/cache/git_spec.rb
@@ -59,7 +59,7 @@ end
bundle! "#{cmd}", forgotten_command_line_options([:all, :cache_all] => true)
bundle! "#{cmd}", forgotten_command_line_options([:all, :cache_all] => true)
- expect(last_command.stdout).to include "Updating files in vendor/cache"
+ expect(out).to include "Updating files in vendor/cache"
FileUtils.rm_rf lib_path("foo-1.0")
expect(the_bundle).to include_gems "foo 1.0"
end
@@ -81,7 +81,7 @@ end
ref = git.ref_for("master", 11)
expect(ref).not_to eq(old_ref)
- bundle! "update", :all => bundle_update_requires_all?
+ bundle! "update", :all => true
bundle! "#{cmd}", forgotten_command_line_options([:all, :cache_all] => true)
expect(bundled_app("vendor/cache/foo-1.0-#{ref}")).to exist
@@ -127,7 +127,7 @@ end
gem "foo", :git => '#{lib_path("foo-invalid")}', :branch => :master
G
- bundle %(config local.foo #{lib_path("foo-1.0")})
+ bundle %(config set local.foo #{lib_path("foo-1.0")})
bundle "install"
bundle "#{cmd}", forgotten_command_line_options([:all, :cache_all] => true)
@@ -168,7 +168,7 @@ end
expect(the_bundle).to include_gems "has_submodule 1.0"
end
- it "displays warning message when detecting git repo in Gemfile", :bundler => "< 2" do
+ it "displays warning message when detecting git repo in Gemfile", :bundler => "< 3" do
build_git "foo"
install_gemfile <<-G
@@ -177,7 +177,7 @@ end
bundle "#{cmd}"
- expect(out).to include("Your Gemfile contains path and git dependencies.")
+ expect(err).to include("Your Gemfile contains path and git dependencies.")
end
it "does not display warning message if cache_all is set in bundle config" do
@@ -190,7 +190,7 @@ end
bundle cmd, forgotten_command_line_options([:all, :cache_all] => true)
bundle cmd
- expect(out).not_to include("Your Gemfile contains path and git dependencies.")
+ expect(err).not_to include("Your Gemfile contains path and git dependencies.")
end
it "caches pre-evaluated gemspecs" do
diff --git a/spec/cache/path_spec.rb b/spec/cache/path_spec.rb
index 8c6a843476..0d7b154a37 100644
--- a/spec/cache/path_spec.rb
+++ b/spec/cache/path_spec.rb
@@ -86,7 +86,7 @@
expect(bundled_app("vendor/cache/bar-1.0")).not_to exist
end
- it "raises a warning without --all", :bundler => "< 2" do
+ it "raises a warning without --all", :bundler => "< 3" do
build_lib "foo"
install_gemfile <<-G
@@ -94,7 +94,7 @@
G
bundle cmd
- expect(out).to match(/please pass the \-\-all flag/)
+ expect(err).to match(/please pass the \-\-all flag/)
expect(bundled_app("vendor/cache/foo-1.0")).not_to exist
end
diff --git a/spec/cache/platform_spec.rb b/spec/cache/platform_spec.rb
index c0622a3c94..b3c4643ef5 100644
--- a/spec/cache/platform_spec.rb
+++ b/spec/cache/platform_spec.rb
@@ -41,7 +41,7 @@ RSpec.describe "bundle cache with multiple platforms" do
end
it "ensures that a successful bundle update does not delete gems for other platforms" do
- bundle! "update", :all => bundle_update_requires_all?
+ bundle! "update", :all => true
expect(bundled_app("vendor/cache/rack-1.0.0.gem")).to exist
expect(bundled_app("vendor/cache/activesupport-2.3.5.gem")).to exist
diff --git a/spec/commands/add_spec.rb b/spec/commands/add_spec.rb
index 9f11adbcf8..f5b3f49bb1 100644
--- a/spec/commands/add_spec.rb
+++ b/spec/commands/add_spec.rb
@@ -11,6 +11,8 @@ RSpec.describe "bundle add" do
build_gem "dog", "1.1.3.pre"
end
+ build_git "foo", "2.0"
+
install_gemfile <<-G
source "file://#{gem_repo2}"
gem "weakling", "~> 0.0.1"
@@ -21,7 +23,7 @@ RSpec.describe "bundle add" do
it "shows error" do
bundle "add"
- expect(last_command.bundler_err).to include("Please specify gems to add")
+ expect(err).to include("Please specify gems to add")
end
end
@@ -89,6 +91,28 @@ RSpec.describe "bundle add" do
end
end
+ describe "with --git" do
+ it "adds dependency with specified github source" do
+ bundle "add foo --git=#{lib_path("foo-2.0")}"
+
+ expect(bundled_app("Gemfile").read).to match(/gem "foo", "~> 2.0", :git => "#{lib_path("foo-2.0")}"/)
+ expect(the_bundle).to include_gems "foo 2.0"
+ end
+ end
+
+ describe "with --git and --branch" do
+ before do
+ update_git "foo", "2.0", :branch => "test"
+ end
+
+ it "adds dependency with specified github source and branch" do
+ bundle "add foo --git=#{lib_path("foo-2.0")} --branch=test"
+
+ expect(bundled_app("Gemfile").read).to match(/gem "foo", "~> 2.0", :git => "#{lib_path("foo-2.0")}", :branch => "test"/)
+ expect(the_bundle).to include_gems "foo 2.0"
+ end
+ end
+
describe "with --skip-install" do
it "adds gem to Gemfile but is not installed" do
bundle "add foo --skip-install --version=2.0"
@@ -106,23 +130,23 @@ RSpec.describe "bundle add" do
it "shows error message when version is not formatted correctly" do
bundle "add 'foo' -v='~>1 . 0'"
- expect(out).to match("Invalid gem requirement pattern '~>1 . 0'")
+ expect(err).to match("Invalid gem requirement pattern '~>1 . 0'")
end
it "shows error message when gem cannot be found" do
bundle "add 'werk_it'"
- expect(out).to match("Could not find gem 'werk_it' in")
+ expect(err).to match("Could not find gem 'werk_it' in")
bundle "add 'werk_it' -s='file://#{gem_repo2}'"
- expect(out).to match("Could not find gem 'werk_it' in rubygems repository")
+ expect(err).to match("Could not find gem 'werk_it' in rubygems repository")
end
it "shows error message when source cannot be reached" do
bundle "add 'baz' --source='http://badhostasdf'"
- expect(out).to include("Could not reach host badhostasdf. Check your network connection and try again.")
+ expect(err).to include("Could not reach host badhostasdf. Check your network connection and try again.")
bundle "add 'baz' --source='file://does/not/exist'"
- expect(out).to include("Could not fetch specs from file://does/not/exist/")
+ expect(err).to include("Could not fetch specs from file://does/not/exist/")
end
describe "with --optimistic" do
@@ -153,7 +177,7 @@ RSpec.describe "bundle add" do
it "throws error" do
bundle "add 'foo' --strict --optimistic"
- expect(out).to include("You can not specify `--strict` and `--optimistic` at the same time")
+ expect(err).to include("You can not specify `--strict` and `--optimistic` at the same time")
end
end
@@ -168,8 +192,8 @@ RSpec.describe "bundle add" do
it "throws error if any of the specified gems are present in the gemfile with different version" do
bundle "add weakling bar"
- expect(out).to include("You cannot specify the same gem twice with different version requirements")
- expect(out).to include("You specified: weakling (~> 0.0.1) and weakling (>= 0).")
+ expect(err).to include("You cannot specify the same gem twice with different version requirements")
+ expect(err).to include("You specified: weakling (~> 0.0.1) and weakling (>= 0).")
end
end
@@ -182,8 +206,8 @@ RSpec.describe "bundle add" do
bundle "add 'rack' --version=1.1"
- expect(out).to include("You cannot specify the same gem twice with different version requirements")
- expect(out).to include("If you want to update the gem version, run `bundle update rack`. You may also need to change the version requirement specified in the Gemfile if it's too restrictive")
+ expect(err).to include("You cannot specify the same gem twice with different version requirements")
+ expect(err).to include("If you want to update the gem version, run `bundle update rack`. You may also need to change the version requirement specified in the Gemfile if it's too restrictive")
end
it "shows error when added without version requirements" do
@@ -194,9 +218,9 @@ RSpec.describe "bundle add" do
bundle "add 'rack'"
- expect(out).to include("Gem already added.")
- expect(out).to include("You cannot specify the same gem twice with different version requirements")
- expect(out).not_to include("If you want to update the gem version, run `bundle update rack`. You may also need to change the version requirement specified in the Gemfile if it's too restrictive")
+ expect(err).to include("Gem already added.")
+ expect(err).to include("You cannot specify the same gem twice with different version requirements")
+ expect(err).not_to include("If you want to update the gem version, run `bundle update rack`. You may also need to change the version requirement specified in the Gemfile if it's too restrictive")
end
end
@@ -209,9 +233,9 @@ RSpec.describe "bundle add" do
bundle "add 'rack' --version=1.1"
- expect(out).to include("You cannot specify the same gem twice with different version requirements")
- expect(out).to include("If you want to update the gem version, run `bundle update rack`.")
- expect(out).not_to include("You may also need to change the version requirement specified in the Gemfile if it's too restrictive")
+ expect(err).to include("You cannot specify the same gem twice with different version requirements")
+ expect(err).to include("If you want to update the gem version, run `bundle update rack`.")
+ expect(err).not_to include("You may also need to change the version requirement specified in the Gemfile if it's too restrictive")
end
end
end
diff --git a/spec/commands/binstubs_spec.rb b/spec/commands/binstubs_spec.rb
index 2f014f2631..4f310784c7 100644
--- a/spec/commands/binstubs_spec.rb
+++ b/spec/commands/binstubs_spec.rb
@@ -59,7 +59,7 @@ RSpec.describe "bundle binstubs <gem>" do
bundle "binstubs"
expect(exitstatus).to eq(1) if exitstatus
- expect(out).to include("`bundle binstubs` needs at least one gem to run.")
+ expect(err).to include("`bundle binstubs` needs at least one gem to run.")
end
it "displays an error when used with --all and gems" do
@@ -70,7 +70,7 @@ RSpec.describe "bundle binstubs <gem>" do
bundle "binstubs rack", :all => true
expect(last_command).to be_failure
- expect(last_command.bundler_err).to include("Cannot specify --all with specific gems")
+ expect(err).to include("Cannot specify --all with specific gems")
end
context "when generating bundle binstub outside bundler" do
@@ -88,7 +88,7 @@ RSpec.describe "bundle binstubs <gem>" do
sys_exec "bin/rackup"
- expect(last_command.stderr).to include("was not generated by Bundler")
+ expect(err).to include("was not generated by Bundler")
end
end
@@ -133,9 +133,9 @@ RSpec.describe "bundle binstubs <gem>" do
context "when BUNDLER_VERSION is set" do
it "runs the correct version of bundler" do
- sys_exec "BUNDLER_VERSION='999.999.999' #{bundled_app("bin/bundle")} install"
+ sys_exec "#{bundled_app("bin/bundle")} install", "BUNDLER_VERSION" => "999.999.999"
expect(exitstatus).to eq(42) if exitstatus
- expect(last_command.stderr).to include("Activating bundler (999.999.999) failed:").
+ expect(err).to include("Activating bundler (999.999.999) failed:").
and include("To install the version of bundler this project requires, run `gem install bundler -v '999.999.999'`")
end
end
@@ -145,7 +145,7 @@ RSpec.describe "bundle binstubs <gem>" do
lockfile lockfile.gsub(system_bundler_version, "999.999.999")
sys_exec "#{bundled_app("bin/bundle")} install"
expect(exitstatus).to eq(42) if exitstatus
- expect(last_command.stderr).to include("Activating bundler (999.999.999) failed:").
+ expect(err).to include("Activating bundler (999.999.999) failed:").
and include("To install the version of bundler this project requires, run `gem install bundler -v '999.999.999'`")
end
@@ -154,7 +154,7 @@ RSpec.describe "bundle binstubs <gem>" do
lockfile lockfile.gsub(system_bundler_version, "44.0")
sys_exec "#{bundled_app("bin/bundle")} install"
expect(exitstatus).to eq(42) if exitstatus
- expect(last_command.stderr).to include("Activating bundler (44.0) failed:").
+ expect(err).to include("Activating bundler (44.0) failed:").
and include("To install the version of bundler this project requires, run `gem install bundler -v '44.0'`")
end
@@ -163,7 +163,7 @@ RSpec.describe "bundle binstubs <gem>" do
lockfile lockfile.gsub(system_bundler_version, "2.12.0.a")
sys_exec "#{bundled_app("bin/bundle")} install"
expect(exitstatus).to eq(42) if exitstatus
- expect(last_command.stderr).to include("Activating bundler (2.12.0.a) failed:").
+ expect(err).to include("Activating bundler (2.12.0.a) failed:").
and include("To install the version of bundler this project requires, run `gem install bundler -v '2.12.0.a'`")
end
end
@@ -173,13 +173,13 @@ RSpec.describe "bundle binstubs <gem>" do
it "calls through to the latest bundler version" do
sys_exec! "#{bundled_app("bin/bundle")} update --bundler"
- expect(last_command.stdout).to eq %(system bundler #{system_bundler_version}\n["update", "--bundler"])
+ expect(out).to eq %(system bundler #{system_bundler_version}\n["update", "--bundler"])
end
it "calls through to the explicit bundler version" do
sys_exec "#{bundled_app("bin/bundle")} update --bundler=999.999.999"
expect(exitstatus).to eq(42) if exitstatus
- expect(last_command.stderr).to include("Activating bundler (999.999.999) failed:").
+ expect(err).to include("Activating bundler (999.999.999) failed:").
and include("To install the version of bundler this project requires, run `gem install bundler -v '999.999.999'`")
end
end
@@ -202,10 +202,10 @@ RSpec.describe "bundle binstubs <gem>" do
context "when requesting a different bundler version" do
before { lockfile lockfile.gsub(Bundler::VERSION, "999.999.999") }
- it "attempts to load that version", :ruby_repo do
+ it "attempts to load that version" do
sys_exec bundled_app("bin/rackup").to_s
expect(exitstatus).to eq(42) if exitstatus
- expect(last_command.stderr).to include("Activating bundler (999.999.999) failed:").
+ expect(err).to include("Activating bundler (999.999.999) failed:").
and include("To install the version of bundler this project requires, run `gem install bundler -v '999.999.999'`")
end
end
@@ -278,7 +278,7 @@ RSpec.describe "bundle binstubs <gem>" do
bundle "binstubs doesnt_exist"
expect(exitstatus).to eq(7) if exitstatus
- expect(out).to include("Could not find gem 'doesnt_exist'.")
+ expect(err).to include("Could not find gem 'doesnt_exist'.")
end
end
@@ -294,7 +294,7 @@ RSpec.describe "bundle binstubs <gem>" do
expect(bundled_app("exec/rackup")).to exist
end
- it "setting is saved for bundle install", :bundler => "< 2" do
+ it "setting is saved for bundle install", :bundler => "< 3" do
install_gemfile <<-G
source "file://#{gem_repo1}"
gem "rack"
@@ -350,8 +350,8 @@ RSpec.describe "bundle binstubs <gem>" do
expect(bundled_app("bin/rackup")).to exist
expect(File.read(bundled_app("bin/rackup"))).to eq("OMG")
- expect(out).to include("Skipped rackup")
- expect(out).to include("overwrite skipped stubs, use --force")
+ expect(err).to include("Skipped rackup")
+ expect(err).to include("overwrite skipped stubs, use --force")
end
context "when using --force" do
@@ -382,8 +382,8 @@ RSpec.describe "bundle binstubs <gem>" do
G
bundle "binstubs rack-obama"
- expect(out).to include("rack-obama has no executables")
- expect(out).to include("rack has: rackup")
+ expect(err).to include("rack-obama has no executables")
+ expect(err).to include("rack has: rackup")
end
it "works if child gems don't have bins" do
@@ -393,7 +393,7 @@ RSpec.describe "bundle binstubs <gem>" do
G
bundle "binstubs actionpack"
- expect(out).to include("no executables for the gem actionpack")
+ expect(err).to include("no executables for the gem actionpack")
end
it "works if the gem has development dependencies" do
@@ -403,7 +403,7 @@ RSpec.describe "bundle binstubs <gem>" do
G
bundle "binstubs with_development_dependency"
- expect(out).to include("no executables for the gem with_development_dependency")
+ expect(err).to include("no executables for the gem with_development_dependency")
end
end
@@ -414,7 +414,7 @@ RSpec.describe "bundle binstubs <gem>" do
gem "rack"
G
- bundle "config auto_install 1"
+ bundle "config set auto_install 1"
bundle "binstubs rack"
expect(out).to include("Installing rack 1.0.0")
expect(the_bundle).to include_gems "rack 1.0.0"
@@ -426,7 +426,7 @@ RSpec.describe "bundle binstubs <gem>" do
gem "rack"
G
- bundle "config auto_install 1"
+ bundle "config set auto_install 1"
bundle "binstubs rack", :env => { "BUNDLE_INSTALL" => 1 }
expect(out).not_to include("Installing rack 1.0.0")
end
diff --git a/spec/commands/check_spec.rb b/spec/commands/check_spec.rb
index f2af446fbf..cf88736612 100644
--- a/spec/commands/check_spec.rb
+++ b/spec/commands/check_spec.rb
@@ -58,7 +58,7 @@ RSpec.describe "bundle check" do
G
bundle :check
- expect(out).to include("Bundler can't satisfy your Gemfile's dependencies.")
+ expect(err).to include("Bundler can't satisfy your Gemfile's dependencies.")
end
it "prints a generic error if a Gemfile.lock does not exist and a toplevel dependency does not exist" do
@@ -69,7 +69,7 @@ RSpec.describe "bundle check" do
bundle :check
expect(exitstatus).to be > 0 if exitstatus
- expect(out).to include("Bundler can't satisfy your Gemfile's dependencies.")
+ expect(err).to include("Bundler can't satisfy your Gemfile's dependencies.")
end
it "prints a generic message if you changed your lockfile" do
@@ -89,10 +89,10 @@ RSpec.describe "bundle check" do
G
bundle :check
- expect(out).to include("Bundler can't satisfy your Gemfile's dependencies.")
+ expect(err).to include("Bundler can't satisfy your Gemfile's dependencies.")
end
- it "remembers --without option from install", :bundler => "< 2" do
+ it "remembers --without option from install", :bundler => "< 3" do
gemfile <<-G
source "file://#{gem_repo1}"
group :foo do
@@ -106,7 +106,7 @@ RSpec.describe "bundle check" do
end
it "uses the without setting" do
- bundle! "config without foo"
+ bundle! "config set without foo"
install_gemfile! <<-G
source "file://#{gem_repo1}"
group :foo do
@@ -132,7 +132,7 @@ RSpec.describe "bundle check" do
G
bundle "check"
- expect(out).to include("* rack (1.0.0)")
+ expect(err).to include("* rack (1.0.0)")
expect(exitstatus).to eq(1) if exitstatus
end
@@ -201,13 +201,13 @@ RSpec.describe "bundle check" do
it "outputs an error when the default Gemfile is not found" do
bundle :check
expect(exitstatus).to eq(10) if exitstatus
- expect(out).to include("Could not locate Gemfile")
+ expect(err).to include("Could not locate Gemfile")
end
it "does not output fatal error message" do
bundle :check
expect(exitstatus).to eq(10) if exitstatus
- expect(out).not_to include("Unfortunately, a fatal error has occurred. ")
+ expect(err).not_to include("Unfortunately, a fatal error has occurred. ")
end
it "should not crash when called multiple times on a new machine" do
@@ -238,7 +238,7 @@ RSpec.describe "bundle check" do
expect(last_command).to be_failure
end
- context "--path", :bundler => "< 2" do
+ context "--path", :bundler => "< 3" do
before do
gemfile <<-G
source "file://#{gem_repo1}"
@@ -254,7 +254,7 @@ RSpec.describe "bundle check" do
expect(out).to include("The Gemfile's dependencies are satisfied")
end
- it "should write to .bundle/config", :bundler => "< 2" do
+ it "should write to .bundle/config", :bundler => "< 3" do
bundle "check --path vendor/bundle"
bundle! "check"
end
@@ -269,7 +269,7 @@ RSpec.describe "bundle check" do
bundle "check --path vendor/bundle"
expect(exitstatus).to eq(1) if exitstatus
- expect(out).to match(/The following gems are missing/)
+ expect(err).to match(/The following gems are missing/)
end
end
@@ -292,8 +292,8 @@ RSpec.describe "bundle check" do
it "shows what is missing with the current Gemfile if it is not satisfied" do
simulate_new_machine
bundle :check
- expect(out).to match(/The following gems are missing/)
- expect(out).to include("* rack (1.0")
+ expect(err).to match(/The following gems are missing/)
+ expect(err).to include("* rack (1.0")
end
end
@@ -338,7 +338,7 @@ RSpec.describe "bundle check" do
it "does not change the lock but warns" do
lockfile lock_with(Bundler::VERSION.succ)
bundle! :check
- expect(last_command.bundler_err).to include("the running version of Bundler (#{Bundler::VERSION}) is older than the version that created the lockfile (#{Bundler::VERSION.succ})")
+ expect(err).to include("the running version of Bundler (#{Bundler::VERSION}) is older than the version that created the lockfile (#{Bundler::VERSION.succ})")
lockfile_should_be lock_with(Bundler::VERSION.succ)
end
end
diff --git a/spec/commands/clean_spec.rb b/spec/commands/clean_spec.rb
index 37cbeeb4e7..0053947c85 100644
--- a/spec/commands/clean_spec.rb
+++ b/spec/commands/clean_spec.rb
@@ -142,7 +142,7 @@ RSpec.describe "bundle clean" do
bundle :clean
digest = Digest(:SHA1).hexdigest(git_path.to_s)
- cache_path = Bundler::VERSION.start_with?("1.") ? vendored_gems("cache/bundler/git/foo-1.0-#{digest}") : home(".bundle/cache/git/foo-1.0-#{digest}")
+ cache_path = Bundler::VERSION.start_with?("2.") ? vendored_gems("cache/bundler/git/foo-1.0-#{digest}") : home(".bundle/cache/git/foo-1.0-#{digest}")
expect(cache_path).to exist
end
@@ -201,7 +201,7 @@ RSpec.describe "bundle clean" do
update_git "foo", :path => lib_path("foo-bar")
revision2 = revision_for(lib_path("foo-bar"))
- bundle! "update", :all => bundle_update_requires_all?
+ bundle! "update", :all => true
bundle! :clean
expect(out).to include("Removing foo-bar (#{revision[0..11]})")
@@ -276,7 +276,7 @@ RSpec.describe "bundle clean" do
end
it "displays an error when used without --path" do
- bundle! "config path.system true"
+ bundle! "config set path.system true"
install_gemfile <<-G
source "file://#{gem_repo1}"
@@ -286,7 +286,7 @@ RSpec.describe "bundle clean" do
bundle :clean
expect(exitstatus).to eq(15) if exitstatus
- expect(out).to include("--force")
+ expect(err).to include("--force")
end
# handling bundle clean upgrade path from the pre's
@@ -320,9 +320,7 @@ RSpec.describe "bundle clean" do
end
it "does not call clean automatically when using system gems" do
- bundle! "config path.system true"
-
- bundle! :config
+ bundle! "config set path.system true"
install_gemfile! <<-G
source "file://#{gem_repo1}"
@@ -331,19 +329,18 @@ RSpec.describe "bundle clean" do
gem "rack"
G
- bundle! "info thin"
-
install_gemfile! <<-G
source "file://#{gem_repo1}"
gem "rack"
G
- sys_exec! "gem list"
+ gem = ruby_core? ? ENV["BUNDLE_GEM"] : "gem"
+ sys_exec! "#{gem} list"
expect(out).to include("rack (1.0.0)").and include("thin (1.0)")
end
- it "--clean should override the bundle setting on install", :bundler => "< 2" do
+ it "--clean should override the bundle setting on install", :bundler => "< 3" do
gemfile <<-G
source "file://#{gem_repo1}"
@@ -363,7 +360,7 @@ RSpec.describe "bundle clean" do
should_not_have_gems "thin-1.0"
end
- it "--clean should override the bundle setting on update", :bundler => "< 2" do
+ it "--clean should override the bundle setting on update", :bundler => "< 3" do
build_repo2
gemfile <<-G
@@ -377,13 +374,13 @@ RSpec.describe "bundle clean" do
build_gem "foo", "1.0.1"
end
- bundle! "update", :all => bundle_update_requires_all?
+ bundle! "update", :all => true
should_have_gems "foo-1.0.1"
should_not_have_gems "foo-1.0"
end
- it "automatically cleans when path has not been set", :bundler => "2" do
+ it "automatically cleans when path has not been set", :bundler => "3" do
build_repo2
install_gemfile! <<-G
@@ -440,12 +437,12 @@ RSpec.describe "bundle clean" do
build_gem "foo", "1.0.1"
end
- bundle! :update, :all => bundle_update_requires_all?
+ bundle! :update, :all => true
should_have_gems "foo-1.0", "foo-1.0.1"
end
it "does not clean on bundle update when using --system" do
- bundle! "config path.system true"
+ bundle! "config set path.system true"
build_repo2
@@ -459,14 +456,15 @@ RSpec.describe "bundle clean" do
update_repo2 do
build_gem "foo", "1.0.1"
end
- bundle! :update, :all => bundle_update_requires_all?
+ bundle! :update, :all => true
- sys_exec! "gem list"
+ gem = ruby_core? ? ENV["BUNDLE_GEM"] : "gem"
+ sys_exec! "#{gem} list"
expect(out).to include("foo (1.0.1, 1.0)")
end
it "cleans system gems when --force is used" do
- bundle! "config path.system true"
+ bundle! "config set path.system true"
gemfile <<-G
source "file://#{gem_repo1}"
@@ -485,7 +483,8 @@ RSpec.describe "bundle clean" do
bundle "clean --force"
expect(out).to include("Removing foo (1.0)")
- sys_exec "gem list"
+ gem = ruby_core? ? ENV["BUNDLE_GEM"] : "gem"
+ sys_exec "#{gem} list"
expect(out).not_to include("foo (1.0)")
expect(out).to include("rack (1.0.0)")
end
@@ -516,10 +515,11 @@ RSpec.describe "bundle clean" do
bundle :clean, :force => true
- expect(out).to include(system_gem_path.to_s)
- expect(out).to include("grant write permissions")
+ expect(err).to include(system_gem_path.to_s)
+ expect(err).to include("grant write permissions")
- sys_exec "gem list"
+ gem = ruby_core? ? ENV["BUNDLE_GEM"] : "gem"
+ sys_exec "#{gem} list"
expect(out).to include("foo (1.0)")
expect(out).to include("rack (1.0.0)")
end
@@ -556,7 +556,7 @@ RSpec.describe "bundle clean" do
end
it "when using --force on system gems, it doesn't remove binaries" do
- bundle! "config path.system true"
+ bundle! "config set path.system true"
build_repo2
update_repo2 do
@@ -646,8 +646,6 @@ RSpec.describe "bundle clean" do
bundle :install
- bundle "configuration --delete path"
-
bundle "clean --dry-run"
expect(out).not_to include("Removing foo (1.0)")
@@ -667,7 +665,7 @@ RSpec.describe "bundle clean" do
G
bundle "install", forgotten_command_line_options(:path => "vendor/bundle", :clean => false)
- bundle "config dry_run false"
+ bundle "config set dry_run false"
gemfile <<-G
source "file://#{gem_repo1}"
@@ -705,14 +703,14 @@ RSpec.describe "bundle clean" do
gem "weakling"
G
- bundle! "config auto_install 1"
+ bundle! "config set auto_install 1"
bundle! :clean
expect(out).to include("Installing weakling 0.0.3")
should_have_gems "thin-1.0", "rack-1.0.0", "weakling-0.0.3"
should_not_have_gems "foo-1.0"
end
- it "doesn't remove extensions artifacts from bundled git gems after clean", :ruby_repo, :rubygems => "2.2" do
+ it "doesn't remove extensions artifacts from bundled git gems after clean", :ruby_repo do
build_git "very_simple_git_binary", &:add_c_extension
revision = revision_for(lib_path("very_simple_git_binary-1.0"))
@@ -734,7 +732,7 @@ RSpec.describe "bundle clean" do
expect(vendored_gems("bundler/gems/very_simple_git_binary-1.0-#{revision[0..11]}")).to exist
end
- it "removes extension directories", :ruby_repo, :rubygems => "2.2" do
+ it "removes extension directories", :ruby_repo do
gemfile <<-G
source "file://#{gem_repo1}"
@@ -768,4 +766,43 @@ RSpec.describe "bundle clean" do
expect(very_simple_binary_extensions_dir).not_to exist
expect(simple_binary_extensions_dir).to exist
end
+
+ it "removes git extension directories", :ruby_repo do
+ build_git "very_simple_git_binary", &:add_c_extension
+
+ revision = revision_for(lib_path("very_simple_git_binary-1.0"))
+ short_revision = revision[0..11]
+
+ gemfile <<-G
+ source "file://#{gem_repo1}"
+
+ gem "thin"
+ gem "very_simple_git_binary", :git => "#{lib_path("very_simple_git_binary-1.0")}", :ref => "#{revision}"
+ G
+
+ bundle! "install", forgotten_command_line_options(:path => "vendor/bundle")
+
+ very_simple_binary_extensions_dir =
+ Pathname.glob("#{vendored_gems}/bundler/gems/extensions/*/*/very_simple_git_binary-1.0-#{short_revision}").first
+
+ expect(very_simple_binary_extensions_dir).to exist
+
+ gemfile <<-G
+ gem "very_simple_git_binary", :git => "#{lib_path("very_simple_git_binary-1.0")}", :ref => "#{revision}"
+ G
+
+ bundle! "install"
+ bundle! :clean
+ expect(out).to include("Removing thin (1.0)")
+ expect(very_simple_binary_extensions_dir).to exist
+
+ gemfile <<-G
+ G
+
+ bundle! "install"
+ bundle! :clean
+ expect(out).to eq("Removing very_simple_git_binary-1.0 (#{short_revision})")
+
+ expect(very_simple_binary_extensions_dir).not_to exist
+ end
end
diff --git a/spec/commands/config_spec.rb b/spec/commands/config_spec.rb
index 61734ef005..40fab95803 100644
--- a/spec/commands/config_spec.rb
+++ b/spec/commands/config_spec.rb
@@ -2,10 +2,10 @@
RSpec.describe ".bundle/config" do
describe "config" do
- before { bundle "config foo bar" }
+ before { bundle "config set foo bar" }
it "prints a detailed report of local and user configuration" do
- bundle "config"
+ bundle "config list"
expect(out).to include("Settings are listed in order of priority. The top value will be used")
expect(out).to include("foo\nSet for the current user")
@@ -14,21 +14,21 @@ RSpec.describe ".bundle/config" do
context "given --parseable flag" do
it "prints a minimal report of local and user configuration" do
- bundle "config --parseable"
+ bundle "config list --parseable"
expect(out).to include("foo=bar")
end
context "with global config" do
it "prints config assigned to local scope" do
- bundle "config --local foo bar2"
- bundle "config --parseable"
+ bundle "config set --local foo bar2"
+ bundle "config list --parseable"
expect(out).to include("foo=bar2")
end
end
context "with env overwrite" do
it "prints config with env" do
- bundle "config --parseable", :env => { "BUNDLE_FOO" => "bar3" }
+ bundle "config list --parseable", :env => { "BUNDLE_FOO" => "bar3" }
expect(out).to include("foo=bar3")
end
end
@@ -74,21 +74,21 @@ RSpec.describe ".bundle/config" do
end
it "is the default" do
- bundle "config foo global"
+ bundle "config set foo global"
run "puts Bundler.settings[:foo]"
expect(out).to eq("global")
end
it "can also be set explicitly" do
- bundle! "config --global foo global"
+ bundle! "config set --global foo global"
run! "puts Bundler.settings[:foo]"
expect(out).to eq("global")
end
it "has lower precedence than local" do
- bundle "config --local foo local"
+ bundle "config set --local foo local"
- bundle "config --global foo global"
+ bundle "config set --global foo global"
expect(out).to match(/Your application has set foo to "local"/)
run "puts Bundler.settings[:foo]"
@@ -99,7 +99,7 @@ RSpec.describe ".bundle/config" do
begin
ENV["BUNDLE_FOO"] = "env"
- bundle "config --global foo global"
+ bundle "config set --global foo global"
expect(out).to match(/You have a bundler environment variable for foo set to "env"/)
run "puts Bundler.settings[:foo]"
@@ -110,16 +110,16 @@ RSpec.describe ".bundle/config" do
end
it "can be deleted" do
- bundle "config --global foo global"
- bundle "config --delete foo"
+ bundle "config set --global foo global"
+ bundle "config unset foo"
run "puts Bundler.settings[:foo] == nil"
expect(out).to eq("true")
end
it "warns when overriding" do
- bundle "config --global foo previous"
- bundle "config --global foo global"
+ bundle "config set --global foo previous"
+ bundle "config set --global foo global"
expect(out).to match(/You are replacing the current global value of foo/)
run "puts Bundler.settings[:foo]"
@@ -127,8 +127,8 @@ RSpec.describe ".bundle/config" do
end
it "does not warn when using the same value twice" do
- bundle "config --global foo value"
- bundle "config --global foo value"
+ bundle "config set --global foo value"
+ bundle "config set --global foo value"
expect(out).not_to match(/You are replacing the current global value of foo/)
run "puts Bundler.settings[:foo]"
@@ -136,22 +136,22 @@ RSpec.describe ".bundle/config" do
end
it "expands the path at time of setting" do
- bundle "config --global local.foo .."
+ bundle "config set --global local.foo .."
run "puts Bundler.settings['local.foo']"
expect(out).to eq(File.expand_path(Dir.pwd + "/.."))
end
it "saves with parseable option" do
- bundle "config --global --parseable foo value"
+ bundle "config set --global --parseable foo value"
expect(out).to eq("foo=value")
run "puts Bundler.settings['foo']"
expect(out).to eq("value")
end
context "when replacing a current value with the parseable flag" do
- before { bundle "config --global foo value" }
+ before { bundle "config set --global foo value" }
it "prints the current value in a parseable format" do
- bundle "config --global --parseable foo value2"
+ bundle "config set --global --parseable foo value2"
expect(out).to eq "foo=value2"
run "puts Bundler.settings['foo']"
expect(out).to eq("value2")
@@ -168,7 +168,7 @@ RSpec.describe ".bundle/config" do
end
it "can also be set explicitly" do
- bundle "config --local foo local"
+ bundle "config set --local foo local"
run "puts Bundler.settings[:foo]"
expect(out).to eq("local")
end
@@ -176,7 +176,7 @@ RSpec.describe ".bundle/config" do
it "has higher precedence than env" do
begin
ENV["BUNDLE_FOO"] = "env"
- bundle "config --local foo local"
+ bundle "config set --local foo local"
run "puts Bundler.settings[:foo]"
expect(out).to eq("local")
@@ -186,16 +186,16 @@ RSpec.describe ".bundle/config" do
end
it "can be deleted" do
- bundle "config --local foo local"
- bundle "config --delete foo"
+ bundle "config set --local foo local"
+ bundle "config unset foo"
run "puts Bundler.settings[:foo] == nil"
expect(out).to eq("true")
end
it "warns when overriding" do
- bundle "config --local foo previous"
- bundle "config --local foo local"
+ bundle "config set --local foo previous"
+ bundle "config set --local foo local"
expect(out).to match(/You are replacing the current local value of foo/)
run "puts Bundler.settings[:foo]"
@@ -203,14 +203,14 @@ RSpec.describe ".bundle/config" do
end
it "expands the path at time of setting" do
- bundle "config --local local.foo .."
+ bundle "config set --local local.foo .."
run "puts Bundler.settings['local.foo']"
expect(out).to eq(File.expand_path(Dir.pwd + "/.."))
end
it "can be deleted with parseable option" do
- bundle "config --local foo value"
- bundle "config --delete --parseable foo"
+ bundle "config set --local foo value"
+ bundle "config unset --parseable foo"
expect(out).to eq ""
run "puts Bundler.settings['foo'] == nil"
expect(out).to eq("true")
@@ -262,29 +262,29 @@ RSpec.describe ".bundle/config" do
describe "parseable option" do
it "prints an empty string" do
- bundle "config foo --parseable"
+ bundle "config get foo --parseable"
expect(out).to eq ""
end
it "only prints the value of the config" do
- bundle "config foo local"
- bundle "config foo --parseable"
+ bundle "config set foo local"
+ bundle "config get foo --parseable"
expect(out).to eq "foo=local"
end
it "can print global config" do
- bundle "config --global bar value"
- bundle "config bar --parseable"
+ bundle "config set --global bar value"
+ bundle "config get bar --parseable"
expect(out).to eq "bar=value"
end
it "prefers local config over global" do
- bundle "config --local bar value2"
- bundle "config --global bar value"
- bundle "config bar --parseable"
+ bundle "config set --local bar value2"
+ bundle "config set --global bar value"
+ bundle "config get bar --parseable"
expect(out).to eq "bar=value2"
end
@@ -299,7 +299,7 @@ RSpec.describe ".bundle/config" do
end
it "configures mirrors using keys with `mirror.`" do
- bundle "config --local mirror.http://gems.example.org http://gem-mirror.example.org"
+ bundle "config set --local mirror.http://gems.example.org http://gem-mirror.example.org"
run(<<-E)
Bundler.settings.gem_mirrors.each do |k, v|
puts "\#{k} => \#{v}"
@@ -317,26 +317,26 @@ E
end
it "saves quotes" do
- bundle "config foo something\\'"
+ bundle "config set foo something\\'"
run "puts Bundler.settings[:foo]"
expect(out).to eq("something'")
end
- it "doesn't return quotes around values", :ruby => "1.9" do
- bundle "config foo '1'"
+ it "doesn't return quotes around values" do
+ bundle "config set foo '1'"
run "puts Bundler.settings.send(:global_config_file).read"
expect(out).to include('"1"')
run "puts Bundler.settings[:foo]"
expect(out).to eq("1")
end
- it "doesn't duplicate quotes around values", :if => (RUBY_VERSION >= "2.1") do
+ it "doesn't duplicate quotes around values" do
bundled_app(".bundle").mkpath
File.open(bundled_app(".bundle/config"), "w") do |f|
f.write 'BUNDLE_FOO: "$BUILD_DIR"'
end
- bundle "config bar baz"
+ bundle "config set bar baz"
run "puts Bundler.settings.send(:local_config_file).read"
# Starting in Ruby 2.1, YAML automatically adds double quotes
@@ -345,12 +345,12 @@ E
end
it "doesn't duplicate quotes around long wrapped values" do
- bundle "config foo #{long_string}"
+ bundle "config set foo #{long_string}"
run "puts Bundler.settings[:foo]"
expect(out).to eq(long_string)
- bundle "config bar baz"
+ bundle "config set bar baz"
run "puts Bundler.settings[:foo]"
expect(out).to eq(long_string)
@@ -376,101 +376,101 @@ E
end
it "doesn't wrap values" do
- bundle "config foo #{long_string}"
+ bundle "config set foo #{long_string}"
run "puts Bundler.settings[:foo]"
expect(out).to match(long_string)
end
it "can read wrapped unquoted values" do
- bundle "config foo #{long_string_without_special_characters}"
+ bundle "config set foo #{long_string_without_special_characters}"
run "puts Bundler.settings[:foo]"
expect(out).to match(long_string_without_special_characters)
end
end
describe "subcommands" do
- it "list" do
+ it "list", :ruby_repo do
bundle! "config list"
- expect(last_command.stdout).to eq "Settings are listed in order of priority. The top value will be used.\nspec_run\nSet via BUNDLE_SPEC_RUN: \"true\""
+ expect(out).to eq "Settings are listed in order of priority. The top value will be used.\nspec_run\nSet via BUNDLE_SPEC_RUN: \"true\""
bundle! "config list", :parseable => true
- expect(last_command.stdout).to eq "spec_run=true"
+ expect(out).to eq "spec_run=true"
end
it "get" do
ENV["BUNDLE_BAR"] = "bar_val"
bundle! "config get foo"
- expect(last_command.stdout).to eq "Settings for `foo` in order of priority. The top value will be used\nYou have not configured a value for `foo`"
+ expect(out).to eq "Settings for `foo` in order of priority. The top value will be used\nYou have not configured a value for `foo`"
ENV["BUNDLE_FOO"] = "foo_val"
bundle! "config get foo --parseable"
- expect(last_command.stdout).to eq "foo=foo_val"
+ expect(out).to eq "foo=foo_val"
bundle! "config get foo"
- expect(last_command.stdout).to eq "Settings for `foo` in order of priority. The top value will be used\nSet via BUNDLE_FOO: \"foo_val\""
+ expect(out).to eq "Settings for `foo` in order of priority. The top value will be used\nSet via BUNDLE_FOO: \"foo_val\""
end
it "set" do
bundle! "config set foo 1"
- expect(last_command.stdout).to eq ""
+ expect(out).to eq ""
bundle! "config set --local foo 2"
- expect(last_command.stdout).to eq ""
+ expect(out).to eq ""
bundle! "config set --global foo 3"
- expect(last_command.stdout).to eq "Your application has set foo to \"2\". This will override the global value you are currently setting"
+ expect(out).to eq "Your application has set foo to \"2\". This will override the global value you are currently setting"
bundle! "config set --parseable --local foo 4"
- expect(last_command.stdout).to eq "foo=4"
+ expect(out).to eq "foo=4"
bundle! "config set --local foo 4.1"
- expect(last_command.stdout).to eq "You are replacing the current local value of foo, which is currently \"4\""
+ expect(out).to eq "You are replacing the current local value of foo, which is currently \"4\""
bundle "config set --global --local foo 5"
expect(last_command).to be_failure
- expect(last_command.bundler_err).to eq "The options global and local were specified. Please only use one of the switches at a time."
+ expect(err).to eq "The options global and local were specified. Please only use one of the switches at a time."
end
it "unset" do
bundle! "config unset foo"
- expect(last_command.stdout).to eq ""
+ expect(out).to eq ""
bundle! "config set foo 1"
bundle! "config unset foo --parseable"
- expect(last_command.stdout).to eq ""
+ expect(out).to eq ""
bundle! "config set --local foo 1"
bundle! "config set --global foo 2"
bundle! "config unset foo"
- expect(last_command.stdout).to eq ""
+ expect(out).to eq ""
expect(bundle!("config get foo")).to eq "Settings for `foo` in order of priority. The top value will be used\nYou have not configured a value for `foo`"
bundle! "config set --local foo 1"
bundle! "config set --global foo 2"
bundle! "config unset foo --local"
- expect(last_command.stdout).to eq ""
+ expect(out).to eq ""
expect(bundle!("config get foo")).to eq "Settings for `foo` in order of priority. The top value will be used\nSet for the current user (#{home(".bundle/config")}): \"2\""
bundle! "config unset foo --global"
- expect(last_command.stdout).to eq ""
+ expect(out).to eq ""
expect(bundle!("config get foo")).to eq "Settings for `foo` in order of priority. The top value will be used\nYou have not configured a value for `foo`"
bundle! "config set --local foo 1"
bundle! "config set --global foo 2"
bundle! "config unset foo --global"
- expect(last_command.stdout).to eq ""
+ expect(out).to eq ""
expect(bundle!("config get foo")).to eq "Settings for `foo` in order of priority. The top value will be used\nSet for your local app (#{bundled_app(".bundle/config")}): \"1\""
bundle! "config unset foo --local"
- expect(last_command.stdout).to eq ""
+ expect(out).to eq ""
expect(bundle!("config get foo")).to eq "Settings for `foo` in order of priority. The top value will be used\nYou have not configured a value for `foo`"
bundle "config unset foo --local --global"
expect(last_command).to be_failure
- expect(last_command.bundler_err).to eq "The options global and local were specified. Please only use one of the switches at a time."
+ expect(err).to eq "The options global and local were specified. Please only use one of the switches at a time."
end
end
end
@@ -485,10 +485,10 @@ RSpec.describe "setting gemfile via config" do
G
end
- bundle "config --local gemfile #{bundled_app("NotGemfile")}"
+ bundle "config set --local gemfile #{bundled_app("NotGemfile")}"
expect(File.exist?(".bundle/config")).to eq(true)
- bundle "config"
+ bundle "config list"
expect(out).to include("NotGemfile")
end
end
diff --git a/spec/commands/console_spec.rb b/spec/commands/console_spec.rb
index 9bf66e8f5b..cba618db80 100644
--- a/spec/commands/console_spec.rb
+++ b/spec/commands/console_spec.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-RSpec.describe "bundle console", :bundler => "< 2" do
+RSpec.describe "bundle console", :bundler => "< 3" do
before :each do
install_gemfile <<-G
source "file://#{gem_repo1}"
@@ -31,7 +31,7 @@ RSpec.describe "bundle console", :bundler => "< 2" do
source "file://#{gem_repo1}"
gem "pry"
G
- bundle "config console pry"
+ bundle "config set console pry"
bundle "console" do |input, _, _|
input.puts("__method__")
@@ -41,7 +41,7 @@ RSpec.describe "bundle console", :bundler => "< 2" do
end
it "falls back to IRB if the other REPL isn't available" do
- bundle "config console pry"
+ bundle "config set console pry"
# make sure pry isn't there
bundle "console" do |input, _, _|
@@ -94,7 +94,7 @@ RSpec.describe "bundle console", :bundler => "< 2" do
gem "foo"
G
- bundle "config auto_install 1"
+ bundle "config set auto_install 1"
bundle :console do |input, _, _|
input.puts("puts 'hello'")
input.puts("exit")
diff --git a/spec/commands/exec_spec.rb b/spec/commands/exec_spec.rb
index 7503b9db5f..24aa5f46fe 100644
--- a/spec/commands/exec_spec.rb
+++ b/spec/commands/exec_spec.rb
@@ -38,7 +38,7 @@ RSpec.describe "bundle exec" do
gem "rack"
G
- bundle "exec 'cd #{tmp("gems")} && rackup'", :env => { :RUBYOPT => "-r#{spec_dir.join("support/hax")}" }
+ bundle "exec 'cd #{tmp("gems")} && rackup'"
expect(out).to include("1.0.0")
end
@@ -51,7 +51,7 @@ RSpec.describe "bundle exec" do
it "works when exec'ing to ruby" do
install_gemfile 'gem "rack"'
- bundle "exec ruby -e 'puts %{hi}'", :env => { :RUBYOPT => "-r#{spec_dir.join("support/hax")}" }
+ bundle "exec ruby -e 'puts %{hi}'"
expect(out).to eq("hi")
end
@@ -79,30 +79,23 @@ RSpec.describe "bundle exec" do
require 'tempfile'
io = Tempfile.new("io-test-fd")
args = %W[#{Gem.ruby} -I#{lib} #{bindir.join("bundle")} exec --keep-file-descriptors #{Gem.ruby} #{command.path} \#{io.to_i}]
- args << { io.to_i => io } if RUBY_VERSION >= "2.0"
+ args << { io.to_i => io }
exec(*args)
end
G
install_gemfile ""
- with_env_vars "RUBYOPT" => "-r#{spec_dir.join("support/hax")}" do
- sys_exec "#{Gem.ruby} #{command.path}"
- end
-
- if Bundler.current_ruby.ruby_2?
- expect(out).to eq("")
- else
- expect(out).to eq("Ruby version #{RUBY_VERSION} defaults to keeping non-standard file descriptors on Kernel#exec.")
- end
+ sys_exec "#{Gem.ruby} #{command.path}"
- expect(err).to lack_errors
+ expect(out).to eq("")
+ expect(err).to be_empty
end
it "accepts --keep-file-descriptors" do
install_gemfile ""
bundle "exec --keep-file-descriptors echo foobar"
- expect(err).to lack_errors
+ expect(err).to be_empty
end
it "can run a command named --verbose" do
@@ -147,6 +140,112 @@ RSpec.describe "bundle exec" do
end
end
+ context "with default gems" do
+ let(:system_gems_to_install) { [] }
+
+ let(:default_irb_version) { ruby "gem 'irb', '< 999999'; require 'irb'; puts IRB::VERSION" }
+
+ context "when not specified in Gemfile" do
+ before do
+ skip "irb isn't a default gem" if default_irb_version.empty?
+
+ install_gemfile ""
+ end
+
+ it "uses version provided by ruby" do
+ bundle! "exec irb --version"
+
+ expect(out).to include(default_irb_version)
+ expect(err).to be_empty
+ end
+ end
+
+ context "when specified in Gemfile directly" do
+ let(:specified_irb_version) { "0.9.6" }
+
+ before do
+ skip "irb isn't a default gem" if default_irb_version.empty?
+
+ build_repo2 do
+ build_gem "irb", specified_irb_version do |s|
+ s.executables = "irb"
+ end
+ end
+
+ install_gemfile <<-G
+ source "file://#{gem_repo2}"
+ gem "irb", "#{specified_irb_version}"
+ G
+ end
+
+ it "uses version specified" do
+ bundle! "exec irb --version"
+
+ expect(out).to include(specified_irb_version)
+ expect(err).to be_empty
+ end
+ end
+
+ context "when specified in Gemfile indirectly" do
+ let(:indirect_irb_version) { "0.9.6" }
+
+ before do
+ skip "irb isn't a default gem" if default_irb_version.empty?
+
+ build_repo2 do
+ build_gem "irb", indirect_irb_version do |s|
+ s.executables = "irb"
+ end
+
+ build_gem "gem_depending_on_old_irb" do |s|
+ s.add_dependency "irb", indirect_irb_version
+ end
+ end
+
+ install_gemfile <<-G
+ source "file://#{gem_repo2}"
+ gem "gem_depending_on_old_irb"
+ G
+
+ bundle! "exec irb --version"
+ end
+
+ it "uses resolved version" do
+ expect(out).to include(indirect_irb_version)
+ expect(err).to be_empty
+ end
+ end
+ end
+
+ it "warns about executable conflicts" do
+ build_repo2 do
+ build_gem "rack_two", "1.0.0" do |s|
+ s.executables = "rackup"
+ end
+ end
+
+ bundle "config set path.system true"
+
+ install_gemfile <<-G
+ source "file://#{gem_repo1}"
+ gem "rack", "0.9.1"
+ G
+
+ Dir.chdir bundled_app2 do
+ install_gemfile bundled_app2("Gemfile"), <<-G
+ source "file://#{gem_repo2}"
+ gem "rack_two", "1.0.0"
+ G
+ end
+
+ bundle! "exec rackup"
+
+ expect(last_command.stderr).to eq(
+ "Bundler is using a binstub that was created for a different gem (rack).\n" \
+ "You should run `bundle binstub rack_two` to work around a system/bundle conflict."
+ )
+ end
+
it "handles gems installed with --without" do
install_gemfile <<-G, forgotten_command_line_options(:without => "middleware")
source "file://#{gem_repo1}"
@@ -201,8 +300,8 @@ RSpec.describe "bundle exec" do
bundle "exec foobarbaz"
expect(exitstatus).to eq(127) if exitstatus
- expect(out).to include("bundler: command not found: foobarbaz")
- expect(out).to include("Install missing gem executables with `bundle install`")
+ expect(err).to include("bundler: command not found: foobarbaz")
+ expect(err).to include("Install missing gem executables with `bundle install`")
end
it "errors nicely when the argument is not executable" do
@@ -213,7 +312,7 @@ RSpec.describe "bundle exec" do
bundle "exec touch foo"
bundle "exec ./foo"
expect(exitstatus).to eq(126) if exitstatus
- expect(out).to include("bundler: not executable: ./foo")
+ expect(err).to include("bundler: not executable: ./foo")
end
it "errors nicely when no arguments are passed" do
@@ -223,33 +322,19 @@ RSpec.describe "bundle exec" do
bundle "exec"
expect(exitstatus).to eq(128) if exitstatus
- expect(out).to include("bundler: exec needs a command to run")
+ expect(err).to include("bundler: exec needs a command to run")
end
- it "raises a helpful error when exec'ing to something outside of the bundle", :ruby_repo, :rubygems => ">= 2.5.2" do
- bundle! "config clean false" # want to keep the rackup binstub
+ it "raises a helpful error when exec'ing to something outside of the bundle", :ruby_repo do
+ bundle! "config set clean false" # want to keep the rackup binstub
install_gemfile! <<-G
source "file://#{gem_repo1}"
gem "with_license"
G
[true, false].each do |l|
- bundle! "config disable_exec_load #{l}"
+ bundle! "config set disable_exec_load #{l}"
bundle "exec rackup"
- expect(last_command.stderr).to include "can't find executable rackup for gem rack. rack is not currently included in the bundle, perhaps you meant to add it to your Gemfile?"
- end
- end
-
- # Different error message on old RG versions (before activate_bin_path) because they
- # called `Kernel#gem` directly
- it "raises a helpful error when exec'ing to something outside of the bundle", :rubygems => "< 2.5.2" do
- install_gemfile! <<-G
- source "file://#{gem_repo1}"
- gem "with_license"
- G
- [true, false].each do |l|
- bundle! "config disable_exec_load #{l}"
- bundle "exec rackup", :env => { :RUBYOPT => "-r#{spec_dir.join("support/hax")}" }
- expect(last_command.stderr).to include "rack is not part of the bundle. Add it to your Gemfile."
+ expect(err).to include "can't find executable rackup for gem rack. rack is not currently included in the bundle, perhaps you meant to add it to your Gemfile?"
end
end
@@ -350,14 +435,14 @@ RSpec.describe "bundle exec" do
end
it "works when unlocked" do
- bundle "exec 'cd #{tmp("gems")} && rackup'", :env => { :RUBYOPT => "-r#{spec_dir.join("support/hax")}" }
+ bundle "exec 'cd #{tmp("gems")} && rackup'"
expect(out).to eq("1.0.0")
expect(out).to include("1.0.0")
end
it "works when locked" do
expect(the_bundle).to be_locked
- bundle "exec 'cd #{tmp("gems")} && rackup'", :env => { :RUBYOPT => "-r#{spec_dir.join("support/hax")}" }
+ bundle "exec 'cd #{tmp("gems")} && rackup'"
expect(out).to include("1.0.0")
end
end
@@ -440,13 +525,13 @@ RSpec.describe "bundle exec" do
gem "foo"
G
- bundle "config auto_install 1"
+ bundle "config set auto_install 1"
bundle "exec rackup"
expect(out).to include("Installing foo 1.0")
end
- describe "with gems bundled via :path with invalid gemspecs", :ruby_repo do
- it "outputs the gemspec validation errors", :rubygems => ">= 1.7.2" do
+ describe "with gems bundled via :path with invalid gemspecs" do
+ it "outputs the gemspec validation errors" do
build_lib "foo"
gemspec = lib_path("foo-1.0").join("foo.gemspec").to_s
@@ -483,7 +568,7 @@ RSpec.describe "bundle exec" do
Bundler.rubygems.extend(Monkey)
G
bundle "install --deployment"
- bundle "exec ruby -e '`#{bindir.join("bundler")} -v`; puts $?.success?'", :env => { :RUBYOPT => "-r#{spec_dir.join("support/hax")}" }
+ bundle "exec ruby -e '`#{bindir.join("bundler")} -v`; puts $?.success?'"
expect(out).to match("true")
end
end
@@ -516,21 +601,21 @@ RSpec.describe "bundle exec" do
let(:rack) { "RACK: 1.0.0" }
let(:process) do
title = "PROCESS: #{path}"
- title += " arg1 arg2" if RUBY_VERSION >= "2.1"
+ title += " arg1 arg2"
title
end
let(:exit_code) { 0 }
let(:expected) { [exec, args, rack, process].join("\n") }
let(:expected_err) { "" }
- subject { bundle "exec #{path} arg1 arg2", :env => { :RUBYOPT => "-r#{spec_dir.join("support/hax")}" } }
+ subject { bundle "exec #{path} arg1 arg2" }
shared_examples_for "it runs" do
it "like a normally executed executable" do
subject
expect(exitstatus).to eq(exit_code) if exitstatus
- expect(last_command.stderr).to eq(expected_err)
- expect(last_command.stdout).to eq(expected)
+ expect(err).to eq(expected_err)
+ expect(out).to eq(expected)
end
end
@@ -553,15 +638,10 @@ RSpec.describe "bundle exec" do
let(:executable) do
ex = super()
ex << "\n"
- if LessThanProc.with(RUBY_VERSION).call("1.9")
- # Ruby < 1.9 needs a flush for a exit by signal, later
- # rubies do not
- ex << "STDOUT.flush\n"
- end
ex << "raise SignalException, 'SIGTERM'\n"
ex
end
- let(:expected_err) { RUBY_PLATFORM =~ /darwin/ ? "" : "Terminated" }
+ let(:expected_err) { "" }
let(:exit_code) do
# signal mask 128 + plus signal 15 -> TERM
# this is specified by C99
@@ -570,22 +650,7 @@ RSpec.describe "bundle exec" do
it_behaves_like "it runs"
end
- context "the executable is empty", :bundler => "< 2" do
- let(:executable) { "" }
-
- let(:exit_code) { 0 }
- let(:expected) { "#{path} is empty" }
- let(:expected_err) { "" }
- if LessThanProc.with(RUBY_VERSION).call("1.9")
- # Kernel#exec in ruby < 1.9 will raise Errno::ENOEXEC if the command content is empty,
- # even if the command is set as an executable.
- pending "Kernel#exec is different"
- else
- it_behaves_like "it runs"
- end
- end
-
- context "the executable is empty", :bundler => "2" do
+ context "the executable is empty" do
let(:executable) { "" }
let(:exit_code) { 0 }
@@ -594,18 +659,7 @@ RSpec.describe "bundle exec" do
it_behaves_like "it runs"
end
- context "the executable raises", :bundler => "< 2" do
- let(:executable) { super() << "\nraise 'ERROR'" }
- let(:exit_code) { 1 }
- let(:expected) { super() << "\nbundler: failed to load command: #{path} (#{path})" }
- let(:expected_err) do
- "RuntimeError: ERROR\n #{path}:10" +
- (Bundler.current_ruby.ruby_18? ? "" : ":in `<top (required)>'")
- end
- it_behaves_like "it runs"
- end
-
- context "the executable raises", :bundler => "2" do
+ context "the executable raises" do
let(:executable) { super() << "\nraise 'ERROR'" }
let(:exit_code) { 1 }
let(:expected_err) do
@@ -615,16 +669,7 @@ RSpec.describe "bundle exec" do
it_behaves_like "it runs"
end
- context "the executable raises an error without a backtrace", :bundler => "< 2" do
- let(:executable) { super() << "\nclass Err < Exception\ndef backtrace; end;\nend\nraise Err" }
- let(:exit_code) { 1 }
- let(:expected) { super() << "\nbundler: failed to load command: #{path} (#{path})" }
- let(:expected_err) { "Err: Err" }
-
- it_behaves_like "it runs"
- end
-
- context "the executable raises an error without a backtrace", :bundler => "2" do
+ context "the executable raises an error without a backtrace" do
let(:executable) { super() << "\nclass Err < Exception\ndef backtrace; end;\nend\nraise Err" }
let(:exit_code) { 1 }
let(:expected_err) { "bundler: failed to load command: #{path} (#{path})\nErr: Err" }
@@ -638,7 +683,7 @@ RSpec.describe "bundle exec" do
it_behaves_like "it runs"
end
- context "when Bundler.setup fails", :bundler => "< 2" do
+ context "when Bundler.setup fails", :bundler => "< 3" do
before do
gemfile <<-G
gem 'rack', '2'
@@ -647,7 +692,8 @@ RSpec.describe "bundle exec" do
end
let(:exit_code) { Bundler::GemNotFound.new.status_code }
- let(:expected) { <<-EOS.strip }
+ let(:expected) { "" }
+ let(:expected_err) { <<-EOS.strip }
\e[31mCould not find gem 'rack (= 2)' in any of the gem sources listed in your Gemfile.\e[0m
\e[33mRun `bundle install` to install missing gems.\e[0m
EOS
@@ -655,7 +701,7 @@ RSpec.describe "bundle exec" do
it_behaves_like "it runs"
end
- context "when Bundler.setup fails", :bundler => "2" do
+ context "when Bundler.setup fails", :bundler => "3" do
before do
gemfile <<-G
gem 'rack', '2'
@@ -664,7 +710,8 @@ RSpec.describe "bundle exec" do
end
let(:exit_code) { Bundler::GemNotFound.new.status_code }
- let(:expected) { <<-EOS.strip }
+ let(:expected) { "" }
+ let(:expected_err) { <<-EOS.strip }
\e[31mCould not find gem 'rack (= 2)' in locally installed gems.
The source contains 'rack' at: 1.0.0\e[0m
\e[33mRun `bundle install` to install missing gems.\e[0m
@@ -685,7 +732,7 @@ The source contains 'rack' at: 1.0.0\e[0m
let(:process) { "PROCESS: ruby #{path} arg1 arg2" }
before do
- bundle "config disable_exec_load true"
+ bundle "config set disable_exec_load true"
end
it_behaves_like "it runs"
@@ -709,21 +756,13 @@ __FILE__: #{path.to_s.inspect}
context "when the path is relative" do
let(:path) { super().relative_path_from(bundled_app) }
- if LessThanProc.with(RUBY_VERSION).call("1.9")
- pending "relative paths have ./ __FILE__"
- else
- it_behaves_like "it runs"
- end
+ it_behaves_like "it runs"
end
context "when the path is relative with a leading ./" do
let(:path) { Pathname.new("./#{super().relative_path_from(Pathname.pwd)}") }
- if LessThanProc.with(RUBY_VERSION).call("< 1.9")
- pending "relative paths with ./ have absolute __FILE__"
- else
- it_behaves_like "it runs"
- end
+ pending "relative paths with ./ have absolute __FILE__"
end
end
@@ -751,7 +790,7 @@ __FILE__: #{path.to_s.inspect}
end
RUBY
- it "receives the signal", :ruby => ">= 1.9.3" do
+ it "receives the signal" do
bundle!("exec #{path}") do |_, o, thr|
o.gets # Consumes 'Started' and ensures that thread has started
Process.kill("INT", thr.pid)
@@ -797,9 +836,7 @@ __FILE__: #{path.to_s.inspect}
bundle :install, :system_bundler => true, :path => "vendor/bundler"
end
- it "overrides disable_shared_gems so bundler can be found" do
- skip "bundler 1.16.x is not support with Ruby 2.6 on Travis CI" if RUBY_VERSION >= "2.6"
-
+ it "overrides disable_shared_gems so bundler can be found", :ruby_repo, :rubygems => ">= 2.6.2" do
system_gems :bundler
file = bundled_app("file_that_bundle_execs.rb")
create_file(file, <<-RB)
@@ -849,7 +886,7 @@ __FILE__: #{path.to_s.inspect}
# sanity check that we get the newer, custom version without bundler
sys_exec("#{Gem.ruby} #{file}")
- expect(last_command.stderr).to include("custom openssl should not be loaded")
+ expect(err).to include("custom openssl should not be loaded")
end
end
end
diff --git a/spec/commands/help_spec.rb b/spec/commands/help_spec.rb
index 56b1b6f722..f4f90b9347 100644
--- a/spec/commands/help_spec.rb
+++ b/spec/commands/help_spec.rb
@@ -1,15 +1,6 @@
# frozen_string_literal: true
RSpec.describe "bundle help" do
- # RubyGems 1.4+ no longer load gem plugins so this test is no longer needed
- it "complains if older versions of bundler are installed", :rubygems => "< 1.4" do
- system_gems "bundler-0.8.1"
-
- bundle "help"
- expect(err).to include("older than 0.9")
- expect(err).to include("running `gem cleanup bundler`.")
- end
-
it "uses mann when available" do
with_fake_man do
bundle "help gemfile"
@@ -81,7 +72,7 @@ RSpec.describe "bundle help" do
with_fake_man do
bundle "instill -h"
end
- expect(out).to include('Could not find command "instill".')
+ expect(err).to include('Could not find command "instill".')
end
it "is called when only using the --help flag" do
diff --git a/spec/commands/info_spec.rb b/spec/commands/info_spec.rb
index a9ab8fc210..f0f4b5f87d 100644
--- a/spec/commands/info_spec.rb
+++ b/spec/commands/info_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
RSpec.describe "bundle info" do
- context "info from specific gem in gemfile" do
+ context "with a standard Gemfile" do
before do
install_gemfile <<-G
source "file://#{gem_repo1}"
@@ -9,23 +9,39 @@ RSpec.describe "bundle info" do
G
end
- it "prints information about the current gem" do
+ it "creates a Gemfile.lock when invoked with a gem name" do
+ FileUtils.rm("Gemfile.lock")
+
+ bundle "info rails"
+
+ expect(bundled_app("Gemfile.lock")).to exist
+ end
+
+ it "prints information if gem exists in bundle" do
bundle "info rails"
expect(out).to include "* rails (2.3.2)
\tSummary: This is just a fake gem for testing
-\tHomepage: http://example.com"
- expect(out).to match(%r{Path\: .*\/rails\-2\.3\.2})
+\tHomepage: http://example.com
+\tPath: #{default_bundle_path("gems", "rails-2.3.2")}"
end
- context "given a gem that is not installed" do
- it "prints missing gem error" do
- bundle "info foo"
- expect(out).to eq "Could not find gem 'foo'."
- end
+ it "prints path if gem exists in bundle" do
+ bundle "info rails --path"
+ expect(out).to eq(default_bundle_path("gems", "rails-2.3.2").to_s)
+ end
+
+ it "prints the path to the running bundler" do
+ bundle "info bundler --path"
+ expect(out).to eq(root.to_s)
+ end
+
+ it "complains if gem not in bundle" do
+ bundle "info missing"
+ expect(err).to eq("Could not find gem 'missing'.")
end
context "given a default gem shippped in ruby", :ruby_repo do
- it "prints information about the default gem", :if => (RUBY_VERSION >= "2.0") do
+ it "prints information about the default gem" do
bundle "info rdoc"
expect(out).to include("* rdoc")
expect(out).to include("Default Gem: yes")
@@ -34,7 +50,7 @@ RSpec.describe "bundle info" do
context "when gem does not have homepage" do
before do
- build_repo1 do
+ build_repo2 do
build_gem "rails", "2.3.2" do |s|
s.executables = "rails"
s.summary = "Just another test gem"
@@ -46,12 +62,84 @@ RSpec.describe "bundle info" do
expect(out).to_not include("Homepage:")
end
end
+ end
+
+ context "with a git repo in the Gemfile" do
+ before :each do
+ @git = build_git "foo", "1.0"
+ end
+
+ it "prints out git info" do
+ install_gemfile <<-G
+ gem "foo", :git => "#{lib_path("foo-1.0")}"
+ G
+ expect(the_bundle).to include_gems "foo 1.0"
+
+ bundle "info foo"
+ expect(out).to include("foo (1.0 #{@git.ref_for("master", 6)}")
+ end
- context "given --path option" do
- it "prints the path to the gem" do
- bundle "info rails"
- expect(out).to match(%r{.*\/rails\-2\.3\.2})
+ it "prints out branch names other than master" do
+ update_git "foo", :branch => "omg" do |s|
+ s.write "lib/foo.rb", "FOO = '1.0.omg'"
end
+ @revision = revision_for(lib_path("foo-1.0"))[0...6]
+
+ install_gemfile <<-G
+ gem "foo", :git => "#{lib_path("foo-1.0")}", :branch => "omg"
+ G
+ expect(the_bundle).to include_gems "foo 1.0.omg"
+
+ bundle "info foo"
+ expect(out).to include("foo (1.0 #{@git.ref_for("omg", 6)}")
+ end
+
+ it "doesn't print the branch when tied to a ref" do
+ sha = revision_for(lib_path("foo-1.0"))
+ install_gemfile <<-G
+ gem "foo", :git => "#{lib_path("foo-1.0")}", :ref => "#{sha}"
+ G
+
+ bundle "info foo"
+ expect(out).to include("foo (1.0 #{sha[0..6]})")
+ end
+
+ it "handles when a version is a '-' prerelease", :rubygems => "2.1" do
+ @git = build_git("foo", "1.0.0-beta.1", :path => lib_path("foo"))
+ install_gemfile <<-G
+ gem "foo", "1.0.0-beta.1", :git => "#{lib_path("foo")}"
+ G
+ expect(the_bundle).to include_gems "foo 1.0.0.pre.beta.1"
+
+ bundle! "info foo"
+ expect(out).to include("foo (1.0.0.pre.beta.1")
+ end
+ end
+
+ context "with a valid regexp for gem name", :ruby_repo do
+ it "presents alternatives" do
+ install_gemfile <<-G
+ source "file://#{gem_repo1}"
+ gem "rack"
+ gem "rack-obama"
+ G
+
+ bundle "info rac"
+ expect(out).to eq "1 : rack\n2 : rack-obama\n0 : - exit -\n>"
+ end
+ end
+
+ context "with an invalid regexp for gem name" do
+ it "does not find the gem" do
+ install_gemfile <<-G
+ source "file://#{gem_repo1}"
+ gem "rails"
+ G
+
+ invalid_regexp = "[]"
+
+ bundle "info #{invalid_regexp}"
+ expect(err).to include("Could not find gem '#{invalid_regexp}'.")
end
end
end
diff --git a/spec/commands/init_spec.rb b/spec/commands/init_spec.rb
index 9b5bd95814..7960ce85bd 100644
--- a/spec/commands/init_spec.rb
+++ b/spec/commands/init_spec.rb
@@ -1,19 +1,13 @@
# frozen_string_literal: true
RSpec.describe "bundle init" do
- it "generates a Gemfile", :bundler => "< 2" do
+ it "generates a Gemfile" do
bundle! :init
expect(out).to include("Writing new Gemfile")
expect(bundled_app("Gemfile")).to be_file
end
- it "generates a gems.rb", :bundler => "2" do
- bundle! :init
- expect(out).to include("Writing new gems.rb")
- expect(bundled_app("gems.rb")).to be_file
- end
-
- context "when a Gemfile already exists", :bundler => "< 2" do
+ context "when a Gemfile already exists" do
before do
create_file "Gemfile", <<-G
gem "rails"
@@ -26,28 +20,11 @@ RSpec.describe "bundle init" do
it "notifies the user that an existing Gemfile already exists" do
bundle :init
- expect(out).to include("Gemfile already exists")
+ expect(err).to include("Gemfile already exists")
end
end
- context "when gems.rb already exists", :bundler => ">= 2" do
- before do
- create_file("gems.rb", <<-G)
- gem "rails"
- G
- end
-
- it "does not change existing Gemfiles" do
- expect { bundle :init }.not_to change { File.read(bundled_app("gems.rb")) }
- end
-
- it "notifies the user that an existing gems.rb already exists" do
- bundle :init
- expect(out).to include("gems.rb already exists")
- end
- end
-
- context "when a Gemfile exists in a parent directory", :bundler => "< 2" do
+ context "when a Gemfile exists in a parent directory" do
let(:subdir) { "child_dir" }
it "lets users generate a Gemfile in a child directory" do
@@ -77,29 +54,12 @@ RSpec.describe "bundle init" do
bundle :init
end
- expect(out).to include("directory is not writable")
+ expect(err).to include("directory is not writable")
expect(Dir[bundled_app("#{subdir}/*")]).to be_empty
end
end
- context "when a gems.rb file exists in a parent directory", :bundler => ">= 2" do
- let(:subdir) { "child_dir" }
-
- it "lets users generate a Gemfile in a child directory" do
- bundle! :init
-
- FileUtils.mkdir bundled_app(subdir)
-
- Dir.chdir bundled_app(subdir) do
- bundle! :init
- end
-
- expect(out).to include("Writing new gems.rb")
- expect(bundled_app("#{subdir}/gems.rb")).to be_file
- end
- end
-
- context "given --gemspec option", :bundler => "< 2" do
+ context "given --gemspec option" do
let(:spec_file) { tmp.join("test.gemspec") }
it "should generate from an existing gemspec" do
@@ -115,11 +75,7 @@ RSpec.describe "bundle init" do
bundle :init, :gemspec => spec_file
- gemfile = if Bundler::VERSION[0, 2] == "1."
- bundled_app("Gemfile").read
- else
- bundled_app("gems.rb").read
- end
+ gemfile = bundled_app("Gemfile").read
expect(gemfile).to match(%r{source 'https://rubygems.org'})
expect(gemfile.scan(/gem "rack", "= 1.0.1"/).size).to eq(1)
expect(gemfile.scan(/gem "rspec", "= 1.2"/).size).to eq(1)
@@ -138,15 +94,55 @@ RSpec.describe "bundle init" do
end
bundle :init, :gemspec => spec_file
- expect(last_command.bundler_err).to include("There was an error while loading `test.gemspec`")
+ expect(err).to include("There was an error while loading `test.gemspec`")
end
end
end
context "when init_gems_rb setting is enabled" do
- before { bundle "config init_gems_rb true" }
+ before { bundle "config set init_gems_rb true" }
+
+ it "generates a gems.rb" do
+ bundle! :init
+ expect(out).to include("Writing new gems.rb")
+ expect(bundled_app("gems.rb")).to be_file
+ end
+
+ context "when gems.rb already exists" do
+ before do
+ create_file("gems.rb", <<-G)
+ gem "rails"
+ G
+ end
+
+ it "does not change existing Gemfiles" do
+ expect { bundle :init }.not_to change { File.read(bundled_app("gems.rb")) }
+ end
+
+ it "notifies the user that an existing gems.rb already exists" do
+ bundle :init
+ expect(err).to include("gems.rb already exists")
+ end
+ end
+
+ context "when a gems.rb file exists in a parent directory" do
+ let(:subdir) { "child_dir" }
+
+ it "lets users generate a Gemfile in a child directory" do
+ bundle! :init
+
+ FileUtils.mkdir bundled_app(subdir)
+
+ Dir.chdir bundled_app(subdir) do
+ bundle! :init
+ end
+
+ expect(out).to include("Writing new gems.rb")
+ expect(bundled_app("#{subdir}/gems.rb")).to be_file
+ end
+ end
- context "given --gemspec option", :bundler => "< 2" do
+ context "given --gemspec option" do
let(:spec_file) { tmp.join("test.gemspec") }
before do
diff --git a/spec/commands/inject_spec.rb b/spec/commands/inject_spec.rb
index b7ffc89a34..da31849be7 100644
--- a/spec/commands/inject_spec.rb
+++ b/spec/commands/inject_spec.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-RSpec.describe "bundle inject", :bundler => "< 2" do
+RSpec.describe "bundle inject", :bundler => "< 3" do
before :each do
gemfile <<-G
source "file://#{gem_repo1}"
@@ -37,14 +37,14 @@ RSpec.describe "bundle inject", :bundler => "< 2" do
context "with injected gems already in the Gemfile" do
it "doesn't add existing gems" do
bundle "inject 'rack' '> 0'"
- expect(out).to match(/cannot specify the same gem twice/i)
+ expect(err).to match(/cannot specify the same gem twice/i)
end
end
context "incorrect arguments" do
it "fails when more than 2 arguments are passed" do
bundle "inject gem_name 1 v"
- expect(out).to eq(<<-E.strip)
+ expect(err).to eq(<<-E.strip)
ERROR: "bundle inject" was called with arguments ["gem_name", "1", "v"]
Usage: "bundle inject GEM VERSION"
E
@@ -79,10 +79,10 @@ Usage: "bundle inject GEM VERSION"
context "when frozen" do
before do
bundle "install"
- if Bundler.feature_flag.bundler_2_mode?
- bundle! "config --local deployment true"
+ if Bundler.feature_flag.bundler_3_mode?
+ bundle! "config set --local deployment true"
else
- bundle! "config --local frozen true"
+ bundle! "config set --local frozen true"
end
end
@@ -109,7 +109,7 @@ Usage: "bundle inject GEM VERSION"
gem "rack-obama"
G
bundle "inject 'rack' '> 0'"
- expect(out).to match(/trying to install in deployment mode after changing/)
+ expect(err).to match(/trying to install in deployment mode after changing/)
expect(bundled_app("Gemfile.lock").read).not_to match(/rack-obama/)
end
diff --git a/spec/commands/install_spec.rb b/spec/commands/install_spec.rb
index 394f672fef..1a027a77c9 100644
--- a/spec/commands/install_spec.rb
+++ b/spec/commands/install_spec.rb
@@ -8,7 +8,7 @@ RSpec.describe "bundle install with gem sources" do
G
bundle :install
- expect(out).to match(/no dependencies/)
+ expect(err).to match(/no dependencies/)
end
it "does not make a lockfile if the install fails" do
@@ -16,7 +16,7 @@ RSpec.describe "bundle install with gem sources" do
raise StandardError, "FAIL"
G
- expect(last_command.bundler_err).to include('StandardError, "FAIL"')
+ expect(err).to include('StandardError, "FAIL"')
expect(bundled_app("Gemfile.lock")).not_to exist
end
@@ -29,7 +29,7 @@ RSpec.describe "bundle install with gem sources" do
expect(bundled_app("Gemfile.lock")).to exist
end
- it "does not create ./.bundle by default", :bundler => "< 2" do
+ it "does not create ./.bundle by default", :bundler => "< 3" do
gemfile <<-G
source "file://#{gem_repo1}"
gem "rack"
@@ -275,14 +275,14 @@ RSpec.describe "bundle install with gem sources" do
expect(the_bundle).to include_gems "rack 1.0"
end
- it "allows running bundle install --system without deleting foo", :bundler => "< 2" do
+ it "allows running bundle install --system without deleting foo", :bundler => "< 3" do
bundle "install", forgotten_command_line_options(:path => "vendor")
bundle "install", forgotten_command_line_options(:system => true)
FileUtils.rm_rf(bundled_app("vendor"))
expect(the_bundle).to include_gems "rack 1.0"
end
- it "allows running bundle install --system after deleting foo", :bundler => "< 2" do
+ it "allows running bundle install --system after deleting foo", :bundler => "< 3" do
bundle "install", forgotten_command_line_options(:path => "vendor")
FileUtils.rm_rf(bundled_app("vendor"))
bundle "install", forgotten_command_line_options(:system => true)
@@ -290,7 +290,7 @@ RSpec.describe "bundle install with gem sources" do
end
end
- it "finds gems in multiple sources", :bundler => "< 2" do
+ it "finds gems in multiple sources", :bundler => "< 3" do
build_repo2
update_repo2
@@ -311,7 +311,7 @@ RSpec.describe "bundle install with gem sources" do
G
bundle :install
- expect(out).to include("Your Gemfile has no gem server sources")
+ expect(err).to include("Your Gemfile has no gem server sources")
end
it "creates a Gemfile.lock on a blank Gemfile" do
@@ -329,9 +329,9 @@ RSpec.describe "bundle install with gem sources" do
gem "rack"
G
- expect(out).to include("Your Gemfile lists the gem rack (>= 0) more than once.")
- expect(out).to include("Remove any duplicate entries and specify the gem only once (per group).")
- expect(out).to include("While it's not a problem now, it could cause errors if you change the version of one of them later.")
+ expect(err).to include("Your Gemfile lists the gem rack (>= 0) more than once.")
+ expect(err).to include("Remove any duplicate entries and specify the gem only once (per group).")
+ expect(err).to include("While it's not a problem now, it could cause errors if you change the version of one of them later.")
end
it "with same versions" do
@@ -341,9 +341,9 @@ RSpec.describe "bundle install with gem sources" do
gem "rack", "1.0"
G
- expect(out).to include("Your Gemfile lists the gem rack (= 1.0) more than once.")
- expect(out).to include("Remove any duplicate entries and specify the gem only once (per group).")
- expect(out).to include("While it's not a problem now, it could cause errors if you change the version of one of them later.")
+ expect(err).to include("Your Gemfile lists the gem rack (= 1.0) more than once.")
+ expect(err).to include("Remove any duplicate entries and specify the gem only once (per group).")
+ expect(err).to include("While it's not a problem now, it could cause errors if you change the version of one of them later.")
end
end
@@ -355,8 +355,8 @@ RSpec.describe "bundle install with gem sources" do
gem "rack", "1.0"
G
- expect(out).to include("You cannot specify the same gem twice with different version requirements")
- expect(out).to include("You specified: rack (>= 0) and rack (= 1.0).")
+ expect(err).to include("You cannot specify the same gem twice with different version requirements")
+ expect(err).to include("You specified: rack (>= 0) and rack (= 1.0).")
end
it "when different versions of both dependencies are specified" do
@@ -366,25 +366,25 @@ RSpec.describe "bundle install with gem sources" do
gem "rack", "1.1"
G
- expect(out).to include("You cannot specify the same gem twice with different version requirements")
- expect(out).to include("You specified: rack (= 1.0) and rack (= 1.1).")
+ expect(err).to include("You cannot specify the same gem twice with different version requirements")
+ expect(err).to include("You specified: rack (= 1.0) and rack (= 1.1).")
end
end
it "gracefully handles error when rubygems server is unavailable" do
install_gemfile <<-G, :artifice => nil
source "file://#{gem_repo1}"
- source "http://localhost:9384" do
+ source "http://0.0.0.0:9384" do
gem 'foo'
end
G
bundle :install, :artifice => nil
- expect(out).to include("Could not fetch specs from http://localhost:9384/")
- expect(out).not_to include("file://")
+ expect(err).to include("Could not fetch specs from http://0.0.0.0:9384/")
+ expect(err).not_to include("file://")
end
- it "fails gracefully when downloading an invalid specification from the full index", :rubygems => "2.5" do
+ it "fails gracefully when downloading an invalid specification from the full index" do
build_repo2 do
build_gem "ajp-rails", "0.0.0", :gemspec => false, :skip_validation => true do |s|
bad_deps = [["ruby-ajp", ">= 0.2.0"], ["rails", ">= 0.14"]]
@@ -404,7 +404,7 @@ RSpec.describe "bundle install with gem sources" do
G
expect(last_command.stdboth).not_to match(/Error Report/i)
- expect(last_command.bundler_err).to include("An error occurred while installing ajp-rails (0.0.0), and Bundler cannot continue.").
+ expect(err).to include("An error occurred while installing ajp-rails (0.0.0), and Bundler cannot continue.").
and include(normalize_uri_file("Make sure that `gem install ajp-rails -v '0.0.0' --source 'file://localhost#{gem_repo2}/'` succeeds before bundling."))
end
@@ -442,7 +442,7 @@ RSpec.describe "bundle install with gem sources" do
::RUBY_VERSION = '2.0.1'
ruby '~> 2.2'
G
- expect(out).to include("Your Ruby version is 2.0.1, but your Gemfile specified ~> 2.2")
+ expect(err).to include("Your Ruby version is 2.0.1, but your Gemfile specified ~> 2.2")
end
end
@@ -529,8 +529,8 @@ RSpec.describe "bundle install with gem sources" do
G
bundle :install, :quiet => true
- expect(out).to include("Could not find gem 'rack'")
- expect(out).to_not include("Your Gemfile has no gem server sources")
+ expect(err).to include("Could not find gem 'rack'")
+ expect(err).to_not include("Your Gemfile has no gem server sources")
end
end
@@ -547,8 +547,8 @@ RSpec.describe "bundle install with gem sources" do
FileUtils.chmod(0o500, bundled_app("vendor"))
bundle :install, forgotten_command_line_options(:path => "vendor")
- expect(out).to include(bundled_app("vendor").to_s)
- expect(out).to include("grant write permissions")
+ expect(err).to include(bundled_app("vendor").to_s)
+ expect(err).to include("grant write permissions")
end
end
@@ -577,10 +577,10 @@ RSpec.describe "bundle install with gem sources" do
G
end
- it "should display a helpful messag explaining how to fix it" do
+ it "should display a helpful message explaining how to fix it" do
bundle :install, :env => { "BUNDLE_RUBYGEMS__ORG" => "user:pass{word" }
expect(exitstatus).to eq(17) if exitstatus
- expect(out).to eq("Please CGI escape your usernames and passwords before " \
+ expect(err).to eq("Please CGI escape your usernames and passwords before " \
"setting them for authentication.")
end
end
diff --git a/spec/commands/licenses_spec.rb b/spec/commands/licenses_spec.rb
index 144931fb27..21fd8eaf2f 100644
--- a/spec/commands/licenses_spec.rb
+++ b/spec/commands/licenses_spec.rb
@@ -12,7 +12,7 @@ RSpec.describe "bundle licenses" do
it "prints license information for all gems in the bundle" do
bundle "licenses"
- expect(out).to include("bundler: Unknown")
+ expect(err).to include("bundler: Unknown")
expect(out).to include("with_license: MIT")
end
@@ -24,7 +24,7 @@ RSpec.describe "bundle licenses" do
gem "foo"
G
- bundle "config auto_install 1"
+ bundle "config set auto_install 1"
bundle :licenses
expect(out).to include("Installing foo 1.0")
end
diff --git a/spec/commands/list_spec.rb b/spec/commands/list_spec.rb
index 5305176c65..346b47517e 100644
--- a/spec/commands/list_spec.rb
+++ b/spec/commands/list_spec.rb
@@ -1,20 +1,11 @@
# frozen_string_literal: true
-RSpec.describe "bundle list", :bundler => "2" do
- before do
- install_gemfile <<-G
- source "file://#{gem_repo1}"
-
- gem "rack"
- gem "rspec", :group => [:test]
- G
- end
-
+RSpec.describe "bundle list" do
context "with name-only and paths option" do
it "raises an error" do
bundle "list --name-only --paths"
- expect(out).to eq "The `--name-only` and `--paths` options cannot be used together"
+ expect(err).to eq "The `--name-only` and `--paths` options cannot be used together"
end
end
@@ -22,11 +13,20 @@ RSpec.describe "bundle list", :bundler => "2" do
it "raises an error" do
bundle "list --without-group dev --only-group test"
- expect(out).to eq "The `--only-group` and `--without-group` options cannot be used together"
+ expect(err).to eq "The `--only-group` and `--without-group` options cannot be used together"
end
end
describe "with without-group option" do
+ before do
+ install_gemfile <<-G
+ source "file://#{gem_repo1}"
+
+ gem "rack"
+ gem "rspec", :group => [:test]
+ G
+ end
+
context "when group is present" do
it "prints the gems not in the specified group" do
bundle! "list --without-group test"
@@ -40,12 +40,21 @@ RSpec.describe "bundle list", :bundler => "2" do
it "raises an error" do
bundle "list --without-group random"
- expect(out).to eq "`random` group could not be found."
+ expect(err).to eq "`random` group could not be found."
end
end
end
describe "with only-group option" do
+ before do
+ install_gemfile <<-G
+ source "file://#{gem_repo1}"
+
+ gem "rack"
+ gem "rspec", :group => [:test]
+ G
+ end
+
context "when group is present" do
it "prints the gems in the specified group" do
bundle! "list --only-group default"
@@ -59,12 +68,21 @@ RSpec.describe "bundle list", :bundler => "2" do
it "raises an error" do
bundle "list --only-group random"
- expect(out).to eq "`random` group could not be found."
+ expect(err).to eq "`random` group could not be found."
end
end
end
context "with name-only option" do
+ before do
+ install_gemfile <<-G
+ source "file://#{gem_repo1}"
+
+ gem "rack"
+ gem "rspec", :group => [:test]
+ G
+ end
+
it "prints only the name of the gems in the bundle" do
bundle "list --name-only"
@@ -82,7 +100,6 @@ RSpec.describe "bundle list", :bundler => "2" do
build_git "git_test", "1.0.0", :path => lib_path("git_test")
build_lib("gemspec_test", :path => tmp.join("gemspec_test")) do |s|
- s.write("Gemfile", "source :rubygems\ngemspec")
s.add_dependency "bar", "=1.0.0"
end
@@ -93,8 +110,6 @@ RSpec.describe "bundle list", :bundler => "2" do
gem "git_test", :git => "#{lib_path("git_test")}"
gemspec :path => "#{tmp.join("gemspec_test")}"
G
-
- bundle! "install"
end
it "prints the path of each gem in the bundle" do
@@ -119,13 +134,35 @@ RSpec.describe "bundle list", :bundler => "2" do
end
end
- it "lists gems installed in the bundle" do
- bundle "list"
- expect(out).to include(" * rack (1.0.0)")
+ context "without options" do
+ before do
+ install_gemfile <<-G
+ source "file://#{gem_repo1}"
+
+ gem "rack"
+ gem "rspec", :group => [:test]
+ G
+ end
+
+ it "lists gems installed in the bundle" do
+ bundle "list"
+ expect(out).to include(" * rack (1.0.0)")
+ end
end
- it "aliases the ls command to list" do
- bundle "ls"
- expect(out).to include("Gems included by the bundle")
+ context "when using the ls alias" do
+ before do
+ install_gemfile <<-G
+ source "file://#{gem_repo1}"
+
+ gem "rack"
+ gem "rspec", :group => [:test]
+ G
+ end
+
+ it "runs the list command" do
+ bundle "ls"
+ expect(out).to include("Gems included by the bundle")
+ end
end
end
diff --git a/spec/commands/lock_spec.rb b/spec/commands/lock_spec.rb
index d99ddaf294..7aaf5c178e 100644
--- a/spec/commands/lock_spec.rb
+++ b/spec/commands/lock_spec.rb
@@ -38,8 +38,8 @@ RSpec.describe "bundle lock" do
actionpack (= 2.3.2)
activerecord (= 2.3.2)
activeresource (= 2.3.2)
- rake (= 10.0.2)
- rake (10.0.2)
+ rake (= 12.3.2)
+ rake (12.3.2)
with_license (1.0)
PLATFORMS
@@ -86,7 +86,7 @@ RSpec.describe "bundle lock" do
it "does not fetch remote specs when using the --local option" do
bundle "lock --update --local"
- expect(out).to match(/sources listed in your Gemfile|installed locally/)
+ expect(err).to match(/sources listed in your Gemfile|installed locally/)
end
it "works with --gemfile flag" do
@@ -133,7 +133,7 @@ RSpec.describe "bundle lock" do
end
it "update specific gems using --update" do
- lockfile @lockfile.gsub("2.3.2", "2.3.1").gsub("10.0.2", "10.0.1")
+ lockfile @lockfile.gsub("2.3.2", "2.3.1").gsub("12.3.2", "10.0.1")
bundle "lock --update rails rake"
@@ -144,7 +144,7 @@ RSpec.describe "bundle lock" do
lockfile @lockfile
bundle "lock --update blahblah"
- expect(out).to eq("Could not find gem 'blahblah'.")
+ expect(err).to eq("Could not find gem 'blahblah'.")
expect(read_lockfile).to eq(@lockfile)
end
@@ -225,7 +225,7 @@ RSpec.describe "bundle lock" do
it "warns when adding an unknown platform" do
bundle "lock --add-platform foobarbaz"
- expect(out).to include("The platform `foobarbaz` is unknown to RubyGems and adding it will likely lead to resolution errors")
+ expect(err).to include("The platform `foobarbaz` is unknown to RubyGems and adding it will likely lead to resolution errors")
end
it "allows removing platforms" do
@@ -242,7 +242,7 @@ RSpec.describe "bundle lock" do
it "errors when removing all platforms" do
bundle "lock --remove-platform #{local_platforms.join(" ")}"
- expect(last_command.bundler_err).to include("Removing all platforms from the bundle is not allowed")
+ expect(err).to include("Removing all platforms from the bundle is not allowed")
end
# from https://github.com/bundler/bundler/issues/4896
diff --git a/spec/commands/newgem_spec.rb b/spec/commands/newgem_spec.rb
index 2914ba66c5..dcd36d3fe4 100644
--- a/spec/commands/newgem_spec.rb
+++ b/spec/commands/newgem_spec.rb
@@ -162,7 +162,7 @@ RSpec.describe "bundle gem" do
load_paths = [lib, spec]
load_path_str = "-I#{load_paths.join(File::PATH_SEPARATOR)}"
- sys_exec "PATH=\"\" #{Gem.ruby} #{load_path_str} #{bindir.join("bundle")} gem #{gem_name}"
+ sys_exec "#{Gem.ruby} #{load_path_str} #{bindir.join("bundle")} gem #{gem_name}", "PATH" => ""
end
it "creates the gem without the need for git" do
@@ -178,7 +178,7 @@ RSpec.describe "bundle gem" do
end
end
- it "generates a valid gemspec" do
+ it "generates a valid gemspec", :ruby_repo do
in_app_root
bundle! "gem newgem --bin"
@@ -197,7 +197,7 @@ RSpec.describe "bundle gem" do
end
Dir.chdir(bundled_app("newgem")) do
- gems = ["rake-10.0.2", :bundler]
+ gems = ["rake-12.3.2", :bundler]
# for Ruby core repository, Ruby 2.6+ has bundler as standard library.
gems.delete(:bundler) if ruby_core?
system_gems gems, :path => :bundle_path
@@ -289,7 +289,7 @@ RSpec.describe "bundle gem" do
it_should_behave_like "git config is absent"
end
- it "sets gemspec metadata['allowed_push_host']", :rubygems => "2.0" do
+ it "sets gemspec metadata['allowed_push_host']" do
expect(generated_gem.gemspec.metadata["allowed_push_host"]).
to match(/mygemserver\.com/)
end
@@ -303,7 +303,7 @@ RSpec.describe "bundle gem" do
end
it "runs rake without problems" do
- system_gems ["rake-10.0.2"]
+ system_gems ["rake-12.3.2"]
rakefile = strip_whitespace <<-RAKEFILE
task :default do
@@ -381,7 +381,7 @@ RSpec.describe "bundle gem" do
expect(bundled_app("test_gem/spec/spec_helper.rb")).to exist
end
- it "depends on a specific version of rspec", :rubygems => ">= 1.8.1" do
+ it "depends on a specific version of rspec" do
rspec_dep = generated_gem.gemspec.development_dependencies.find {|d| d.name == "rspec" }
expect(rspec_dep).to be_specific
end
@@ -399,7 +399,7 @@ RSpec.describe "bundle gem" do
before do
reset!
in_app_root
- bundle "config gem.test rspec"
+ bundle "config set gem.test rspec"
bundle "gem #{gem_name}"
end
@@ -414,7 +414,7 @@ RSpec.describe "bundle gem" do
before do
reset!
in_app_root
- bundle "config gem.test rspec"
+ bundle "config set gem.test rspec"
bundle "gem #{gem_name} --test=minitest"
end
@@ -431,7 +431,7 @@ RSpec.describe "bundle gem" do
bundle "gem #{gem_name} --test=minitest"
end
- it "depends on a specific version of minitest", :rubygems => ">= 1.8.1" do
+ it "depends on a specific version of minitest" do
rspec_dep = generated_gem.gemspec.development_dependencies.find {|d| d.name == "minitest" }
expect(rspec_dep).to be_specific
end
@@ -458,7 +458,7 @@ RSpec.describe "bundle gem" do
before do
reset!
in_app_root
- bundle "config gem.test minitest"
+ bundle "config set gem.test minitest"
bundle "gem #{gem_name}"
end
@@ -585,7 +585,7 @@ RSpec.describe "bundle gem" do
end
it "runs rake without problems" do
- system_gems ["rake-10.0.2"]
+ system_gems ["rake-12.3.2"]
rakefile = strip_whitespace <<-RAKEFILE
task :default do
@@ -770,22 +770,22 @@ RSpec.describe "bundle gem" do
it "fails gracefully with a ." do
bundle "gem foo.gemspec"
- expect(last_command.bundler_err).to end_with("Invalid gem name foo.gemspec -- `Foo.gemspec` is an invalid constant name")
+ expect(err).to end_with("Invalid gem name foo.gemspec -- `Foo.gemspec` is an invalid constant name")
end
it "fails gracefully with a ^" do
bundle "gem ^"
- expect(last_command.bundler_err).to end_with("Invalid gem name ^ -- `^` is an invalid constant name")
+ expect(err).to end_with("Invalid gem name ^ -- `^` is an invalid constant name")
end
it "fails gracefully with a space" do
bundle "gem 'foo bar'"
- expect(last_command.bundler_err).to end_with("Invalid gem name foo bar -- `Foo bar` is an invalid constant name")
+ expect(err).to end_with("Invalid gem name foo bar -- `Foo bar` is an invalid constant name")
end
it "fails gracefully when multiple names are passed" do
bundle "gem foo bar baz"
- expect(last_command.bundler_err).to eq(<<-E.strip)
+ expect(err).to eq(<<-E.strip)
ERROR: "bundle gem" was called with arguments ["foo", "bar", "baz"]
Usage: "bundle gem NAME [OPTIONS]"
E
@@ -802,22 +802,22 @@ Usage: "bundle gem NAME [OPTIONS]"
context "with an existing const name" do
subject { "gem" }
- it { expect(out).to include("Invalid gem name #{subject}") }
+ it { expect(err).to include("Invalid gem name #{subject}") }
end
context "with an existing hyphenated const name" do
subject { "gem-specification" }
- it { expect(out).to include("Invalid gem name #{subject}") }
+ it { expect(err).to include("Invalid gem name #{subject}") }
end
context "starting with an existing const name" do
subject { "gem-somenewconstantname" }
- it { expect(out).not_to include("Invalid gem name #{subject}") }
+ it { expect(err).not_to include("Invalid gem name #{subject}") }
end
context "ending with an existing const name" do
subject { "somenewconstantname-gem" }
- it { expect(out).not_to include("Invalid gem name #{subject}") }
+ it { expect(err).not_to include("Invalid gem name #{subject}") }
end
end
@@ -850,7 +850,7 @@ Usage: "bundle gem NAME [OPTIONS]"
it "asks about MIT license" do
global_config "BUNDLE_GEM__TEST" => "false", "BUNDLE_GEM__COC" => "false"
- bundle :config
+ bundle "config list"
bundle "gem foobar" do |input, _, _|
input.puts "yes"
@@ -876,7 +876,7 @@ Usage: "bundle gem NAME [OPTIONS]"
FileUtils.touch("conflict-foobar")
end
bundle "gem conflict-foobar"
- expect(last_command.bundler_err).to include("Errno::ENOTDIR")
+ expect(err).to include("Errno::ENOTDIR")
expect(exitstatus).to eql(32) if exitstatus
end
end
@@ -887,7 +887,7 @@ Usage: "bundle gem NAME [OPTIONS]"
FileUtils.mkdir_p("conflict-foobar/Gemfile")
end
bundle! "gem conflict-foobar"
- expect(last_command.stdout).to include("file_clash conflict-foobar/Gemfile").
+ expect(out).to include("file_clash conflict-foobar/Gemfile").
and include "Initializing git repo in #{bundled_app("conflict-foobar")}"
end
end
diff --git a/spec/commands/open_spec.rb b/spec/commands/open_spec.rb
index 5cab846fb5..659445da33 100644
--- a/spec/commands/open_spec.rb
+++ b/spec/commands/open_spec.rb
@@ -30,7 +30,7 @@ RSpec.describe "bundle open" do
it "complains if gem not in bundle" do
bundle "open missing", :env => { "EDITOR" => "echo editor", "VISUAL" => "", "BUNDLER_EDITOR" => "" }
- expect(out).to match(/could not find gem 'missing'/i)
+ expect(err).to match(/could not find gem 'missing'/i)
end
it "does not blow up if the gem to open does not have a Gemfile" do
@@ -48,7 +48,7 @@ RSpec.describe "bundle open" do
it "suggests alternatives for similar-sounding gems" do
bundle "open Rails", :env => { "EDITOR" => "echo editor", "VISUAL" => "", "BUNDLER_EDITOR" => "" }
- expect(out).to match(/did you mean rails\?/i)
+ expect(err).to match(/did you mean rails\?/i)
end
it "opens the gem with short words" do
@@ -80,7 +80,7 @@ RSpec.describe "bundle open" do
gem "foo"
G
- bundle "config auto_install 1"
+ bundle "config set auto_install 1"
bundle "open rails", :env => { "EDITOR" => "echo editor", "VISUAL" => "", "BUNDLER_EDITOR" => "" }
expect(out).to include("Installing foo 1.0")
end
diff --git a/spec/commands/outdated_spec.rb b/spec/commands/outdated_spec.rb
index 394db664d8..843bebf6e0 100644
--- a/spec/commands/outdated_spec.rb
+++ b/spec/commands/outdated_spec.rb
@@ -202,7 +202,7 @@ RSpec.describe "bundle outdated" do
build_gem "activesupport", "2.3.4"
end
- bundle! "config clean false"
+ bundle! "config set clean false"
install_gemfile <<-G
source "file://#{gem_repo2}"
@@ -398,7 +398,7 @@ RSpec.describe "bundle outdated" do
describe "with invalid gem name" do
it "returns could not find gem name" do
bundle "outdated invalid_gem_name"
- expect(out).to include("Could not find gem 'invalid_gem_name'.")
+ expect(err).to include("Could not find gem 'invalid_gem_name'.")
end
it "returns non-zero exit code" do
@@ -414,12 +414,12 @@ RSpec.describe "bundle outdated" do
gem "foo"
G
- bundle "config auto_install 1"
+ bundle "config set auto_install 1"
bundle :outdated
expect(out).to include("Installing foo 1.0")
end
- context "after bundle install --deployment", :bundler => "< 2" do
+ context "after bundle install --deployment", :bundler => "< 3" do
before do
install_gemfile <<-G, forgotten_command_line_options(:deployment => true)
source "file://#{gem_repo2}"
@@ -434,14 +434,14 @@ RSpec.describe "bundle outdated" do
bundle "outdated"
expect(last_command).to be_failure
- expect(out).to include("You are trying to check outdated gems in deployment mode.")
- expect(out).to include("Run `bundle outdated` elsewhere.")
- expect(out).to include("If this is a development machine, remove the ")
- expect(out).to include("Gemfile freeze\nby running `bundle install --no-deployment`.")
+ expect(err).to include("You are trying to check outdated gems in deployment mode.")
+ expect(err).to include("Run `bundle outdated` elsewhere.")
+ expect(err).to include("If this is a development machine, remove the ")
+ expect(err).to include("Gemfile freeze\nby running `bundle install --no-deployment`.")
end
end
- context "after bundle config deployment true" do
+ context "after bundle config set deployment true" do
before do
install_gemfile <<-G
source "file://#{gem_repo2}"
@@ -449,7 +449,7 @@ RSpec.describe "bundle outdated" do
gem "rack"
gem "foo"
G
- bundle! "config deployment true"
+ bundle! "config set deployment true"
end
it "outputs a helpful message about being in deployment mode" do
@@ -457,10 +457,10 @@ RSpec.describe "bundle outdated" do
bundle "outdated"
expect(last_command).to be_failure
- expect(out).to include("You are trying to check outdated gems in deployment mode.")
- expect(out).to include("Run `bundle outdated` elsewhere.")
- expect(out).to include("If this is a development machine, remove the ")
- expect(out).to include("Gemfile freeze\nby running `bundle config --delete deployment`.")
+ expect(err).to include("You are trying to check outdated gems in deployment mode.")
+ expect(err).to include("Run `bundle outdated` elsewhere.")
+ expect(err).to include("If this is a development machine, remove the ")
+ expect(err).to include("Gemfile freeze\nby running `bundle config unset deployment`.")
end
end
diff --git a/spec/commands/package_spec.rb b/spec/commands/package_spec.rb
index 6351909bc7..b9cc079c5c 100644
--- a/spec/commands/package_spec.rb
+++ b/spec/commands/package_spec.rb
@@ -141,7 +141,7 @@ RSpec.describe "bundle package" do
end
end
- context "with --path", :bundler => "< 2" do
+ context "with --path", :bundler => "< 3" do
it "sets root directory for gems" do
gemfile <<-D
source "file://#{gem_repo1}"
@@ -179,10 +179,22 @@ RSpec.describe "bundle package" do
expect(the_bundle).to include_gems "rack 1.0.0"
end
+
+ it "does not prevent installing gems with bundle update" do
+ gemfile <<-D
+ source "file://#{gem_repo1}"
+ gem "rack", "1.0.0"
+ D
+
+ bundle! "package --no-install"
+ bundle! "update --all"
+
+ expect(the_bundle).to include_gems "rack 1.0.0"
+ end
end
context "with --all-platforms" do
- it "puts the gems in vendor/cache even for other rubies", :ruby => "2.1" do
+ it "puts the gems in vendor/cache even for other rubies" do
gemfile <<-D
source "file://#{gem_repo1}"
gem 'rack', :platforms => :ruby_19
@@ -205,7 +217,7 @@ RSpec.describe "bundle package" do
subject { bundle :package, forgotten_command_line_options(:frozen => true) }
it "tries to install with frozen" do
- bundle! "config deployment true"
+ bundle! "config set deployment true"
gemfile <<-G
source "file://#{gem_repo1}"
gem "rack"
@@ -213,9 +225,9 @@ RSpec.describe "bundle package" do
G
subject
expect(exitstatus).to eq(16) if exitstatus
- expect(out).to include("deployment mode")
- expect(out).to include("You have added to the Gemfile")
- expect(out).to include("* rack-obama")
+ expect(err).to include("deployment mode")
+ expect(err).to include("You have added to the Gemfile")
+ expect(err).to include("* rack-obama")
bundle "env"
expect(out).to include("frozen").or include("deployment")
end
@@ -266,7 +278,7 @@ RSpec.describe "bundle install with gem sources" do
end
bundle :install
- expect(err).to lack_errors
+ expect(err).to be_empty
expect(the_bundle).to include_gems "rack 1.0"
end
diff --git a/spec/commands/pristine_spec.rb b/spec/commands/pristine_spec.rb
index a868465c03..93eb81f2af 100644
--- a/spec/commands/pristine_spec.rb
+++ b/spec/commands/pristine_spec.rb
@@ -42,13 +42,20 @@ RSpec.describe "bundle pristine", :ruby_repo do
expect(changes_txt).to_not be_file
end
- it "does not delete the bundler gem" do
+ it "does not delete the bundler gem", :rubygems => ">= 2.6.2" do
ENV["BUNDLER_SPEC_KEEP_DEFAULT_BUNDLER_GEM"] = "true"
system_gems :bundler
bundle! "install"
bundle! "pristine", :system_bundler => true
bundle! "-v", :system_bundler => true
- expect(out).to end_with(Bundler::VERSION)
+
+ expected = if Bundler::VERSION < "3.0"
+ "Bundler version"
+ else
+ Bundler::VERSION
+ end
+
+ expect(out).to start_with(expected)
end
end
@@ -88,7 +95,7 @@ RSpec.describe "bundle pristine", :ruby_repo do
bundle "pristine"
expect(File.read(changed_file)).to include(diff)
- expect(out).to include("Cannot pristine #{spec.name} (#{spec.version}#{spec.git_version}). Gem is sourced from local path.")
+ expect(err).to include("Cannot pristine #{spec.name} (#{spec.version}#{spec.git_version}). Gem is sourced from local path.")
end
it "reinstall gemspec dependency" do
@@ -111,7 +118,7 @@ RSpec.describe "bundle pristine", :ruby_repo do
FileUtils.touch(changes_txt)
expect(changes_txt).to be_file
bundle "pristine"
- expect(out).to include("Cannot pristine #{spec.name} (#{spec.version}#{spec.git_version}). Gem is sourced from local path.")
+ expect(err).to include("Cannot pristine #{spec.name} (#{spec.version}#{spec.git_version}). Gem is sourced from local path.")
expect(changes_txt).to be_file
end
end
@@ -135,8 +142,8 @@ RSpec.describe "bundle pristine", :ruby_repo do
bundle! "pristine foo bar weakling"
- expect(out).to include("Cannot pristine bar (1.0). Gem is sourced from local path.").
- and include("Installing weakling 1.0")
+ expect(err).to include("Cannot pristine bar (1.0). Gem is sourced from local path.")
+ expect(out).to include("Installing weakling 1.0")
expect(weakling_changes_txt).not_to be_file
expect(foo_changes_txt).not_to be_file
@@ -145,7 +152,7 @@ RSpec.describe "bundle pristine", :ruby_repo do
it "raises when one of them is not in the lockfile" do
bundle "pristine abcabcabc"
- expect(out).to include("Could not find gem 'abcabcabc'.")
+ expect(err).to include("Could not find gem 'abcabcabc'.")
end
end
@@ -153,7 +160,7 @@ RSpec.describe "bundle pristine", :ruby_repo do
let(:very_simple_binary) { Bundler.definition.specs["very_simple_binary"].first }
let(:c_ext_dir) { Pathname.new(very_simple_binary.full_gem_path).join("ext") }
let(:build_opt) { "--with-ext-lib=#{c_ext_dir}" }
- before { bundle "config build.very_simple_binary -- #{build_opt}" }
+ before { bundle "config set build.very_simple_binary -- #{build_opt}" }
# This just verifies that the generated Makefile from the c_ext gem makes
# use of the build_args from the bundle config
@@ -170,7 +177,7 @@ RSpec.describe "bundle pristine", :ruby_repo do
let(:git_with_ext) { Bundler.definition.specs["git_with_ext"].first }
let(:c_ext_dir) { Pathname.new(git_with_ext.full_gem_path).join("ext") }
let(:build_opt) { "--with-ext-lib=#{c_ext_dir}" }
- before { bundle "config build.git_with_ext -- #{build_opt}" }
+ before { bundle "config set build.git_with_ext -- #{build_opt}" }
# This just verifies that the generated Makefile from the c_ext gem makes
# use of the build_args from the bundle config
diff --git a/spec/commands/remove_spec.rb b/spec/commands/remove_spec.rb
index daed91c034..7695d2a881 100644
--- a/spec/commands/remove_spec.rb
+++ b/spec/commands/remove_spec.rb
@@ -9,7 +9,7 @@ RSpec.describe "bundle remove" do
bundle "remove"
- expect(out).to include("Please specify gems to remove.")
+ expect(err).to include("Please specify gems to remove.")
end
end
@@ -54,7 +54,7 @@ RSpec.describe "bundle remove" do
bundle "remove rack"
- expect(out).to include("`rack` is not specified in #{bundled_app("Gemfile")} so it could not be removed.")
+ expect(err).to include("`rack` is not specified in #{bundled_app("Gemfile")} so it could not be removed.")
end
end
end
@@ -91,7 +91,7 @@ RSpec.describe "bundle remove" do
bundle "remove rails rack minitest"
- expect(out).to include("`rack` is not specified in #{bundled_app("Gemfile")} so it could not be removed.")
+ expect(err).to include("`rack` is not specified in #{bundled_app("Gemfile")} so it could not be removed.")
gemfile_should_be <<-G
source "file://#{gem_repo1}"
@@ -318,7 +318,7 @@ RSpec.describe "bundle remove" do
bundle "remove rails"
- expect(out).to include("Gems could not be removed. rack (>= 0) would also have been removed.")
+ expect(err).to include("Gems could not be removed. rack (>= 0) would also have been removed.")
gemfile_should_be <<-G
source "file://#{gem_repo1}"
gem "rack"; gem "rails"
@@ -436,7 +436,7 @@ RSpec.describe "bundle remove" do
bundle "remove rack"
- expect(out).to include("`rack` is not specified in #{bundled_app("Gemfile")} so it could not be removed.")
+ expect(err).to include("`rack` is not specified in #{bundled_app("Gemfile")} so it could not be removed.")
end
end
@@ -456,7 +456,7 @@ RSpec.describe "bundle remove" do
bundle "remove rack"
expect(out).to include("rack was removed.")
- expect(out).to include("`rack` is not specified in #{bundled_app("Gemfile-other")} so it could not be removed.")
+ expect(err).to include("`rack` is not specified in #{bundled_app("Gemfile-other")} so it could not be removed.")
gemfile_should_be <<-G
source "file://#{gem_repo1}"
@@ -481,7 +481,7 @@ RSpec.describe "bundle remove" do
bundle "remove rack"
expect(out).to include("rack was removed.")
- expect(out).to include("Gems could not be removed. rails (>= 0) would also have been removed.")
+ expect(err).to include("Gems could not be removed. rails (>= 0) would also have been removed.")
gemfile_should_be <<-G
source "file://#{gem_repo1}"
@@ -505,7 +505,7 @@ RSpec.describe "bundle remove" do
bundle "remove rack"
- expect(out).to include("Gems could not be removed. rails (>= 0) would also have been removed.")
+ expect(err).to include("Gems could not be removed. rails (>= 0) would also have been removed.")
expect(bundled_app("Gemfile-other").read).to include("gem \"rack\"")
gemfile_should_be <<-G
source "file://#{gem_repo1}"
diff --git a/spec/commands/show_spec.rb b/spec/commands/show_spec.rb
index 102b9534de..6e1986e35f 100644
--- a/spec/commands/show_spec.rb
+++ b/spec/commands/show_spec.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-RSpec.describe "bundle show" do
+RSpec.describe "bundle show", :bundler => "< 3" do
context "with a standard Gemfile" do
before :each do
install_gemfile <<-G
@@ -25,30 +25,24 @@ RSpec.describe "bundle show" do
expect(bundled_app("Gemfile.lock")).to exist
end
- it "prints path if gem exists in bundle", :bundler => "< 2" do
+ it "prints path if gem exists in bundle" do
bundle "show rails"
expect(out).to eq(default_bundle_path("gems", "rails-2.3.2").to_s)
end
- it "prints path if gem exists in bundle", :bundler => "2" do
+ it "prints deprecation" do
bundle "show rails"
- expect(out).to eq(
- "[DEPRECATED FOR 2.0] use `bundle info rails` instead of `bundle show rails`\n" +
- default_bundle_path("gems", "rails-2.3.2").to_s
- )
+ expect(err).to eq("[DEPRECATED] use `bundle info rails` instead of `bundle show rails`")
end
- it "prints path if gem exists in bundle (with --paths option)", :bundler => "< 2" do
+ it "prints path if gem exists in bundle (with --paths option)" do
bundle "show rails --paths"
expect(out).to eq(default_bundle_path("gems", "rails-2.3.2").to_s)
end
- it "prints path if gem exists in bundle (with --paths option)", :bundler => "2" do
+ it "prints deprecation when called with a gem and the --paths option" do
bundle "show rails --paths"
- expect(out).to eq(
- "[DEPRECATED FOR 2.0] use `bundle info rails --path` instead of `bundle show rails --paths`\n" +
- default_bundle_path("gems", "rails-2.3.2").to_s
- )
+ expect(err).to eq("[DEPRECATED] use `bundle info rails --path` instead of `bundle show rails --paths`")
end
it "warns if path no longer exists on disk" do
@@ -56,32 +50,28 @@ RSpec.describe "bundle show" do
bundle "show rails"
- expect(out).to match(/has been deleted/i).
- and include(default_bundle_path("gems", "rails-2.3.2").to_s)
+ expect(err).to match(/has been deleted/i)
+ expect(err).to match(default_bundle_path("gems", "rails-2.3.2").to_s)
end
- it "prints the path to the running bundler", :bundler => "< 2" do
+ it "prints the path to the running bundler" do
bundle "show bundler"
expect(out).to eq(root.to_s)
end
- it "prints the path to the running bundler", :bundler => "2" do
+ it "prints deprecation when called with bundler" do
bundle "show bundler"
- expect(out).to eq(
- "[DEPRECATED FOR 2.0] use `bundle info bundler` instead of `bundle show bundler`\n" +
- root.to_s
- )
+ expect(err).to eq("[DEPRECATED] use `bundle info bundler` instead of `bundle show bundler`")
end
-
it "complains if gem not in bundle" do
bundle "show missing"
- expect(out).to match(/could not find gem 'missing'/i)
+ expect(err).to match(/could not find gem 'missing'/i)
end
- it "prints path of all gems in bundle sorted by name", :bundler => "< 2" do
+ it "prints path of all gems in bundle sorted by name" do
bundle "show --paths"
- expect(out).to include(default_bundle_path("gems", "rake-10.0.2").to_s)
+ expect(out).to include(default_bundle_path("gems", "rake-12.3.2").to_s)
expect(out).to include(default_bundle_path("gems", "rails-2.3.2").to_s)
# Gem names are the last component of their path.
@@ -89,18 +79,10 @@ RSpec.describe "bundle show" do
expect(gem_list).to eq(gem_list.sort)
end
- it "prints path of all gems in bundle sorted by name", :bundler => "2" do
+ it "prints a deprecation when called with the --paths option" do
bundle "show --paths"
- expect(out).to include(default_bundle_path("gems", "rake-10.0.2").to_s)
- expect(out).to include(default_bundle_path("gems", "rails-2.3.2").to_s)
-
- out_lines = out.split("\n")
- expect(out_lines[0]).to eq("[DEPRECATED FOR 2.0] use `bundle list` instead of `bundle show --paths`")
-
- # Gem names are the last component of their path.
- gem_list = out_lines[1..-1].map {|p| p.split("/").last }
- expect(gem_list).to eq(gem_list.sort)
+ expect(err).to eq("[DEPRECATED] use `bundle list` instead of `bundle show --paths`")
end
it "prints summary of gems" do
@@ -153,7 +135,7 @@ RSpec.describe "bundle show" do
expect(out).to include("foo (1.0 #{sha[0..6]})")
end
- it "handles when a version is a '-' prerelease", :rubygems => "2.1" do
+ it "handles when a version is a '-' prerelease" do
@git = build_git("foo", "1.0.0-beta.1", :path => lib_path("foo"))
install_gemfile <<-G
gem "foo", "1.0.0-beta.1", :git => "#{lib_path("foo")}"
@@ -175,7 +157,7 @@ RSpec.describe "bundle show" do
it "does not output git errors" do
bundle :show
- expect(err).to lack_errors
+ expect(err_without_deprecations).to be_empty
end
end
@@ -185,11 +167,24 @@ RSpec.describe "bundle show" do
gem "foo"
G
- bundle "config auto_install 1"
+ bundle "config set auto_install 1"
bundle :show
expect(out).to include("Installing foo 1.0")
end
+ context "with a valid regexp for gem name" do
+ it "presents alternatives", :ruby_repo do
+ install_gemfile <<-G
+ source "file://#{gem_repo1}"
+ gem "rack"
+ gem "rack-obama"
+ G
+
+ bundle "show rac"
+ expect(out).to eq "1 : rack\n2 : rack-obama\n0 : - exit -\n>"
+ end
+ end
+
context "with an invalid regexp for gem name" do
it "does not find the gem" do
install_gemfile <<-G
@@ -200,7 +195,7 @@ RSpec.describe "bundle show" do
invalid_regexp = "[]"
bundle "show #{invalid_regexp}"
- expect(out).to include("Could not find gem '#{invalid_regexp}'.")
+ expect(err).to include("Could not find gem '#{invalid_regexp}'.")
end
end
@@ -231,3 +226,7 @@ RSpec.describe "bundle show" do
end
end
end
+
+RSpec.describe "bundle show", :bundler => "3" do
+ pending "shows a friendly error about the command removal"
+end
diff --git a/spec/commands/update_spec.rb b/spec/commands/update_spec.rb
index 6f29032dd2..735d8cd8de 100644
--- a/spec/commands/update_spec.rb
+++ b/spec/commands/update_spec.rb
@@ -12,7 +12,7 @@ RSpec.describe "bundle update" do
G
end
- describe "with no arguments", :bundler => "< 2" do
+ describe "with no arguments", :bundler => "< 3" do
it "updates the entire bundle" do
update_repo2 do
build_gem "activesupport", "3.0"
@@ -35,7 +35,7 @@ RSpec.describe "bundle update" do
end
end
- describe "with --all", :bundler => "2" do
+ describe "with --all", :bundler => "3" do
it "updates the entire bundle" do
update_repo2 do
build_gem "activesupport", "3.0"
@@ -65,25 +65,25 @@ RSpec.describe "bundle update" do
gem "rack", "1.0"
G
- bundle! "update --gemfile OmgFile", :all => bundle_update_requires_all?
+ bundle! "update --gemfile OmgFile", :all => true
expect(bundled_app("OmgFile.lock")).to exist
end
end
context "when update_requires_all_flag is set" do
- before { bundle! "config update_requires_all_flag true" }
+ before { bundle! "config set update_requires_all_flag true" }
it "errors when passed nothing" do
install_gemfile! ""
bundle :update
- expect(out).to eq("To update everything, pass the `--all` flag.")
+ expect(err).to eq("To update everything, pass the `--all` flag.")
end
it "errors when passed --all and another option" do
install_gemfile! ""
bundle "update --all foo"
- expect(out).to eq("Cannot specify --all along with specific options.")
+ expect(err).to eq("Cannot specify --all along with specific options.")
end
it "updates everything when passed --all" do
@@ -114,11 +114,11 @@ RSpec.describe "bundle update" do
describe "with an unknown dependency" do
it "should inform the user" do
bundle "update halting-problem-solver"
- expect(out).to include "Could not find gem 'halting-problem-solver'"
+ expect(err).to include "Could not find gem 'halting-problem-solver'"
end
it "should suggest alternatives" do
bundle "update platformspecific"
- expect(out).to include "Did you mean platform_specific?"
+ expect(err).to include "Did you mean platform_specific?"
end
end
@@ -133,7 +133,7 @@ RSpec.describe "bundle update" do
describe "when a possible resolve requires an older version of a locked gem" do
context "and only_update_to_newer_versions is set" do
before do
- bundle! "config only_update_to_newer_versions true"
+ bundle! "config set only_update_to_newer_versions true"
end
it "does not go to an older version" do
@@ -167,7 +167,7 @@ RSpec.describe "bundle update" do
end
end
- bundle! "update", :all => bundle_update_requires_all?
+ bundle! "update", :all => true
expect(the_bundle).to include_gems("slim 3.0.9", "slim-rails 3.1.3", "slim_lint 0.16.1")
end
@@ -280,32 +280,32 @@ RSpec.describe "bundle update" do
end
describe "in a frozen bundle" do
- it "should fail loudly", :bundler => "< 2" do
+ it "should fail loudly", :bundler => "< 3" do
bundle! "install --deployment"
- bundle "update", :all => bundle_update_requires_all?
+ bundle "update", :all => true
expect(last_command).to be_failure
- expect(out).to match(/You are trying to install in deployment mode after changing.your Gemfile/m)
- expect(out).to match(/freeze \nby running `bundle install --no-deployment`./m)
+ expect(err).to match(/You are trying to install in deployment mode after changing.your Gemfile/m)
+ expect(err).to match(/freeze \nby running `bundle install --no-deployment`./m)
end
- it "should suggest different command when frozen is set globally", :bundler => "< 2" do
- bundle! "config --global frozen 1"
- bundle "update", :all => bundle_update_requires_all?
- expect(out).to match(/You are trying to install in deployment mode after changing.your Gemfile/m).
- and match(/freeze \nby running `bundle config --delete frozen`./m)
+ it "should suggest different command when frozen is set globally", :bundler => "< 3" do
+ bundle! "config set --global frozen 1"
+ bundle "update", :all => true
+ expect(err).to match(/You are trying to install in deployment mode after changing.your Gemfile/m).
+ and match(/freeze \nby running `bundle config unset frozen`./m)
end
- it "should suggest different command when frozen is set globally", :bundler => "2" do
- bundle! "config --global deployment true"
- bundle "update", :all => bundle_update_requires_all?
- expect(out).to match(/You are trying to install in deployment mode after changing.your Gemfile/m).
- and match(/freeze \nby running `bundle config --delete deployment`./m)
+ it "should suggest different command when frozen is set globally", :bundler => "3" do
+ bundle! "config set --global deployment true"
+ bundle "update", :all => true
+ expect(err).to match(/You are trying to install in deployment mode after changing.your Gemfile/m).
+ and match(/freeze \nby running `bundle config unset deployment`./m)
end
end
describe "with --source option" do
- it "should not update gems not included in the source that happen to have the same name", :bundler => "< 2" do
+ it "should not update gems not included in the source that happen to have the same name", :bundler => "< 3" do
install_gemfile! <<-G
source "file://#{gem_repo2}"
gem "activesupport"
@@ -316,7 +316,7 @@ RSpec.describe "bundle update" do
expect(the_bundle).to include_gem "activesupport 3.0"
end
- it "should not update gems not included in the source that happen to have the same name", :bundler => "2" do
+ it "should not update gems not included in the source that happen to have the same name", :bundler => "3" do
install_gemfile! <<-G
source "file://#{gem_repo2}"
gem "activesupport"
@@ -328,7 +328,7 @@ RSpec.describe "bundle update" do
end
context "with unlock_source_unlocks_spec set to false" do
- before { bundle! "config unlock_source_unlocks_spec false" }
+ before { bundle! "config set unlock_source_unlocks_spec false" }
it "should not update gems not included in the source that happen to have the same name" do
install_gemfile <<-G
@@ -359,7 +359,7 @@ RSpec.describe "bundle update" do
G
end
- it "should not update the child dependencies of a gem that has the same name as the source", :bundler => "< 2" do
+ it "should not update the child dependencies of a gem that has the same name as the source", :bundler => "< 3" do
update_repo2 do
build_gem "fred", "2.0"
build_gem "harry", "2.0" do |s|
@@ -372,7 +372,7 @@ RSpec.describe "bundle update" do
expect(the_bundle).to include_gems "fred 1.0"
end
- it "should not update the child dependencies of a gem that has the same name as the source", :bundler => "2" do
+ it "should not update the child dependencies of a gem that has the same name as the source", :bundler => "3" do
update_repo2 do
build_gem "fred", "2.0"
build_gem "harry", "2.0" do |s|
@@ -404,7 +404,7 @@ RSpec.describe "bundle update" do
G
end
- it "should not update the child dependencies of a gem that has the same name as the source", :bundler => "< 2" do
+ it "should not update the child dependencies of a gem that has the same name as the source", :bundler => "< 3" do
update_repo2 do
build_gem "george", "2.0"
build_gem "harry", "2.0" do |s|
@@ -418,7 +418,7 @@ RSpec.describe "bundle update" do
expect(the_bundle).to include_gems "george 1.0"
end
- it "should not update the child dependencies of a gem that has the same name as the source", :bundler => "2" do
+ it "should not update the child dependencies of a gem that has the same name as the source", :bundler => "3" do
update_repo2 do
build_gem "george", "2.0"
build_gem "harry", "2.0" do |s|
@@ -473,6 +473,39 @@ RSpec.describe "bundle update in more complicated situations" do
expect(the_bundle).to include_gems "thin 2.0", "rack 10.0", "rack-obama 1.0"
end
+ it "will not warn when an explicitly updated git gem changes sha but not version" do
+ build_git "foo"
+
+ install_gemfile! <<-G
+ gem "foo", :git => '#{lib_path("foo-1.0")}'
+ G
+
+ update_git "foo" do |s|
+ s.write "lib/foo2.rb", "puts :foo2"
+ end
+
+ bundle! "update foo"
+
+ expect(last_command.stdboth).not_to include "attempted to update"
+ end
+
+ it "will not warn when changing gem sources but not versions" do
+ build_git "rack"
+
+ install_gemfile! <<-G
+ gem "rack", :git => '#{lib_path("rack-1.0")}'
+ G
+
+ gemfile <<-G
+ source "file://#{gem_repo1}"
+ gem "rack"
+ G
+
+ bundle! "update rack"
+
+ expect(last_command.stdboth).not_to include "attempted to update"
+ end
+
it "will update only from pinned source" do
install_gemfile <<-G
source "file://#{gem_repo2}"
@@ -542,7 +575,7 @@ RSpec.describe "bundle update without a Gemfile.lock" do
gem "rack", "1.0"
G
- bundle "update", :all => bundle_update_requires_all?
+ bundle "update", :all => true
expect(the_bundle).to include_gems "rack 1.0.0"
end
@@ -562,23 +595,23 @@ RSpec.describe "bundle update when a gem depends on a newer version of bundler"
G
end
- it "should explain that bundler conflicted", :bundler => "< 2" do
- bundle "update", :all => bundle_update_requires_all?
+ it "should explain that bundler conflicted", :bundler => "< 3" do
+ bundle "update", :all => true
expect(last_command.stdboth).not_to match(/in snapshot/i)
- expect(last_command.bundler_err).to match(/current Bundler version/i).
+ expect(err).to match(/current Bundler version/i).
and match(/perhaps you need to update bundler/i)
end
- it "should warn that the newer version of Bundler would conflict", :bundler => "2" do
+ it "should warn that the newer version of Bundler would conflict", :bundler => "3" do
bundle! "update", :all => true
- expect(last_command.bundler_err).to include("rails (3.0.1) has dependency bundler").
+ expect(err).to include("rails (3.0.1) has dependency bundler").
and include("so the dependency is being ignored")
expect(the_bundle).to include_gem "rails 3.0.1"
end
end
RSpec.describe "bundle update" do
- it "shows the previous version of the gem when updated from rubygems source", :bundler => "< 2" do
+ it "shows the previous version of the gem when updated from rubygems source", :bundler => "< 3" do
build_repo2
install_gemfile <<-G
@@ -586,19 +619,19 @@ RSpec.describe "bundle update" do
gem "activesupport"
G
- bundle "update", :all => bundle_update_requires_all?
+ bundle "update", :all => true
expect(out).to include("Using activesupport 2.3.5")
update_repo2 do
build_gem "activesupport", "3.0"
end
- bundle "update", :all => bundle_update_requires_all?
+ bundle "update", :all => true
expect(out).to include("Installing activesupport 3.0 (was 2.3.5)")
end
context "with suppress_install_using_messages set" do
- before { bundle! "config suppress_install_using_messages true" }
+ before { bundle! "config set suppress_install_using_messages true" }
it "only prints `Using` for versions that have changed" do
build_repo4 do
@@ -612,7 +645,7 @@ RSpec.describe "bundle update" do
gem "foo"
G
- bundle! "update", :all => bundle_update_requires_all?
+ bundle! "update", :all => true
out.gsub!(/RubyGems [\d\.]+ is not threadsafe.*\n?/, "")
expect(out).to include "Resolving dependencies...\nBundle updated!"
@@ -620,7 +653,7 @@ RSpec.describe "bundle update" do
build_gem "foo", "2.0"
end
- bundle! "update", :all => bundle_update_requires_all?
+ bundle! "update", :all => true
out.sub!("Removing foo (1.0)\n", "")
out.gsub!(/RubyGems [\d\.]+ is not threadsafe.*\n?/, "")
expect(out).to include strip_whitespace(<<-EOS).strip
@@ -639,7 +672,7 @@ RSpec.describe "bundle update" do
G
bundle "update nonexisting"
- expect(out).to include("This Bundle hasn't been installed yet. Run `bundle install` to update and install the bundled gems.")
+ expect(err).to include("This Bundle hasn't been installed yet. Run `bundle install` to update and install the bundled gems.")
expect(exitstatus).to eq(22) if exitstatus
end
end
@@ -719,7 +752,7 @@ RSpec.describe "bundle update --ruby" do
it "shows a helpful error message" do
bundle "update --ruby"
- expect(out).to include("Your Ruby version is 2.2.2, but your Gemfile specified ~> 2.1.0")
+ expect(err).to include("Your Ruby version is 2.2.2, but your Gemfile specified ~> 2.1.0")
end
end
@@ -809,6 +842,15 @@ RSpec.describe "bundle update conservative" do
G
end
+ context "with patch set as default update level in config" do
+ it "should do a patch level update" do
+ bundle! "config set --local prefer_patch true"
+ bundle! "update foo"
+
+ expect(the_bundle).to include_gems "foo 1.4.5", "bar 2.1.1", "qux 1.0.0"
+ end
+ end
+
context "patch preferred" do
it "single gem updates dependent gem to minor" do
bundle! "update --patch foo"
@@ -817,7 +859,7 @@ RSpec.describe "bundle update conservative" do
end
it "update all" do
- bundle! "update --patch", :all => bundle_update_requires_all?
+ bundle! "update --patch", :all => true
expect(the_bundle).to include_gems "foo 1.4.5", "bar 2.1.1", "qux 1.0.1"
end
@@ -839,7 +881,7 @@ RSpec.describe "bundle update conservative" do
end
it "minor preferred" do
- bundle! "update --minor --strict", :all => bundle_update_requires_all?
+ bundle! "update --minor --strict", :all => true
expect(the_bundle).to include_gems "foo 1.5.0", "bar 2.1.1", "qux 1.1.0"
end
@@ -936,9 +978,9 @@ RSpec.describe "bundle update conservative" do
end
it "raises if too many flags are provided" do
- bundle "update --patch --minor", :all => bundle_update_requires_all?
+ bundle "update --patch --minor", :all => true
- expect(last_command.bundler_err).to eq "Provide only one of the following options: minor, patch"
+ expect(err).to eq "Provide only one of the following options: minor, patch"
end
end
end
diff --git a/spec/commands/version_spec.rb b/spec/commands/version_spec.rb
index b919c25e0f..66c7930397 100644
--- a/spec/commands/version_spec.rb
+++ b/spec/commands/version_spec.rb
@@ -2,36 +2,36 @@
RSpec.describe "bundle version" do
context "with -v" do
- it "outputs the version", :bundler => "< 2" do
+ it "outputs the version", :bundler => "< 3" do
bundle! "-v"
expect(out).to eq("Bundler version #{Bundler::VERSION}")
end
- it "outputs the version", :bundler => "2" do
+ it "outputs the version", :bundler => "3" do
bundle! "-v"
expect(out).to eq(Bundler::VERSION)
end
end
context "with --version" do
- it "outputs the version", :bundler => "< 2" do
+ it "outputs the version", :bundler => "< 3" do
bundle! "--version"
expect(out).to eq("Bundler version #{Bundler::VERSION}")
end
- it "outputs the version", :bundler => "2" do
+ it "outputs the version", :bundler => "3" do
bundle! "--version"
expect(out).to eq(Bundler::VERSION)
end
end
context "with version" do
- it "outputs the version with build metadata", :bundler => "< 2" do
+ it "outputs the version with build metadata", :bundler => "< 3" do
bundle! "version"
expect(out).to match(/\ABundler version #{Regexp.escape(Bundler::VERSION)} \(\d{4}-\d{2}-\d{2} commit [a-fA-F0-9]{7,}\)\z/)
end
- it "outputs the version with build metadata", :bundler => "2" do
+ it "outputs the version with build metadata", :bundler => "3" do
bundle! "version"
expect(out).to match(/\A#{Regexp.escape(Bundler::VERSION)} \(\d{4}-\d{2}-\d{2} commit [a-fA-F0-9]{7,}\)\z/)
end
diff --git a/spec/commands/viz_spec.rb b/spec/commands/viz_spec.rb
index 3804d3561c..96cc21b5f7 100644
--- a/spec/commands/viz_spec.rb
+++ b/spec/commands/viz_spec.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-RSpec.describe "bundle viz", :ruby => "1.9.3", :bundler => "< 2", :if => Bundler.which("dot") do
+RSpec.describe "bundle viz", :bundler => "< 3", :if => Bundler.which("dot") do
let(:ruby_graphviz) do
graphviz_glob = base_system_gems.join("cache/ruby-graphviz*")
Pathname.glob(graphviz_glob).first
diff --git a/spec/install/allow_offline_install_spec.rb b/spec/install/allow_offline_install_spec.rb
index d4bb595771..8af88b7efe 100644
--- a/spec/install/allow_offline_install_spec.rb
+++ b/spec/install/allow_offline_install_spec.rb
@@ -2,7 +2,7 @@
RSpec.describe "bundle install with :allow_offline_install" do
before do
- bundle "config allow_offline_install true"
+ bundle "config set allow_offline_install true"
end
context "with no cached data locally" do
@@ -19,7 +19,7 @@ RSpec.describe "bundle install with :allow_offline_install" do
source "http://testgemserver.local"
gem "rack-obama"
G
- expect(out).to include("Could not reach host testgemserver.local.")
+ expect(err).to include("Could not reach host testgemserver.local.")
expect(the_bundle).to_not be_locked
end
end
@@ -28,7 +28,7 @@ RSpec.describe "bundle install with :allow_offline_install" do
it "will install from the compact index" do
system_gems ["rack-1.0.0"], :path => :bundle_path
- bundle! "config clean false"
+ bundle! "config set clean false"
install_gemfile! <<-G, :artifice => "compact_index"
source "http://testgemserver.local"
gem "rack-obama"
@@ -77,7 +77,7 @@ RSpec.describe "bundle install with :allow_offline_install" do
G
break_git_remote_ops! { bundle! :update, :all => true }
- expect(out).to include("Using cached git data because of network errors")
+ expect(err).to include("Using cached git data because of network errors")
expect(the_bundle).to be_locked
break_git_remote_ops! do
@@ -85,7 +85,7 @@ RSpec.describe "bundle install with :allow_offline_install" do
gem "a", :git => #{git.path.to_s.dump}, :branch => "new_branch"
G
end
- expect(out).to include("Using cached git data because of network errors")
+ expect(err).to include("Using cached git data because of network errors")
expect(the_bundle).to be_locked
end
end
diff --git a/spec/install/binstubs_spec.rb b/spec/install/binstubs_spec.rb
index 23eb691ab8..daa20693c7 100644
--- a/spec/install/binstubs_spec.rb
+++ b/spec/install/binstubs_spec.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-RSpec.describe "bundle install", :bundler => "< 2" do
+RSpec.describe "bundle install" do
describe "when system_bindir is set" do
# On OS X, Gem.bindir defaults to /usr/bin, so system_bindir is useful if
# you want to avoid sudo installs for system gems with OS X's default ruby
@@ -20,7 +20,7 @@ RSpec.describe "bundle install", :bundler => "< 2" do
end
end
- describe "when multiple gems contain the same exe", :bundler => "< 2" do
+ describe "when multiple gems contain the same exe" do
before do
build_repo2 do
build_gem "fake", "14" do |s|
@@ -28,16 +28,25 @@ RSpec.describe "bundle install", :bundler => "< 2" do
end
end
- install_gemfile <<-G, :binstubs => true
+ install_gemfile <<-G
source "file://#{gem_repo2}"
gem "fake"
gem "rack"
G
end
- it "loads the correct spec's executable" do
- gembin("rackup")
- expect(out).to eq("1.2")
+ it "warns about the situation" do
+ bundle! "exec rackup"
+
+ expect(last_command.stderr).to include(
+ "The `rackup` executable in the `fake` gem is being loaded, but it's also present in other gems (rack).\n" \
+ "If you meant to run the executable for another gem, make sure you use a project specific binstub (`bundle binstub <gem_name>`).\n" \
+ "If you plan to use multiple conflicting executables, generate binstubs for them and disambiguate their names."
+ ).or include(
+ "The `rackup` executable in the `rack` gem is being loaded, but it's also present in other gems (fake).\n" \
+ "If you meant to run the executable for another gem, make sure you use a project specific binstub (`bundle binstub <gem_name>`).\n" \
+ "If you plan to use multiple conflicting executables, generate binstubs for them and disambiguate their names."
+ )
end
end
end
diff --git a/spec/install/bundler_spec.rb b/spec/install/bundler_spec.rb
index 42863ed89b..90f7c63330 100644
--- a/spec/install/bundler_spec.rb
+++ b/spec/install/bundler_spec.rb
@@ -48,7 +48,7 @@ RSpec.describe "bundle install" do
Could not find gem 'bundler (= 0.9.2)' in any
E
- expect(last_command.bundler_err).to include(nice_error)
+ expect(err).to include(nice_error)
end
it "works for gems with multiple versions in its dependencies" do
@@ -104,7 +104,7 @@ RSpec.describe "bundle install" do
rails_fail was resolved to 1.0, which depends on
activesupport (= 1.2.3)
E
- expect(last_command.bundler_err).to include(nice_error)
+ expect(err).to include(nice_error)
end
it "causes a conflict if a child dependency conflicts with the Gemfile" do
@@ -122,11 +122,11 @@ RSpec.describe "bundle install" do
rails_fail was resolved to 1.0, which depends on
activesupport (= 1.2.3)
E
- expect(last_command.bundler_err).to include(nice_error)
+ expect(err).to include(nice_error)
end
- it "can install dependencies with newer bundler version with system gems", :ruby => "> 2" do
- bundle! "config path.system true"
+ it "can install dependencies with newer bundler version with system gems" do
+ bundle! "config set path.system true"
install_gemfile! <<-G
source "file://#{gem_repo2}"
gem "rails", "3.0"
@@ -138,9 +138,9 @@ RSpec.describe "bundle install" do
expect(out).to include("The Gemfile's dependencies are satisfied")
end
- it "can install dependencies with newer bundler version with a local path", :ruby => "> 2" do
- bundle! "config path .bundle"
- bundle! "config global_path_appends_ruby_scope true"
+ it "can install dependencies with newer bundler version with a local path" do
+ bundle! "config set path .bundle"
+ bundle! "config set global_path_appends_ruby_scope true"
install_gemfile! <<-G
source "file://#{gem_repo2}"
gem "rails", "3.0"
@@ -153,7 +153,7 @@ RSpec.describe "bundle install" do
end
context "with allow_bundler_dependency_conflicts set" do
- before { bundle! "config allow_bundler_dependency_conflicts true" }
+ before { bundle! "config set allow_bundler_dependency_conflicts true" }
it "are forced to the current bundler version with warnings when no compatible version is found" do
build_repo4 do
@@ -167,7 +167,7 @@ RSpec.describe "bundle install" do
gem "requires_nonexistant_bundler"
G
- expect(out).to include "requires_nonexistant_bundler (1.0) has dependency bundler (= 99.99.99.99), " \
+ expect(err).to include "requires_nonexistant_bundler (1.0) has dependency bundler (= 99.99.99.99), " \
"which is unsatisfied by the current bundler version #{Bundler::VERSION}, so the dependency is being ignored"
expect(the_bundle).to include_gems "bundler #{Bundler::VERSION}", "requires_nonexistant_bundler 1.0"
diff --git a/spec/install/deploy_spec.rb b/spec/install/deploy_spec.rb
index 3b9d68982a..9569b4d54c 100644
--- a/spec/install/deploy_spec.rb
+++ b/spec/install/deploy_spec.rb
@@ -8,29 +8,29 @@ RSpec.describe "install with --deployment or --frozen" do
G
end
- context "with CLI flags", :bundler => "< 2" do
+ context "with CLI flags", :bundler => "< 3" do
it "fails without a lockfile and says that --deployment requires a lock" do
bundle "install --deployment"
- expect(out).to include("The --deployment flag requires a Gemfile.lock")
+ expect(err).to include("The --deployment flag requires a Gemfile.lock")
end
it "fails without a lockfile and says that --frozen requires a lock" do
bundle "install --frozen"
- expect(out).to include("The --frozen flag requires a Gemfile.lock")
+ expect(err).to include("The --frozen flag requires a Gemfile.lock")
end
it "disallows --deployment --system" do
bundle "install --deployment --system"
- expect(out).to include("You have specified both --deployment")
- expect(out).to include("Please choose only one option")
+ expect(err).to include("You have specified both --deployment")
+ expect(err).to include("Please choose only one option")
expect(exitstatus).to eq(15) if exitstatus
end
it "disallows --deployment --path --system" do
bundle "install --deployment --path . --system"
- expect(out).to include("You have specified both --path")
- expect(out).to include("as well as --system")
- expect(out).to include("Please choose only one option")
+ expect(err).to include("You have specified both --path")
+ expect(err).to include("as well as --system")
+ expect(err).to include("Please choose only one option")
expect(exitstatus).to eq(15) if exitstatus
end
@@ -64,7 +64,7 @@ RSpec.describe "install with --deployment or --frozen" do
bundle! :install, forgotten_command_line_options(:deployment => true, :without => "test")
end
- it "works when you bundle exec bundle", :ruby_repo do
+ it "works when you bundle exec bundle" do
bundle :install
bundle "install --deployment"
bundle! "exec bundle check"
@@ -109,11 +109,11 @@ RSpec.describe "install with --deployment or --frozen" do
bundle "install"
end
- it "works with the --deployment flag if you didn't change anything", :bundler => "< 2" do
+ it "works with the --deployment flag if you didn't change anything", :bundler => "< 3" do
bundle! "install --deployment"
end
- it "works with the --frozen flag if you didn't change anything", :bundler => "< 2" do
+ it "works with the --frozen flag if you didn't change anything", :bundler => "< 3" do
bundle! "install --frozen"
end
@@ -129,11 +129,11 @@ RSpec.describe "install with --deployment or --frozen" do
G
bundle :install, forgotten_command_line_options(:deployment => true)
- expect(out).to include("deployment mode")
- expect(out).to include("You have added to the Gemfile")
- expect(out).to include("* rack-obama")
- expect(out).not_to include("You have deleted from the Gemfile")
- expect(out).not_to include("You have changed in the Gemfile")
+ expect(err).to include("deployment mode")
+ expect(err).to include("You have added to the Gemfile")
+ expect(err).to include("* rack-obama")
+ expect(err).not_to include("You have deleted from the Gemfile")
+ expect(err).not_to include("You have changed in the Gemfile")
end
it "works if a path gem is missing but is in a without group" do
@@ -162,10 +162,10 @@ RSpec.describe "install with --deployment or --frozen" do
FileUtils.rm_r lib_path("path_gem-1.0")
bundle :install, forgotten_command_line_options(:path => ".bundle", :deployment => true)
- expect(out).to include("The path `#{lib_path("path_gem-1.0")}` does not exist.")
+ expect(err).to include("The path `#{lib_path("path_gem-1.0")}` does not exist.")
end
- it "can have --frozen set via an environment variable", :bundler => "< 2" do
+ it "can have --frozen set via an environment variable", :bundler => "< 3" do
gemfile <<-G
source "file://#{gem_repo1}"
gem "rack"
@@ -174,11 +174,11 @@ RSpec.describe "install with --deployment or --frozen" do
ENV["BUNDLE_FROZEN"] = "1"
bundle "install"
- expect(out).to include("deployment mode")
- expect(out).to include("You have added to the Gemfile")
- expect(out).to include("* rack-obama")
- expect(out).not_to include("You have deleted from the Gemfile")
- expect(out).not_to include("You have changed in the Gemfile")
+ expect(err).to include("deployment mode")
+ expect(err).to include("You have added to the Gemfile")
+ expect(err).to include("* rack-obama")
+ expect(err).not_to include("You have deleted from the Gemfile")
+ expect(err).not_to include("You have changed in the Gemfile")
end
it "can have --deployment set via an environment variable" do
@@ -190,11 +190,11 @@ RSpec.describe "install with --deployment or --frozen" do
ENV["BUNDLE_DEPLOYMENT"] = "true"
bundle "install"
- expect(out).to include("deployment mode")
- expect(out).to include("You have added to the Gemfile")
- expect(out).to include("* rack-obama")
- expect(out).not_to include("You have deleted from the Gemfile")
- expect(out).not_to include("You have changed in the Gemfile")
+ expect(err).to include("deployment mode")
+ expect(err).to include("You have added to the Gemfile")
+ expect(err).to include("* rack-obama")
+ expect(err).not_to include("You have deleted from the Gemfile")
+ expect(err).not_to include("You have changed in the Gemfile")
end
it "can have --frozen set to false via an environment variable" do
@@ -212,21 +212,6 @@ RSpec.describe "install with --deployment or --frozen" do
expect(out).not_to include("* rack-obama")
end
- it "explodes with the --frozen flag if you make a change and don't check in the lockfile", :bundler => "< 2" do
- gemfile <<-G
- source "file://#{gem_repo1}"
- gem "rack"
- gem "rack-obama", "1.1"
- G
-
- bundle :install, forgotten_command_line_options(:frozen => true)
- expect(out).to include("deployment mode")
- expect(out).to include("You have added to the Gemfile")
- expect(out).to include("* rack-obama (= 1.1)")
- expect(out).not_to include("You have deleted from the Gemfile")
- expect(out).not_to include("You have changed in the Gemfile")
- end
-
it "explodes if you remove a gem and don't check in the lockfile" do
gemfile <<-G
source "file://#{gem_repo1}"
@@ -234,10 +219,10 @@ RSpec.describe "install with --deployment or --frozen" do
G
bundle :install, forgotten_command_line_options(:deployment => true)
- expect(out).to include("deployment mode")
- expect(out).to include("You have added to the Gemfile:\n* activesupport\n\n")
- expect(out).to include("You have deleted from the Gemfile:\n* rack")
- expect(out).not_to include("You have changed in the Gemfile")
+ expect(err).to include("deployment mode")
+ expect(err).to include("You have added to the Gemfile:\n* activesupport\n\n")
+ expect(err).to include("You have deleted from the Gemfile:\n* rack")
+ expect(err).not_to include("You have changed in the Gemfile")
end
it "explodes if you add a source" do
@@ -247,9 +232,9 @@ RSpec.describe "install with --deployment or --frozen" do
G
bundle :install, forgotten_command_line_options(:deployment => true)
- expect(out).to include("deployment mode")
- expect(out).to include("You have added to the Gemfile:\n* source: git://hubz.com (at master)")
- expect(out).not_to include("You have changed in the Gemfile")
+ expect(err).to include("deployment mode")
+ expect(err).to include("You have added to the Gemfile:\n* source: git://hubz.com (at master)")
+ expect(err).not_to include("You have changed in the Gemfile")
end
it "explodes if you unpin a source" do
@@ -266,10 +251,10 @@ RSpec.describe "install with --deployment or --frozen" do
G
bundle :install, forgotten_command_line_options(:deployment => true)
- expect(out).to include("deployment mode")
- expect(out).to include("You have deleted from the Gemfile:\n* source: #{lib_path("rack-1.0")} (at master@#{revision_for(lib_path("rack-1.0"))[0..6]}")
- expect(out).not_to include("You have added to the Gemfile")
- expect(out).not_to include("You have changed in the Gemfile")
+ expect(err).to include("deployment mode")
+ expect(err).to include("You have deleted from the Gemfile:\n* source: #{lib_path("rack-1.0")} (at master@#{revision_for(lib_path("rack-1.0"))[0..6]}")
+ expect(err).not_to include("You have added to the Gemfile")
+ expect(err).not_to include("You have changed in the Gemfile")
end
it "explodes if you unpin a source, leaving it pinned somewhere else" do
@@ -289,19 +274,15 @@ RSpec.describe "install with --deployment or --frozen" do
G
bundle :install, forgotten_command_line_options(:deployment => true)
- expect(out).to include("deployment mode")
- expect(out).to include("You have changed in the Gemfile:\n* rack from `no specified source` to `#{lib_path("rack")} (at master@#{revision_for(lib_path("rack"))[0..6]})`")
- expect(out).not_to include("You have added to the Gemfile")
- expect(out).not_to include("You have deleted from the Gemfile")
+ expect(err).to include("deployment mode")
+ expect(err).to include("You have changed in the Gemfile:\n* rack from `no specified source` to `#{lib_path("rack")} (at master@#{revision_for(lib_path("rack"))[0..6]})`")
+ expect(err).not_to include("You have added to the Gemfile")
+ expect(err).not_to include("You have deleted from the Gemfile")
end
context "when replacing a host with the same host with credentials" do
let(:success_message) do
- if Bundler::VERSION.split(".", 2).first == "1"
- "Could not reach host localgemserver.test"
- else
- "Bundle complete!"
- end
+ "Bundle complete!"
end
before do
@@ -322,31 +303,33 @@ RSpec.describe "install with --deployment or --frozen" do
DEPENDENCIES
rack
G
+
+ bundle! "config set --local deployment true"
end
it "prevents the replace by default" do
- bundle :install, forgotten_command_line_options(:deployment => true)
+ bundle :install
- expect(out).to match(/The list of sources changed/)
+ expect(err).to match(/The list of sources changed/)
end
context "when allow_deployment_source_credential_changes is true" do
- before { bundle! "config allow_deployment_source_credential_changes true" }
+ before { bundle! "config set allow_deployment_source_credential_changes true" }
it "allows the replace" do
- bundle :install, forgotten_command_line_options(:deployment => true)
+ bundle :install
expect(out).to match(/#{success_message}/)
end
end
context "when allow_deployment_source_credential_changes is false" do
- before { bundle! "config allow_deployment_source_credential_changes false" }
+ before { bundle! "config set allow_deployment_source_credential_changes false" }
it "prevents the replace" do
- bundle :install, forgotten_command_line_options(:deployment => true)
+ bundle :install
- expect(out).to match(/The list of sources changed/)
+ expect(err).to match(/The list of sources changed/)
end
end
@@ -354,7 +337,7 @@ RSpec.describe "install with --deployment or --frozen" do
before { ENV["BUNDLE_ALLOW_DEPLOYMENT_SOURCE_CREDENTIAL_CHANGES"] = "true" }
it "allows the replace" do
- bundle :install, forgotten_command_line_options(:deployment => true)
+ bundle :install
expect(out).to match(/#{success_message}/)
end
@@ -364,9 +347,9 @@ RSpec.describe "install with --deployment or --frozen" do
before { ENV["BUNDLE_ALLOW_DEPLOYMENT_SOURCE_CREDENTIAL_CHANGES"] = "false" }
it "prevents the replace" do
- bundle :install, forgotten_command_line_options(:deployment => true)
+ bundle :install
- expect(out).to match(/The list of sources changed/)
+ expect(err).to match(/The list of sources changed/)
end
end
end
@@ -374,7 +357,7 @@ RSpec.describe "install with --deployment or --frozen" do
it "remembers that the bundle is frozen at runtime" do
bundle! :lock
- bundle! "config deployment true"
+ bundle! "config set --local deployment true"
gemfile <<-G
source "file://#{gem_repo1}"
@@ -412,7 +395,8 @@ You have deleted from the Gemfile:
expect(out).to include("Updating files in vendor/cache")
simulate_new_machine
- bundle! "install --verbose", forgotten_command_line_options(:deployment => true)
+ bundle! "config set --local deployment true"
+ bundle! "install --verbose"
expect(out).not_to include("You are trying to install in deployment mode after changing your Gemfile")
expect(out).not_to include("You have added to the Gemfile")
expect(out).not_to include("You have deleted from the Gemfile")
diff --git a/spec/install/failure_spec.rb b/spec/install/failure_spec.rb
index 49e2771dca..ac3c707187 100644
--- a/spec/install/failure_spec.rb
+++ b/spec/install/failure_spec.rb
@@ -18,7 +18,7 @@ RSpec.describe "bundle install" do
source "file:\/\/localhost#{gem_repo2}"
gem "rails"
G
- expect(last_command.bundler_err).to end_with(normalize_uri_file(<<-M.strip))
+ expect(err).to end_with(normalize_uri_file(<<-M.strip))
An error occurred while installing activesupport (2.3.2), and Bundler cannot continue.
Make sure that `gem install activesupport -v '2.3.2' --source 'file://localhost#{gem_repo2}/'` succeeds before bundling.
@@ -46,7 +46,7 @@ In Gemfile:
gem "activesupport", :git => "#{lib_path("activesupport")}"
G
- expect(last_command.bundler_err).to end_with(<<-M.strip)
+ expect(err).to end_with(<<-M.strip)
An error occurred while installing activesupport (2.3.2), and Bundler cannot continue.
In Gemfile:
@@ -77,7 +77,7 @@ In Gemfile:
end
G
- expect(last_command.bundler_err).to end_with(<<-M.strip)
+ expect(err).to end_with(<<-M.strip)
An error occurred while installing activesupport (2.3.2), and Bundler cannot continue.
@@ -111,7 +111,7 @@ In Gemfile:
gem "rails"
end
G
- expect(last_command.bundler_err).to end_with(normalize_uri_file(<<-M.strip))
+ expect(err).to end_with(normalize_uri_file(<<-M.strip))
An error occurred while installing activesupport (2.3.2), and Bundler cannot continue.
Make sure that `gem install activesupport -v '2.3.2' --source 'file://localhost#{gem_repo2}/'` succeeds before bundling.
diff --git a/spec/install/gemfile/gemspec_spec.rb b/spec/install/gemfile/gemspec_spec.rb
index 833b409801..bf1f4d7b9a 100644
--- a/spec/install/gemfile/gemspec_spec.rb
+++ b/spec/install/gemfile/gemspec_spec.rb
@@ -65,7 +65,7 @@ RSpec.describe "bundle install from an existing gemspec" do
source "file://#{gem_repo2}"
gemspec :path => '#{tmp.join("foo")}'
G
- expect(last_command.bundler_err).to match(/There are no gemspecs at #{tmp.join('foo')}/)
+ expect(err).to match(/There are no gemspecs at #{tmp.join('foo')}/)
end
it "should raise if there are too many gemspecs available" do
@@ -77,7 +77,7 @@ RSpec.describe "bundle install from an existing gemspec" do
source "file://#{gem_repo2}"
gemspec :path => '#{tmp.join("foo")}'
G
- expect(last_command.bundler_err).to match(/There are multiple gemspecs at #{tmp.join('foo')}/)
+ expect(err).to match(/There are multiple gemspecs at #{tmp.join('foo')}/)
end
it "should pick a specific gemspec" do
@@ -117,7 +117,7 @@ RSpec.describe "bundle install from an existing gemspec" do
build_lib("foo", :path => tmp.join("foo")) do |s|
s.write("Gemfile", "source 'file://#{gem_repo1}'\ngemspec")
s.add_dependency "actionpack", "=2.3.2"
- s.add_development_dependency "rake", "=10.0.2"
+ s.add_development_dependency "rake", "=12.3.2"
end
Dir.chdir(tmp.join("foo")) do
@@ -239,7 +239,7 @@ RSpec.describe "bundle install from an existing gemspec" do
expect(the_bundle).to include_gems "foo 1.0.0"
end
- it "does not break Gem.finish_resolve with conflicts", :rubygems => ">= 2" do
+ it "does not break Gem.finish_resolve with conflicts" do
build_lib("foo", :path => tmp.join("foo")) do |s|
s.version = "1.0.0"
s.add_dependency "bar", "= 1.0.0"
@@ -297,7 +297,7 @@ RSpec.describe "bundle install from an existing gemspec" do
bundle :install, forgotten_command_line_options(:deployment => true)
- expect(out).to include("changed")
+ expect(err).to include("changed")
end
end
end
@@ -447,7 +447,7 @@ RSpec.describe "bundle install from an existing gemspec" do
end
end
- context "on ruby", :bundler => "< 2" do
+ context "on ruby" do
before do
simulate_platform("ruby")
bundle :install
@@ -547,107 +547,6 @@ RSpec.describe "bundle install from an existing gemspec" do
end
end
end
-
- context "on ruby", :bundler => "2" do
- before do
- simulate_platform("ruby")
- bundle :install
- end
-
- context "as a runtime dependency" do
- it "keeps java dependencies in the lockfile" do
- expect(the_bundle).to include_gems "foo 1.0", "platform_specific 1.0 RUBY"
- expect(lockfile).to eq normalize_uri_file(strip_whitespace(<<-L))
- GEM
- remote: file://localhost#{gem_repo2}/
- specs:
- platform_specific (1.0)
- platform_specific (1.0-java)
-
- PATH
- remote: .
- specs:
- foo (1.0)
- platform_specific
-
- PLATFORMS
- java
- ruby
-
- DEPENDENCIES
- foo!
-
- BUNDLED WITH
- #{Bundler::VERSION}
- L
- end
- end
-
- context "as a development dependency" do
- let(:platform_specific_type) { :development }
-
- it "keeps java dependencies in the lockfile" do
- expect(the_bundle).to include_gems "foo 1.0", "platform_specific 1.0 RUBY"
- expect(lockfile).to eq normalize_uri_file(strip_whitespace(<<-L))
- GEM
- remote: file://localhost#{gem_repo2}/
- specs:
- platform_specific (1.0)
- platform_specific (1.0-java)
-
- PATH
- remote: .
- specs:
- foo (1.0)
-
- PLATFORMS
- java
- ruby
-
- DEPENDENCIES
- foo!
- platform_specific
-
- BUNDLED WITH
- #{Bundler::VERSION}
- L
- end
- end
-
- context "with an indirect platform-specific development dependency" do
- let(:platform_specific_type) { :development }
- let(:dependency) { "indirect_platform_specific" }
-
- it "keeps java dependencies in the lockfile" do
- expect(the_bundle).to include_gems "foo 1.0", "indirect_platform_specific 1.0", "platform_specific 1.0 RUBY"
- expect(lockfile).to eq normalize_uri_file(strip_whitespace(<<-L))
- GEM
- remote: file://localhost#{gem_repo2}/
- specs:
- indirect_platform_specific (1.0)
- platform_specific
- platform_specific (1.0)
- platform_specific (1.0-java)
-
- PATH
- remote: .
- specs:
- foo (1.0)
-
- PLATFORMS
- java
- ruby
-
- DEPENDENCIES
- foo!
- indirect_platform_specific
-
- BUNDLED WITH
- #{Bundler::VERSION}
- L
- end
- end
- end
end
end
diff --git a/spec/install/gemfile/git_spec.rb b/spec/install/gemfile/git_spec.rb
index 08fe21cacf..8ca22f1d87 100644
--- a/spec/install/gemfile/git_spec.rb
+++ b/spec/install/gemfile/git_spec.rb
@@ -26,13 +26,13 @@ RSpec.describe "bundle install with git sources" do
expect(out).to eq("WIN")
end
- it "caches the git repo", :bundler => "< 2" do
+ it "caches the git repo", :bundler => "< 3" do
expect(Dir["#{default_bundle_path}/cache/bundler/git/foo-1.0-*"]).to have_attributes :size => 1
end
it "caches the git repo globally" do
simulate_new_machine
- bundle! "config global_gem_cache true"
+ bundle! "config set global_gem_cache true"
bundle! :install
expect(Dir["#{home}/.bundle/cache/git/foo-1.0-*"]).to have_attributes :size => 1
end
@@ -87,7 +87,7 @@ RSpec.describe "bundle install with git sources" do
gem "foo", "1.1", :git => "#{lib_path("foo-1.0")}"
G
- expect(out).to include("The source contains 'foo' at: 1.0")
+ expect(err).to include("The source contains 'foo' at: 1.0")
end
it "complains with version and platform if pinned specs don't exist in the git repo" do
@@ -103,7 +103,7 @@ RSpec.describe "bundle install with git sources" do
end
G
- expect(out).to include("The source contains 'only_java' at: 1.0 java")
+ expect(err).to include("The source contains 'only_java' at: 1.0 java")
end
it "complains with multiple versions and platforms if pinned specs don't exist in the git repo" do
@@ -124,7 +124,7 @@ RSpec.describe "bundle install with git sources" do
end
G
- expect(out).to include("The source contains 'only_java' at: 1.0 java, 1.1 java")
+ expect(err).to include("The source contains 'only_java' at: 1.0 java, 1.1 java")
end
it "still works after moving the application directory" do
@@ -204,7 +204,7 @@ RSpec.describe "bundle install with git sources" do
gem "foo"
end
G
- expect(err).to lack_errors
+ expect(err).to be_empty
run <<-RUBY
require 'foo'
@@ -221,7 +221,7 @@ RSpec.describe "bundle install with git sources" do
end
Dir.chdir(lib_path("foo-1.0")) do
- `git update-ref -m 'Bundler Spec!' refs/bundler/1 master~1`
+ `git update-ref -m "Bundler Spec!" refs/bundler/1 master~1`
end
# want to ensure we don't fallback to HEAD
@@ -234,7 +234,7 @@ RSpec.describe "bundle install with git sources" do
gem "foo"
end
G
- expect(err).to lack_errors
+ expect(err).to be_empty
run! <<-RUBY
require 'foo'
@@ -257,7 +257,7 @@ RSpec.describe "bundle install with git sources" do
end
Dir.chdir(lib_path("foo-1.0")) do
- `git update-ref -m 'Bundler Spec!' refs/bundler/1 master~1`
+ `git update-ref -m "Bundler Spec!" refs/bundler/1 master~1`
end
# want to ensure we don't fallback to HEAD
@@ -270,7 +270,7 @@ RSpec.describe "bundle install with git sources" do
gem "foo"
end
G
- expect(err).to lack_errors
+ expect(err).to be_empty
run! <<-RUBY
require 'foo'
@@ -282,10 +282,10 @@ RSpec.describe "bundle install with git sources" do
it "does not download random non-head refs" do
Dir.chdir(lib_path("foo-1.0")) do
- sys_exec!("git update-ref -m 'Bundler Spec!' refs/bundler/1 master~1")
+ sys_exec!('git update-ref -m "Bundler Spec!" refs/bundler/1 master~1')
end
- bundle! "config global_gem_cache true"
+ bundle! "config set global_gem_cache true"
install_gemfile! <<-G
git "#{lib_path("foo-1.0")}" do
@@ -294,7 +294,7 @@ RSpec.describe "bundle install with git sources" do
G
# ensure we also git fetch after cloning
- bundle! :update, :all => bundle_update_requires_all?
+ bundle! :update, :all => true
Dir.chdir(Dir[home(".bundle/cache/git/foo-*")].first) do
sys_exec("git ls-remote .")
@@ -406,7 +406,7 @@ RSpec.describe "bundle install with git sources" do
gem "rack", :git => "#{lib_path("rack-0.8")}", :branch => "master"
G
- bundle! %(config local.rack #{lib_path("local-rack")})
+ bundle! %(config set local.rack #{lib_path("local-rack")})
bundle! :install
run "require 'rack'"
@@ -427,7 +427,7 @@ RSpec.describe "bundle install with git sources" do
gem "rack", :git => "#{lib_path("rack-0.8")}", :branch => "master"
G
- bundle %(config local.rack #{lib_path("local-rack")})
+ bundle %(config set local.rack #{lib_path("local-rack")})
run "require 'rack'"
expect(out).to eq("LOCAL")
end
@@ -447,7 +447,7 @@ RSpec.describe "bundle install with git sources" do
gem "rack", :git => "#{lib_path("rack-0.8")}", :branch => "master"
G
- bundle! %(config local.rack #{lib_path("local-rack")})
+ bundle! %(config set local.rack #{lib_path("local-rack")})
bundle! :install
run! "require 'rack'"
expect(out).to eq("LOCAL")
@@ -470,7 +470,7 @@ RSpec.describe "bundle install with git sources" do
s.add_dependency "nokogiri", "1.4.2"
end
- bundle %(config local.rack #{lib_path("local-rack")})
+ bundle %(config set local.rack #{lib_path("local-rack")})
run "require 'rack'"
lockfile1 = File.read(bundled_app("Gemfile.lock"))
@@ -490,14 +490,14 @@ RSpec.describe "bundle install with git sources" do
FileUtils.cp_r("#{lib_path("rack-0.8")}/.", lib_path("local-rack"))
update_git "rack", "0.8", :path => lib_path("local-rack")
- bundle %(config local.rack #{lib_path("local-rack")})
+ bundle %(config set local.rack #{lib_path("local-rack")})
bundle :install
lockfile1 = File.read(bundled_app("Gemfile.lock"))
expect(lockfile1).not_to eq(lockfile0)
end
- it "explodes if given path does not exist on install" do
+ it "explodes and gives correct solution if given path does not exist on install" do
build_git "rack", "0.8"
install_gemfile <<-G
@@ -505,12 +505,20 @@ RSpec.describe "bundle install with git sources" do
gem "rack", :git => "#{lib_path("rack-0.8")}", :branch => "master"
G
- bundle %(config local.rack #{lib_path("local-rack")})
+ bundle %(config set local.rack #{lib_path("local-rack")})
bundle :install
- expect(out).to match(/Cannot use local override for rack-0.8 because #{Regexp.escape(lib_path('local-rack').to_s)} does not exist/)
+ expect(err).to match(/Cannot use local override for rack-0.8 because #{Regexp.escape(lib_path('local-rack').to_s)} does not exist/)
+
+ solution = "config unset local.rack"
+ expect(err).to match(/Run `bundle #{solution}` to remove the local override/)
+
+ bundle solution
+ bundle :install
+
+ expect(err).to be_empty
end
- it "explodes if branch is not given on install" do
+ it "explodes and gives correct solution if branch is not given on install" do
build_git "rack", "0.8"
FileUtils.cp_r("#{lib_path("rack-0.8")}/.", lib_path("local-rack"))
@@ -519,9 +527,17 @@ RSpec.describe "bundle install with git sources" do
gem "rack", :git => "#{lib_path("rack-0.8")}"
G
- bundle %(config local.rack #{lib_path("local-rack")})
+ bundle %(config set local.rack #{lib_path("local-rack")})
bundle :install
- expect(out).to match(/cannot use local override/i)
+ expect(err).to match(/Cannot use local override for rack-0.8 at #{Regexp.escape(lib_path('local-rack').to_s)} because :branch is not specified in Gemfile/)
+
+ solution = "config unset local.rack"
+ expect(err).to match(/Specify a branch or run `bundle #{solution}` to remove the local override/)
+
+ bundle solution
+ bundle :install
+
+ expect(err).to be_empty
end
it "does not explode if disable_local_branch_check is given" do
@@ -533,8 +549,8 @@ RSpec.describe "bundle install with git sources" do
gem "rack", :git => "#{lib_path("rack-0.8")}"
G
- bundle %(config local.rack #{lib_path("local-rack")})
- bundle %(config disable_local_branch_check true)
+ bundle %(config set local.rack #{lib_path("local-rack")})
+ bundle %(config set disable_local_branch_check true)
bundle :install
expect(out).to match(/Bundle complete!/)
end
@@ -553,9 +569,9 @@ RSpec.describe "bundle install with git sources" do
gem "rack", :git => "#{lib_path("rack-0.8")}", :branch => "master"
G
- bundle %(config local.rack #{lib_path("local-rack")})
+ bundle %(config set local.rack #{lib_path("local-rack")})
bundle :install
- expect(out).to match(/is using branch another but Gemfile specifies master/)
+ expect(err).to match(/is using branch another but Gemfile specifies master/)
end
it "explodes on invalid revision on install" do
@@ -570,9 +586,9 @@ RSpec.describe "bundle install with git sources" do
gem "rack", :git => "#{lib_path("rack-0.8")}", :branch => "master"
G
- bundle %(config local.rack #{lib_path("local-rack")})
+ bundle %(config set local.rack #{lib_path("local-rack")})
bundle :install
- expect(out).to match(/The Gemfile lock is pointing to revision \w+/)
+ expect(err).to match(/The Gemfile lock is pointing to revision \w+/)
end
end
@@ -709,7 +725,7 @@ RSpec.describe "bundle install with git sources" do
build_lib "bar", :path => lib_path("foo/bar"), :gemspec => false do |s|
s.write lib_path("foo/bar/lib/version.rb"), %(BAR_VERSION = '1.0')
s.write "bar.gemspec", <<-G
- $:.unshift Dir.pwd # For 1.9
+ $:.unshift Dir.pwd
require 'lib/version'
Gem::Specification.new do |s|
s.name = 'bar'
@@ -769,7 +785,7 @@ RSpec.describe "bundle install with git sources" do
bundle :install
- expect(out).to include("Git error:")
+ expect(err).to include("Git error:")
expect(err).to include("fatal")
expect(err).to include("omgomg")
end
@@ -798,14 +814,14 @@ RSpec.describe "bundle install with git sources" do
s.write "lib/forced.rb", "FORCED = '1.1'"
end
- bundle "update", :all => bundle_update_requires_all?
+ bundle "update", :all => true
expect(the_bundle).to include_gems "forced 1.1"
Dir.chdir(lib_path("forced-1.0")) do
`git reset --hard HEAD^`
end
- bundle "update", :all => bundle_update_requires_all?
+ bundle "update", :all => true
expect(the_bundle).to include_gems "forced 1.0"
end
@@ -824,7 +840,7 @@ RSpec.describe "bundle install with git sources" do
gem "has_submodule"
end
G
- expect(out).to match(/could not find gem 'submodule/i)
+ expect(err).to match(/could not find gem 'submodule/i)
expect(the_bundle).not_to include_gems "has_submodule 1.0"
end
@@ -910,7 +926,7 @@ RSpec.describe "bundle install with git sources" do
G
expect(exitstatus).to_not eq(0) if exitstatus
- expect(out).to include("Bundler could not install a gem because it " \
+ expect(err).to include("Bundler could not install a gem because it " \
"needs to create a directory, but a file exists " \
"- #{default_bundle_path("bundler")}")
end
@@ -1014,7 +1030,7 @@ RSpec.describe "bundle install with git sources" do
install_gemfile <<-G
gem "foo", :git => "file://#{lib_path("foo-1.0")}", :ref => "deadbeef"
G
- expect(out).to include("Revision deadbeef does not exist in the repository")
+ expect(err).to include("Revision deadbeef does not exist in the repository")
end
end
@@ -1051,7 +1067,7 @@ RSpec.describe "bundle install with git sources" do
bundle :install,
:requires => [lib_path("install_hooks.rb")]
- expect(err).to eq_err("Ran pre-install hook: foo-1.0")
+ expect(err_without_deprecations).to eq("Ran pre-install hook: foo-1.0")
end
it "runs post-install hooks" do
@@ -1071,7 +1087,7 @@ RSpec.describe "bundle install with git sources" do
bundle :install,
:requires => [lib_path("install_hooks.rb")]
- expect(err).to eq_err("Ran post-install hook: foo-1.0")
+ expect(err_without_deprecations).to eq("Ran post-install hook: foo-1.0")
end
it "complains if the install hook fails" do
@@ -1091,7 +1107,7 @@ RSpec.describe "bundle install with git sources" do
bundle :install,
:requires => [lib_path("install_hooks.rb")]
- expect(out).to include("failed for foo-1.0")
+ expect(err).to include("failed for foo-1.0")
end
end
@@ -1147,7 +1163,7 @@ RSpec.describe "bundle install with git sources" do
void Init_foo() { rb_define_global_function("foo", &foo, 0); }
C
end
- `git commit -m 'commit for iteration #{i}' ext/foo.c`
+ `git commit -m "commit for iteration #{i}" ext/foo.c`
end
git_commit_sha = git_reader.ref_for("HEAD")
@@ -1181,7 +1197,7 @@ RSpec.describe "bundle install with git sources" do
gem "foo", :git => "#{lib_path("foo-1.0")}"
G
- expect(last_command.bundler_err).to end_with(<<-M.strip)
+ expect(err).to end_with(<<-M.strip)
An error occurred while installing foo (1.0), and Bundler cannot continue.
In Gemfile:
@@ -1190,7 +1206,7 @@ In Gemfile:
expect(out).not_to include("gem install foo")
end
- it "does not reinstall the extension", :ruby_repo, :rubygems => ">= 2.3.0" do
+ it "does not reinstall the extension", :ruby_repo do
build_git "foo" do |s|
s.add_dependency "rake"
s.extensions << "Rakefile"
@@ -1231,7 +1247,7 @@ In Gemfile:
expect(out).to eq(installed_time)
end
- it "does not reinstall the extension when changing another gem", :rubygems => ">= 2.3.0" do
+ it "does not reinstall the extension when changing another gem", :ruby_repo do
build_git "foo" do |s|
s.add_dependency "rake"
s.extensions << "Rakefile"
@@ -1274,7 +1290,7 @@ In Gemfile:
expect(out).to eq(installed_time)
end
- it "does reinstall the extension when changing refs", :rubygems => ">= 2.3.0" do
+ it "does reinstall the extension when changing refs", :ruby_repo do
build_git "foo" do |s|
s.add_dependency "rake"
s.extensions << "Rakefile"
@@ -1362,9 +1378,9 @@ In Gemfile:
G
with_path_as("") do
- bundle "update", :all => bundle_update_requires_all?
+ bundle "update", :all => true
end
- expect(last_command.bundler_err).
+ expect(err).
to include("You need to install git to be able to use gems from git repositories. For help installing git, please refer to GitHub's tutorial at https://help.github.com/articles/set-up-git")
end
@@ -1386,7 +1402,7 @@ In Gemfile:
describe "when the git source is overridden with a local git repo" do
before do
- bundle! "config --global local.foo #{lib_path("foo")}"
+ bundle! "config set --global local.foo #{lib_path("foo")}"
end
describe "and git output is colorized" do
@@ -1421,7 +1437,7 @@ In Gemfile:
G
expect(last_command.stdboth).to_not include("password1")
- expect(last_command.stdout).to include("Fetching https://user1@github.com/company/private-repo")
+ expect(out).to include("Fetching https://user1@github.com/company/private-repo")
end
end
@@ -1436,7 +1452,7 @@ In Gemfile:
G
expect(last_command.stdboth).to_not include("oauth_token")
- expect(last_command.stdout).to include("Fetching https://x-oauth-basic@github.com/company/private-repo")
+ expect(out).to include("Fetching https://x-oauth-basic@github.com/company/private-repo")
end
end
end
diff --git a/spec/install/gemfile/groups_spec.rb b/spec/install/gemfile/groups_spec.rb
index 19c379e188..f836499148 100644
--- a/spec/install/gemfile/groups_spec.rb
+++ b/spec/install/gemfile/groups_spec.rb
@@ -25,7 +25,7 @@ RSpec.describe "bundle install with groups" do
puts ACTIVESUPPORT
R
- expect(err).to eq_err("ZOMG LOAD ERROR")
+ expect(err_without_deprecations).to eq("ZOMG LOAD ERROR")
end
it "installs gems with inline :groups into those groups" do
@@ -36,7 +36,7 @@ RSpec.describe "bundle install with groups" do
puts THIN
R
- expect(err).to eq_err("ZOMG LOAD ERROR")
+ expect(err_without_deprecations).to eq("ZOMG LOAD ERROR")
end
it "sets up everything if Bundler.setup is used with no groups" do
@@ -57,7 +57,7 @@ RSpec.describe "bundle install with groups" do
puts THIN
RUBY
- expect(err).to eq_err("ZOMG LOAD ERROR")
+ expect(err_without_deprecations).to eq("ZOMG LOAD ERROR")
end
it "sets up old groups when they have previously been removed" do
@@ -192,22 +192,22 @@ RSpec.describe "bundle install with groups" do
expect(the_bundle).not_to include_gems "thin 1.0"
end
- it "does remove groups from without when passed at --with", :bundler => "< 2" do
+ it "does remove groups from without when passed at --with", :bundler => "< 3" do
bundle :install, forgotten_command_line_options(:without => "emo")
bundle :install, forgotten_command_line_options(:with => "emo")
expect(the_bundle).to include_gems "activesupport 2.3.5"
end
- it "does remove groups from with when passed at --without", :bundler => "< 2" do
+ it "does remove groups from with when passed at --without", :bundler => "< 3" do
bundle :install, forgotten_command_line_options(:with => "debugging")
bundle :install, forgotten_command_line_options(:without => "debugging")
expect(the_bundle).not_to include_gem "thin 1.0"
end
- it "errors out when passing a group to with and without via CLI flags", :bundler => "< 2" do
+ it "errors out when passing a group to with and without via CLI flags", :bundler => "< 3" do
bundle :install, forgotten_command_line_options(:with => "emo debugging", :without => "emo")
expect(last_command).to be_failure
- expect(out).to include("The offending groups are: emo")
+ expect(err).to include("The offending groups are: emo")
end
it "allows the BUNDLE_WITH setting to override BUNDLE_WITHOUT" do
diff --git a/spec/install/gemfile/lockfile_spec.rb b/spec/install/gemfile/lockfile_spec.rb
index dc1baca6ea..96cd5067be 100644
--- a/spec/install/gemfile/lockfile_spec.rb
+++ b/spec/install/gemfile/lockfile_spec.rb
@@ -16,7 +16,7 @@ RSpec.describe "bundle install with a lockfile present" do
context "with plugins disabled" do
before do
- bundle! "config plugins false"
+ bundle! "config set plugins false"
subject
end
diff --git a/spec/install/gemfile/path_spec.rb b/spec/install/gemfile/path_spec.rb
index 44d1e67106..c6856ac974 100644
--- a/spec/install/gemfile/path_spec.rb
+++ b/spec/install/gemfile/path_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
RSpec.describe "bundle install with explicit source paths" do
- it "fetches gems with a global path source", :bundler => "< 2" do
+ it "fetches gems with a global path source", :bundler => "< 3" do
build_lib "foo"
install_gemfile <<-G
@@ -66,8 +66,8 @@ RSpec.describe "bundle install with explicit source paths" do
install_gemfile <<-G
gem 'foo', :path => "~#{username}/#{relative_path}"
G
- expect(out).to match("There was an error while trying to use the path `~#{username}/#{relative_path}`.")
- expect(out).to match("user #{username} doesn't exist")
+ expect(err).to match("There was an error while trying to use the path `~#{username}/#{relative_path}`.")
+ expect(err).to match("user #{username} doesn't exist")
end
it "expands paths relative to Bundler.root" do
@@ -167,7 +167,7 @@ RSpec.describe "bundle install with explicit source paths" do
expect(the_bundle).to include_gems "premailer 1.0.0"
end
- it "warns on invalid specs", :rubygems => "1.7" do
+ it "warns on invalid specs" do
build_lib "foo"
gemspec = lib_path("foo-1.0").join("foo.gemspec").to_s
@@ -183,11 +183,11 @@ RSpec.describe "bundle install with explicit source paths" do
gem "foo", :path => "#{lib_path("foo-1.0")}"
G
- expect(out).to_not include("ERROR REPORT")
- expect(out).to_not include("Your Gemfile has no gem server sources.")
- expect(out).to match(/is not valid. Please fix this gemspec./)
- expect(out).to match(/The validation error was 'missing value for attribute version'/)
- expect(out).to match(/You have one or more invalid gemspecs that need to be fixed/)
+ expect(err).to_not include("ERROR REPORT")
+ expect(err).to_not include("Your Gemfile has no gem server sources.")
+ expect(err).to match(/is not valid. Please fix this gemspec./)
+ expect(err).to match(/The validation error was 'missing value for attribute version'/)
+ expect(err).to match(/You have one or more invalid gemspecs that need to be fixed/)
end
it "supports gemspec syntax" do
@@ -274,7 +274,7 @@ RSpec.describe "bundle install with explicit source paths" do
G
expect(exitstatus).to eq(15) if exitstatus
- expect(out).to match(/There are multiple gemspecs/)
+ expect(err).to match(/There are multiple gemspecs/)
end
it "allows :name to be specified to resolve ambiguity" do
@@ -313,7 +313,7 @@ RSpec.describe "bundle install with explicit source paths" do
install_gemfile <<-G
gem 'foo', '1.0', :path => "#{lib_path("foo-1.0")}"
G
- expect(err).to lack_errors
+ expect(err).to be_empty
end
it "removes the .gem file after installing" do
@@ -575,7 +575,7 @@ RSpec.describe "bundle install with explicit source paths" do
bundle :install,
:requires => [lib_path("install_hooks.rb")]
- expect(err).to eq_err("Ran pre-install hook: foo-1.0")
+ expect(err_without_deprecations).to eq("Ran pre-install hook: foo-1.0")
end
it "runs post-install hooks" do
@@ -595,7 +595,7 @@ RSpec.describe "bundle install with explicit source paths" do
bundle :install,
:requires => [lib_path("install_hooks.rb")]
- expect(err).to eq_err("Ran post-install hook: foo-1.0")
+ expect(err_without_deprecations).to eq("Ran post-install hook: foo-1.0")
end
it "complains if the install hook fails" do
@@ -615,7 +615,7 @@ RSpec.describe "bundle install with explicit source paths" do
bundle :install,
:requires => [lib_path("install_hooks.rb")]
- expect(out).to include("failed for foo-1.0")
+ expect(err).to include("failed for foo-1.0")
end
it "loads plugins from the path gem" do
diff --git a/spec/install/gemfile/platform_spec.rb b/spec/install/gemfile/platform_spec.rb
index bfdf9b68c8..891f766cc0 100644
--- a/spec/install/gemfile/platform_spec.rb
+++ b/spec/install/gemfile/platform_spec.rb
@@ -230,7 +230,7 @@ RSpec.describe "bundle install across platforms" do
expect(the_bundle).to include_gems "nokogiri 1.4.2 JAVA", "weakling 0.0.3"
end
- it "works with gems that have extra platform-specific runtime dependencies", :bundler => "< 2" do
+ it "works with gems that have extra platform-specific runtime dependencies", :bundler => "< 3" do
simulate_platform x64_mac
update_repo2 do
@@ -248,9 +248,9 @@ RSpec.describe "bundle install across platforms" do
gem "facter"
G
- expect(out).to include "Unable to use the platform-specific (universal-darwin) version of facter (2.4.6) " \
+ expect(err).to include "Unable to use the platform-specific (universal-darwin) version of facter (2.4.6) " \
"because it has different dependencies from the ruby version. " \
- "To use the platform-specific version of the gem, run `bundle config specific_platform true` and install again."
+ "To use the platform-specific version of the gem, run `bundle config set specific_platform true` and install again."
expect(the_bundle).to include_gem "facter 2.4.6"
expect(the_bundle).not_to include_gem "CFPropertyList"
@@ -265,8 +265,7 @@ RSpec.describe "bundle install across platforms" do
bundle! :install, forgotten_command_line_options(:path => "vendor/bundle")
- new_version = Gem::ConfigMap[:ruby_version] == "1.8" ? "1.9.1" : "1.8"
- FileUtils.mv(vendored_gems, bundled_app("vendor/bundle", Gem.ruby_engine, new_version))
+ FileUtils.mv(vendored_gems, bundled_app("vendor/bundle", Gem.ruby_engine, "1.8"))
bundle! :install
expect(vendored_gems("gems/rack-1.0.0")).to exist
@@ -385,13 +384,13 @@ RSpec.describe "bundle install with platform conditionals" do
bundle! "install"
- expect(out).to include <<-O.strip
+ expect(err).to include <<-O.strip
The dependency #{Gem::Dependency.new("rack", ">= 0")} will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.
O
end
context "when disable_platform_warnings is true" do
- before { bundle! "config disable_platform_warnings true" }
+ before { bundle! "config set disable_platform_warnings true" }
it "does not print the warning when a dependency is unused on any platform" do
simulate_platform "ruby"
diff --git a/spec/install/gemfile/ruby_spec.rb b/spec/install/gemfile/ruby_spec.rb
index 24fe021fa3..3373c9bd3e 100644
--- a/spec/install/gemfile/ruby_spec.rb
+++ b/spec/install/gemfile/ruby_spec.rb
@@ -103,6 +103,6 @@ RSpec.describe "ruby requirement" do
gem "rack"
G
- expect(out).to include("There was an error parsing") # i.e. DSL error, not error template
+ expect(err).to include("There was an error parsing") # i.e. DSL error, not error template
end
end
diff --git a/spec/install/gemfile/sources_spec.rb b/spec/install/gemfile/sources_spec.rb
index 384deca7c2..8e1205dfa3 100644
--- a/spec/install/gemfile/sources_spec.rb
+++ b/spec/install/gemfile/sources_spec.rb
@@ -15,7 +15,7 @@ RSpec.describe "bundle install with gems on multiple sources" do
end
end
- context "with multiple toplevel sources" do
+ context "with multiple toplevel sources", :bundler => "< 3" do
let(:repo3_rack_version) { "1.0.0" }
before do
@@ -25,27 +25,24 @@ RSpec.describe "bundle install with gems on multiple sources" do
gem "rack-obama"
gem "rack"
G
- bundle "config major_deprecations true"
end
- it "warns about ambiguous gems, but installs anyway, prioritizing sources last to first", :bundler => "< 2" do
+ it "warns about ambiguous gems, but installs anyway, prioritizing sources last to first", :bundler => "2" do
bundle :install
- expect(out).to have_major_deprecation a_string_including("Your Gemfile contains multiple primary sources.")
- expect(out).to include("Warning: the gem 'rack' was found in multiple sources.")
- expect(out).to include(normalize_uri_file("Installed from: file://localhost#{gem_repo1}"))
+ expect(err).to include("Warning: the gem 'rack' was found in multiple sources.")
+ expect(err).to include(normalize_uri_file("Installed from: file://localhost#{gem_repo1}"))
expect(the_bundle).to include_gems("rack-obama 1.0.0", "rack 1.0.0", :source => "remote1")
end
- it "errors when disable_multisource is set" do
- bundle "config disable_multisource true"
+ it "fails", :bundler => "3" do
bundle :install
- expect(out).to include("Each source after the first must include a block")
+ expect(err).to include("Each source after the first must include a block")
expect(exitstatus).to eq(4) if exitstatus
end
end
- context "when different versions of the same gem are in multiple sources" do
+ context "when different versions of the same gem are in multiple sources", :bundler => "< 3" do
let(:repo3_rack_version) { "1.2" }
before do
@@ -55,17 +52,20 @@ RSpec.describe "bundle install with gems on multiple sources" do
gem "rack-obama"
gem "rack", "1.0.0" # force it to install the working version in repo1
G
- bundle "config major_deprecations true"
- end
- it "warns about ambiguous gems, but installs anyway", :bundler => "< 2" do
bundle :install
+ end
- expect(out).to have_major_deprecation a_string_including("Your Gemfile contains multiple primary sources.")
- expect(out).to include("Warning: the gem 'rack' was found in multiple sources.")
- expect(out).to include(normalize_uri_file("Installed from: file://localhost#{gem_repo1}"))
+ it "warns about ambiguous gems, but installs anyway", :bundler => "2" do
+ expect(err).to include("Warning: the gem 'rack' was found in multiple sources.")
+ expect(err).to include(normalize_uri_file("Installed from: file://localhost#{gem_repo1}"))
expect(the_bundle).to include_gems("rack-obama 1.0.0", "rack 1.0.0", :source => "remote1")
end
+
+ it "fails", :bundler => "3" do
+ expect(err).to include("Each source after the first must include a block")
+ expect(exitstatus).to eq(4) if exitstatus
+ end
end
end
@@ -187,10 +187,9 @@ RSpec.describe "bundle install with gems on multiple sources" do
end
end
- context "when lockfile_uses_separate_rubygems_sources is set" do
+ context "when disable_multisource is set" do
before do
- bundle! "config lockfile_uses_separate_rubygems_sources true"
- bundle! "config disable_multisource true"
+ bundle! "config set disable_multisource true"
end
it "installs from the same source without any warning" do
@@ -237,7 +236,7 @@ RSpec.describe "bundle install with gems on multiple sources" do
end
end
- context "and in yet another source" do
+ context "and in yet another source", :bundler => "< 3" do
before do
gemfile <<-G
source "file://localhost#{gem_repo1}"
@@ -246,19 +245,23 @@ RSpec.describe "bundle install with gems on multiple sources" do
gem "depends_on_rack"
end
G
- end
- it "installs from the other source and warns about ambiguous gems", :bundler => "< 2" do
- bundle "config major_deprecations true"
bundle :install
- expect(out).to have_major_deprecation a_string_including("Your Gemfile contains multiple primary sources.")
- expect(out).to include("Warning: the gem 'rack' was found in multiple sources.")
- expect(out).to include(normalize_uri_file("Installed from: file://localhost#{gem_repo2}"))
+ end
+
+ it "installs from the other source and warns about ambiguous gems", :bundler => "2" do
+ expect(err).to include("Warning: the gem 'rack' was found in multiple sources.")
+ expect(err).to include(normalize_uri_file("Installed from: file://localhost#{gem_repo2}"))
expect(the_bundle).to include_gems("depends_on_rack 1.0.1", "rack 1.0.0")
end
+
+ it "fails", :bundler => "3" do
+ expect(err).to include("Each source after the first must include a block")
+ expect(exitstatus).to eq(4) if exitstatus
+ end
end
- context "and only the dependency is pinned" do
+ context "and only the dependency is pinned", :bundler => "< 3" do
before do
# need this to be broken to check for correct source ordering
build_repo gem_repo2 do
@@ -276,10 +279,10 @@ RSpec.describe "bundle install with gems on multiple sources" do
G
end
- it "installs the dependency from the pinned source without warning", :bundler => "< 2" do
+ it "installs the dependency from the pinned source without warning", :bundler => "2" do
bundle :install
- expect(out).not_to include("Warning: the gem 'rack' was found in multiple sources.")
+ expect(err).not_to include("Warning: the gem 'rack' was found in multiple sources.")
expect(the_bundle).to include_gems("depends_on_rack 1.0.1", "rack 1.0.0")
# In https://github.com/bundler/bundler/issues/3585 this failed
@@ -287,18 +290,23 @@ RSpec.describe "bundle install with gems on multiple sources" do
system_gems []
bundle :install
- expect(out).not_to include("Warning: the gem 'rack' was found in multiple sources.")
+ expect(err).not_to include("Warning: the gem 'rack' was found in multiple sources.")
expect(the_bundle).to include_gems("depends_on_rack 1.0.1", "rack 1.0.0")
end
+
+ it "fails", :bundler => "3" do
+ bundle :install
+ expect(err).to include("Each source after the first must include a block")
+ expect(exitstatus).to eq(4) if exitstatus
+ end
end
end
end
context "when a top-level gem has an indirect dependency" do
- context "when lockfile_uses_separate_rubygems_sources is set" do
+ context "when disable_multisource is set" do
before do
- bundle! "config lockfile_uses_separate_rubygems_sources true"
- bundle! "config disable_multisource true"
+ bundle! "config set disable_multisource true"
end
before do
@@ -332,7 +340,7 @@ RSpec.describe "bundle install with gems on multiple sources" do
it "installs all gems without warning" do
bundle :install
- expect(out).not_to include("Warning")
+ expect(err).not_to include("Warning")
expect(the_bundle).to include_gems("depends_on_rack 1.0.1", "rack 1.0.0", "unrelated_gem 1.0.0")
end
end
@@ -348,7 +356,7 @@ RSpec.describe "bundle install with gems on multiple sources" do
it "does not find the dependency" do
bundle :install
- expect(out).to include("Could not find gem 'rack', which is required by gem 'depends_on_rack', in any of the relevant sources")
+ expect(err).to include("Could not find gem 'rack', which is required by gem 'depends_on_rack', in any of the relevant sources")
end
end
@@ -367,7 +375,7 @@ RSpec.describe "bundle install with gems on multiple sources" do
it "installs the dependency from the top-level source without warning" do
bundle :install
- expect(out).not_to include("Warning")
+ expect(err).not_to include("Warning")
expect(the_bundle).to include_gems("depends_on_rack 1.0.1", "rack 1.0.0", "unrelated_gem 1.0.0")
end
end
@@ -388,7 +396,7 @@ RSpec.describe "bundle install with gems on multiple sources" do
it "does not install the gem" do
bundle :install
- expect(out).to include("Could not find gem 'not_in_repo1'")
+ expect(err).to include("Could not find gem 'not_in_repo1'")
end
end
@@ -437,7 +445,7 @@ RSpec.describe "bundle install with gems on multiple sources" do
it "does not unlock the non-path gem after install" do
bundle! :install
- bundle! %(exec ruby -e 'puts "OK"'), :env => { :RUBYOPT => "-r#{spec_dir.join("support/hax")}" }
+ bundle! %(exec ruby -e 'puts "OK"')
expect(out).to include("OK")
end
@@ -456,7 +464,7 @@ RSpec.describe "bundle install with gems on multiple sources" do
it "installs the gems without any warning" do
bundle :install
- expect(out).not_to include("Warning")
+ expect(err).not_to include("Warning")
expect(the_bundle).to include_gems("rack 1.0.0")
end
end
@@ -617,7 +625,39 @@ RSpec.describe "bundle install with gems on multiple sources" do
end
end
- context "when a gem is available from multiple ambiguous sources", :bundler => "2" do
+ describe "source changed to one containing a higher version of a dependency" do
+ before do
+ install_gemfile! <<-G
+ source "file://#{gem_repo1}"
+
+ gem "rack"
+ G
+
+ build_repo2 do
+ build_gem "bar"
+ end
+
+ build_lib("gemspec_test", :path => tmp.join("gemspec_test")) do |s|
+ s.add_dependency "bar", "=1.0.0"
+ end
+
+ install_gemfile <<-G
+ source "file://#{gem_repo2}"
+ gem "rack"
+ gemspec :path => "#{tmp.join("gemspec_test")}"
+ G
+ end
+
+ it "keeps the old version", :bundler => "2" do
+ expect(the_bundle).to include_gems("rack 1.0.0")
+ end
+
+ it "installs the higher version in the new repo", :bundler => "3" do
+ expect(the_bundle).to include_gems("rack 1.2")
+ end
+ end
+
+ context "when a gem is available from multiple ambiguous sources", :bundler => "3" do
it "raises, suggesting a source block" do
build_repo4 do
build_gem "depends_on_rack" do |s|
@@ -634,7 +674,7 @@ RSpec.describe "bundle install with gems on multiple sources" do
gem "depends_on_rack"
G
expect(last_command).to be_failure
- expect(last_command.stderr).to eq normalize_uri_file(strip_whitespace(<<-EOS).strip)
+ expect(err).to eq normalize_uri_file(strip_whitespace(<<-EOS).strip)
The gem 'rack' was found in multiple relevant sources.
* rubygems repository file://localhost#{gem_repo1}/ or installed locally
* rubygems repository file://localhost#{gem_repo4}/ or installed locally
diff --git a/spec/install/gemfile/specific_platform_spec.rb b/spec/install/gemfile/specific_platform_spec.rb
index 9c725416d5..2c482b7ad4 100644
--- a/spec/install/gemfile/specific_platform_spec.rb
+++ b/spec/install/gemfile/specific_platform_spec.rb
@@ -2,7 +2,7 @@
RSpec.describe "bundle install with specific_platform enabled" do
before do
- bundle "config specific_platform true"
+ bundle "config set specific_platform true"
build_repo2 do
build_gem("google-protobuf", "3.0.0.alpha.5.0.5.1")
diff --git a/spec/install/gemfile_spec.rb b/spec/install/gemfile_spec.rb
index e74c5ffe59..c26fbd74e7 100644
--- a/spec/install/gemfile_spec.rb
+++ b/spec/install/gemfile_spec.rb
@@ -1,4 +1,3 @@
-# encoding: utf-8
# frozen_string_literal: true
RSpec.describe "bundle install" do
@@ -8,7 +7,7 @@ RSpec.describe "bundle install" do
gem 'rails', '~> 4.0.0'
gem 'rails', '~> 4.0.0'
G
- expect(out).to include("more than once")
+ expect(err).to include("more than once")
end
end
@@ -35,7 +34,7 @@ RSpec.describe "bundle install" do
gem 'rack'
G
- bundle "config --local gemfile #{bundled_app("NotGemfile")}"
+ bundle "config set --local gemfile #{bundled_app("NotGemfile")}"
end
it "uses the gemfile to install" do
bundle "install"
@@ -65,23 +64,7 @@ RSpec.describe "bundle install" do
G
bundle :install
- expect(out).to match(/You passed :lib as an option for gem 'rack', but it is invalid/)
- end
- end
-
- context "with prefer_gems_rb set" do
- before { bundle! "config prefer_gems_rb true" }
-
- it "prefers gems.rb to Gemfile" do
- create_file("gems.rb", "gem 'bundler'")
- create_file("Gemfile", "raise 'wrong Gemfile!'")
-
- bundle! :install
-
- expect(bundled_app("gems.rb")).to be_file
- expect(bundled_app("Gemfile.lock")).not_to be_file
-
- expect(the_bundle).to include_gem "bundler #{Bundler::VERSION}"
+ expect(err).to match(/You passed :lib as an option for gem 'rack', but it is invalid/)
end
end
@@ -116,8 +99,6 @@ RSpec.describe "bundle install" do
context "with a Gemfile containing non-US-ASCII characters" do
it "reads the Gemfile with the UTF-8 encoding by default" do
- skip "Ruby 1.8 has no encodings" if RUBY_VERSION < "1.9"
-
install_gemfile <<-G
str = "Il était une fois ..."
puts "The source encoding is: " + str.encoding.name
@@ -129,8 +110,6 @@ RSpec.describe "bundle install" do
end
it "respects the magic encoding comment" do
- skip "Ruby 1.8 has no encodings" if RUBY_VERSION < "1.9"
-
# NOTE: This works thanks to #eval interpreting the magic encoding comment
install_gemfile <<-G
# encoding: iso-8859-1
diff --git a/spec/install/gems/compact_index_spec.rb b/spec/install/gems/compact_index_spec.rb
index 02a37a77d5..e35b630306 100644
--- a/spec/install/gems/compact_index_spec.rb
+++ b/spec/install/gems/compact_index_spec.rb
@@ -22,7 +22,7 @@ RSpec.describe "compact index api" do
G
bundle :install, :artifice => "compact_index"
- expect(out).to include("' sinatra' is not a valid gem name because it contains whitespace.")
+ expect(err).to include("' sinatra' is not a valid gem name because it contains whitespace.")
end
it "should handle nested dependencies" do
@@ -60,7 +60,7 @@ RSpec.describe "compact index api" do
# can't use `include_gems` here since the `require` will conflict on a
# case-insensitive FS
run! "Bundler.require; puts Gem.loaded_specs.values_at('rack', 'Rack').map(&:full_name)"
- expect(last_command.stdout).to eq("rack-1.0\nRack-0.1")
+ expect(out).to eq("rack-1.0\nRack-0.1")
end
it "should handle multiple gem dependencies on the same gem" do
@@ -226,7 +226,7 @@ The checksum of /versions does not match the checksum provided by the server! So
G
bundle :install, :artifice => "compact_index_redirects"
- expect(out).to match(/Too many redirects/)
+ expect(err).to match(/Too many redirects/)
end
context "when --full-index is specified" do
@@ -247,7 +247,7 @@ The checksum of /versions does not match the checksum provided by the server! So
gem "rack"
G
- bundle! "update --full-index", :artifice => "compact_index", :all => bundle_update_requires_all?
+ bundle! "update --full-index", :artifice => "compact_index", :all => true
expect(out).to include("Fetching source index from #{source_uri}")
expect(the_bundle).to include_gems "rack 1.0.0"
end
@@ -255,7 +255,7 @@ The checksum of /versions does not match the checksum provided by the server! So
it "does not double check for gems that are only installed locally" do
system_gems %w[rack-1.0.0 thin-1.0 net_a-1.0]
- bundle! "config --local path.system true"
+ bundle! "config set --local path.system true"
ENV["BUNDLER_SPEC_ALL_REQUESTS"] = strip_whitespace(<<-EOS).strip
#{source_uri}/versions
#{source_uri}/info/rack
@@ -269,7 +269,7 @@ The checksum of /versions does not match the checksum provided by the server! So
expect(last_command.stdboth).not_to include "Double checking"
end
- it "fetches again when more dependencies are found in subsequent sources", :bundler => "< 2" do
+ it "fetches again when more dependencies are found in subsequent sources", :bundler => "< 3" do
build_repo2 do
build_gem "back_deps" do |s|
s.add_dependency "foo"
@@ -328,7 +328,7 @@ The checksum of /versions does not match the checksum provided by the server! So
expect(the_bundle).to include_gems "rack 1.2"
end
- it "considers all possible versions of dependencies from all api gem sources", :bundler => "< 2" do
+ it "considers all possible versions of dependencies from all api gem sources", :bundler => "< 3" do
# In this scenario, the gem "somegem" only exists in repo4. It depends on specific version of activesupport that
# exists only in repo1. There happens also be a version of activesupport in repo4, but not the one that version 1.0.0
# of somegem wants. This test makes sure that bundler actually finds version 1.2.3 of active support in the other
@@ -352,7 +352,7 @@ The checksum of /versions does not match the checksum provided by the server! So
expect(the_bundle).to include_gems "activesupport 1.2.3"
end
- it "considers all possible versions of dependencies from all api gem sources when using blocks", :bundler => "< 2" do
+ it "considers all possible versions of dependencies from all api gem sources when using blocks", :bundler => "< 3" do
# In this scenario, the gem "somegem" only exists in repo4. It depends on specific version of activesupport that
# exists only in repo1. There happens also be a version of activesupport in repo4, but not the one that version 1.0.0
# of somegem wants. This test makes sure that bundler actually finds version 1.2.3 of active support in the other
@@ -458,7 +458,7 @@ The checksum of /versions does not match the checksum provided by the server! So
expect(the_bundle).to include_gems "foo 1.0"
end
- it "fetches again when more dependencies are found in subsequent sources using --deployment", :bundler => "< 2" do
+ it "fetches again when more dependencies are found in subsequent sources using --deployment", :bundler => "< 3" do
build_repo2 do
build_gem "back_deps" do |s|
s.add_dependency "foo"
@@ -522,7 +522,7 @@ The checksum of /versions does not match the checksum provided by the server! So
expect(the_bundle).to include_gems "rails 2.3.2"
end
- it "installs the binstubs", :bundler => "< 2" do
+ it "installs the binstubs", :bundler => "< 3" do
gemfile <<-G
source "#{source_uri}"
gem "rack"
@@ -534,7 +534,7 @@ The checksum of /versions does not match the checksum provided by the server! So
expect(out).to eq("1.0.0")
end
- it "installs the bins when using --path and uses autoclean", :bundler => "< 2" do
+ it "installs the bins when using --path and uses autoclean", :bundler => "< 3" do
gemfile <<-G
source "#{source_uri}"
gem "rack"
@@ -545,7 +545,7 @@ The checksum of /versions does not match the checksum provided by the server! So
expect(vendored_gems("bin/rackup")).to exist
end
- it "installs the bins when using --path and uses bundle clean", :bundler => "< 2" do
+ it "installs the bins when using --path and uses bundle clean", :bundler => "< 3" do
gemfile <<-G
source "#{source_uri}"
gem "rack"
@@ -620,7 +620,7 @@ The checksum of /versions does not match the checksum provided by the server! So
expect(out).not_to include("#{user}:#{password}")
end
- it "strips http basic auth creds when warning about ambiguous sources", :bundler => "< 2" do
+ it "strips http basic auth creds when warning about ambiguous sources", :bundler => "< 3" do
gemfile <<-G
source "#{basic_auth_source_uri}"
source "file://#{gem_repo1}"
@@ -628,8 +628,8 @@ The checksum of /versions does not match the checksum provided by the server! So
G
bundle! :install, :artifice => "compact_index_basic_authentication"
- expect(out).to include("Warning: the gem 'rack' was found in multiple sources.")
- expect(out).not_to include("#{user}:#{password}")
+ expect(err).to include("Warning: the gem 'rack' was found in multiple sources.")
+ expect(err).not_to include("#{user}:#{password}")
expect(the_bundle).to include_gems "rack 1.0.0"
end
@@ -652,7 +652,7 @@ The checksum of /versions does not match the checksum provided by the server! So
end
it "reads authentication details by host name from bundle config" do
- bundle "config #{source_hostname} #{user}:#{password}"
+ bundle "config set #{source_hostname} #{user}:#{password}"
bundle! :install, :artifice => "compact_index_strict_basic_authentication"
@@ -662,7 +662,7 @@ The checksum of /versions does not match the checksum provided by the server! So
it "reads authentication details by full url from bundle config" do
# The trailing slash is necessary here; Fetcher canonicalizes the URI.
- bundle "config #{source_uri}/ #{user}:#{password}"
+ bundle "config set #{source_uri}/ #{user}:#{password}"
bundle! :install, :artifice => "compact_index_strict_basic_authentication"
@@ -671,7 +671,7 @@ The checksum of /versions does not match the checksum provided by the server! So
end
it "should use the API" do
- bundle "config #{source_hostname} #{user}:#{password}"
+ bundle "config set #{source_hostname} #{user}:#{password}"
bundle! :install, :artifice => "compact_index_strict_basic_authentication"
expect(out).to include("Fetching gem metadata from #{source_uri}")
expect(the_bundle).to include_gems "rack 1.0.0"
@@ -683,7 +683,7 @@ The checksum of /versions does not match the checksum provided by the server! So
gem "rack"
G
- bundle "config #{source_hostname} otheruser:wrong"
+ bundle "config set #{source_hostname} otheruser:wrong"
bundle! :install, :artifice => "compact_index_strict_basic_authentication"
expect(the_bundle).to include_gems "rack 1.0.0"
@@ -691,14 +691,14 @@ The checksum of /versions does not match the checksum provided by the server! So
it "shows instructions if auth is not provided for the source" do
bundle :install, :artifice => "compact_index_strict_basic_authentication"
- expect(out).to include("bundle config #{source_hostname} username:password")
+ expect(err).to include("bundle config set #{source_hostname} username:password")
end
it "fails if authentication has already been provided, but failed" do
- bundle "config #{source_hostname} #{user}:wrong"
+ bundle "config set #{source_hostname} #{user}:wrong"
bundle :install, :artifice => "compact_index_strict_basic_authentication"
- expect(out).to include("Bad username or password")
+ expect(err).to include("Bad username or password")
end
end
@@ -737,7 +737,7 @@ The checksum of /versions does not match the checksum provided by the server! So
G
bundle :install, :env => { "RUBYOPT" => "-I#{bundled_app("broken_ssl")}" }
- expect(out).to include("OpenSSL")
+ expect(err).to include("OpenSSL")
end
end
@@ -757,7 +757,7 @@ The checksum of /versions does not match the checksum provided by the server! So
G
bundle :install
- expect(out).to match(/could not verify the SSL certificate/i)
+ expect(err).to match(/could not verify the SSL certificate/i)
end
end
@@ -858,12 +858,12 @@ The checksum of /versions does not match the checksum provided by the server! So
gem "rack"
G
expect(exitstatus).to eq(15) if exitstatus
- expect(out).to end_with(<<-E.strip)
+ expect(err).to end_with(<<-E.strip)
The request uri `htps://index.rubygems.org/versions` has an invalid scheme (`htps`). Did you mean `http` or `https`?
E
end
- describe "checksum validation", :rubygems => ">= 2.3.0" do
+ describe "checksum validation" do
it "raises when the checksum does not match" do
install_gemfile <<-G, :artifice => "compact_index_wrong_gem_checksum"
source "#{source_uri}"
@@ -871,7 +871,7 @@ The checksum of /versions does not match the checksum provided by the server! So
G
expect(exitstatus).to eq(19) if exitstatus
- expect(out).
+ expect(err).
to include("Bundler cannot continue installing rack (1.0.0).").
and include("The checksum for the downloaded `rack-1.0.0.gem` does not match the checksum given by the server.").
and include("This means the contents of the downloaded gem is different from what was uploaded to the server, and could be a potential security issue.").
@@ -879,7 +879,7 @@ The checksum of /versions does not match the checksum provided by the server! So
and include("1. delete the downloaded gem located at: `#{default_bundle_path}/gems/rack-1.0.0/rack-1.0.0.gem`").
and include("2. run `bundle install`").
and include("If you wish to continue installing the downloaded gem, and are certain it does not pose a security issue despite the mismatching checksum, do the following:").
- and include("1. run `bundle config disable_checksum_validation true` to turn off checksum verification").
+ and include("1. run `bundle config set disable_checksum_validation true` to turn off checksum verification").
and include("2. run `bundle install`").
and match(/\(More info: The expected SHA256 checksum was "#{"ab" * 22}", but the checksum for the downloaded gem was ".+?"\.\)/)
end
@@ -890,11 +890,11 @@ The checksum of /versions does not match the checksum provided by the server! So
gem "rack"
G
expect(exitstatus).to eq(5) if exitstatus
- expect(out).to include("The given checksum for rack-1.0.0 (\"checksum!\") is not a valid SHA256 hexdigest nor base64digest")
+ expect(err).to include("The given checksum for rack-1.0.0 (\"checksum!\") is not a valid SHA256 hexdigest nor base64digest")
end
it "does not raise when disable_checksum_validation is set" do
- bundle! "config disable_checksum_validation true"
+ bundle! "config set disable_checksum_validation true"
install_gemfile! <<-G, :artifice => "compact_index_wrong_gem_checksum"
source "#{source_uri}"
gem "rack"
@@ -915,7 +915,7 @@ The checksum of /versions does not match the checksum provided by the server! So
source "#{source_uri}"
gem "rails"
G
- deps = [Gem::Dependency.new("rake", "= 10.0.2"),
+ deps = [Gem::Dependency.new("rake", "= 12.3.2"),
Gem::Dependency.new("actionpack", "= 2.3.2"),
Gem::Dependency.new("activerecord", "= 2.3.2"),
Gem::Dependency.new("actionmailer", "= 2.3.2"),
diff --git a/spec/install/gems/dependency_api_spec.rb b/spec/install/gems/dependency_api_spec.rb
index 2ffe4b62d7..0dc1ee87f2 100644
--- a/spec/install/gems/dependency_api_spec.rb
+++ b/spec/install/gems/dependency_api_spec.rb
@@ -22,7 +22,7 @@ RSpec.describe "gemcutter's dependency API" do
G
bundle :install, :artifice => "endpoint"
- expect(out).to include("' sinatra' is not a valid gem name because it contains whitespace.")
+ expect(err).to include("' sinatra' is not a valid gem name because it contains whitespace.")
end
it "should handle nested dependencies" do
@@ -216,7 +216,7 @@ RSpec.describe "gemcutter's dependency API" do
G
bundle :install, :artifice => "endpoint_redirect"
- expect(out).to match(/Too many redirects/)
+ expect(err).to match(/Too many redirects/)
end
context "when --full-index is specified" do
@@ -237,13 +237,13 @@ RSpec.describe "gemcutter's dependency API" do
gem "rack"
G
- bundle! "update --full-index", :artifice => "endpoint", :all => bundle_update_requires_all?
+ bundle! "update --full-index", :artifice => "endpoint", :all => true
expect(out).to include("Fetching source index from #{source_uri}")
expect(the_bundle).to include_gems "rack 1.0.0"
end
end
- it "fetches again when more dependencies are found in subsequent sources", :bundler => "< 2" do
+ it "fetches again when more dependencies are found in subsequent sources", :bundler => "< 3" do
build_repo2 do
build_gem "back_deps" do |s|
s.add_dependency "foo"
@@ -302,7 +302,7 @@ RSpec.describe "gemcutter's dependency API" do
expect(the_bundle).to include_gems "rack 1.2"
end
- it "considers all possible versions of dependencies from all api gem sources", :bundler => "< 2" do
+ it "considers all possible versions of dependencies from all api gem sources", :bundler => "< 3" do
# In this scenario, the gem "somegem" only exists in repo4. It depends on specific version of activesupport that
# exists only in repo1. There happens also be a version of activesupport in repo4, but not the one that version 1.0.0
# of somegem wants. This test makes sure that bundler actually finds version 1.2.3 of active support in the other
@@ -372,7 +372,7 @@ RSpec.describe "gemcutter's dependency API" do
expect(out).to include("Fetching source index from http://localgemserver.test/extra")
end
- it "does not fetch every spec if the index of gems is large when doing back deps", :bundler => "< 2" do
+ it "does not fetch every spec if the index of gems is large when doing back deps", :bundler => "< 3" do
build_repo2 do
build_gem "back_deps" do |s|
s.add_dependency "foo"
@@ -432,7 +432,7 @@ RSpec.describe "gemcutter's dependency API" do
expect(the_bundle).to include_gems "foo 1.0"
end
- it "fetches again when more dependencies are found in subsequent sources using --deployment", :bundler => "< 2" do
+ it "fetches again when more dependencies are found in subsequent sources using --deployment", :bundler => "< 3" do
build_repo2 do
build_gem "back_deps" do |s|
s.add_dependency "foo"
@@ -496,7 +496,7 @@ RSpec.describe "gemcutter's dependency API" do
expect(the_bundle).to include_gems "rails 2.3.2"
end
- it "installs the binstubs", :bundler => "< 2" do
+ it "installs the binstubs", :bundler => "< 3" do
gemfile <<-G
source "#{source_uri}"
gem "rack"
@@ -508,7 +508,7 @@ RSpec.describe "gemcutter's dependency API" do
expect(out).to eq("1.0.0")
end
- it "installs the bins when using --path and uses autoclean", :bundler => "< 2" do
+ it "installs the bins when using --path and uses autoclean", :bundler => "< 3" do
gemfile <<-G
source "#{source_uri}"
gem "rack"
@@ -519,7 +519,7 @@ RSpec.describe "gemcutter's dependency API" do
expect(vendored_gems("bin/rackup")).to exist
end
- it "installs the bins when using --path and uses bundle clean", :bundler => "< 2" do
+ it "installs the bins when using --path and uses bundle clean", :bundler => "< 3" do
gemfile <<-G
source "#{source_uri}"
gem "rack"
@@ -594,7 +594,7 @@ RSpec.describe "gemcutter's dependency API" do
expect(out).not_to include("#{user}:#{password}")
end
- it "strips http basic auth creds when warning about ambiguous sources", :bundler => "< 2" do
+ it "strips http basic auth creds when warning about ambiguous sources", :bundler => "< 3" do
gemfile <<-G
source "#{basic_auth_source_uri}"
source "file://#{gem_repo1}"
@@ -602,8 +602,8 @@ RSpec.describe "gemcutter's dependency API" do
G
bundle :install, :artifice => "endpoint_basic_authentication"
- expect(out).to include("Warning: the gem 'rack' was found in multiple sources.")
- expect(out).not_to include("#{user}:#{password}")
+ expect(err).to include("Warning: the gem 'rack' was found in multiple sources.")
+ expect(err).not_to include("#{user}:#{password}")
expect(the_bundle).to include_gems "rack 1.0.0"
end
@@ -626,7 +626,7 @@ RSpec.describe "gemcutter's dependency API" do
end
it "reads authentication details by host name from bundle config" do
- bundle "config #{source_hostname} #{user}:#{password}"
+ bundle "config set #{source_hostname} #{user}:#{password}"
bundle :install, :artifice => "endpoint_strict_basic_authentication"
@@ -636,7 +636,7 @@ RSpec.describe "gemcutter's dependency API" do
it "reads authentication details by full url from bundle config" do
# The trailing slash is necessary here; Fetcher canonicalizes the URI.
- bundle "config #{source_uri}/ #{user}:#{password}"
+ bundle "config set #{source_uri}/ #{user}:#{password}"
bundle :install, :artifice => "endpoint_strict_basic_authentication"
@@ -645,7 +645,7 @@ RSpec.describe "gemcutter's dependency API" do
end
it "should use the API" do
- bundle "config #{source_hostname} #{user}:#{password}"
+ bundle "config set #{source_hostname} #{user}:#{password}"
bundle :install, :artifice => "endpoint_strict_basic_authentication"
expect(out).to include("Fetching gem metadata from #{source_uri}")
expect(the_bundle).to include_gems "rack 1.0.0"
@@ -657,7 +657,7 @@ RSpec.describe "gemcutter's dependency API" do
gem "rack"
G
- bundle "config #{source_hostname} otheruser:wrong"
+ bundle "config set #{source_hostname} otheruser:wrong"
bundle :install, :artifice => "endpoint_strict_basic_authentication"
expect(the_bundle).to include_gems "rack 1.0.0"
@@ -665,14 +665,14 @@ RSpec.describe "gemcutter's dependency API" do
it "shows instructions if auth is not provided for the source" do
bundle :install, :artifice => "endpoint_strict_basic_authentication"
- expect(out).to include("bundle config #{source_hostname} username:password")
+ expect(err).to include("bundle config set #{source_hostname} username:password")
end
it "fails if authentication has already been provided, but failed" do
- bundle "config #{source_hostname} #{user}:wrong"
+ bundle "config set #{source_hostname} #{user}:wrong"
bundle :install, :artifice => "endpoint_strict_basic_authentication"
- expect(out).to include("Bad username or password")
+ expect(err).to include("Bad username or password")
end
end
@@ -711,7 +711,7 @@ RSpec.describe "gemcutter's dependency API" do
G
bundle :install, :env => { "RUBYOPT" => "-I#{bundled_app("broken_ssl")}" }
- expect(out).to include("OpenSSL")
+ expect(err).to include("OpenSSL")
end
end
@@ -731,7 +731,7 @@ RSpec.describe "gemcutter's dependency API" do
G
bundle :install
- expect(out).to match(/could not verify the SSL certificate/i)
+ expect(err).to match(/could not verify the SSL certificate/i)
end
end
diff --git a/spec/install/gems/flex_spec.rb b/spec/install/gems/flex_spec.rb
index 37d2e4958a..d15841124a 100644
--- a/spec/install/gems/flex_spec.rb
+++ b/spec/install/gems/flex_spec.rb
@@ -209,7 +209,7 @@ RSpec.describe "bundle flex_install" do
E
bundle :install, :retry => 0
- expect(last_command.bundler_err).to end_with(nice_error)
+ expect(err).to end_with(nice_error)
end
end
@@ -233,9 +233,9 @@ RSpec.describe "bundle flex_install" do
bundle "install"
end.not_to change { File.read(bundled_app("Gemfile.lock")) }
- expect(out).to include("rack = 0.9.1")
- expect(out).to include("locked at 1.0.0")
- expect(out).to include("bundle update rack")
+ expect(err).to include("rack = 0.9.1")
+ expect(err).to include("locked at 1.0.0")
+ expect(err).to include("bundle update rack")
end
it "should work when you update" do
@@ -244,7 +244,7 @@ RSpec.describe "bundle flex_install" do
end
describe "when adding a new source" do
- it "updates the lockfile", :bundler => "< 2" do
+ it "updates the lockfile", :bundler => "< 3" do
build_repo2
install_gemfile! <<-G
source "file://localhost#{gem_repo1}"
@@ -264,7 +264,7 @@ RSpec.describe "bundle flex_install" do
rack (1.0.0)
PLATFORMS
- ruby
+ #{lockfile_platforms}
DEPENDENCIES
rack
@@ -274,7 +274,7 @@ RSpec.describe "bundle flex_install" do
L
end
- it "updates the lockfile", :bundler => "2" do
+ it "updates the lockfile", :bundler => "3" do
build_repo2
install_gemfile! <<-G
source "file://localhost#{gem_repo1}"
@@ -345,7 +345,7 @@ RSpec.describe "bundle flex_install" do
gem "capybara", "0.3.9"
G
- expect(out).to include("Gemfile.lock")
+ expect(err).to include("Gemfile.lock")
end
end
end
diff --git a/spec/install/gems/mirror_spec.rb b/spec/install/gems/mirror_spec.rb
index 4c35b8f206..ffa6116127 100644
--- a/spec/install/gems/mirror_spec.rb
+++ b/spec/install/gems/mirror_spec.rb
@@ -8,7 +8,7 @@ RSpec.describe "bundle install with a mirror configured" do
gem "rack"
G
- bundle "config --local mirror.http://gems.example.org http://gem-mirror.example.org"
+ bundle "config set --local mirror.http://gems.example.org http://gem-mirror.example.org"
end
it "installs from the normal location" do
@@ -26,7 +26,7 @@ RSpec.describe "bundle install with a mirror configured" do
gem "rack"
G
- bundle "config --local mirror.file://localhost#{gem_repo2} file://localhost#{gem_repo1}"
+ bundle "config set --local mirror.file://localhost#{gem_repo2} file://localhost#{gem_repo1}"
end
it "installs the gem from the mirror" do
diff --git a/spec/install/gems/native_extensions_spec.rb b/spec/install/gems/native_extensions_spec.rb
index ea616f60d3..9176a07084 100644
--- a/spec/install/gems/native_extensions_spec.rb
+++ b/spec/install/gems/native_extensions_spec.rb
@@ -37,7 +37,7 @@ RSpec.describe "installing a gem with native extensions", :ruby_repo do
gem "c_extension"
G
- bundle "config build.c_extension --with-c_extension=hello"
+ bundle "config set build.c_extension --with-c_extension=hello"
bundle "install"
expect(out).not_to include("extconf.rb failed")
@@ -76,7 +76,48 @@ RSpec.describe "installing a gem with native extensions", :ruby_repo do
C
end
- bundle! "config build.c_extension --with-c_extension=hello"
+ bundle! "config set build.c_extension --with-c_extension=hello"
+
+ install_gemfile! <<-G
+ gem "c_extension", :git => #{lib_path("c_extension-1.0").to_s.dump}
+ G
+
+ expect(out).not_to include("extconf.rb failed")
+
+ run! "Bundler.require; puts CExtension.new.its_true"
+ expect(out).to eq("true")
+ end
+
+ it "install with multiple build flags" do
+ build_git "c_extension" do |s|
+ s.extensions = ["ext/extconf.rb"]
+ s.write "ext/extconf.rb", <<-E
+ require "mkmf"
+ name = "c_extension_bundle"
+ dir_config(name)
+ raise "OMG" unless with_config("c_extension") == "hello" && with_config("c_extension_bundle-dir") == "hola"
+ create_makefile(name)
+ E
+
+ s.write "ext/c_extension.c", <<-C
+ #include "ruby.h"
+
+ VALUE c_extension_true(VALUE self) {
+ return Qtrue;
+ }
+
+ void Init_c_extension_bundle() {
+ VALUE c_Extension = rb_define_class("CExtension", rb_cObject);
+ rb_define_method(c_Extension, "its_true", c_extension_true, 0);
+ }
+ C
+
+ s.write "lib/c_extension.rb", <<-C
+ require "c_extension_bundle"
+ C
+ end
+
+ bundle! "config set build.c_extension --with-c_extension=hello --with-c_extension_bundle-dir=hola"
install_gemfile! <<-G
gem "c_extension", :git => #{lib_path("c_extension-1.0").to_s.dump}
diff --git a/spec/install/gems/post_install_spec.rb b/spec/install/gems/post_install_spec.rb
index c6e348fb65..a6894fbc14 100644
--- a/spec/install/gems/post_install_spec.rb
+++ b/spec/install/gems/post_install_spec.rb
@@ -127,7 +127,7 @@ RSpec.describe "bundle install" do
gem "rack"
G
- bundle "config ignore_messages.rack true"
+ bundle "config set ignore_messages.rack true"
bundle :install
expect(out).not_to include("Post-install message")
@@ -141,7 +141,7 @@ RSpec.describe "bundle install" do
gem "rack"
G
- bundle "config ignore_messages true"
+ bundle "config set ignore_messages true"
bundle :install
expect(out).not_to include("Post-install message")
diff --git a/spec/install/gems/resolving_spec.rb b/spec/install/gems/resolving_spec.rb
index ddf803ed7d..7bab676cea 100644
--- a/spec/install/gems/resolving_spec.rb
+++ b/spec/install/gems/resolving_spec.rb
@@ -117,6 +117,26 @@ RSpec.describe "bundle install with install-time dependencies" do
expect(out).to_not include("rack-9001.0.0 requires ruby version > 9000")
expect(the_bundle).to include_gems("rack 1.2")
end
+
+ it "installs the older version under rate limiting conditions" do
+ build_repo4 do
+ build_gem "rack", "9001.0.0" do |s|
+ s.required_ruby_version = "> 9000"
+ end
+ build_gem "rack", "1.2"
+ build_gem "foo1", "1.0"
+ end
+
+ install_gemfile <<-G, :artifice => "compact_index_rate_limited", :env => { "BUNDLER_SPEC_GEM_REPO" => gem_repo4 }
+ ruby "#{RUBY_VERSION}"
+ source "http://localgemserver.test/"
+ gem 'rack'
+ gem 'foo1'
+ G
+
+ expect(out).to_not include("rack-9001.0.0 requires ruby version > 9000")
+ expect(the_bundle).to include_gems("rack 1.2")
+ end
end
context "allows no gems" do
@@ -151,7 +171,7 @@ RSpec.describe "bundle install with install-time dependencies" do
Ruby\0 (> 9000), which is required by gem 'require_ruby', is not available in the local ruby installation
E
- expect(last_command.bundler_err).to end_with(nice_error)
+ expect(err).to end_with(nice_error)
end
end
@@ -187,8 +207,8 @@ RSpec.describe "bundle install with install-time dependencies" do
gem 'require_rubygems'
G
- expect(out).to_not include("Gem::InstallError: require_rubygems requires RubyGems version > 9000")
- expect(out).to include("require_rubygems-1.0 requires rubygems version > 9000, which is incompatible with the current version, #{Gem::VERSION}")
+ expect(err).to_not include("Gem::InstallError: require_rubygems requires RubyGems version > 9000")
+ expect(err).to include("require_rubygems-1.0 requires rubygems version > 9000, which is incompatible with the current version, #{Gem::VERSION}")
end
end
end
diff --git a/spec/install/gems/standalone_spec.rb b/spec/install/gems/standalone_spec.rb
index 10ce589eef..68796977a4 100644
--- a/spec/install/gems/standalone_spec.rb
+++ b/spec/install/gems/standalone_spec.rb
@@ -75,7 +75,7 @@ RSpec.shared_examples "bundle install --standalone" do
G
end
- it "generates a bundle/bundler/setup.rb with the proper paths", :rubygems => "2.4" do
+ it "generates a bundle/bundler/setup.rb with the proper paths" do
expected_path = bundled_app("bundle/bundler/setup.rb")
extension_line = File.read(expected_path).each_line.find {|line| line.include? "/extensions/" }.strip
expect(extension_line).to start_with '$:.unshift "#{path}/../#{ruby_engine}/#{ruby_version}/extensions/'
@@ -108,8 +108,8 @@ RSpec.shared_examples "bundle install --standalone" do
end
it "outputs a helpful error message" do
- expect(out).to include("You have one or more invalid gemspecs that need to be fixed.")
- expect(out).to include("bar 1.0 has an invalid gemspec")
+ expect(err).to include("You have one or more invalid gemspecs that need to be fixed.")
+ expect(err).to include("bar 1.0 has an invalid gemspec")
end
end
@@ -175,8 +175,8 @@ RSpec.shared_examples "bundle install --standalone" do
RUBY
end
- expect(last_command.stdout).to eq("2.3.2")
- expect(last_command.stderr).to eq("ZOMG LOAD ERROR")
+ expect(out).to eq("2.3.2")
+ expect(err).to eq("ZOMG LOAD ERROR")
end
it "allows --without to limit the groups used in a standalone" do
@@ -193,11 +193,11 @@ RSpec.shared_examples "bundle install --standalone" do
RUBY
end
- expect(last_command.stdout).to eq("2.3.2")
- expect(last_command.stderr).to eq("ZOMG LOAD ERROR")
+ expect(out).to eq("2.3.2")
+ expect(err).to eq("ZOMG LOAD ERROR")
end
- it "allows --path to change the location of the standalone bundle", :bundler => "< 2" do
+ it "allows --path to change the location of the standalone bundle", :bundler => "< 3" do
bundle! "install", forgotten_command_line_options(:path => "path/to/bundle").merge(:standalone => true)
Dir.chdir(bundled_app) do
@@ -210,10 +210,10 @@ RSpec.shared_examples "bundle install --standalone" do
RUBY
end
- expect(last_command.stdout).to eq("2.3.2")
+ expect(out).to eq("2.3.2")
end
- it "allows --path to change the location of the standalone bundle", :bundler => "2" do
+ it "allows --path to change the location of the standalone bundle", :bundler => "3" do
bundle! "install", forgotten_command_line_options(:path => "path/to/bundle").merge(:standalone => true)
path = File.expand_path("path/to/bundle")
@@ -227,7 +227,7 @@ RSpec.shared_examples "bundle install --standalone" do
RUBY
end
- expect(last_command.stdout).to eq("2.3.2")
+ expect(out).to eq("2.3.2")
end
it "allows remembered --without to limit the groups used in a standalone" do
@@ -245,8 +245,8 @@ RSpec.shared_examples "bundle install --standalone" do
RUBY
end
- expect(last_command.stdout).to eq("2.3.2")
- expect(last_command.stderr).to eq("ZOMG LOAD ERROR")
+ expect(out).to eq("2.3.2")
+ expect(err).to eq("ZOMG LOAD ERROR")
end
end
@@ -273,7 +273,7 @@ RSpec.shared_examples "bundle install --standalone" do
end
end
- describe "with --binstubs", :bundler => "< 2" do
+ describe "with --binstubs", :bundler => "< 3" do
before do
gemfile <<-G
source "file://#{gem_repo1}"
diff --git a/spec/install/gems/sudo_spec.rb b/spec/install/gems/sudo_spec.rb
index 1781451c98..fb41f63a07 100644
--- a/spec/install/gems/sudo_spec.rb
+++ b/spec/install/gems/sudo_spec.rb
@@ -4,7 +4,7 @@ RSpec.describe "when using sudo", :sudo => true do
describe "and BUNDLE_PATH is writable" do
context "but BUNDLE_PATH/build_info is not writable" do
before do
- bundle! "config path.system true"
+ bundle! "config set path.system true"
subdir = system_gem_path("cache")
subdir.mkpath
sudo "chmod u-w #{subdir}"
@@ -25,7 +25,7 @@ RSpec.describe "when using sudo", :sudo => true do
describe "and GEM_HOME is owned by root" do
before :each do
- bundle! "config path.system true"
+ bundle! "config set path.system true"
chown_system_gems_to_root
end
@@ -52,7 +52,7 @@ RSpec.describe "when using sudo", :sudo => true do
end
it "installs when BUNDLE_PATH is owned by root" do
- bundle! "config global_path_appends_ruby_scope false" # consistency in tests between 1.x and 2.x modes
+ bundle! "config set global_path_appends_ruby_scope false" # consistency in tests between 1.x and 2.x modes
bundle_path = tmp("owned_by_root")
FileUtils.mkdir_p bundle_path
@@ -70,7 +70,7 @@ RSpec.describe "when using sudo", :sudo => true do
end
it "installs when BUNDLE_PATH does not exist" do
- bundle! "config global_path_appends_ruby_scope false" # consistency in tests between 1.x and 2.x modes
+ bundle! "config set global_path_appends_ruby_scope false" # consistency in tests between 1.x and 2.x modes
root_path = tmp("owned_by_root")
FileUtils.mkdir_p root_path
@@ -88,7 +88,7 @@ RSpec.describe "when using sudo", :sudo => true do
expect(the_bundle).to include_gems "rack 1.0"
end
- it "installs extensions/ compiled by RubyGems 2.2", :rubygems => "2.2" do
+ it "installs extensions/" do
install_gemfile <<-G
source "file://#{gem_repo1}"
gem "very_simple_binary"
@@ -133,7 +133,7 @@ RSpec.describe "when using sudo", :sudo => true do
describe "and GEM_HOME is not writable" do
it "installs" do
- bundle! "config path.system true"
+ bundle! "config set path.system true"
gem_home = tmp("sudo_gem_home")
sudo "mkdir -p #{gem_home}"
sudo "chmod ugo-w #{gem_home}"
@@ -158,20 +158,20 @@ RSpec.describe "when using sudo", :sudo => true do
it "warns against that" do
bundle :install, :sudo => true
- expect(out).to include(warning)
+ expect(err).to include(warning)
end
context "when ENV['BUNDLE_SILENCE_ROOT_WARNING'] is set" do
it "skips the warning" do
bundle :install, :sudo => :preserve_env, :env => { "BUNDLE_SILENCE_ROOT_WARNING" => true }
- expect(out).to_not include(warning)
+ expect(err).to_not include(warning)
end
end
context "when silence_root_warning = false" do
it "warns against that" do
bundle :install, :sudo => true, :env => { "BUNDLE_SILENCE_ROOT_WARNING" => "false" }
- expect(out).to include(warning)
+ expect(err).to include(warning)
end
end
end
diff --git a/spec/install/gemspecs_spec.rb b/spec/install/gemspecs_spec.rb
index 35f96367f7..55c7a67b4b 100644
--- a/spec/install/gemspecs_spec.rb
+++ b/spec/install/gemspecs_spec.rb
@@ -1,4 +1,3 @@
-# encoding: utf-8
# frozen_string_literal: true
RSpec.describe "bundle install" do
@@ -15,7 +14,7 @@ RSpec.describe "bundle install" do
gem "yaml_spec"
G
bundle :install
- expect(err).to lack_errors
+ expect(err).to be_empty
end
it "still installs correctly when using path" do
@@ -24,7 +23,7 @@ RSpec.describe "bundle install" do
install_gemfile <<-G
gem 'yaml_spec', :path => "#{lib_path("yaml_spec-1.0")}"
G
- expect(err).to lack_errors
+ expect(err).to be_empty
end
end
@@ -65,8 +64,6 @@ RSpec.describe "bundle install" do
end
it "reads gemspecs respecting their encoding" do
- skip "Unicode is not supported on Ruby 1.x without extra work" if RUBY_VERSION < "2.0"
-
create_file "version.rb", <<-RUBY
module Persistent💎
VERSION = "0.0.1"
@@ -129,8 +126,8 @@ RSpec.describe "bundle install" do
gemspec
G
- expect(out).to include("Ruby patchlevel")
- expect(out).to include("but your Gemfile specified")
+ expect(err).to include("Ruby patchlevel")
+ expect(err).to include("but your Gemfile specified")
expect(exitstatus).to eq(18) if exitstatus
end
@@ -146,8 +143,8 @@ RSpec.describe "bundle install" do
gemspec
G
- expect(out).to include("Ruby version")
- expect(out).to include("but your Gemfile specified")
+ expect(err).to include("Ruby version")
+ expect(err).to include("but your Gemfile specified")
expect(exitstatus).to eq(18) if exitstatus
end
end
diff --git a/spec/install/git_spec.rb b/spec/install/git_spec.rb
index 6ae718c2a4..68b2f47c10 100644
--- a/spec/install/git_spec.rb
+++ b/spec/install/git_spec.rb
@@ -2,7 +2,7 @@
RSpec.describe "bundle install" do
context "git sources" do
- it "displays the revision hash of the gem repository", :bundler => "< 2" do
+ it "displays the revision hash of the gem repository", :bundler => "< 3" do
build_git "foo", "1.0", :path => lib_path("foo")
install_gemfile <<-G
@@ -14,7 +14,7 @@ RSpec.describe "bundle install" do
expect(the_bundle).to include_gems "foo 1.0", :source => "git@#{lib_path("foo")}"
end
- it "displays the ref of the gem repository when using branch~num as a ref", :bundler => "< 2" do
+ it "displays the ref of the gem repository when using branch~num as a ref", :bundler => "< 3" do
build_git "foo", "1.0", :path => lib_path("foo")
rev = revision_for(lib_path("foo"))[0..6]
update_git "foo", "2.0", :path => lib_path("foo"), :gemspec => true
@@ -31,7 +31,7 @@ RSpec.describe "bundle install" do
update_git "foo", "4.0", :path => lib_path("foo"), :gemspec => true
- bundle! :update, :all => bundle_update_requires_all?
+ bundle! :update, :all => true
expect(out).to include("Using foo 2.0 (was 1.0) from #{lib_path("foo")} (at master~2@#{rev2})")
expect(the_bundle).to include_gems "foo 2.0", :source => "git@#{lib_path("foo")}"
end
diff --git a/spec/install/global_cache_spec.rb b/spec/install/global_cache_spec.rb
index e41e7e0157..345ad86db8 100644
--- a/spec/install/global_cache_spec.rb
+++ b/spec/install/global_cache_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
RSpec.describe "global gem caching" do
- before { bundle! "config global_gem_cache true" }
+ before { bundle! "config set global_gem_cache true" }
describe "using the cross-application user cache" do
let(:source) { "http://localgemserver.test" }
@@ -112,7 +112,7 @@ RSpec.describe "global gem caching" do
expect(source_global_cache("rack-1.0.0.gem")).to exist
expect(source2_global_cache("rack-0.9.1.gem")).to exist
bundle :install, :artifice => "compact_index_no_gem"
- expect(out).to include("Internal Server Error 500")
+ expect(err).to include("Internal Server Error 500")
# rack 1.0.0 is not installed and rack 0.9.1 is not
expect(the_bundle).not_to include_gems "rack 1.0.0"
expect(the_bundle).not_to include_gems "rack 0.9.1"
@@ -125,7 +125,7 @@ RSpec.describe "global gem caching" do
expect(source_global_cache("rack-1.0.0.gem")).to exist
expect(source2_global_cache("rack-0.9.1.gem")).to exist
bundle :install, :artifice => "compact_index_no_gem"
- expect(out).to include("Internal Server Error 500")
+ expect(err).to include("Internal Server Error 500")
# rack 0.9.1 is not installed and rack 1.0.0 is not
expect(the_bundle).not_to include_gems "rack 0.9.1"
expect(the_bundle).not_to include_gems "rack 1.0.0"
@@ -187,7 +187,7 @@ RSpec.describe "global gem caching" do
end
end
- describe "extension caching", :ruby_repo, :rubygems => "2.2" do
+ describe "extension caching", :ruby_repo do
it "works" do
build_git "very_simple_git_binary", &:add_c_extension
build_lib "very_simple_path_binary", &:add_c_extension
@@ -220,7 +220,7 @@ RSpec.describe "global gem caching" do
gem_binary_cache.join("very_simple_binary_c.rb").open("w") {|f| f << "puts File.basename(__FILE__)" }
git_binary_cache.join("very_simple_git_binary_c.rb").open("w") {|f| f << "puts File.basename(__FILE__)" }
- bundle! "config --local path different_path"
+ bundle! "config set --local path different_path"
bundle! :install
expect(Dir[home(".bundle", "cache", "extensions", "**", "*binary_c*")]).to all(end_with(".rb"))
diff --git a/spec/install/path_spec.rb b/spec/install/path_spec.rb
index 44439c275e..aac697fb23 100644
--- a/spec/install/path_spec.rb
+++ b/spec/install/path_spec.rb
@@ -13,7 +13,7 @@ RSpec.describe "bundle install" do
G
end
- it "does not use available system gems with bundle --path vendor/bundle", :bundler => "< 2" do
+ it "does not use available system gems with bundle --path vendor/bundle", :bundler => "< 3" do
bundle! :install, forgotten_command_line_options(:path => "vendor/bundle")
expect(the_bundle).to include_gems "rack 1.0.0"
end
@@ -35,13 +35,13 @@ RSpec.describe "bundle install" do
expect(out).to include("gems are installed into `./vendor/bundle`")
end
- it "disallows --path vendor/bundle --system", :bundler => "< 2" do
+ it "disallows --path vendor/bundle --system", :bundler => "< 3" do
bundle "install --path vendor/bundle --system"
- expect(out).to include("Please choose only one option.")
+ expect(err).to include("Please choose only one option.")
expect(exitstatus).to eq(15) if exitstatus
end
- it "remembers to disable system gems after the first time with bundle --path vendor/bundle", :bundler => "< 2" do
+ it "remembers to disable system gems after the first time with bundle --path vendor/bundle", :bundler => "< 3" do
bundle "install --path vendor/bundle"
FileUtils.rm_rf bundled_app("vendor")
bundle "install"
@@ -51,9 +51,9 @@ RSpec.describe "bundle install" do
end
context "with path_relative_to_cwd set to true" do
- before { bundle! "config path_relative_to_cwd true" }
+ before { bundle! "config set path_relative_to_cwd true" }
- it "installs the bundle relatively to current working directory", :bundler => "< 2" do
+ it "installs the bundle relatively to current working directory", :bundler => "< 3" do
Dir.chdir(bundled_app.parent) do
bundle! "install --gemfile='#{bundled_app}/Gemfile' --path vendor/bundle"
expect(out).to include("installed into `./vendor/bundle`")
@@ -98,7 +98,7 @@ RSpec.describe "bundle install" do
if type == :env
ENV["BUNDLE_PATH"] = location
elsif type == :global
- bundle! "config path #{location}", "no-color" => nil
+ bundle! "config set path #{location}", "no-color" => nil
end
end
@@ -113,10 +113,10 @@ RSpec.describe "bundle install" do
expect(the_bundle).to include_gems "rack 1.0.0"
end
- context "with global_path_appends_ruby_scope set", :bundler => "2" do
+ context "with global_path_appends_ruby_scope set", :bundler => "3" do
it "installs gems to ." do
set_bundle_path(type, ".")
- bundle! "config --global disable_shared_gems true"
+ bundle! "config set --global disable_shared_gems true"
bundle! :install
@@ -147,10 +147,10 @@ RSpec.describe "bundle install" do
end
end
- context "with global_path_appends_ruby_scope unset", :bundler => "< 2" do
+ context "with global_path_appends_ruby_scope unset", :bundler => "< 3" do
it "installs gems to ." do
set_bundle_path(type, ".")
- bundle! "config --global disable_shared_gems true"
+ bundle! "config set --global disable_shared_gems true"
bundle! :install
@@ -207,7 +207,7 @@ RSpec.describe "bundle install" do
expect(the_bundle).to include_gems "rack 1.0.0"
end
- it "re-installs gems whose extensions have been deleted", :ruby_repo, :rubygems => ">= 2.3" do
+ it "re-installs gems whose extensions have been deleted", :ruby_repo do
build_lib "very_simple_binary", "1.0.0", :to_system => true do |s|
s.write "lib/very_simple_binary.rb", "raise 'FAIL'"
end
@@ -250,7 +250,7 @@ RSpec.describe "bundle install" do
G
bundle :install, forgotten_command_line_options(:path => "bundle")
- expect(out).to include("file already exists")
+ expect(err).to include("file already exists")
end
end
end
diff --git a/spec/install/post_bundle_message_spec.rb b/spec/install/post_bundle_message_spec.rb
index eadc8a4d85..1efd0b8146 100644
--- a/spec/install/post_bundle_message_spec.rb
+++ b/spec/install/post_bundle_message_spec.rb
@@ -19,7 +19,7 @@ RSpec.describe "post bundle message" do
let(:bundle_complete_message) { "Bundle complete!" }
let(:bundle_updated_message) { "Bundle updated!" }
let(:installed_gems_stats) { "4 Gemfile dependencies, 5 gems now installed." }
- let(:bundle_show_message) { Bundler::VERSION.split(".").first.to_i < 2 ? bundle_show_system_message : bundle_show_path_message }
+ let(:bundle_show_message) { Bundler::VERSION.split(".").first.to_i < 3 ? bundle_show_system_message : bundle_show_path_message }
describe "for fresh bundle install" do
it "without any options" do
@@ -101,22 +101,22 @@ RSpec.describe "post bundle message" do
end
describe "with misspelled or non-existent gem name" do
- it "should report a helpful error message", :bundler => "< 2" do
+ it "should report a helpful error message", :bundler => "< 3" do
install_gemfile <<-G
source "file://localhost#{gem_repo1}"
gem "rack"
gem "not-a-gem", :group => :development
G
- expect(out).to include("Could not find gem 'not-a-gem' in any of the gem sources listed in your Gemfile.")
+ expect(err).to include("Could not find gem 'not-a-gem' in any of the gem sources listed in your Gemfile.")
end
- it "should report a helpful error message", :bundler => "2" do
+ it "should report a helpful error message", :bundler => "3" do
install_gemfile <<-G
source "file://localhost#{gem_repo1}"
gem "rack"
gem "not-a-gem", :group => :development
G
- expect(out).to include normalize_uri_file(<<-EOS.strip)
+ expect(err).to include normalize_uri_file(<<-EOS.strip)
Could not find gem 'not-a-gem' in rubygems repository file://localhost#{gem_repo1}/ or installed locally.
The source does not contain any versions of 'not-a-gem'
EOS
@@ -134,7 +134,7 @@ The source does not contain any versions of 'not-a-gem'
gem "rack"
gem "not-a-gem", :group => :development
G
- expect(out).to include("Could not find gem 'not-a-gem' in").
+ expect(err).to include("Could not find gem 'not-a-gem' in").
and include("or in gems cached in vendor/cache.")
end
end
@@ -177,28 +177,28 @@ The source does not contain any versions of 'not-a-gem'
describe "for bundle update" do
it "without any options" do
- bundle! :update, :all => bundle_update_requires_all?
+ bundle! :update, :all => true
expect(out).not_to include("Gems in the groups")
expect(out).to include(bundle_updated_message)
end
it "with --without one group" do
bundle! :install, forgotten_command_line_options(:without => "emo")
- bundle! :update, :all => bundle_update_requires_all?
+ bundle! :update, :all => true
expect(out).to include("Gems in the group emo were not installed")
expect(out).to include(bundle_updated_message)
end
it "with --without two groups" do
bundle! :install, forgotten_command_line_options(:without => "emo test")
- bundle! :update, :all => bundle_update_requires_all?
+ bundle! :update, :all => true
expect(out).to include("Gems in the groups emo and test were not installed")
expect(out).to include(bundle_updated_message)
end
it "with --without more groups" do
bundle! :install, forgotten_command_line_options(:without => "emo obama test")
- bundle! :update, :all => bundle_update_requires_all?
+ bundle! :update, :all => true
expect(out).to include("Gems in the groups emo, obama and test were not installed")
expect(out).to include(bundle_updated_message)
end
diff --git a/spec/install/process_lock_spec.rb b/spec/install/process_lock_spec.rb
index be8fd04fdd..df1e9c6350 100644
--- a/spec/install/process_lock_spec.rb
+++ b/spec/install/process_lock_spec.rb
@@ -21,7 +21,7 @@ RSpec.describe "process lock spec" do
expect(the_bundle).to include_gems "rack 1.0"
end
- context "when creating a lock raises Errno::ENOTSUP", :ruby => ">= 1.9" do
+ context "when creating a lock raises Errno::ENOTSUP" do
before { allow(File).to receive(:open).and_raise(Errno::ENOTSUP) }
it "skips creating the lock file and yields" do
diff --git a/spec/install/redownload_spec.rb b/spec/install/redownload_spec.rb
index 232c0f9e2c..2a0cdc9473 100644
--- a/spec/install/redownload_spec.rb
+++ b/spec/install/redownload_spec.rb
@@ -56,29 +56,19 @@ RSpec.describe "bundle install" do
end
end
- describe "with --force" do
+ describe "with --force", :bundler => 2 do
it_behaves_like "an option to force redownloading gems" do
let(:flag) { "force" }
end
- it "shows a deprecation when single flag passed", :bundler => 2 do
+ it "shows a deprecation when single flag passed" do
bundle! "install --force"
- expect(out).to include "[DEPRECATED FOR 2.0] The `--force` option has been renamed to `--redownload`"
+ expect(err).to include "[DEPRECATED] The `--force` option has been renamed to `--redownload`"
end
- it "shows a deprecation when multiple flags passed", :bundler => 2 do
+ it "shows a deprecation when multiple flags passed" do
bundle! "install --no-color --force"
- expect(out).to include "[DEPRECATED FOR 2.0] The `--force` option has been renamed to `--redownload`"
- end
-
- it "does not show a deprecation when single flag passed", :bundler => "< 2" do
- bundle! "install --force"
- expect(out).not_to include "[DEPRECATED FOR 2.0] The `--force` option has been renamed to `--redownload`"
- end
-
- it "does not show a deprecation when multiple flags passed", :bundler => "< 2" do
- bundle! "install --no-color --force"
- expect(out).not_to include "[DEPRECATED FOR 2.0] The `--force` option has been renamed to `--redownload`"
+ expect(err).to include "[DEPRECATED] The `--force` option has been renamed to `--redownload`"
end
end
@@ -89,12 +79,12 @@ RSpec.describe "bundle install" do
it "does not show a deprecation when single flag passed" do
bundle! "install --redownload"
- expect(out).not_to include "[DEPRECATED FOR 2.0] The `--force` option has been renamed to `--redownload`"
+ expect(err).not_to include "[DEPRECATED] The `--force` option has been renamed to `--redownload`"
end
it "does not show a deprecation when single multiple flags passed" do
bundle! "install --no-color --redownload"
- expect(out).not_to include "[DEPRECATED FOR 2.0] The `--force` option has been renamed to `--redownload`"
+ expect(err).not_to include "[DEPRECATED] The `--force` option has been renamed to `--redownload`"
end
end
end
diff --git a/spec/install/security_policy_spec.rb b/spec/install/security_policy_spec.rb
index 7be09d6bd4..ad76162aac 100644
--- a/spec/install/security_policy_spec.rb
+++ b/spec/install/security_policy_spec.rb
@@ -24,18 +24,17 @@ RSpec.describe "policies with unsigned gems" do
it "will fail when given invalid security policy" do
bundle "install --trust-policy=InvalidPolicyName"
- expect(out).to include("RubyGems doesn't know about trust policy")
+ expect(err).to include("RubyGems doesn't know about trust policy")
end
it "will fail with High Security setting due to presence of unsigned gem" do
bundle "install --trust-policy=HighSecurity"
- expect(out).to include("security policy didn't allow")
+ expect(err).to include("security policy didn't allow")
end
- # This spec will fail on RubyGems 2 rc1 due to a bug in policy.rb. the bug is fixed in rc3.
- it "will fail with Medium Security setting due to presence of unsigned gem", :unless => ENV["RGV"] == "v2.0.0.rc.1" do
+ it "will fail with Medium Security setting due to presence of unsigned gem" do
bundle "install --trust-policy=MediumSecurity"
- expect(out).to include("security policy didn't allow")
+ expect(err).to include("security policy didn't allow")
end
it "will succeed with no policy" do
@@ -55,12 +54,12 @@ RSpec.describe "policies with signed gems and no CA" do
it "will fail with High Security setting, gem is self-signed" do
bundle "install --trust-policy=HighSecurity"
- expect(out).to include("security policy didn't allow")
+ expect(err).to include("security policy didn't allow")
end
it "will fail with Medium Security setting, gem is self-signed" do
bundle "install --trust-policy=MediumSecurity"
- expect(out).to include("security policy didn't allow")
+ expect(err).to include("security policy didn't allow")
end
it "will succeed with Low Security setting, low security accepts self signed gem" do
diff --git a/spec/install/yanked_spec.rb b/spec/install/yanked_spec.rb
index 7c4b98bfdf..3e6f6a3bcd 100644
--- a/spec/install/yanked_spec.rb
+++ b/spec/install/yanked_spec.rb
@@ -27,7 +27,7 @@ RSpec.context "when installing a bundle that includes yanked gems" do
gem "foo", "10.0.0"
G
- expect(out).to include("Your bundle is locked to foo (10.0.0)")
+ expect(err).to include("Your bundle is locked to foo (10.0.0)")
end
it "throws the original error when only the Gemfile specifies a gem version that doesn't exist" do
@@ -36,8 +36,8 @@ RSpec.context "when installing a bundle that includes yanked gems" do
gem "foo", "10.0.0"
G
- expect(out).not_to include("Your bundle is locked to foo (10.0.0)")
- expect(out).to include("Could not find gem 'foo (= 10.0.0)' in")
+ expect(err).not_to include("Your bundle is locked to foo (10.0.0)")
+ expect(err).to include("Could not find gem 'foo (= 10.0.0)' in")
end
end
@@ -63,9 +63,9 @@ RSpec.context "when using gem before installing" do
bundle :list
- expect(out).to include("Could not find rack-0.9.1 in any of the sources")
- expect(out).to_not include("Your bundle is locked to rack (0.9.1), but that version could not be found in any of the sources listed in your Gemfile.")
- expect(out).to_not include("If you haven't changed sources, that means the author of rack (0.9.1) has removed it.")
- expect(out).to_not include("You'll need to update your bundle to a different version of rack (0.9.1) that hasn't been removed in order to install.")
+ expect(err).to include("Could not find rack-0.9.1 in any of the sources")
+ expect(err).to_not include("Your bundle is locked to rack (0.9.1), but that version could not be found in any of the sources listed in your Gemfile.")
+ expect(err).to_not include("If you haven't changed sources, that means the author of rack (0.9.1) has removed it.")
+ expect(err).to_not include("You'll need to update your bundle to a different version of rack (0.9.1) that hasn't been removed in order to install.")
end
end
diff --git a/spec/lock/lockfile_bundler_1_spec.rb b/spec/lock/lockfile_bundler_1_spec.rb
deleted file mode 100644
index 638b40f5f4..0000000000
--- a/spec/lock/lockfile_bundler_1_spec.rb
+++ /dev/null
@@ -1,1386 +0,0 @@
-# frozen_string_literal: true
-
-RSpec.describe "the lockfile format", :bundler => "< 2" do
- include Bundler::GemHelpers
-
- before { ENV["BUNDLER_SPEC_IGNORE_COMPATIBILITY_GUARD"] = "TRUE" }
-
- it "generates a simple lockfile for a single source, gem" do
- install_gemfile <<-G
- source "file://localhost#{gem_repo1}"
-
- gem "rack"
- G
-
- lockfile_should_be <<-G
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
- rack (1.0.0)
-
- PLATFORMS
- #{generic_local_platform}
-
- DEPENDENCIES
- rack
-
- BUNDLED WITH
- #{Bundler::VERSION}
- G
- end
-
- it "updates the lockfile's bundler version if current ver. is newer" do
- lockfile <<-L
- GIT
- remote: git://github.com/nex3/haml.git
- revision: 8a2271f
- specs:
-
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
- rack (1.0.0)
-
- PLATFORMS
- #{generic_local_platform}
-
- DEPENDENCIES
- omg!
- rack
-
- BUNDLED WITH
- 1.8.2
- L
-
- install_gemfile <<-G
- source "file://localhost#{gem_repo1}"
-
- gem "rack"
- G
-
- lockfile_should_be <<-G
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
- rack (1.0.0)
-
- PLATFORMS
- #{generic_local_platform}
-
- DEPENDENCIES
- rack
-
- BUNDLED WITH
- #{Bundler::VERSION}
- G
- end
-
- it "does not update the lockfile's bundler version if nothing changed during bundle install", :ruby_repo do
- version = "#{Bundler::VERSION.split(".").first}.0.0.0.a"
-
- lockfile normalize_uri_file(<<-L)
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
- rack (1.0.0)
-
- PLATFORMS
- #{generic_local_platform}
-
- DEPENDENCIES
- rack
-
- BUNDLED WITH
- #{version}
- L
-
- install_gemfile normalize_uri_file(<<-G)
- source "file://localhost#{gem_repo1}"
-
- gem "rack"
- G
-
- lockfile_should_be normalize_uri_file(<<-G)
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
- rack (1.0.0)
-
- PLATFORMS
- #{generic_local_platform}
-
- DEPENDENCIES
- rack
-
- BUNDLED WITH
- #{version}
- G
- end
-
- it "updates the lockfile's bundler version if not present" do
- lockfile <<-L
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
- rack (1.0.0)
-
- PLATFORMS
- #{generic_local_platform}
-
- DEPENDENCIES
- rack
- L
-
- install_gemfile <<-G
- source "file://localhost#{gem_repo1}"
-
- gem "rack", "> 0"
- G
-
- lockfile_should_be <<-G
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
- rack (1.0.0)
-
- PLATFORMS
- #{generic_local_platform}
-
- DEPENDENCIES
- rack (> 0)
-
- BUNDLED WITH
- #{Bundler::VERSION}
- G
- end
-
- it "outputs a warning if the current is older than lockfile's bundler version" do
- lockfile <<-L
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
- rack (1.0.0)
-
- PLATFORMS
- #{generic_local_platform}
-
- DEPENDENCIES
- rack
-
- BUNDLED WITH
- 9999999.1.0
- L
-
- simulate_bundler_version "9999999.0.0" do
- install_gemfile <<-G
- source "file://localhost#{gem_repo1}"
-
- gem "rack"
- G
- end
-
- warning_message = "the running version of Bundler (9999999.0.0) is older " \
- "than the version that created the lockfile (9999999.1.0)"
- expect(out.scan(warning_message).size).to eq(1)
-
- lockfile_should_be <<-G
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
- rack (1.0.0)
-
- PLATFORMS
- #{generic_local_platform}
- #{specific_local_platform}
-
- DEPENDENCIES
- rack
-
- BUNDLED WITH
- 9999999.1.0
- G
- end
-
- it "errors if the current is a major version older than lockfile's bundler version" do
- lockfile <<-L
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
- rack (1.0.0)
-
- PLATFORMS
- #{generic_local_platform}
-
- DEPENDENCIES
- rack
-
- BUNDLED WITH
- 9999999.0.0
- L
-
- install_gemfile <<-G
- source "file://localhost#{gem_repo1}"
-
- gem "rack"
- G
-
- expect(exitstatus > 0) if exitstatus
- expect(out).to include("You must use Bundler 9999999 or greater with this lockfile.")
- end
-
- it "shows a friendly error when running with a new bundler 2 lockfile" do
- lockfile <<-L
- GEM
- remote: https://rails-assets.org/
- specs:
- rails-assets-bootstrap (3.3.4)
- rails-assets-jquery (>= 1.9.1)
- rails-assets-jquery (2.1.4)
-
- GEM
- remote: https://rubygems.org/
- specs:
- rake (10.4.2)
-
- PLATFORMS
- ruby
-
- DEPENDENCIES
- rails-assets-bootstrap!
- rake
-
- BUNDLED WITH
- 9999999.0.0
- L
-
- install_gemfile <<-G
- source 'https://rubygems.org'
- gem 'rake'
-
- source 'https://rails-assets.org' do
- gem 'rails-assets-bootstrap'
- end
- G
-
- expect(exitstatus > 0) if exitstatus
- expect(out).to include("You must use Bundler 9999999 or greater with this lockfile.")
- end
-
- it "warns when updating bundler major version" do
- lockfile <<-L
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
- rack (1.0.0)
-
- PLATFORMS
- #{generic_local_platform}
-
- DEPENDENCIES
- rack
-
- BUNDLED WITH
- 1.10.0
- L
-
- simulate_bundler_version "9999999.0.0" do
- install_gemfile <<-G
- source "file://localhost#{gem_repo1}"
-
- gem "rack"
- G
- end
-
- expect(out).to include("Warning: the lockfile is being updated to Bundler " \
- "9999999, after which you will be unable to return to Bundler 1.")
-
- lockfile_should_be <<-G
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
- rack (1.0.0)
-
- PLATFORMS
- #{generic_local_platform}
- #{specific_local_platform}
-
- DEPENDENCIES
- rack
-
- BUNDLED WITH
- 9999999.0.0
- G
- end
-
- it "generates a simple lockfile for a single source, gem with dependencies" do
- install_gemfile <<-G
- source "file://localhost#{gem_repo1}"
-
- gem "rack-obama"
- G
-
- lockfile_should_be <<-G
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
- rack (1.0.0)
- rack-obama (1.0)
- rack
-
- PLATFORMS
- #{generic_local_platform}
-
- DEPENDENCIES
- rack-obama
-
- BUNDLED WITH
- #{Bundler::VERSION}
- G
- end
-
- it "generates a simple lockfile for a single source, gem with a version requirement" do
- install_gemfile <<-G
- source "file://localhost#{gem_repo1}"
-
- gem "rack-obama", ">= 1.0"
- G
-
- lockfile_should_be <<-G
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
- rack (1.0.0)
- rack-obama (1.0)
- rack
-
- PLATFORMS
- #{generic_local_platform}
-
- DEPENDENCIES
- rack-obama (>= 1.0)
-
- BUNDLED WITH
- #{Bundler::VERSION}
- G
- end
-
- it "generates a lockfile wihout credentials for a configured source" do
- bundle "config http://localgemserver.test/ user:pass"
-
- install_gemfile(<<-G, :artifice => "endpoint_strict_basic_authentication", :quiet => true)
- source "http://localgemserver.test/"
- source "http://user:pass@othergemserver.test/"
-
- gem "rack-obama", ">= 1.0"
- G
-
- lockfile_should_be <<-G
- GEM
- remote: http://localgemserver.test/
- remote: http://user:pass@othergemserver.test/
- specs:
- rack (1.0.0)
- rack-obama (1.0)
- rack
-
- PLATFORMS
- #{generic_local_platform}
-
- DEPENDENCIES
- rack-obama (>= 1.0)
-
- BUNDLED WITH
- #{Bundler::VERSION}
- G
- end
-
- it "generates lockfiles with multiple requirements" do
- install_gemfile <<-G
- source "file://localhost#{gem_repo1}"
- gem "net-sftp"
- G
-
- lockfile_should_be <<-G
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
- net-sftp (1.1.1)
- net-ssh (>= 1.0.0, < 1.99.0)
- net-ssh (1.0)
-
- PLATFORMS
- ruby
-
- DEPENDENCIES
- net-sftp
-
- BUNDLED WITH
- #{Bundler::VERSION}
- G
-
- expect(the_bundle).to include_gems "net-sftp 1.1.1", "net-ssh 1.0.0"
- end
-
- it "generates a simple lockfile for a single pinned source, gem with a version requirement" do
- git = build_git "foo"
-
- install_gemfile <<-G
- gem "foo", :git => "#{lib_path("foo-1.0")}"
- G
-
- lockfile_should_be <<-G
- GIT
- remote: #{lib_path("foo-1.0")}
- revision: #{git.ref_for("master")}
- specs:
- foo (1.0)
-
- GEM
- specs:
-
- PLATFORMS
- #{generic_local_platform}
-
- DEPENDENCIES
- foo!
-
- BUNDLED WITH
- #{Bundler::VERSION}
- G
- end
-
- it "does not asplode when a platform specific dependency is present and the Gemfile has not been resolved on that platform" do
- build_lib "omg", :path => lib_path("omg")
-
- gemfile <<-G
- source "file://localhost#{gem_repo1}"
-
- platforms :#{not_local_tag} do
- gem "omg", :path => "#{lib_path("omg")}"
- end
-
- gem "rack"
- G
-
- lockfile <<-L
- GIT
- remote: git://github.com/nex3/haml.git
- revision: 8a2271f
- specs:
-
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
- rack (1.0.0)
-
- PLATFORMS
- #{not_local}
-
- DEPENDENCIES
- omg!
- rack
-
- BUNDLED WITH
- #{Bundler::VERSION}
- L
-
- bundle "install"
- expect(the_bundle).to include_gems "rack 1.0.0"
- end
-
- it "serializes global git sources" do
- git = build_git "foo"
-
- install_gemfile <<-G
- git "#{lib_path("foo-1.0")}" do
- gem "foo"
- end
- G
-
- lockfile_should_be <<-G
- GIT
- remote: #{lib_path("foo-1.0")}
- revision: #{git.ref_for("master")}
- specs:
- foo (1.0)
-
- GEM
- specs:
-
- PLATFORMS
- #{generic_local_platform}
-
- DEPENDENCIES
- foo!
-
- BUNDLED WITH
- #{Bundler::VERSION}
- G
- end
-
- it "generates a lockfile with a ref for a single pinned source, git gem with a branch requirement" do
- git = build_git "foo"
- update_git "foo", :branch => "omg"
-
- install_gemfile <<-G
- gem "foo", :git => "#{lib_path("foo-1.0")}", :branch => "omg"
- G
-
- lockfile_should_be <<-G
- GIT
- remote: #{lib_path("foo-1.0")}
- revision: #{git.ref_for("omg")}
- branch: omg
- specs:
- foo (1.0)
-
- GEM
- specs:
-
- PLATFORMS
- #{generic_local_platform}
-
- DEPENDENCIES
- foo!
-
- BUNDLED WITH
- #{Bundler::VERSION}
- G
- end
-
- it "generates a lockfile with a ref for a single pinned source, git gem with a tag requirement" do
- git = build_git "foo"
- update_git "foo", :tag => "omg"
-
- install_gemfile <<-G
- gem "foo", :git => "#{lib_path("foo-1.0")}", :tag => "omg"
- G
-
- lockfile_should_be <<-G
- GIT
- remote: #{lib_path("foo-1.0")}
- revision: #{git.ref_for("omg")}
- tag: omg
- specs:
- foo (1.0)
-
- GEM
- specs:
-
- PLATFORMS
- #{generic_local_platform}
-
- DEPENDENCIES
- foo!
-
- BUNDLED WITH
- #{Bundler::VERSION}
- G
- end
-
- it "serializes pinned path sources to the lockfile" do
- build_lib "foo"
-
- install_gemfile <<-G
- gem "foo", :path => "#{lib_path("foo-1.0")}"
- G
-
- lockfile_should_be <<-G
- PATH
- remote: #{lib_path("foo-1.0")}
- specs:
- foo (1.0)
-
- GEM
- specs:
-
- PLATFORMS
- #{generic_local_platform}
-
- DEPENDENCIES
- foo!
-
- BUNDLED WITH
- #{Bundler::VERSION}
- G
- end
-
- it "serializes pinned path sources to the lockfile even when packaging" do
- build_lib "foo"
-
- install_gemfile! <<-G
- gem "foo", :path => "#{lib_path("foo-1.0")}"
- G
-
- bundle! :package, forgotten_command_line_options([:all, :cache_all] => true)
- bundle! :install, :local => true
-
- lockfile_should_be <<-G
- PATH
- remote: #{lib_path("foo-1.0")}
- specs:
- foo (1.0)
-
- GEM
- specs:
-
- PLATFORMS
- #{generic_local_platform}
-
- DEPENDENCIES
- foo!
-
- BUNDLED WITH
- #{Bundler::VERSION}
- G
- end
-
- it "sorts serialized sources by type" do
- build_lib "foo"
- bar = build_git "bar"
-
- install_gemfile <<-G
- source "file://localhost#{gem_repo1}"
-
- gem "rack"
- gem "foo", :path => "#{lib_path("foo-1.0")}"
- gem "bar", :git => "#{lib_path("bar-1.0")}"
- G
-
- lockfile_should_be <<-G
- GIT
- remote: #{lib_path("bar-1.0")}
- revision: #{bar.ref_for("master")}
- specs:
- bar (1.0)
-
- PATH
- remote: #{lib_path("foo-1.0")}
- specs:
- foo (1.0)
-
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
- rack (1.0.0)
-
- PLATFORMS
- #{generic_local_platform}
-
- DEPENDENCIES
- bar!
- foo!
- rack
-
- BUNDLED WITH
- #{Bundler::VERSION}
- G
- end
-
- it "lists gems alphabetically" do
- install_gemfile <<-G
- source "file://localhost#{gem_repo1}"
-
- gem "thin"
- gem "actionpack"
- gem "rack-obama"
- G
-
- lockfile_should_be <<-G
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
- actionpack (2.3.2)
- activesupport (= 2.3.2)
- activesupport (2.3.2)
- rack (1.0.0)
- rack-obama (1.0)
- rack
- thin (1.0)
- rack
-
- PLATFORMS
- #{generic_local_platform}
-
- DEPENDENCIES
- actionpack
- rack-obama
- thin
-
- BUNDLED WITH
- #{Bundler::VERSION}
- G
- end
-
- it "orders dependencies' dependencies in alphabetical order" do
- install_gemfile <<-G
- source "file://localhost#{gem_repo1}"
-
- gem "rails"
- G
-
- lockfile_should_be <<-G
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
- actionmailer (2.3.2)
- activesupport (= 2.3.2)
- actionpack (2.3.2)
- activesupport (= 2.3.2)
- activerecord (2.3.2)
- activesupport (= 2.3.2)
- activeresource (2.3.2)
- activesupport (= 2.3.2)
- activesupport (2.3.2)
- rails (2.3.2)
- actionmailer (= 2.3.2)
- actionpack (= 2.3.2)
- activerecord (= 2.3.2)
- activeresource (= 2.3.2)
- rake (= 10.0.2)
- rake (10.0.2)
-
- PLATFORMS
- #{generic_local_platform}
-
- DEPENDENCIES
- rails
-
- BUNDLED WITH
- #{Bundler::VERSION}
- G
- end
-
- it "orders dependencies by version" do
- install_gemfile <<-G
- source "file://localhost#{gem_repo1}"
- gem 'double_deps'
- G
-
- lockfile_should_be <<-G
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
- double_deps (1.0)
- net-ssh
- net-ssh (>= 1.0.0)
- net-ssh (1.0)
-
- PLATFORMS
- #{generic_local_platform}
-
- DEPENDENCIES
- double_deps
-
- BUNDLED WITH
- #{Bundler::VERSION}
- G
- end
-
- it "does not add the :require option to the lockfile" do
- install_gemfile <<-G
- source "file://localhost#{gem_repo1}"
-
- gem "rack-obama", ">= 1.0", :require => "rack/obama"
- G
-
- lockfile_should_be <<-G
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
- rack (1.0.0)
- rack-obama (1.0)
- rack
-
- PLATFORMS
- #{generic_local_platform}
-
- DEPENDENCIES
- rack-obama (>= 1.0)
-
- BUNDLED WITH
- #{Bundler::VERSION}
- G
- end
-
- it "does not add the :group option to the lockfile" do
- install_gemfile <<-G
- source "file://localhost#{gem_repo1}"
-
- gem "rack-obama", ">= 1.0", :group => :test
- G
-
- lockfile_should_be <<-G
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
- rack (1.0.0)
- rack-obama (1.0)
- rack
-
- PLATFORMS
- #{generic_local_platform}
-
- DEPENDENCIES
- rack-obama (>= 1.0)
-
- BUNDLED WITH
- #{Bundler::VERSION}
- G
- end
-
- it "stores relative paths when the path is provided in a relative fashion and in Gemfile dir" do
- build_lib "foo", :path => bundled_app("foo")
-
- install_gemfile <<-G
- path "foo"
- gem "foo"
- G
-
- lockfile_should_be <<-G
- PATH
- remote: foo
- specs:
- foo (1.0)
-
- GEM
- specs:
-
- PLATFORMS
- #{generic_local_platform}
-
- DEPENDENCIES
- foo
-
- BUNDLED WITH
- #{Bundler::VERSION}
- G
- end
-
- it "stores relative paths when the path is provided in a relative fashion and is above Gemfile dir" do
- build_lib "foo", :path => bundled_app(File.join("..", "foo"))
-
- install_gemfile <<-G
- path "../foo"
- gem "foo"
- G
-
- lockfile_should_be <<-G
- PATH
- remote: ../foo
- specs:
- foo (1.0)
-
- GEM
- specs:
-
- PLATFORMS
- #{generic_local_platform}
-
- DEPENDENCIES
- foo
-
- BUNDLED WITH
- #{Bundler::VERSION}
- G
- end
-
- it "stores relative paths when the path is provided in an absolute fashion but is relative" do
- build_lib "foo", :path => bundled_app("foo")
-
- install_gemfile <<-G
- path File.expand_path("../foo", __FILE__)
- gem "foo"
- G
-
- lockfile_should_be <<-G
- PATH
- remote: foo
- specs:
- foo (1.0)
-
- GEM
- specs:
-
- PLATFORMS
- #{generic_local_platform}
-
- DEPENDENCIES
- foo
-
- BUNDLED WITH
- #{Bundler::VERSION}
- G
- end
-
- it "stores relative paths when the path is provided for gemspec" do
- build_lib("foo", :path => tmp.join("foo"))
-
- install_gemfile <<-G
- gemspec :path => "../foo"
- G
-
- lockfile_should_be <<-G
- PATH
- remote: ../foo
- specs:
- foo (1.0)
-
- GEM
- specs:
-
- PLATFORMS
- #{generic_local_platform}
-
- DEPENDENCIES
- foo!
-
- BUNDLED WITH
- #{Bundler::VERSION}
- G
- end
-
- it "keeps existing platforms in the lockfile" do
- lockfile <<-G
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
- rack (1.0.0)
-
- PLATFORMS
- java
-
- DEPENDENCIES
- rack
-
- BUNDLED WITH
- #{Bundler::VERSION}
- G
-
- install_gemfile <<-G
- source "file://localhost#{gem_repo1}"
-
- gem "rack"
- G
-
- platforms = ["java", generic_local_platform.to_s].sort
-
- lockfile_should_be <<-G
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
- rack (1.0.0)
-
- PLATFORMS
- #{platforms[0]}
- #{platforms[1]}
-
- DEPENDENCIES
- rack
-
- BUNDLED WITH
- #{Bundler::VERSION}
- G
- end
-
- it "persists the spec's platform to the lockfile" do
- build_gem "platform_specific", "1.0.0", :to_system => true do |s|
- s.platform = Gem::Platform.new("universal-java-16")
- end
-
- simulate_platform "universal-java-16"
-
- install_gemfile <<-G
- source "file://localhost#{gem_repo1}"
- gem "platform_specific"
- G
-
- lockfile_should_be <<-G
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
- platform_specific (1.0-java)
-
- PLATFORMS
- java
-
- DEPENDENCIES
- platform_specific
-
- BUNDLED WITH
- #{Bundler::VERSION}
- G
- end
-
- it "does not add duplicate gems" do
- install_gemfile <<-G
- source "file://localhost#{gem_repo1}"
- gem "rack"
- G
-
- install_gemfile <<-G
- source "file://localhost#{gem_repo1}"
- gem "rack"
- gem "activesupport"
- G
-
- lockfile_should_be <<-G
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
- activesupport (2.3.5)
- rack (1.0.0)
-
- PLATFORMS
- ruby
-
- DEPENDENCIES
- activesupport
- rack
-
- BUNDLED WITH
- #{Bundler::VERSION}
- G
- end
-
- it "does not add duplicate dependencies" do
- install_gemfile <<-G
- source "file://localhost#{gem_repo1}"
- gem "rack"
- gem "rack"
- G
-
- lockfile_should_be <<-G
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
- rack (1.0.0)
-
- PLATFORMS
- ruby
-
- DEPENDENCIES
- rack
-
- BUNDLED WITH
- #{Bundler::VERSION}
- G
- end
-
- it "does not add duplicate dependencies with versions" do
- install_gemfile <<-G
- source "file://localhost#{gem_repo1}"
- gem "rack", "1.0"
- gem "rack", "1.0"
- G
-
- lockfile_should_be <<-G
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
- rack (1.0.0)
-
- PLATFORMS
- ruby
-
- DEPENDENCIES
- rack (= 1.0)
-
- BUNDLED WITH
- #{Bundler::VERSION}
- G
- end
-
- it "does not add duplicate dependencies in different groups" do
- install_gemfile <<-G
- source "file://localhost#{gem_repo1}"
- gem "rack", "1.0", :group => :one
- gem "rack", "1.0", :group => :two
- G
-
- lockfile_should_be <<-G
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
- rack (1.0.0)
-
- PLATFORMS
- ruby
-
- DEPENDENCIES
- rack (= 1.0)
-
- BUNDLED WITH
- #{Bundler::VERSION}
- G
- end
-
- it "raises if two different versions are used" do
- install_gemfile <<-G
- source "file://localhost#{gem_repo1}"
- gem "rack", "1.0"
- gem "rack", "1.1"
- G
-
- expect(bundled_app("Gemfile.lock")).not_to exist
- expect(out).to include "rack (= 1.0) and rack (= 1.1)"
- end
-
- it "raises if two different sources are used" do
- install_gemfile <<-G
- source "file://localhost#{gem_repo1}"
- gem "rack"
- gem "rack", :git => "git://hubz.com"
- G
-
- expect(bundled_app("Gemfile.lock")).not_to exist
- expect(out).to include "rack (>= 0) should come from an unspecified source and git://hubz.com (at master)"
- end
-
- it "works correctly with multiple version dependencies" do
- install_gemfile <<-G
- source "file://localhost#{gem_repo1}"
- gem "rack", "> 0.9", "< 1.0"
- G
-
- lockfile_should_be <<-G
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
- rack (0.9.1)
-
- PLATFORMS
- ruby
-
- DEPENDENCIES
- rack (> 0.9, < 1.0)
-
- BUNDLED WITH
- #{Bundler::VERSION}
- G
- end
-
- it "captures the Ruby version in the lockfile" do
- install_gemfile <<-G
- source "file://localhost#{gem_repo1}"
- ruby '#{RUBY_VERSION}'
- gem "rack", "> 0.9", "< 1.0"
- G
-
- lockfile_should_be <<-G
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
- rack (0.9.1)
-
- PLATFORMS
- ruby
-
- DEPENDENCIES
- rack (> 0.9, < 1.0)
-
- RUBY VERSION
- ruby #{RUBY_VERSION}p#{RUBY_PATCHLEVEL}
-
- BUNDLED WITH
- #{Bundler::VERSION}
- G
- end
-
- # Some versions of the Bundler 1.1 RC series introduced corrupted
- # lockfiles. There were two major problems:
- #
- # * multiple copies of the same GIT section appeared in the lockfile
- # * when this happened, those sections got multiple copies of gems
- # in those sections.
- it "fixes corrupted lockfiles" do
- build_git "omg", :path => lib_path("omg")
- revision = revision_for(lib_path("omg"))
-
- gemfile <<-G
- source "file://localhost#{gem_repo1}"
- gem "omg", :git => "#{lib_path("omg")}", :branch => 'master'
- G
-
- bundle "install --path vendor"
- expect(the_bundle).to include_gems "omg 1.0"
-
- # Create a Gemfile.lock that has duplicate GIT sections
- lockfile <<-L
- GIT
- remote: #{lib_path("omg")}
- revision: #{revision}
- branch: master
- specs:
- omg (1.0)
-
- GIT
- remote: #{lib_path("omg")}
- revision: #{revision}
- branch: master
- specs:
- omg (1.0)
-
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
-
- PLATFORMS
- #{local}
-
- DEPENDENCIES
- omg!
-
- BUNDLED WITH
- #{Bundler::VERSION}
- L
-
- FileUtils.rm_rf(bundled_app("vendor"))
- bundle "install"
- expect(the_bundle).to include_gems "omg 1.0"
-
- # Confirm that duplicate specs do not appear
- lockfile_should_be(<<-L)
- GIT
- remote: #{lib_path("omg")}
- revision: #{revision}
- branch: master
- specs:
- omg (1.0)
-
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
-
- PLATFORMS
- #{local}
-
- DEPENDENCIES
- omg!
-
- BUNDLED WITH
- #{Bundler::VERSION}
- L
- end
-
- it "raises a helpful error message when the lockfile is missing deps" do
- lockfile <<-L
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
- rack_middleware (1.0)
-
- PLATFORMS
- #{local}
-
- DEPENDENCIES
- rack_middleware
- L
-
- install_gemfile <<-G
- source "file:#{gem_repo1}"
- gem "rack_middleware"
- G
-
- expect(out).to include("Downloading rack_middleware-1.0 revealed dependencies not in the API or the lockfile (#{Gem::Dependency.new("rack", "= 0.9.1")}).").
- and include("Either installing with `--full-index` or running `bundle update rack_middleware` should fix the problem.")
- end
-
- describe "a line ending" do
- def set_lockfile_mtime_to_known_value
- time = Time.local(2000, 1, 1, 0, 0, 0)
- File.utime(time, time, bundled_app("Gemfile.lock"))
- end
- before(:each) do
- build_repo2
-
- install_gemfile <<-G
- source "file://localhost#{gem_repo2}"
- gem "rack"
- G
- set_lockfile_mtime_to_known_value
- end
-
- it "generates Gemfile.lock with \\n line endings" do
- expect(File.read(bundled_app("Gemfile.lock"))).not_to match("\r\n")
- expect(the_bundle).to include_gems "rack 1.0"
- end
-
- context "during updates" do
- it "preserves Gemfile.lock \\n line endings" do
- update_repo2
-
- expect { bundle "update", :all => true }.to change { File.mtime(bundled_app("Gemfile.lock")) }
- expect(File.read(bundled_app("Gemfile.lock"))).not_to match("\r\n")
- expect(the_bundle).to include_gems "rack 1.2"
- end
-
- it "preserves Gemfile.lock \\n\\r line endings" do
- update_repo2
- win_lock = File.read(bundled_app("Gemfile.lock")).gsub(/\n/, "\r\n")
- File.open(bundled_app("Gemfile.lock"), "wb") {|f| f.puts(win_lock) }
- set_lockfile_mtime_to_known_value
-
- expect { bundle "update", :all => true }.to change { File.mtime(bundled_app("Gemfile.lock")) }
- expect(File.read(bundled_app("Gemfile.lock"))).to match("\r\n")
- expect(the_bundle).to include_gems "rack 1.2"
- end
- end
-
- context "when nothing changes" do
- it "preserves Gemfile.lock \\n line endings" do
- expect do
- ruby <<-RUBY
- require 'rubygems'
- require 'bundler'
- Bundler.setup
- RUBY
- end.not_to change { File.mtime(bundled_app("Gemfile.lock")) }
- end
-
- it "preserves Gemfile.lock \\n\\r line endings" do
- win_lock = File.read(bundled_app("Gemfile.lock")).gsub(/\n/, "\r\n")
- File.open(bundled_app("Gemfile.lock"), "wb") {|f| f.puts(win_lock) }
- set_lockfile_mtime_to_known_value
-
- expect do
- ruby <<-RUBY
- require 'rubygems'
- require 'bundler'
- Bundler.setup
- RUBY
- end.not_to change { File.mtime(bundled_app("Gemfile.lock")) }
- end
- end
- end
-
- it "refuses to install if Gemfile.lock contains conflict markers" do
- lockfile <<-L
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
- <<<<<<<
- rack (1.0.0)
- =======
- rack (1.0.1)
- >>>>>>>
-
- PLATFORMS
- ruby
-
- DEPENDENCIES
- rack
-
- BUNDLED WITH
- #{Bundler::VERSION}
- L
-
- install_gemfile(<<-G)
- source "file://localhost#{gem_repo1}"
- gem "rack"
- G
-
- expect(last_command.bundler_err).to match(/your Gemfile.lock contains merge conflicts/i)
- expect(last_command.bundler_err).to match(/git checkout HEAD -- Gemfile.lock/i)
- end
-end
diff --git a/spec/lock/lockfile_spec.rb b/spec/lock/lockfile_spec.rb
index 53c832445f..c2d44e5cf1 100644
--- a/spec/lock/lockfile_spec.rb
+++ b/spec/lock/lockfile_spec.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-RSpec.describe "the lockfile format", :bundler => "2" do
+RSpec.describe "the lockfile format" do
include Bundler::GemHelpers
before { ENV["BUNDLER_SPEC_IGNORE_COMPATIBILITY_GUARD"] = "TRUE" }
@@ -76,7 +76,7 @@ RSpec.describe "the lockfile format", :bundler => "2" do
end
it "does not update the lockfile's bundler version if nothing changed during bundle install" do
- version = "#{Bundler::VERSION.split(".").first}.0.0.0.a"
+ version = "#{Bundler::VERSION.split(".").first}.0.0.a"
lockfile <<-L
GEM
@@ -154,7 +154,10 @@ RSpec.describe "the lockfile format", :bundler => "2" do
G
end
- it "outputs a warning if the current is older than lockfile's bundler version" do
+ it "warns if the current is older than lockfile's bundler version" do
+ current_version = Bundler::VERSION
+ newer_minor = bump_minor(current_version)
+
lockfile <<-L
GEM
remote: file://localhost#{gem_repo1}/
@@ -162,26 +165,27 @@ RSpec.describe "the lockfile format", :bundler => "2" do
rack (1.0.0)
PLATFORMS
- #{generic_local_platform}
+ #{lockfile_platforms}
DEPENDENCIES
rack
BUNDLED WITH
- 9999999.1.0
+ #{newer_minor}
L
- simulate_bundler_version "9999999.0.0" do
- install_gemfile <<-G
- source "file://localhost#{gem_repo1}"
+ install_gemfile <<-G
+ source "file://localhost#{gem_repo1}"
- gem "rack"
- G
- end
+ gem "rack"
+ G
- warning_message = "the running version of Bundler (9999999.0.0) is older " \
- "than the version that created the lockfile (9999999.1.0)"
- expect(last_command.bundler_err).to include warning_message
+ pre_flag = prerelease?(newer_minor) ? " --pre" : ""
+ warning_message = "the running version of Bundler (#{current_version}) is older " \
+ "than the version that created the lockfile (#{newer_minor}). " \
+ "We suggest you to upgrade to the version that created the " \
+ "lockfile by running `gem install bundler:#{newer_minor}#{pre_flag}`."
+ expect(err).to include warning_message
lockfile_should_be <<-G
GEM
@@ -196,11 +200,14 @@ RSpec.describe "the lockfile format", :bundler => "2" do
rack
BUNDLED WITH
- 9999999.1.0
+ #{newer_minor}
G
end
- it "errors if the current is a major version older than lockfile's bundler version" do
+ it "warns when updating bundler major version" do
+ current_version = Bundler::VERSION
+ older_major = previous_major(current_version)
+
lockfile <<-L
GEM
remote: file://localhost#{gem_repo1}/
@@ -214,7 +221,7 @@ RSpec.describe "the lockfile format", :bundler => "2" do
rack
BUNDLED WITH
- 9999999.0.0
+ #{older_major}
L
install_gemfile <<-G
@@ -223,98 +230,59 @@ RSpec.describe "the lockfile format", :bundler => "2" do
gem "rack"
G
- expect(last_command).to be_failure
- expect(last_command.bundler_err).to include("You must use Bundler 9999999 or greater with this lockfile.")
- end
-
- it "shows a friendly error when running with a new bundler 2 lockfile" do
- lockfile <<-L
- GEM
- remote: https://rails-assets.org/
- specs:
- rails-assets-bootstrap (3.3.4)
- rails-assets-jquery (>= 1.9.1)
- rails-assets-jquery (2.1.4)
-
- GEM
- remote: https://rubygems.org/
- specs:
- rake (10.4.2)
-
- PLATFORMS
- ruby
-
- DEPENDENCIES
- rails-assets-bootstrap!
- rake
-
- BUNDLED WITH
- 9999999.0.0
- L
-
- install_gemfile <<-G
- source 'https://rubygems.org'
- gem 'rake'
-
- source 'https://rails-assets.org' do
- gem 'rails-assets-bootstrap'
- end
- G
-
- expect(last_command).to be_failure
- expect(out).to include("You must use Bundler 9999999 or greater with this lockfile.")
- end
+ expect(err).to include(
+ "Warning: the lockfile is being updated to Bundler " \
+ "#{current_version.split(".").first}, after which you will be unable to return to Bundler #{older_major.split(".").first}."
+ )
- it "warns when updating bundler major version" do
- lockfile <<-L
+ lockfile_should_be <<-G
GEM
remote: file://localhost#{gem_repo1}/
specs:
rack (1.0.0)
PLATFORMS
- #{generic_local_platform}
+ #{lockfile_platforms}
DEPENDENCIES
rack
BUNDLED WITH
- 1.10.0
- L
-
- simulate_bundler_version "9999999.0.0" do
- install_gemfile <<-G
- source "file://localhost#{gem_repo1}/"
+ #{current_version}
+ G
+ end
- gem "rack"
- G
- end
+ it "generates a simple lockfile for a single source, gem with dependencies" do
+ install_gemfile <<-G
+ source "file://localhost#{gem_repo1}/"
- expect(out).to include("Warning: the lockfile is being updated to Bundler " \
- "9999999, after which you will be unable to return to Bundler 1.")
+ gem "rack-obama"
+ G
lockfile_should_be <<-G
GEM
remote: file://localhost#{gem_repo1}/
specs:
rack (1.0.0)
+ rack-obama (1.0)
+ rack
PLATFORMS
#{lockfile_platforms}
DEPENDENCIES
- rack
+ rack-obama
BUNDLED WITH
- 9999999.0.0
+ #{Bundler::VERSION}
G
end
- it "generates a simple lockfile for a single source, gem with dependencies" do
+ it "generates a simple lockfile for a single source, gem with a version requirement" do
install_gemfile <<-G
source "file://localhost#{gem_repo1}/"
- gem "rack-obama"
+ gem "rack-obama", ">= 1.0"
G
lockfile_should_be <<-G
@@ -329,23 +297,30 @@ RSpec.describe "the lockfile format", :bundler => "2" do
#{lockfile_platforms}
DEPENDENCIES
- rack-obama
+ rack-obama (>= 1.0)
BUNDLED WITH
#{Bundler::VERSION}
G
end
- it "generates a simple lockfile for a single source, gem with a version requirement" do
- install_gemfile <<-G
- source "file://localhost#{gem_repo1}/"
+ it "generates a lockfile without credentials for a configured source", :bundler => "< 3" do
+ bundle "config set http://localgemserver.test/ user:pass"
- gem "rack-obama", ">= 1.0"
+ install_gemfile(<<-G, :artifice => "endpoint_strict_basic_authentication", :quiet => true)
+ source "http://localgemserver.test/" do
+
+ end
+
+ source "http://user:pass@othergemserver.test/" do
+ gem "rack-obama", ">= 1.0"
+ end
G
lockfile_should_be <<-G
GEM
- remote: file://localhost#{gem_repo1}/
+ remote: http://localgemserver.test/
+ remote: http://user:pass@othergemserver.test/
specs:
rack (1.0.0)
rack-obama (1.0)
@@ -355,15 +330,15 @@ RSpec.describe "the lockfile format", :bundler => "2" do
#{lockfile_platforms}
DEPENDENCIES
- rack-obama (>= 1.0)
+ rack-obama (>= 1.0)!
BUNDLED WITH
#{Bundler::VERSION}
G
end
- it "generates a lockfile without credentials for a configured source" do
- bundle "config http://localgemserver.test/ user:pass"
+ it "generates a lockfile without credentials for a configured source", :bundler => "3" do
+ bundle "config set http://localgemserver.test/ user:pass"
install_gemfile(<<-G, :artifice => "endpoint_strict_basic_authentication", :quiet => true)
source "http://localgemserver.test/" do
@@ -428,7 +403,7 @@ RSpec.describe "the lockfile format", :bundler => "2" do
expect(the_bundle).to include_gems "net-sftp 1.1.1", "net-ssh 1.0.0"
end
- it "generates a simple lockfile for a single pinned source, gem with a version requirement", :bundler => "< 2" do
+ it "generates a simple lockfile for a single pinned source, gem with a version requirement", :bundler => "< 3" do
git = build_git "foo"
install_gemfile <<-G
@@ -464,15 +439,15 @@ RSpec.describe "the lockfile format", :bundler => "2" do
G
lockfile_should_be <<-G
- GEM
- specs:
-
GIT
remote: #{lib_path("foo-1.0")}
revision: #{git.ref_for("master")}
specs:
foo (1.0)
+ GEM
+ specs:
+
PLATFORMS
#{lockfile_platforms}
@@ -533,15 +508,15 @@ RSpec.describe "the lockfile format", :bundler => "2" do
G
lockfile_should_be <<-G
- GEM
- specs:
-
GIT
remote: #{lib_path("foo-1.0")}
revision: #{git.ref_for("master")}
specs:
foo (1.0)
+ GEM
+ specs:
+
PLATFORMS
#{lockfile_platforms}
@@ -562,9 +537,6 @@ RSpec.describe "the lockfile format", :bundler => "2" do
G
lockfile_should_be <<-G
- GEM
- specs:
-
GIT
remote: #{lib_path("foo-1.0")}
revision: #{git.ref_for("omg")}
@@ -572,6 +544,9 @@ RSpec.describe "the lockfile format", :bundler => "2" do
specs:
foo (1.0)
+ GEM
+ specs:
+
PLATFORMS
#{lockfile_platforms}
@@ -592,9 +567,6 @@ RSpec.describe "the lockfile format", :bundler => "2" do
G
lockfile_should_be <<-G
- GEM
- specs:
-
GIT
remote: #{lib_path("foo-1.0")}
revision: #{git.ref_for("omg")}
@@ -602,6 +574,9 @@ RSpec.describe "the lockfile format", :bundler => "2" do
specs:
foo (1.0)
+ GEM
+ specs:
+
PLATFORMS
#{lockfile_platforms}
@@ -621,14 +596,14 @@ RSpec.describe "the lockfile format", :bundler => "2" do
G
lockfile_should_be <<-G
- GEM
- specs:
-
PATH
remote: #{lib_path("foo-1.0")}
specs:
foo (1.0)
+ GEM
+ specs:
+
PLATFORMS
#{lockfile_platforms}
@@ -651,14 +626,14 @@ RSpec.describe "the lockfile format", :bundler => "2" do
bundle! :install, :local => true
lockfile_should_be <<-G
- GEM
- specs:
-
PATH
remote: #{lib_path("foo-1.0")}
specs:
foo (1.0)
+ GEM
+ specs:
+
PLATFORMS
#{lockfile_platforms}
@@ -683,11 +658,6 @@ RSpec.describe "the lockfile format", :bundler => "2" do
G
lockfile_should_be <<-G
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
- rack (1.0.0)
-
GIT
remote: #{lib_path("bar-1.0")}
revision: #{bar.ref_for("master")}
@@ -699,6 +669,11 @@ RSpec.describe "the lockfile format", :bundler => "2" do
specs:
foo (1.0)
+ GEM
+ remote: file://localhost#{gem_repo1}/
+ specs:
+ rack (1.0.0)
+
PLATFORMS
#{lockfile_platforms}
@@ -772,8 +747,8 @@ RSpec.describe "the lockfile format", :bundler => "2" do
actionpack (= 2.3.2)
activerecord (= 2.3.2)
activeresource (= 2.3.2)
- rake (= 10.0.2)
- rake (10.0.2)
+ rake (= 12.3.2)
+ rake (12.3.2)
PLATFORMS
#{lockfile_platforms}
@@ -874,14 +849,14 @@ RSpec.describe "the lockfile format", :bundler => "2" do
G
lockfile_should_be <<-G
- GEM
- specs:
-
PATH
remote: foo
specs:
foo (1.0)
+ GEM
+ specs:
+
PLATFORMS
#{lockfile_platforms}
@@ -903,14 +878,14 @@ RSpec.describe "the lockfile format", :bundler => "2" do
G
lockfile_should_be <<-G
- GEM
- specs:
-
PATH
remote: ../foo
specs:
foo (1.0)
+ GEM
+ specs:
+
PLATFORMS
#{lockfile_platforms}
@@ -932,14 +907,14 @@ RSpec.describe "the lockfile format", :bundler => "2" do
G
lockfile_should_be <<-G
- GEM
- specs:
-
PATH
remote: foo
specs:
foo (1.0)
+ GEM
+ specs:
+
PLATFORMS
#{lockfile_platforms}
@@ -959,14 +934,14 @@ RSpec.describe "the lockfile format", :bundler => "2" do
G
lockfile_should_be <<-G
- GEM
- specs:
-
PATH
remote: ../foo
specs:
foo (1.0)
+ GEM
+ specs:
+
PLATFORMS
#{lockfile_platforms}
@@ -978,7 +953,48 @@ RSpec.describe "the lockfile format", :bundler => "2" do
G
end
- it "keeps existing platforms in the lockfile" do
+ it "keeps existing platforms in the lockfile", :bundler => "< 3" do
+ lockfile <<-G
+ GEM
+ remote: file://localhost#{gem_repo1}/
+ specs:
+ rack (1.0.0)
+
+ PLATFORMS
+ java
+
+ DEPENDENCIES
+ rack
+
+ BUNDLED WITH
+ #{Bundler::VERSION}
+ G
+
+ install_gemfile <<-G
+ source "file://localhost#{gem_repo1}/"
+
+ gem "rack"
+ G
+
+ lockfile_should_be <<-G
+ GEM
+ remote: file://localhost#{gem_repo1}/
+ specs:
+ rack (1.0.0)
+
+ PLATFORMS
+ java
+ #{generic_local_platform}
+
+ DEPENDENCIES
+ rack
+
+ BUNDLED WITH
+ #{Bundler::VERSION}
+ G
+ end
+
+ it "keeps existing platforms in the lockfile", :bundler => "3" do
lockfile <<-G
GEM
remote: file://localhost#{gem_repo1}/
@@ -1008,7 +1024,9 @@ RSpec.describe "the lockfile format", :bundler => "2" do
rack (1.0.0)
PLATFORMS
- #{lockfile_platforms "java", generic_local_platform, specific_local_platform}
+ java
+ #{generic_local_platform}
+ #{specific_local_platform}
DEPENDENCIES
rack
@@ -1018,7 +1036,38 @@ RSpec.describe "the lockfile format", :bundler => "2" do
G
end
- it "persists the spec's platform to the lockfile" do
+ it "persists the spec's platform to the lockfile", :bundler => "< 3" do
+ build_repo2 do
+ build_gem "platform_specific", "1.0" do |s|
+ s.platform = Gem::Platform.new("universal-java-16")
+ end
+ end
+
+ simulate_platform "universal-java-16"
+
+ install_gemfile! <<-G
+ source "file://localhost#{gem_repo2}"
+ gem "platform_specific"
+ G
+
+ lockfile_should_be <<-G
+ GEM
+ remote: file://localhost#{gem_repo2}/
+ specs:
+ platform_specific (1.0-java)
+
+ PLATFORMS
+ java
+
+ DEPENDENCIES
+ platform_specific
+
+ BUNDLED WITH
+ #{Bundler::VERSION}
+ G
+ end
+
+ it "persists the spec's platform and specific platform to the lockfile", :bundler => "3" do
build_repo2 do
build_gem "platform_specific", "1.0" do |s|
s.platform = Gem::Platform.new("universal-java-16")
@@ -1162,7 +1211,7 @@ RSpec.describe "the lockfile format", :bundler => "2" do
G
expect(bundled_app("Gemfile.lock")).not_to exist
- expect(out).to include "rack (= 1.0) and rack (= 1.1)"
+ expect(err).to include "rack (= 1.0) and rack (= 1.1)"
end
it "raises if two different sources are used" do
@@ -1173,7 +1222,7 @@ RSpec.describe "the lockfile format", :bundler => "2" do
G
expect(bundled_app("Gemfile.lock")).not_to exist
- expect(out).to include "rack (>= 0) should come from an unspecified source and git://hubz.com (at master)"
+ expect(err).to include "rack (>= 0) should come from an unspecified source and git://hubz.com (at master)"
end
it "works correctly with multiple version dependencies" do
@@ -1246,10 +1295,6 @@ RSpec.describe "the lockfile format", :bundler => "2" do
# Create a Gemfile.lock that has duplicate GIT sections
lockfile <<-L
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
-
GIT
remote: #{lib_path("omg")}
revision: #{revision}
@@ -1264,6 +1309,10 @@ RSpec.describe "the lockfile format", :bundler => "2" do
specs:
omg (1.0)
+ GEM
+ remote: file://localhost#{gem_repo1}/
+ specs:
+
PLATFORMS
#{lockfile_platforms}
@@ -1280,10 +1329,6 @@ RSpec.describe "the lockfile format", :bundler => "2" do
# Confirm that duplicate specs do not appear
lockfile_should_be(<<-L)
- GEM
- remote: file://localhost#{gem_repo1}/
- specs:
-
GIT
remote: #{lib_path("omg")}
revision: #{revision}
@@ -1291,6 +1336,10 @@ RSpec.describe "the lockfile format", :bundler => "2" do
specs:
omg (1.0)
+ GEM
+ remote: file://localhost#{gem_repo1}/
+ specs:
+
PLATFORMS
#{lockfile_platforms}
@@ -1321,7 +1370,7 @@ RSpec.describe "the lockfile format", :bundler => "2" do
gem "rack_middleware"
G
- expect(out).to include("Downloading rack_middleware-1.0 revealed dependencies not in the API or the lockfile (#{Gem::Dependency.new("rack", "= 0.9.1")}).").
+ expect(err).to include("Downloading rack_middleware-1.0 revealed dependencies not in the API or the lockfile (#{Gem::Dependency.new("rack", "= 0.9.1")}).").
and include("Either installing with `--full-index` or running `bundle update rack_middleware` should fix the problem.")
end
@@ -1419,7 +1468,25 @@ RSpec.describe "the lockfile format", :bundler => "2" do
gem "rack"
G
- expect(last_command.bundler_err).to match(/your Gemfile.lock contains merge conflicts/i)
- expect(last_command.bundler_err).to match(/git checkout HEAD -- Gemfile.lock/i)
+ expect(err).to match(/your Gemfile.lock contains merge conflicts/i)
+ expect(err).to match(/git checkout HEAD -- Gemfile.lock/i)
+ end
+
+private
+
+ def prerelease?(version)
+ Gem::Version.new(version).prerelease?
+ end
+
+ def previous_major(version)
+ version.split(".").map.with_index {|v, i| i == 0 ? v.to_i - 1 : v }.join(".")
+ end
+
+ def bump_minor(version)
+ bump(version, 1)
+ end
+
+ def bump(version, segment)
+ version.split(".").map.with_index {|v, i| i == segment ? v.to_i + 1 : v }.join(".")
end
end
diff --git a/spec/other/cli_dispatch_spec.rb b/spec/other/cli_dispatch_spec.rb
index d17819b394..548539ac89 100644
--- a/spec/other/cli_dispatch_spec.rb
+++ b/spec/other/cli_dispatch_spec.rb
@@ -3,27 +3,27 @@
RSpec.describe "bundle command names" do
it "work when given fully" do
bundle "install"
- expect(last_command.bundler_err).to eq("Could not locate Gemfile")
+ expect(err).to eq("Could not locate Gemfile")
expect(last_command.stdboth).not_to include("Ambiguous command")
end
it "work when not ambiguous" do
bundle "ins"
- expect(last_command.bundler_err).to eq("Could not locate Gemfile")
+ expect(err).to eq("Could not locate Gemfile")
expect(last_command.stdboth).not_to include("Ambiguous command")
end
it "print a friendly error when ambiguous" do
bundle "in"
- expect(last_command.bundler_err).to eq("Ambiguous command in matches [info, init, inject, install]")
+ expect(err).to eq("Ambiguous command in matches [info, init, inject, install]")
end
context "when cache_command_is_package is set" do
- before { bundle! "config cache_command_is_package true" }
+ before { bundle! "config set cache_command_is_package true" }
it "dispatches `bundle cache` to the package command" do
bundle "cache --verbose"
- expect(last_command.stdout).to start_with "Running `bundle package --verbose`"
+ expect(out).to start_with "Running `bundle package --verbose`"
end
end
end
diff --git a/spec/other/compatibility_guard_spec.rb b/spec/other/compatibility_guard_spec.rb
index ac05ebd918..c72842eab5 100644
--- a/spec/other/compatibility_guard_spec.rb
+++ b/spec/other/compatibility_guard_spec.rb
@@ -12,14 +12,5 @@ RSpec.describe "bundler compatibility guard" do
expect(err).to eq("Bundler 2 requires Ruby 2.3 or later. Either install bundler 1 or update to a supported Ruby version.")
end
end
-
- context "when running on RubyGems < 2.5", :ruby => ">= 2.5" do
- before { simulate_rubygems_version "1.3.6" }
-
- it "raises a friendly error" do
- bundle :version
- expect(err).to eq("Bundler 2 requires RubyGems 2.5 or later. Either install bundler 1 or update to a supported RubyGems version.")
- end
- end
end
end
diff --git a/spec/other/ext_spec.rb b/spec/other/ext_spec.rb
index 3f6f8b4928..bc8c781c5d 100644
--- a/spec/other/ext_spec.rb
+++ b/spec/other/ext_spec.rb
@@ -54,13 +54,8 @@ RSpec.describe "Gem::SourceIndex#refresh!" do
G
end
- it "does not explode when called", :rubygems => "1.7" do
+ it "does not explode when called" do
run "Gem.source_index.refresh!"
run "Gem::SourceIndex.new([]).refresh!"
end
-
- it "does not explode when called", :rubygems => "< 1.7" do
- run "Gem.source_index.refresh!"
- run "Gem::SourceIndex.from_gems_in([]).refresh!"
- end
end
diff --git a/spec/other/major_deprecation_spec.rb b/spec/other/major_deprecation_spec.rb
index e8de574c79..83944e4075 100644
--- a/spec/other/major_deprecation_spec.rb
+++ b/spec/other/major_deprecation_spec.rb
@@ -1,120 +1,235 @@
# frozen_string_literal: true
-RSpec.describe "major deprecations", :bundler => "< 2" do
- let(:warnings) { last_command.bundler_err } # change to err in 2.0
- let(:warnings_without_version_messages) { warnings.gsub(/#{Spec::Matchers::MAJOR_DEPRECATION}Bundler will only support ruby(gems)? >= .*/, "") }
+RSpec.describe "major deprecations" do
+ let(:warnings) { err }
- context "in a .99 version" do
+ describe "Bundler" do
before do
- simulate_bundler_version "1.99.1"
- bundle "config --delete major_deprecations"
+ install_gemfile! <<-G
+ source "file:#{gem_repo1}"
+ gem "rack"
+ G
end
- it "prints major deprecations without being configured" do
- ruby <<-R
- require "bundler"
- Bundler::SharedHelpers.major_deprecation(Bundler::VERSION)
- R
+ describe ".clean_env" do
+ before do
+ source = "Bundler.clean_env"
+ bundle "exec ruby -e #{source.dump}"
+ end
+
+ it "is deprecated in favor of .unbundled_env", :bundler => "2" do
+ expect(deprecations).to include \
+ "`Bundler.clean_env` has been deprecated in favor of `Bundler.unbundled_env`. " \
+ "If you instead want the environment before bundler was originally loaded, use `Bundler.original_env`"
+ end
- expect(warnings).to have_major_deprecation("1.99.1")
+ pending "is removed and shows a helpful error message about it", :bundler => "3"
end
- end
- before do
- bundle "config major_deprecations true"
+ describe ".with_clean_env" do
+ before do
+ source = "Bundler.with_clean_env {}"
+ bundle "exec ruby -e #{source.dump}"
+ end
- create_file "gems.rb", <<-G
- source "file:#{gem_repo1}"
- ruby #{RUBY_VERSION.dump}
- gem "rack"
- G
- bundle! "install"
- end
+ it "is deprecated in favor of .unbundled_env", :bundler => "2" do
+ expect(deprecations).to include(
+ "`Bundler.with_clean_env` has been deprecated in favor of `Bundler.with_unbundled_env`. " \
+ "If you instead want the environment before bundler was originally loaded, use `Bundler.with_original_env`"
+ )
+ end
- describe "Bundler" do
- describe ".clean_env" do
- it "is deprecated in favor of .unbundled_env" do
- source = "Bundler.clean_env"
+ pending "is removed and shows a helpful error message about it", :bundler => "3"
+ end
+
+ describe ".clean_system" do
+ before do
+ source = "Bundler.clean_system('ls')"
bundle "exec ruby -e #{source.dump}"
- expect(warnings).to have_major_deprecation \
- "`Bundler.clean_env` has been deprecated in favor of `Bundler.unbundled_env`. " \
- "If you instead want the environment before bundler was originally loaded, use `Bundler.original_env`"
end
+
+ it "is deprecated in favor of .unbundled_system", :bundler => "2" do
+ expect(deprecations).to include(
+ "`Bundler.clean_system` has been deprecated in favor of `Bundler.unbundled_system`. " \
+ "If you instead want to run the command in the environment before bundler was originally loaded, use `Bundler.original_system`"
+ )
+ end
+
+ pending "is removed and shows a helpful error message about it", :bundler => "3"
+ end
+
+ describe ".clean_exec" do
+ before do
+ source = "Bundler.clean_exec('ls')"
+ bundle "exec ruby -e #{source.dump}"
+ end
+
+ it "is deprecated in favor of .unbundled_exec", :bundler => "2" do
+ expect(deprecations).to include(
+ "`Bundler.clean_exec` has been deprecated in favor of `Bundler.unbundled_exec`. " \
+ "If you instead want to exec to a command in the environment before bundler was originally loaded, use `Bundler.original_exec`"
+ )
+ end
+
+ pending "is removed and shows a helpful error message about it", :bundler => "3"
end
describe ".environment" do
- it "is deprecated in favor of .load" do
+ before do
source = "Bundler.environment"
bundle "exec ruby -e #{source.dump}"
- expect(warnings).to have_major_deprecation "Bundler.environment has been removed in favor of Bundler.load"
end
+
+ it "is deprecated in favor of .load", :bundler => "2" do
+ expect(deprecations).to include "Bundler.environment has been removed in favor of Bundler.load"
+ end
+
+ pending "is removed and shows a helpful error message about it", :bundler => "3"
end
+ end
- shared_examples_for "environmental deprecations" do |trigger|
- describe "ruby version", :ruby => "< 2.0" do
- it "requires a newer ruby version" do
- instance_eval(&trigger)
- expect(warnings).to have_major_deprecation "Bundler will only support ruby >= 2.0, you are running #{RUBY_VERSION}"
- end
+ describe "bundle update --quiet" do
+ it "does not print any deprecations" do
+ bundle :update, :quiet => true
+ expect(deprecations).to be_empty
+ end
+ end
+
+ describe "bundle config" do
+ describe "old list interface" do
+ before do
+ bundle! "config"
end
- describe "rubygems version", :rubygems => "< 2.0" do
- it "requires a newer rubygems version" do
- instance_eval(&trigger)
- expect(warnings).to have_major_deprecation "Bundler will only support rubygems >= 2.0, you are running #{Gem::VERSION}"
- end
+ it "warns", :bundler => "2" do
+ expect(deprecations).to include("Using the `config` command without a subcommand [list, get, set, unset] is deprecated and will be removed in the future. Use `bundle config list` instead.")
end
+
+ pending "fails with a helpful error", :bundler => "3"
end
- describe "-rbundler/setup" do
- it_behaves_like "environmental deprecations", proc { ruby "require 'bundler/setup'" }
+ describe "old get interface" do
+ before do
+ bundle! "config waka"
+ end
+
+ it "warns", :bundler => "2" do
+ expect(deprecations).to include("Using the `config` command without a subcommand [list, get, set, unset] is deprecated and will be removed in the future. Use `bundle config get waka` instead.")
+ end
+
+ pending "fails with a helpful error", :bundler => "3"
end
- describe "Bundler.setup" do
- it_behaves_like "environmental deprecations", proc { ruby "require 'bundler'; Bundler.setup" }
+ describe "old set interface" do
+ before do
+ bundle! "config waka wakapun"
+ end
+
+ it "warns", :bundler => "2" do
+ expect(deprecations).to include("Using the `config` command without a subcommand [list, get, set, unset] is deprecated and will be removed in the future. Use `bundle config set waka wakapun` instead.")
+ end
+
+ pending "fails with a helpful error", :bundler => "3"
end
- describe "bundle check" do
- it_behaves_like "environmental deprecations", proc { bundle :check }
+ describe "old set interface with --local" do
+ before do
+ bundle! "config --local waka wakapun"
+ end
+
+ it "warns", :bundler => "2" do
+ expect(deprecations).to include("Using the `config` command without a subcommand [list, get, set, unset] is deprecated and will be removed in the future. Use `bundle config set --local waka wakapun` instead.")
+ end
+
+ pending "fails with a helpful error", :bundler => "3"
end
- describe "bundle update --quiet" do
- it "does not print any deprecations" do
- bundle :update, :quiet => true
- expect(warnings_without_version_messages).not_to have_major_deprecation
+ describe "old set interface with --global" do
+ before do
+ bundle! "config --global waka wakapun"
+ end
+
+ it "warns", :bundler => "2" do
+ expect(deprecations).to include("Using the `config` command without a subcommand [list, get, set, unset] is deprecated and will be removed in the future. Use `bundle config set --global waka wakapun` instead.")
end
+
+ pending "fails with a helpful error", :bundler => "3"
end
- describe "bundle update" do
+ describe "old unset interface" do
before do
- create_file("gems.rb", "")
- bundle! "install"
+ bundle! "config --delete waka"
+ end
+
+ it "warns", :bundler => "2" do
+ expect(deprecations).to include("Using the `config` command without a subcommand [list, get, set, unset] is deprecated and will be removed in the future. Use `bundle config unset waka` instead.")
end
- it "warns when no options are given" do
- bundle! "update"
- expect(warnings).to have_major_deprecation a_string_including("Pass --all to `bundle update` to update everything")
+ pending "fails with a helpful error", :bundler => "3"
+ end
+
+ describe "old unset interface with --local" do
+ before do
+ bundle! "config --delete --local waka"
end
- it "does not warn when --all is passed" do
- bundle! "update --all"
- expect(warnings_without_version_messages).not_to have_major_deprecation
+ it "warns", :bundler => "2" do
+ expect(deprecations).to include("Using the `config` command without a subcommand [list, get, set, unset] is deprecated and will be removed in the future. Use `bundle config unset --local waka` instead.")
end
+
+ pending "fails with a helpful error", :bundler => "3"
end
- describe "bundle install --binstubs" do
- it "should output a deprecation warning" do
- gemfile <<-G
- gem 'rack'
- G
+ describe "old unset interface with --global" do
+ before do
+ bundle! "config --delete --global waka"
+ end
- bundle :install, :binstubs => true
- expect(warnings).to have_major_deprecation a_string_including("The --binstubs option will be removed")
+ it "warns", :bundler => "2" do
+ expect(deprecations).to include("Using the `config` command without a subcommand [list, get, set, unset] is deprecated and will be removed in the future. Use `bundle config unset --global waka` instead.")
end
+
+ pending "fails with a helpful error", :bundler => "3"
end
end
- context "when bundle is run" do
+ describe "bundle update" do
+ before do
+ install_gemfile <<-G
+ source "file:#{gem_repo1}"
+ gem "rack"
+ G
+ end
+
+ it "warns when no options are given", :bundler => "2" do
+ bundle! "update"
+ expect(deprecations).to include("Pass --all to `bundle update` to update everything")
+ end
+
+ pending "fails with a helpful error when no options are given", :bundler => "3"
+
+ it "does not warn when --all is passed" do
+ bundle! "update --all"
+ expect(deprecations).to be_empty
+ end
+ end
+
+ describe "bundle install --binstubs" do
+ before do
+ install_gemfile <<-G, :binstubs => true
+ source "file:#{gem_repo1}"
+ gem "rack"
+ G
+ end
+
+ it "should output a deprecation warning", :bundler => "2" do
+ expect(deprecations).to include("The --binstubs option will be removed in favor of `bundle binstubs`")
+ end
+
+ pending "fails with a helpful error", :bundler => "3"
+ end
+
+ context "bundle install with both gems.rb and Gemfile present" do
it "should not warn about gems.rb" do
create_file "gems.rb", <<-G
source "file://#{gem_repo1}"
@@ -122,36 +237,92 @@ RSpec.describe "major deprecations", :bundler => "< 2" do
G
bundle :install
- expect(warnings_without_version_messages).not_to have_major_deprecation
+ expect(deprecations).to be_empty
end
- it "should print a Gemfile deprecation warning" do
+ it "should print a proper warning, and use gems.rb" do
create_file "gems.rb"
install_gemfile! <<-G
source "file://#{gem_repo1}"
gem "rack"
G
- expect(the_bundle).to include_gem "rack 1.0"
- expect(warnings).to have_major_deprecation a_string_including("gems.rb and gems.locked will be preferred to Gemfile and Gemfile.lock.")
+ expect(warnings).to include(
+ "Multiple gemfiles (gems.rb and Gemfile) detected. Make sure you remove Gemfile and Gemfile.lock since bundler is ignoring them in favor of gems.rb and gems.rb.locked."
+ )
+
+ expect(the_bundle).not_to include_gem "rack 1.0"
end
+ end
- context "with flags" do
- it "should print a deprecation warning about autoremembering flags" do
- install_gemfile <<-G, :path => "vendor/bundle"
- source "file://#{gem_repo1}"
- gem "rack"
- G
+ context "bundle install with flags" do
+ before do
+ bundle "config set --local path vendor/bundle"
- expect(warnings).to have_major_deprecation a_string_including(
- "flags passed to commands will no longer be automatically remembered."
- )
+ install_gemfile <<-G
+ source "file://#{gem_repo1}"
+ gem "rack"
+ G
+ end
+
+ {
+ :clean => true,
+ :deployment => true,
+ :frozen => true,
+ :"no-cache" => true,
+ :"no-prune" => true,
+ :path => "vendor/bundle",
+ :shebang => "ruby27",
+ :system => true,
+ :without => "development",
+ :with => "development",
+ }.each do |name, value|
+ flag_name = "--#{name}"
+
+ context "with the #{flag_name} flag" do
+ before do
+ bundle "install" # to create a lockfile, which deployment or frozen need
+ bundle "install #{flag_name} #{value}"
+ end
+
+ it "should print a deprecation warning", :bundler => "2" do
+ expect(deprecations).to include(
+ "The `#{flag_name}` flag is deprecated because it relies on " \
+ "being remembered accross bundler invokations, which bundler " \
+ "will no longer do in future versions. Instead please use " \
+ "`bundle config #{name} '#{value}'`, and stop using this flag"
+ )
+ end
+
+ pending "should fail with a helpful error", :bundler => "3"
end
end
end
+ context "bundle install with multiple sources" do
+ before do
+ install_gemfile <<-G
+ source "file://localhost#{gem_repo3}"
+ source "file://localhost#{gem_repo1}"
+ G
+ end
+
+ it "shows a deprecation", :bundler => "2" do
+ expect(deprecations).to include(
+ "Your Gemfile contains multiple primary sources. " \
+ "Using `source` more than once without a block is a security risk, and " \
+ "may result in installing unexpected gems. To resolve this warning, use " \
+ "a block to indicate which gems should come from the secondary source. " \
+ "To upgrade this warning to an error, run `bundle config set " \
+ "disable_multisource true`."
+ )
+ end
+
+ pending "should fail with a helpful error", :bundler => "3"
+ end
+
context "when Bundler.setup is run in a ruby script" do
- it "should print a single deprecation warning" do
+ before do
create_file "gems.rb"
install_gemfile! <<-G
source "file://#{gem_repo1}"
@@ -167,52 +338,57 @@ RSpec.describe "major deprecations", :bundler => "< 2" do
Bundler.setup
Bundler.setup
RUBY
+ end
- expect(warnings_without_version_messages).to have_major_deprecation("gems.rb and gems.locked will be preferred to Gemfile and Gemfile.lock.")
+ it "should print a single deprecation warning" do
+ expect(warnings).to include(
+ "Multiple gemfiles (gems.rb and Gemfile) detected. Make sure you remove Gemfile and Gemfile.lock since bundler is ignoring them in favor of gems.rb and gems.rb.locked."
+ )
end
end
context "when `bundler/deployment` is required in a ruby script" do
- it "should print a capistrano deprecation warning" do
+ before do
ruby(<<-RUBY)
require 'bundler/deployment'
RUBY
+ end
- expect(warnings).to have_major_deprecation("Bundler no longer integrates " \
+ it "should print a capistrano deprecation warning", :bundler => "2" do
+ expect(deprecations).to include("Bundler no longer integrates " \
"with Capistrano, but Capistrano provides " \
"its own integration with Bundler via the " \
"capistrano-bundler gem. Use it instead.")
end
+
+ pending "should fail with a helpful error", :bundler => "3"
end
describe Bundler::Dsl do
+ let(:msg) do
+ <<-EOS
+The :github git source is deprecated, and will be removed in the future. Change any "reponame" :github sources to "username/reponame". Add this code to the top of your Gemfile to ensure it continues to work:
+
+ git_source(:github) {|repo_name| "https://github.com/\#{repo_name}.git" }
+
+ EOS
+ end
+
before do
@rubygems = double("rubygems")
allow(Bundler::Source::Rubygems).to receive(:new) { @rubygems }
end
context "with github gems" do
- it "warns about the https change" do
- msg = <<-EOS
-The :github git source is deprecated, and will be removed in Bundler 2.0. Change any "reponame" :github sources to "username/reponame". Add this code to the top of your Gemfile to ensure it continues to work:
-
- git_source(:github) {|repo_name| "https://github.com/\#{repo_name}.git" }
-
- EOS
- expect(Bundler::SharedHelpers).to receive(:major_deprecation).with(2, msg)
+ it "warns about the https change if people are opting out" do
+ Bundler.settings.temporary "github.https" => false
+ expect(Bundler::SharedHelpers).to receive(:major_deprecation).with(3, msg)
+ expect(Bundler::SharedHelpers).to receive(:major_deprecation).with(2, "Setting `github.https` to false is deprecated and won't be supported in the future.")
subject.gem("sparks", :github => "indirect/sparks")
end
- it "upgrades to https on request" do
- Bundler.settings.temporary "github.https" => true
- msg = <<-EOS
-The :github git source is deprecated, and will be removed in Bundler 2.0. Change any "reponame" :github sources to "username/reponame". Add this code to the top of your Gemfile to ensure it continues to work:
-
- git_source(:github) {|repo_name| "https://github.com/\#{repo_name}.git" }
-
- EOS
- expect(Bundler::SharedHelpers).to receive(:major_deprecation).with(2, msg)
- expect(Bundler::SharedHelpers).to receive(:major_deprecation).with(2, "The `github.https` setting will be removed")
+ it "upgrades to https by default", :bundler => "2" do
+ expect(Bundler::SharedHelpers).to receive(:major_deprecation).with(3, msg)
subject.gem("sparks", :github => "indirect/sparks")
github_uri = "https://github.com/indirect/sparks.git"
expect(subject.dependencies.first.source.uri).to eq(github_uri)
@@ -223,7 +399,7 @@ The :github git source is deprecated, and will be removed in Bundler 2.0. Change
it "warns about removal" do
allow(Bundler.ui).to receive(:deprecate)
msg = <<-EOS
-The :bitbucket git source is deprecated, and will be removed in Bundler 2.0. Add this code to the top of your Gemfile to ensure it continues to work:
+The :bitbucket git source is deprecated, and will be removed in the future. Add this code to the top of your Gemfile to ensure it continues to work:
git_source(:bitbucket) do |repo_name|
user_name, repo_name = repo_name.split("/")
@@ -232,7 +408,7 @@ The :bitbucket git source is deprecated, and will be removed in Bundler 2.0. Add
end
EOS
- expect(Bundler::SharedHelpers).to receive(:major_deprecation).with(2, msg)
+ expect(Bundler::SharedHelpers).to receive(:major_deprecation).with(3, msg)
subject.gem("not-really-a-gem", :bitbucket => "mcorp/flatlab-rails")
end
end
@@ -240,37 +416,104 @@ The :bitbucket git source is deprecated, and will be removed in Bundler 2.0. Add
context "with gist gems" do
it "warns about removal" do
allow(Bundler.ui).to receive(:deprecate)
- msg = "The :gist git source is deprecated, and will be removed " \
- "in Bundler 2.0. Add this code to the top of your Gemfile to ensure it " \
- "continues to work:\n\n git_source(:gist) {|repo_name| " \
- "\"https://gist.github.com/\#{repo_name}.git\" }\n\n"
- expect(Bundler::SharedHelpers).to receive(:major_deprecation).with(2, msg)
+ msg = <<-EOS
+The :gist git source is deprecated, and will be removed in the future. Add this code to the top of your Gemfile to ensure it continues to work:
+
+ git_source(:gist) {|repo_name| "https://gist.github.com/\#{repo_name}.git" }
+
+ EOS
+ expect(Bundler::SharedHelpers).to receive(:major_deprecation).with(3, msg)
subject.gem("not-really-a-gem", :gist => "1234")
end
end
end
context "bundle show" do
- it "prints a deprecation warning" do
+ before do
install_gemfile! <<-G
source "file://#{gem_repo1}"
gem "rack"
G
+ end
+
+ context "without flags" do
+ before do
+ bundle! :show
+ end
+
+ it "prints a deprecation warning recommending `bundle list`", :bundler => "2" do
+ expect(deprecations).to include("use `bundle list` instead of `bundle show`")
+ end
+
+ pending "fails with a helpful message", :bundler => "3"
+ end
+
+ context "with --outdated flag" do
+ before do
+ bundle! "show --outdated"
+ end
+
+ it "prints a deprecation warning informing about its removal", :bundler => "2" do
+ expect(deprecations).to include("the `--outdated` flag to `bundle show` was undocumented and will be removed without replacement")
+ end
+
+ pending "fails with a helpful message", :bundler => "3"
+ end
- bundle! :show
+ context "with --verbose flag" do
+ before do
+ bundle! "show --verbose"
+ end
+
+ it "prints a deprecation warning informing about its removal", :bundler => "2" do
+ expect(deprecations).to include("the `--verbose` flag to `bundle show` was undocumented and will be removed without replacement")
+ end
+
+ pending "fails with a helpful message", :bundler => "3"
+ end
- warnings.gsub!(/gems included.*?\[DEPRECATED/im, "[DEPRECATED")
+ context "with a gem argument" do
+ before do
+ bundle! "show rack"
+ end
- expect(warnings).to have_major_deprecation a_string_including("use `bundle list` instead of `bundle show`")
+ it "prints a deprecation warning recommending `bundle info`", :bundler => "2" do
+ expect(deprecations).to include("use `bundle info rack` instead of `bundle show rack`")
+ end
end
+
+ pending "fails with a helpful message", :bundler => "3"
end
context "bundle console" do
- it "prints a deprecation warning" do
+ before do
bundle "console"
+ end
- expect(warnings).to have_major_deprecation \
- a_string_including("bundle console will be replaced by `bin/console` generated by `bundle gem <name>`")
+ it "prints a deprecation warning", :bundler => "2" do
+ expect(deprecations).to include \
+ "bundle console will be replaced by `bin/console` generated by `bundle gem <name>`"
end
+
+ pending "fails with a helpful message", :bundler => "3"
+ end
+
+ context "bundle viz" do
+ let(:ruby_graphviz) do
+ graphviz_glob = base_system_gems.join("cache/ruby-graphviz*")
+ Pathname.glob(graphviz_glob).first
+ end
+
+ before do
+ system_gems ruby_graphviz
+ create_file "gems.rb"
+ bundle "viz"
+ end
+
+ it "prints a deprecation warning", :bundler => "2" do
+ expect(deprecations).to include "The `viz` command has been moved to the `bundle-viz` gem, see https://github.com/bundler/bundler-viz"
+ end
+
+ pending "fails with a helpful message", :bundler => "3"
end
end
diff --git a/spec/other/platform_spec.rb b/spec/other/platform_spec.rb
index ca74945563..9c62904286 100644
--- a/spec/other/platform_spec.rb
+++ b/spec/other/platform_spec.rb
@@ -4,7 +4,7 @@ RSpec.describe "bundle platform" do
context "without flags" do
let(:bundle_platform_platforms_string) do
platforms = [rb]
- platforms.unshift(specific_local_platform) if Bundler.feature_flag.bundler_2_mode?
+ platforms.unshift(specific_local_platform) if Bundler.feature_flag.bundler_3_mode?
platforms.map {|pl| "* #{pl}" }.join("\n")
end
@@ -149,7 +149,7 @@ G
expect(out).to eq("ruby 1.8.7 (rbx 1.2.4)")
end
- it "handles truffleruby", :rubygems => ">= 2.1.0" do
+ it "handles truffleruby" do
gemfile <<-G
source "file://#{gem_repo1}"
ruby "2.5.1", :engine => 'truffleruby', :engine_version => '1.0.0-rc6'
@@ -268,27 +268,27 @@ G
def should_be_ruby_version_incorrect
expect(exitstatus).to eq(18) if exitstatus
- expect(out).to be_include("Your Ruby version is #{RUBY_VERSION}, but your Gemfile specified #{not_local_ruby_version}")
+ expect(err).to be_include("Your Ruby version is #{RUBY_VERSION}, but your Gemfile specified #{not_local_ruby_version}")
end
def should_be_engine_incorrect
expect(exitstatus).to eq(18) if exitstatus
- expect(out).to be_include("Your Ruby engine is #{local_ruby_engine}, but your Gemfile specified #{not_local_tag}")
+ expect(err).to be_include("Your Ruby engine is #{local_ruby_engine}, but your Gemfile specified #{not_local_tag}")
end
def should_be_engine_version_incorrect
expect(exitstatus).to eq(18) if exitstatus
- expect(out).to be_include("Your #{local_ruby_engine} version is #{local_engine_version}, but your Gemfile specified #{local_ruby_engine} #{not_local_engine_version}")
+ expect(err).to be_include("Your #{local_ruby_engine} version is #{local_engine_version}, but your Gemfile specified #{local_ruby_engine} #{not_local_engine_version}")
end
def should_be_patchlevel_incorrect
expect(exitstatus).to eq(18) if exitstatus
- expect(out).to be_include("Your Ruby patchlevel is #{RUBY_PATCHLEVEL}, but your Gemfile specified #{not_local_patchlevel}")
+ expect(err).to be_include("Your Ruby patchlevel is #{RUBY_PATCHLEVEL}, but your Gemfile specified #{not_local_patchlevel}")
end
def should_be_patchlevel_fixnum
expect(exitstatus).to eq(18) if exitstatus
- expect(out).to be_include("The Ruby patchlevel in your Gemfile must be a string")
+ expect(err).to be_include("The Ruby patchlevel in your Gemfile must be a string")
end
context "bundle install" do
@@ -511,7 +511,7 @@ G
build_gem "activesupport", "3.0"
end
- bundle "update", :all => bundle_update_requires_all?
+ bundle "update", :all => true
expect(the_bundle).to include_gems "rack 1.2", "rack-obama 1.0", "activesupport 3.0"
end
@@ -528,7 +528,7 @@ G
build_gem "activesupport", "3.0"
end
- bundle "update", :all => bundle_update_requires_all?
+ bundle "update", :all => true
expect(the_bundle).to include_gems "rack 1.2", "rack-obama 1.0", "activesupport 3.0"
end
end
@@ -545,7 +545,7 @@ G
build_gem "activesupport", "3.0"
end
- bundle :update, :all => bundle_update_requires_all?
+ bundle :update, :all => true
should_be_ruby_version_incorrect
end
@@ -561,7 +561,7 @@ G
build_gem "activesupport", "3.0"
end
- bundle :update, :all => bundle_update_requires_all?
+ bundle :update, :all => true
should_be_engine_incorrect
end
@@ -578,7 +578,7 @@ G
build_gem "activesupport", "3.0"
end
- bundle :update, :all => bundle_update_requires_all?
+ bundle :update, :all => true
should_be_engine_version_incorrect
end
end
@@ -594,7 +594,7 @@ G
build_gem "activesupport", "3.0"
end
- bundle :update, :all => bundle_update_requires_all?
+ bundle :update, :all => true
should_be_patchlevel_incorrect
end
end
@@ -633,7 +633,7 @@ G
end
end
- it "fails if ruby version doesn't match", :bundler => "< 2" do
+ it "fails if ruby version doesn't match", :bundler => "< 3" do
gemfile <<-G
source "file://#{gem_repo1}"
gem "rails"
@@ -645,7 +645,7 @@ G
should_be_ruby_version_incorrect
end
- it "fails if engine doesn't match", :bundler => "< 2" do
+ it "fails if engine doesn't match", :bundler => "< 3" do
gemfile <<-G
source "file://#{gem_repo1}"
gem "rails"
@@ -657,7 +657,7 @@ G
should_be_engine_incorrect
end
- it "fails if engine version doesn't match", :bundler => "< 2" do
+ it "fails if engine version doesn't match", :bundler => "< 3" do
simulate_ruby_engine "jruby" do
gemfile <<-G
source "file://#{gem_repo1}"
@@ -671,7 +671,7 @@ G
end
end
- it "fails when patchlevel doesn't match", :bundler => "< 2" do
+ it "fails when patchlevel doesn't match", :bundler => "< 3" do
gemfile <<-G
source "file://#{gem_repo1}"
gem "rack"
@@ -863,7 +863,7 @@ G
G
bundle "exec rackup"
- expect(out).to eq("0.9.1")
+ expect(out).to include("0.9.1")
end
it "activates the correct gem when ruby version matches any engine" do
@@ -876,7 +876,7 @@ G
G
bundle "exec rackup"
- expect(out).to eq("0.9.1")
+ expect(out).to include("0.9.1")
end
end
@@ -928,7 +928,7 @@ G
end
end
- context "bundle console", :bundler => "< 2" do
+ context "bundle console", :bundler => "< 3" do
before do
install_gemfile <<-G
source "file://#{gem_repo1}"
diff --git a/spec/other/ssl_cert_spec.rb b/spec/other/ssl_cert_spec.rb
deleted file mode 100644
index 6d957276fc..0000000000
--- a/spec/other/ssl_cert_spec.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-# frozen_string_literal: true
-
-require "bundler/ssl_certs/certificate_manager"
-
-RSpec.describe "SSL Certificates", :rubygems_master do
- hosts = %w[
- rubygems.org
- index.rubygems.org
- rubygems.global.ssl.fastly.net
- staging.rubygems.org
- ]
-
- hosts.each do |host|
- it "can securely connect to #{host}", :realworld do
- Bundler::SSLCerts::CertificateManager.new.connect_to(host)
- end
- end
-end
diff --git a/spec/plugins/command_spec.rb b/spec/plugins/command_spec.rb
index 999d8b722b..53d34f7acc 100644
--- a/spec/plugins/command_spec.rb
+++ b/spec/plugins/command_spec.rb
@@ -73,8 +73,8 @@ RSpec.describe "command plugins" do
expect(out).not_to include("Installed plugin copycat")
- expect(out).to include("Failed to install plugin")
+ expect(err).to include("Failed to install plugin")
- expect(out).to include("Command(s) `mahcommand` declared by copycat are already registered.")
+ expect(err).to include("Command(s) `mahcommand` declared by copycat are already registered.")
end
end
diff --git a/spec/plugins/install_spec.rb b/spec/plugins/install_spec.rb
index 29017c2afa..afc6087c1b 100644
--- a/spec/plugins/install_spec.rb
+++ b/spec/plugins/install_spec.rb
@@ -11,7 +11,7 @@ RSpec.describe "bundler plugin install" do
it "shows proper message when gem in not found in the source" do
bundle "plugin install no-foo --source file://#{gem_repo1}"
- expect(out).to include("Could not find")
+ expect(err).to include("Could not find")
plugin_should_not_be_installed("no-foo")
end
@@ -22,6 +22,18 @@ RSpec.describe "bundler plugin install" do
plugin_should_be_installed("foo")
end
+ context "plugin is already installed" do
+ before do
+ bundle "plugin install foo --source file://#{gem_repo2}"
+ end
+
+ it "doesn't install plugin again" do
+ bundle "plugin install foo --source file://#{gem_repo2}"
+ expect(out).not_to include("Installing plugin foo")
+ expect(out).not_to include("Installed plugin foo")
+ end
+ end
+
it "installs multiple plugins" do
bundle "plugin install foo kung-foo --source file://#{gem_repo2}"
@@ -86,7 +98,7 @@ RSpec.describe "bundler plugin install" do
bundle "plugin install charlie --source file://#{gem_repo2}"
- expect(out).to include("plugins.rb was not found")
+ expect(err).to include("plugins.rb was not found")
expect(global_plugin_gem("charlie-1.0")).not_to be_directory
@@ -138,7 +150,7 @@ RSpec.describe "bundler plugin install" do
bundle "plugin install foo --local_git /phony/path/project --git git@gitphony.com:/repo/project"
expect(exitstatus).not_to eq(0) if exitstatus
- expect(out).to eq("Remote and local plugin git sources can't be both specified")
+ expect(err).to eq("Remote and local plugin git sources can't be both specified")
end
end
@@ -165,7 +177,7 @@ RSpec.describe "bundler plugin install" do
build_plugin "foo", "1.1.0"
end
- install_gemfile <<-G
+ gemfile <<-G
source 'file://#{gem_repo2}'
plugin 'foo', "1.0"
G
diff --git a/spec/plugins/list_spec.rb b/spec/plugins/list_spec.rb
index 9b09f74498..7dc9d10c4b 100644
--- a/spec/plugins/list_spec.rb
+++ b/spec/plugins/list_spec.rb
@@ -53,18 +53,8 @@ RSpec.describe "bundler plugin list" do
plugin_should_be_installed("foo", "bar")
bundle "plugin list"
- if RUBY_VERSION < "1.9"
- # Bundler::Plugin::Index#installed_plugins is keys of Hash,
- # and Hash is not ordered in prior to Ruby 1.9.
- # So, foo and bar plugins are not always listed in that order.
- expected_output1 = "foo\n-----\n shout"
- expect(out).to include(expected_output1)
- expected_output2 = "bar\n-----\n scream"
- expect(out).to include(expected_output2)
- else
- expected_output = "foo\n-----\n shout\n\nbar\n-----\n scream"
- expect(out).to include(expected_output)
- end
+ expected_output = "foo\n-----\n shout\n\nbar\n-----\n scream"
+ expect(out).to include(expected_output)
end
end
end
diff --git a/spec/plugins/source/example_spec.rb b/spec/plugins/source/example_spec.rb
index fd30892f63..bc076c06bf 100644
--- a/spec/plugins/source/example_spec.rb
+++ b/spec/plugins/source/example_spec.rb
@@ -67,7 +67,7 @@ RSpec.describe "real source plugins" do
expect(the_bundle).to include_gems("a-path-gem 1.0")
end
- it "writes to lock file", :bundler => "< 2" do
+ it "writes to lock file", :bundler => "< 3" do
bundle "install"
lockfile_should_be <<-G
@@ -92,20 +92,20 @@ RSpec.describe "real source plugins" do
G
end
- it "writes to lock file", :bundler => "2" do
+ it "writes to lock file", :bundler => "3" do
bundle "install"
lockfile_should_be <<-G
- GEM
- remote: file://localhost#{gem_repo2}/
- specs:
-
PLUGIN SOURCE
remote: #{lib_path("a-path-gem-1.0")}
type: mpath
specs:
a-path-gem (1.0)
+ GEM
+ remote: file://localhost#{gem_repo2}/
+ specs:
+
PLATFORMS
#{lockfile_platforms}
@@ -359,7 +359,7 @@ RSpec.describe "real source plugins" do
expect(the_bundle).to include_gems("ma-gitp-gem 1.0")
end
- it "writes to lock file", :bundler => "< 2" do
+ it "writes to lock file", :bundler => "< 3" do
revision = revision_for(lib_path("ma-gitp-gem-1.0"))
bundle "install"
@@ -386,15 +386,11 @@ RSpec.describe "real source plugins" do
G
end
- it "writes to lock file", :bundler => "2" do
+ it "writes to lock file", :bundler => "3" do
revision = revision_for(lib_path("ma-gitp-gem-1.0"))
bundle "install"
lockfile_should_be <<-G
- GEM
- remote: file://localhost#{gem_repo2}/
- specs:
-
PLUGIN SOURCE
remote: file://#{lib_path("ma-gitp-gem-1.0")}
type: gitp
@@ -402,6 +398,10 @@ RSpec.describe "real source plugins" do
specs:
ma-gitp-gem (1.0)
+ GEM
+ remote: file://localhost#{gem_repo2}/
+ specs:
+
PLATFORMS
#{lockfile_platforms}
diff --git a/spec/quality_es_spec.rb b/spec/quality_es_spec.rb
index 20df9912a3..46eed8f18a 100644
--- a/spec/quality_es_spec.rb
+++ b/spec/quality_es_spec.rb
@@ -1,4 +1,3 @@
-# encoding: utf-8
# frozen_string_literal: true
if defined?(Encoding) && Encoding.default_external.name != "UTF-8"
@@ -43,14 +42,6 @@ RSpec.describe "La biblioteca si misma" do
failing_line_message unless failing_line_message.empty?
end
- RSpec::Matchers.define :be_well_formed do
- match(&:empty?)
-
- failure_message do |actual|
- actual.join("\n")
- end
- end
-
it "mantiene la calidad de lenguaje de la documentación" do
included = /ronn/
error_messages = []
@@ -64,7 +55,7 @@ RSpec.describe "La biblioteca si misma" do
expect(error_messages.compact).to be_well_formed
end
- it "mantiene la calidad de lenguaje de oraciones usadas en el código fuente" do
+ it "mantiene la calidad de lenguaje de oraciones usadas en el código fuente", :ruby_repo do
error_messages = []
exempt = /vendor/
Dir.chdir(root) do
diff --git a/spec/quality_spec.rb b/spec/quality_spec.rb
index 64590befdf..87279ebb74 100644
--- a/spec/quality_spec.rb
+++ b/spec/quality_spec.rb
@@ -1,5 +1,7 @@
# frozen_string_literal: true
+require "set"
+
if defined?(Encoding) && Encoding.default_external.name != "UTF-8"
# An approximation of ruby -E UTF-8, since it works on 1.8.7
Encoding.default_external = Encoding.find("UTF-8")
@@ -96,16 +98,8 @@ RSpec.describe "The library itself" do
failing_line_message unless failing_line_message.empty?
end
- RSpec::Matchers.define :be_well_formed do
- match(&:empty?)
-
- failure_message do |actual|
- actual.join("\n")
- end
- end
-
it "has no malformed whitespace" do
- exempt = /\.gitmodules|\.marshal|fixtures|vendor|ssl_certs|LICENSE|vcr_cassettes/
+ exempt = /\.gitmodules|\.marshal|fixtures|vendor|LICENSE|vcr_cassettes/
error_messages = []
Dir.chdir(root) do
lib_files = ruby_core? ? `git ls-files -z -- lib/bundler lib/bundler.rb spec/bundler` : `git ls-files -z -- lib`
@@ -175,15 +169,13 @@ RSpec.describe "The library itself" do
exemptions = %w[
auto_config_jobs
cache_command_is_package
- console_command
deployment_means_frozen
forget_cli_options
gem.coc
gem.mit
+ github.https
inline
- lockfile_uses_separate_rubygems_sources
use_gem_version_promoter_for_major_updates
- viz_command
]
all_settings = Hash.new {|h, k| h[k] = [] }
@@ -224,23 +216,39 @@ RSpec.describe "The library itself" do
it "can still be built" do
Dir.chdir(root) do
begin
- gem_command! :build, gemspec
- if Bundler.rubygems.provides?(">= 2.4")
- # there's no way around this warning
- last_command.stderr.sub!(/^YAML safe loading.*/, "")
-
- # older rubygems have weird warnings, and we won't actually be using them
- # to build the gem for releases anyways
- expect(last_command.stderr).to be_empty, "bundler should build as a gem without warnings, but\n#{err}"
+ if ruby_core?
+ spec = Gem::Specification.load(gemspec.to_s)
+ spec.bindir = "libexec"
+ File.open(root.join("bundler.gemspec").to_s, "w") {|f| f.write spec.to_ruby }
+ gem_command! :build, root.join("bundler.gemspec").to_s
+ FileUtils.rm(root.join("bundler.gemspec").to_s)
+ else
+ gem_command! :build, gemspec
end
+
+ # there's no way around this warning
+ err.sub!(/^YAML safe loading.*/, "")
+
+ expect(err).to be_empty, "bundler should build as a gem without warnings, but\n#{err}"
ensure
# clean up the .gem generated
- path_prefix = ruby_core? ? "lib/" : "./"
- FileUtils.rm("#{path_prefix}bundler-#{Bundler::VERSION}.gem")
+ FileUtils.rm("bundler-#{Bundler::VERSION}.gem")
end
end
end
+ it "ships the correct set of files", :ruby_repo do
+ Dir.chdir(root) do
+ git_list = IO.popen("git ls-files -z", &:read).split("\x0").select {|f| f.match(%r{^(lib|exe)/}) }
+ git_list += %w[CHANGELOG.md LICENSE.md README.md bundler.gemspec]
+ git_list += Dir.glob("man/**/*")
+
+ gem_list = Gem::Specification.load(gemspec.to_s).files
+
+ expect(git_list.to_set).to eq(gem_list.to_set)
+ end
+ end
+
it "does not contain any warnings" do
Dir.chdir(root) do
exclusions = %w[
@@ -267,4 +275,20 @@ RSpec.describe "The library itself" do
expect(warnings).to be_well_formed
end
end
+
+ it "does not use require internally, but require_relative" do
+ Dir.chdir(root) do
+ exempt = %r{templates/|vendor/}
+ all_bad_requires = []
+ lib_files = ruby_core? ? `git ls-files -z -- lib/bundler lib/bundler.rb` : `git ls-files -z -- lib`
+ lib_files.split("\x0").each do |filename|
+ next if filename =~ exempt
+ File.readlines(filename).each_with_index do |line, number|
+ line.scan(/^ *require "bundler/).each { all_bad_requires << "#{filename}:#{number.succ}" }
+ end
+ end
+
+ expect(all_bad_requires).to be_empty, "#{all_bad_requires.size} internal requires that should use `require_relative`: #{all_bad_requires}"
+ end
+ end
end
diff --git a/spec/realworld/dependency_api_spec.rb b/spec/realworld/dependency_api_spec.rb
index 13527ce5d1..e7d11419cd 100644
--- a/spec/realworld/dependency_api_spec.rb
+++ b/spec/realworld/dependency_api_spec.rb
@@ -9,7 +9,7 @@ RSpec.describe "gemcutter's dependency API", :realworld => true do
@server_uri = "http://127.0.0.1:#{port}"
require File.expand_path("../../support/artifice/endpoint_timeout", __FILE__)
- require "thread"
+
@t = Thread.new do
server = Rack::Server.start(:app => EndpointTimeout,
:Host => "0.0.0.0",
@@ -22,7 +22,7 @@ RSpec.describe "gemcutter's dependency API", :realworld => true do
@t.run
wait_for_server("127.0.0.1", port)
- bundle! "config timeout 1"
+ bundle! "config set timeout 1"
end
after do
diff --git a/spec/realworld/double_check_spec.rb b/spec/realworld/double_check_spec.rb
index 94ab49ba2a..6fee578a71 100644
--- a/spec/realworld/double_check_spec.rb
+++ b/spec/realworld/double_check_spec.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
RSpec.describe "double checking sources", :realworld => true do
- it "finds already-installed gems", :ruby => ">= 2.2" do
+ it "finds already-installed gems" do
create_file("rails.gemspec", <<-RUBY)
Gem::Specification.new do |s|
s.name = "rails"
diff --git a/spec/realworld/edgecases_spec.rb b/spec/realworld/edgecases_spec.rb
index aa60e20b8a..6468ee7f1e 100644
--- a/spec/realworld/edgecases_spec.rb
+++ b/spec/realworld/edgecases_spec.rb
@@ -19,63 +19,25 @@ RSpec.describe "real world edgecases", :realworld => true, :sometimes => true do
RUBY
end
- # there is no rbx-relative-require gem that will install on 1.9
- it "ignores extra gems with bad platforms", :ruby => "~> 1.8.7" do
- gemfile <<-G
- source "https://rubygems.org"
- gem "linecache", "0.46"
- G
- bundle :lock
- expect(err).to lack_errors
- expect(exitstatus).to eq(0) if exitstatus
- end
-
- # https://github.com/bundler/bundler/issues/1202
- it "bundle cache works with rubygems 1.3.7 and pre gems",
- :ruby => "~> 1.8.7", :rubygems => "~> 1.3.7" do
- install_gemfile <<-G
- source "https://rubygems.org"
- gem "rack", "1.3.0.beta2"
- gem "will_paginate", "3.0.pre2"
- G
- bundle :cache
- expect(out).not_to include("Removing outdated .gem files from vendor/cache")
- end
-
- # https://github.com/bundler/bundler/issues/1486
- # this is a hash collision that only manifests on 1.8.7
- it "finds the correct child versions", :ruby => "~> 1.8.7" do
- gemfile <<-G
- source "https://rubygems.org"
-
- gem 'i18n', '~> 0.6.0'
- gem 'activesupport', '~> 3.0.5'
- gem 'activerecord', '~> 3.0.5'
- gem 'builder', '~> 2.1.2'
- G
- bundle :lock
- expect(lockfile).to include("activemodel (3.0.5)")
- end
-
- it "resolves dependencies correctly", :ruby => "1.9.3" do
+ it "resolves dependencies correctly" do
gemfile <<-G
source "https://rubygems.org"
- gem 'rails', '~> 3.0'
+ gem 'rails', '~> 5.0'
gem 'capybara', '~> 2.2.0'
gem 'rack-cache', '1.2.0' # last version that works on Ruby 1.9
G
bundle! :lock
- expect(lockfile).to include(rubygems_version("rails", "~> 3.0"))
+ expect(lockfile).to include(rubygems_version("rails", "~> 5.0"))
expect(lockfile).to include("capybara (2.2.1)")
end
- it "installs the latest version of gxapi_rails", :ruby => "1.9.3" do
+ it "installs the latest version of gxapi_rails" do
gemfile <<-G
source "https://rubygems.org"
gem "sass-rails"
- gem "rails", "~> 3"
+ gem "rails", "~> 5"
gem "gxapi_rails", "< 0.1.0" # 0.1.0 was released way after the test was written
gem 'rack-cache', '1.2.0' # last version that works on Ruby 1.9
G
@@ -97,7 +59,7 @@ RSpec.describe "real world edgecases", :realworld => true, :sometimes => true do
expect(lockfile).to include(rubygems_version("activesupport", "~> 3.0"))
end
- it "is able to update a top-level dependency when there is a conflict on a shared transitive child", :ruby => "2.1" do
+ it "is able to update a top-level dependency when there is a conflict on a shared transitive child" do
# from https://github.com/bundler/bundler/issues/5031
gemfile <<-G
@@ -188,7 +150,7 @@ RSpec.describe "real world edgecases", :realworld => true, :sometimes => true do
activemodel (= 4.2.7.1)
activerecord (= 4.2.7.1)
activesupport (= 4.2.7.1)
- bundler (>= 1.3.0, < 2.0)
+ bundler (>= 1.3.0, < 3.0)
railties (= 4.2.7.1)
sprockets-rails
rails-deprecated_sanitizer (1.0.3)
@@ -239,9 +201,10 @@ RSpec.describe "real world edgecases", :realworld => true, :sometimes => true do
gem 'rack', '1.0.1'
G
- bundle! :install, forgotten_command_line_options(:path => "vendor/bundle")
+ bundle "config set --local path vendor/bundle"
+ bundle! :install
expect(err).not_to include("Could not find rake")
- expect(err).to lack_errors
+ expect(err).to be_empty
end
it "checks out git repos when the lockfile is corrupted" do
@@ -368,7 +331,7 @@ RSpec.describe "real world edgecases", :realworld => true, :sometimes => true do
L
bundle! :lock
- expect(last_command.stderr).to lack_errors
+ expect(err).to be_empty
end
it "outputs a helpful error message when gems have invalid gemspecs" do
@@ -376,7 +339,7 @@ RSpec.describe "real world edgecases", :realworld => true, :sometimes => true do
source 'https://rubygems.org'
gem "resque-scheduler", "2.2.0"
G
- expect(out).to include("You have one or more invalid gemspecs that need to be fixed.")
- expect(out).to include("resque-scheduler 2.2.0 has an invalid gemspec")
+ expect(err).to include("You have one or more invalid gemspecs that need to be fixed.")
+ expect(err).to include("resque-scheduler 2.2.0 has an invalid gemspec")
end
end
diff --git a/spec/realworld/gemfile_source_header_spec.rb b/spec/realworld/gemfile_source_header_spec.rb
index 59c1916874..eaefd0f03e 100644
--- a/spec/realworld/gemfile_source_header_spec.rb
+++ b/spec/realworld/gemfile_source_header_spec.rb
@@ -1,14 +1,12 @@
# frozen_string_literal: true
-require "thread"
-
-RSpec.describe "fetching dependencies with a mirrored source", :realworld => true, :rubygems => ">= 2.0" do
+RSpec.describe "fetching dependencies with a mirrored source", :realworld => true do
let(:mirror) { "https://server.example.org" }
let(:original) { "http://127.0.0.1:#{@port}" }
before do
setup_server
- bundle "config --local mirror.#{mirror} #{original}"
+ bundle "config set --local mirror.#{mirror} #{original}"
end
after do
diff --git a/spec/realworld/mirror_probe_spec.rb b/spec/realworld/mirror_probe_spec.rb
index ab74886329..13d1afe124 100644
--- a/spec/realworld/mirror_probe_spec.rb
+++ b/spec/realworld/mirror_probe_spec.rb
@@ -1,7 +1,5 @@
# frozen_string_literal: true
-require "thread"
-
RSpec.describe "fetching dependencies with a not available mirror", :realworld => true do
let(:mirror) { @mirror_uri }
let(:original) { @server_uri }
@@ -74,10 +72,10 @@ RSpec.describe "fetching dependencies with a not available mirror", :realworld =
bundle :install, :artifice => nil
expect(out).to include("Fetching source index from #{mirror}")
- expect(out).to include("Retrying fetcher due to error (2/4): Bundler::HTTPError Could not fetch specs from #{mirror}")
- expect(out).to include("Retrying fetcher due to error (3/4): Bundler::HTTPError Could not fetch specs from #{mirror}")
- expect(out).to include("Retrying fetcher due to error (4/4): Bundler::HTTPError Could not fetch specs from #{mirror}")
- expect(out).to include("Could not fetch specs from #{mirror}")
+ expect(err).to include("Retrying fetcher due to error (2/4): Bundler::HTTPError Could not fetch specs from #{mirror}")
+ expect(err).to include("Retrying fetcher due to error (3/4): Bundler::HTTPError Could not fetch specs from #{mirror}")
+ expect(err).to include("Retrying fetcher due to error (4/4): Bundler::HTTPError Could not fetch specs from #{mirror}")
+ expect(err).to include("Could not fetch specs from #{mirror}")
end
it "prints each error and warning on a new line" do
@@ -88,8 +86,8 @@ RSpec.describe "fetching dependencies with a not available mirror", :realworld =
bundle :install, :artifice => nil
- expect(last_command.stdout).to include "Fetching source index from #{mirror}/"
- expect(last_command.bundler_err).to include <<-EOS.strip
+ expect(out).to include "Fetching source index from #{mirror}/"
+ expect(err).to include <<-EOS.strip
Retrying fetcher due to error (2/4): Bundler::HTTPError Could not fetch specs from #{mirror}/
Retrying fetcher due to error (3/4): Bundler::HTTPError Could not fetch specs from #{mirror}/
Retrying fetcher due to error (4/4): Bundler::HTTPError Could not fetch specs from #{mirror}/
@@ -112,10 +110,10 @@ Could not fetch specs from #{mirror}/
bundle :install, :artifice => nil
expect(out).to include("Fetching source index from #{mirror}")
- expect(out).to include("Retrying fetcher due to error (2/4): Bundler::HTTPError Could not fetch specs from #{mirror}")
- expect(out).to include("Retrying fetcher due to error (3/4): Bundler::HTTPError Could not fetch specs from #{mirror}")
- expect(out).to include("Retrying fetcher due to error (4/4): Bundler::HTTPError Could not fetch specs from #{mirror}")
- expect(out).to include("Could not fetch specs from #{mirror}")
+ expect(err).to include("Retrying fetcher due to error (2/4): Bundler::HTTPError Could not fetch specs from #{mirror}")
+ expect(err).to include("Retrying fetcher due to error (3/4): Bundler::HTTPError Could not fetch specs from #{mirror}")
+ expect(err).to include("Retrying fetcher due to error (4/4): Bundler::HTTPError Could not fetch specs from #{mirror}")
+ expect(err).to include("Could not fetch specs from #{mirror}")
end
end
diff --git a/spec/realworld/parallel_spec.rb b/spec/realworld/parallel_spec.rb
index ed4430c68b..7738b46aac 100644
--- a/spec/realworld/parallel_spec.rb
+++ b/spec/realworld/parallel_spec.rb
@@ -11,11 +11,7 @@ RSpec.describe "parallel", :realworld => true, :sometimes => true do
bundle :install, :jobs => 4, :env => { "DEBUG" => "1" }
- if Bundler.rubygems.provides?(">= 2.1.0")
- expect(out).to match(/[1-3]: /)
- else
- expect(out).to include("is not threadsafe")
- end
+ expect(out).to match(/[1-3]: /)
bundle "info activesupport --path"
expect(out).to match(/activesupport/)
@@ -38,13 +34,9 @@ RSpec.describe "parallel", :realworld => true, :sometimes => true do
gem 'i18n', '~> 0.6.0' # Because 0.7+ requires Ruby 1.9.3+
G
- bundle :update, :jobs => 4, :env => { "DEBUG" => "1" }, :all => bundle_update_requires_all?
+ bundle :update, :jobs => 4, :env => { "DEBUG" => "1" }, :all => true
- if Bundler.rubygems.provides?(">= 2.1.0")
- expect(out).to match(/[1-3]: /)
- else
- expect(out).to include("is not threadsafe")
- end
+ expect(out).to match(/[1-3]: /)
bundle "info activesupport --path"
expect(out).to match(/activesupport-3\.2\.\d+/)
diff --git a/spec/resolver/basic_spec.rb b/spec/resolver/basic_spec.rb
index 9f92303447..57897f89b4 100644
--- a/spec/resolver/basic_spec.rb
+++ b/spec/resolver/basic_spec.rb
@@ -226,7 +226,7 @@ Bundler could not find compatible versions for gem "a":
# dependencies and since the dependency of the selected foo gem changes, the latest matching
# dependency of "bar", "~> 2.1" -- bar-2.1.1 -- is selected. This is not a bug and follows
# the long-standing documented Conservative Updating behavior of bundle install.
- # http://bundler.io/v1.12/man/bundle-install.1.html#CONSERVATIVE-UPDATING
+ # https://bundler.io/v1.12/man/bundle-install.1.html#CONSERVATIVE-UPDATING
should_conservative_resolve_and_include :patch, ["foo"], %w[foo-1.4.5 bar-2.1.1]
end
diff --git a/spec/runtime/executable_spec.rb b/spec/runtime/executable_spec.rb
index dcee234e15..b2d5b6c03f 100644
--- a/spec/runtime/executable_spec.rb
+++ b/spec/runtime/executable_spec.rb
@@ -99,7 +99,7 @@ RSpec.describe "Running bin/* commands" do
expect(bundled_app("bin/rackup")).not_to exist
end
- it "allows you to stop installing binstubs", :bundler => "< 2" do
+ it "allows you to stop installing binstubs", :bundler => "< 3" do
bundle! "install --binstubs bin/"
bundled_app("bin/rackup").rmtree
bundle! "install --binstubs \"\""
@@ -110,7 +110,7 @@ RSpec.describe "Running bin/* commands" do
expect(out).to include("You have not configured a value for `bin`")
end
- it "remembers that the option was specified", :bundler => "< 2" do
+ it "remembers that the option was specified", :bundler => "< 3" do
gemfile <<-G
source "file://#{gem_repo1}"
gem "activesupport"
@@ -129,23 +129,6 @@ RSpec.describe "Running bin/* commands" do
expect(bundled_app("bin/rackup")).to exist
end
- it "rewrites bins on --binstubs (to maintain backwards compatibility)", :bundler => "< 2" do
- gemfile <<-G
- source "file://#{gem_repo1}"
- gem "rack"
- G
-
- bundle! :install, forgotten_command_line_options([:binstubs, :bin] => "bin")
-
- File.open(bundled_app("bin/rackup"), "wb") do |file|
- file.print "OMG"
- end
-
- bundle "install"
-
- expect(bundled_app("bin/rackup").read).to_not eq("OMG")
- end
-
it "rewrites bins on binstubs (to maintain backwards compatibility)" do
install_gemfile! <<-G
source "file://#{gem_repo1}"
diff --git a/spec/runtime/gem_tasks_spec.rb b/spec/runtime/gem_tasks_spec.rb
index de72869dc3..f0f48a01ac 100644
--- a/spec/runtime/gem_tasks_spec.rb
+++ b/spec/runtime/gem_tasks_spec.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-RSpec.describe "require 'bundler/gem_tasks'", :ruby_repo do
+RSpec.describe "require 'bundler/gem_tasks'" do
before :each do
bundled_app("foo.gemspec").open("w") do |f|
f.write <<-GEMSPEC
@@ -39,6 +39,6 @@ RSpec.describe "require 'bundler/gem_tasks'", :ruby_repo do
with_gem_path_as(Spec::Path.base_system_gems.to_s) do
sys_exec! %(#{rake} -e 'load "Rakefile"; puts CLOBBER.inspect')
end
- expect(last_command.stdout).to eq '["pkg"]'
+ expect(out).to eq '["pkg"]'
end
end
diff --git a/spec/runtime/inline_spec.rb b/spec/runtime/inline_spec.rb
index 09493e0cbf..d53c3d1c15 100644
--- a/spec/runtime/inline_spec.rb
+++ b/spec/runtime/inline_spec.rb
@@ -90,7 +90,7 @@ RSpec.describe "bundler/inline#gemfile" do
expect(out).to include("Installing activesupport")
err.gsub! %r{.*lib/sinatra/base\.rb:\d+: warning: constant ::Fixnum is deprecated$}, ""
err.strip!
- expect(err).to lack_errors
+ expect(err).to be_empty
expect(exitstatus).to be_zero if exitstatus
end
@@ -244,6 +244,20 @@ RSpec.describe "bundler/inline#gemfile" do
expect(exitstatus).to be_zero if exitstatus
end
+ it "installs inline gems when frozen is set" do
+ script <<-RUBY, :env => { "BUNDLE_FROZEN" => "true" }
+ gemfile do
+ source "file://#{gem_repo1}"
+ gem "rack"
+ end
+
+ puts RACK
+ RUBY
+
+ expect(last_command.stderr).to be_empty
+ expect(exitstatus).to be_zero if exitstatus
+ end
+
it "installs inline gems when BUNDLE_GEMFILE is set to an empty string" do
ENV["BUNDLE_GEMFILE"] = ""
@@ -274,6 +288,19 @@ RSpec.describe "bundler/inline#gemfile" do
puts RACK
RUBY
expect(last_command).to be_success
- expect(last_command.stdout).to eq "1.0.0"
+ expect(out).to eq "1.0.0"
+ end
+
+ it "skips platform warnings" do
+ simulate_platform "ruby"
+
+ script <<-RUBY
+ gemfile(true) do
+ source "file://#{gem_repo1}"
+ gem "rack", platform: :jruby
+ end
+ RUBY
+
+ expect(err).to be_empty
end
end
diff --git a/spec/runtime/platform_spec.rb b/spec/runtime/platform_spec.rb
index eecf162427..11fe16f499 100644
--- a/spec/runtime/platform_spec.rb
+++ b/spec/runtime/platform_spec.rb
@@ -93,7 +93,7 @@ RSpec.describe "Bundler.setup with multi platform stuff" do
gem "platform_specific"
G
- bundle! "config force_ruby_platform true"
+ bundle! "config set force_ruby_platform true"
bundle! "install"
@@ -108,7 +108,7 @@ RSpec.describe "Bundler.setup with multi platform stuff" do
gem "platform_specific"
G
- bundle! "config force_ruby_platform true"
+ bundle! "config set force_ruby_platform true"
bundle! "install"
diff --git a/spec/runtime/require_spec.rb b/spec/runtime/require_spec.rb
index 0484e38845..f149c9d489 100644
--- a/spec/runtime/require_spec.rb
+++ b/spec/runtime/require_spec.rb
@@ -121,7 +121,7 @@ RSpec.describe "Bundler.require" do
Bundler.require
R
- expect(err).to eq_err("ZOMG LOAD ERROR")
+ expect(err_without_deprecations).to eq("ZOMG LOAD ERROR")
end
it "displays a helpful message if the required gem throws an error" do
@@ -160,7 +160,7 @@ RSpec.describe "Bundler.require" do
RUBY
run(cmd)
- expect(err).to eq_err("ZOMG LOAD ERROR: cannot load such file -- load-bar")
+ expect(err_without_deprecations).to eq("ZOMG LOAD ERROR: cannot load such file -- load-bar")
end
describe "with namespaced gems" do
@@ -198,7 +198,7 @@ RSpec.describe "Bundler.require" do
RUBY
ruby(cmd)
- expect(err).to lack_errors
+ expect(err).to be_empty
end
it "does not mangle explicitly given requires" do
@@ -211,7 +211,7 @@ RSpec.describe "Bundler.require" do
load_error_run <<-R, "jquery-rails"
Bundler.require
R
- expect(err).to eq_err("ZOMG LOAD ERROR")
+ expect(err_without_deprecations).to eq("ZOMG LOAD ERROR")
end
it "handles the case where regex fails" do
@@ -234,7 +234,7 @@ RSpec.describe "Bundler.require" do
RUBY
run(cmd)
- expect(err).to eq_err("ZOMG LOAD ERROR")
+ expect(err_without_deprecations).to eq("ZOMG LOAD ERROR")
end
it "doesn't swallow the error when the library has an unrelated error" do
@@ -258,19 +258,19 @@ RSpec.describe "Bundler.require" do
RUBY
run(cmd)
- expect(err).to eq_err("ZOMG LOAD ERROR: cannot load such file -- load-bar")
+ expect(err_without_deprecations).to eq("ZOMG LOAD ERROR: cannot load such file -- load-bar")
end
end
describe "using bundle exec" do
it "requires the locked gems" do
- bundle "exec ruby -e 'Bundler.require'", :env => { :RUBYOPT => "-r#{spec_dir.join("support/hax")}" }
+ bundle "exec ruby -e 'Bundler.require'"
expect(out).to eq("two")
- bundle "exec ruby -e 'Bundler.require(:bar)'", :env => { :RUBYOPT => "-r#{spec_dir.join("support/hax")}" }
+ bundle "exec ruby -e 'Bundler.require(:bar)'"
expect(out).to eq("baz\nqux")
- bundle "exec ruby -e 'Bundler.require(:default, :bar)'", :env => { :RUBYOPT => "-r#{spec_dir.join("support/hax")}" }
+ bundle "exec ruby -e 'Bundler.require(:default, :bar)'"
expect(out).to eq("baz\nqux\ntwo")
end
end
@@ -366,12 +366,12 @@ RSpec.describe "Bundler.require" do
load_error_run <<-R, "no_such_file_omg"
Bundler.require
R
- expect(err).to eq_err("ZOMG LOAD ERROR")
+ expect(err_without_deprecations).to eq("ZOMG LOAD ERROR")
end
end
end
- it "does not load rubygems gemspecs that are used", :rubygems => ">= 2.5.2" do
+ it "does not load rubygems gemspecs that are used" do
install_gemfile! <<-G
source "file://#{gem_repo1}"
gem "rack"
@@ -394,7 +394,7 @@ RSpec.describe "Bundler.require" do
expect(out).to eq("WIN")
end
- it "does not load git gemspecs that are used", :rubygems => ">= 2.5.2" do
+ it "does not load git gemspecs that are used" do
build_git "foo"
install_gemfile! <<-G
@@ -432,7 +432,7 @@ RSpec.describe "Bundler.require with platform specific dependencies" do
G
run "Bundler.require"
- expect(err).to lack_errors
+ expect(err).to be_empty
end
it "requires gems pinned to multiple platforms, including the current one" do
@@ -447,6 +447,6 @@ RSpec.describe "Bundler.require with platform specific dependencies" do
run "Bundler.require; puts RACK"
expect(out).to eq("1.0.0")
- expect(err).to lack_errors
+ expect(err).to be_empty
end
end
diff --git a/spec/runtime/setup_spec.rb b/spec/runtime/setup_spec.rb
index 941c3d34e7..90c3df8661 100644
--- a/spec/runtime/setup_spec.rb
+++ b/spec/runtime/setup_spec.rb
@@ -1,5 +1,8 @@
# frozen_string_literal: true
+require "tmpdir"
+require "tempfile"
+
RSpec.describe "Bundler.setup" do
describe "with no arguments" do
it "makes all groups available" do
@@ -16,7 +19,7 @@ RSpec.describe "Bundler.setup" do
require 'rack'
puts RACK
RUBY
- expect(err).to lack_errors
+ expect(err).to be_empty
expect(out).to eq("1.0.0")
end
end
@@ -42,7 +45,7 @@ RSpec.describe "Bundler.setup" do
puts "WIN"
end
RUBY
- expect(err).to lack_errors
+ expect(err).to be_empty
expect(out).to eq("WIN")
end
@@ -55,7 +58,7 @@ RSpec.describe "Bundler.setup" do
require 'rack'
puts RACK
RUBY
- expect(err).to lack_errors
+ expect(err).to be_empty
expect(out).to eq("1.0.0")
end
@@ -69,7 +72,7 @@ RSpec.describe "Bundler.setup" do
require 'rack'
puts RACK
RUBY
- expect(err).to lack_errors
+ expect(err).to be_empty
expect(out).to eq("1.0.0")
end
@@ -87,7 +90,7 @@ RSpec.describe "Bundler.setup" do
puts "FAIL"
end
RUBY
- expect(err).to lack_errors
+ expect(err).to be_empty
expect(out).to match("WIN")
end
@@ -125,7 +128,7 @@ RSpec.describe "Bundler.setup" do
gem "rack"
G
- ENV["RUBYOPT"] = "-Idash_i_dir"
+ ENV["RUBYOPT"] = "#{ENV["RUBYOPT"]} -Idash_i_dir"
ENV["RUBYLIB"] = "rubylib_dir"
ruby <<-RUBY
@@ -139,8 +142,7 @@ RSpec.describe "Bundler.setup" do
rack_load_order = load_path.index {|path| path.include?("rack") }
expect(err).to eq("")
- expect(load_path[1]).to include "dash_i_dir"
- expect(load_path[2]).to include "rubylib_dir"
+ expect(load_path).to include(a_string_ending_with("dash_i_dir"), "rubylib_dir")
expect(rack_load_order).to be > 0
end
@@ -166,7 +168,7 @@ RSpec.describe "Bundler.setup" do
"/gems/actionpack-2.3.2/lib",
"/gems/actionmailer-2.3.2/lib",
"/gems/activesupport-2.3.2/lib",
- "/gems/rake-10.0.2/lib"
+ "/gems/rake-12.3.2/lib"
)
end
@@ -362,7 +364,7 @@ RSpec.describe "Bundler.setup" do
end
R
- expect(err).to lack_errors
+ expect(err).to be_empty
end
it "replaces #gem but raises when the version is wrong" do
@@ -388,7 +390,7 @@ RSpec.describe "Bundler.setup" do
end
R
- expect(err).to lack_errors
+ expect(err).to be_empty
end
end
@@ -528,7 +530,7 @@ RSpec.describe "Bundler.setup" do
gem "rack", :git => "#{lib_path("rack-0.8")}", :branch => "master"
G
- bundle %(config local.rack #{lib_path("local-rack")})
+ bundle %(config set local.rack #{lib_path("local-rack")})
bundle! :install
FileUtils.rm_rf(lib_path("local-rack"))
@@ -546,7 +548,7 @@ RSpec.describe "Bundler.setup" do
gem "rack", :git => "#{lib_path("rack-0.8")}", :branch => "master"
G
- bundle %(config local.rack #{lib_path("local-rack")})
+ bundle %(config set local.rack #{lib_path("local-rack")})
bundle! :install
gemfile <<-G
@@ -568,7 +570,7 @@ RSpec.describe "Bundler.setup" do
gem "rack", :git => "#{lib_path("rack-0.8")}", :branch => "master"
G
- bundle %(config local.rack #{lib_path("local-rack")})
+ bundle %(config set local.rack #{lib_path("local-rack")})
bundle! :install
gemfile <<-G
@@ -595,7 +597,7 @@ RSpec.describe "Bundler.setup" do
gem "rack", :git => "#{lib_path("rack-0.8")}", :ref => "master", :branch => "nonexistant"
G
- bundle %(config local.rack #{lib_path("local-rack")})
+ bundle %(config set local.rack #{lib_path("local-rack")})
run "require 'rack'"
expect(err).to match(/is using branch master but Gemfile specifies nonexistant/)
end
@@ -651,62 +653,6 @@ RSpec.describe "Bundler.setup" do
end
end
- # Unfortunately, gem_prelude does not record the information about
- # activated gems, so this test cannot work on 1.9 :(
- if RUBY_VERSION < "1.9"
- describe "preactivated gems" do
- it "raises an exception if a pre activated gem conflicts with the bundle" do
- system_gems "thin-1.0", "rack-1.0.0"
- build_gem "thin", "1.1", :to_system => true do |s|
- s.add_dependency "rack"
- end
-
- gemfile <<-G
- gem "thin", "1.0"
- G
-
- ruby <<-R
- require 'rubygems'
- gem "thin"
- require 'bundler'
- begin
- Bundler.setup
- puts "FAIL"
- rescue Gem::LoadError => e
- puts e.message
- end
- R
-
- expect(out).to eq("You have already activated thin 1.1, but your Gemfile requires thin 1.0. Prepending `bundle exec` to your command may solve this.")
- end
-
- it "version_requirement is now deprecated in rubygems 1.4.0+" do
- system_gems "thin-1.0", "rack-1.0.0"
- build_gem "thin", "1.1", :to_system => true do |s|
- s.add_dependency "rack"
- end
-
- gemfile <<-G
- gem "thin", "1.0"
- G
-
- ruby <<-R
- require 'rubygems'
- gem "thin"
- require 'bundler'
- begin
- Bundler.setup
- puts "FAIL"
- rescue Gem::LoadError => e
- puts e.message
- end
- R
-
- expect(err).to lack_errors
- end
- end
- end
-
# RubyGems returns loaded_from as a string
it "has loaded_from as a string on all specs" do
build_git "foo"
@@ -728,7 +674,7 @@ RSpec.describe "Bundler.setup" do
expect(out).to be_empty
end
- it "does not load all gemspecs", :rubygems => ">= 2.3" do
+ it "does not load all gemspecs" do
install_gemfile! <<-G
source "file://#{gem_repo1}"
gem "rack"
@@ -763,9 +709,9 @@ end
G
ENV["GEM_HOME"] = ""
- bundle %(exec ruby -e "require 'set'"), :env => { :RUBYOPT => "-r#{spec_dir.join("support/hax")}" }
+ bundle %(exec ruby -e "require 'set'")
- expect(err).to lack_errors
+ expect(err).to be_empty
end
describe "$MANPATH" do
@@ -861,7 +807,7 @@ end
let(:gem_home) { Dir.mktmpdir }
let(:symlinked_gem_home) { Tempfile.new("gem_home").path }
let(:bundler_dir) { ruby_core? ? File.expand_path("../../../..", __FILE__) : File.expand_path("../../..", __FILE__) }
- let(:bundler_lib) { File.join(bundler_dir, "lib") }
+ let(:full_name) { "bundler-#{Bundler::VERSION}" }
before do
FileUtils.ln_sf(gem_home, symlinked_gem_home)
@@ -870,32 +816,30 @@ end
Dir.mkdir(gems_dir)
Dir.mkdir(specifications_dir)
- FileUtils.ln_s(bundler_dir, File.join(gems_dir, "bundler-#{Bundler::VERSION}"))
+ FileUtils.ln_s(bundler_dir, File.join(gems_dir, full_name))
- gemspec_file = ruby_core? ? "#{bundler_dir}/lib/bundler.gemspec" : "#{bundler_dir}/bundler.gemspec"
- gemspec = File.read(gemspec_file).
+ gemspec_file = ruby_core? ? "#{bundler_dir}/lib/bundler/bundler.gemspec" : "#{bundler_dir}/bundler.gemspec"
+ gemspec = File.binread(gemspec_file).
sub("Bundler::VERSION", %("#{Bundler::VERSION}"))
gemspec = gemspec.lines.reject {|line| line =~ %r{lib/bundler/version} }.join
- File.open(File.join(specifications_dir, "bundler.gemspec"), "wb") do |f|
+ File.open(File.join(specifications_dir, "#{full_name}.gemspec"), "wb") do |f|
f.write(gemspec)
end
end
- # Can't make this pass on 2.6 since the ruby standard library has the same $LOAD_PATH
- # entry as bundler (since it's a default gem)
- it "should successfully require 'bundler/setup'", :ruby_repo, :ruby => "< 2.6" do
+ it "should not remove itself from the LOAD_PATH and require a different copy of 'bundler/setup'", :ruby_repo do
install_gemfile ""
- ruby <<-'R', :env => { "GEM_PATH" => symlinked_gem_home }, :no_lib => true
- # Remove any bundler that's not the current bundler from $LOAD_PATH
- $LOAD_PATH.each do |path|
- $LOAD_PATH.delete(path) if File.exist?("#{path}/bundler.rb")
+ ruby <<-R, :env => { "GEM_PATH" => symlinked_gem_home }, :no_lib => true
+ TracePoint.trace(:class) do |tp|
+ puts "OMG" if tp.path.include?("bundler") && !tp.path.start_with?("#{File.expand_path("../..", __dir__)}")
end
- puts (require 'bundler/setup')
+ gem 'bundler', '#{Bundler::VERSION}'
+ require 'bundler/setup'
R
- expect(out).to eql("true")
+ expect(out).to be_empty
end
end
@@ -934,7 +878,7 @@ end
require 'foo'
R
end
- expect(err).to lack_errors
+ expect(err).to be_empty
end
it "should make sure the Bundler.root is really included in the path relative to the Gemfile" do
@@ -959,7 +903,7 @@ end
R
end
- expect(err).to lack_errors
+ expect(err).to be_empty
end
end
@@ -1037,7 +981,7 @@ end
describe "with system gems in the bundle" do
before :each do
- bundle! "config path.system true"
+ bundle! "config set path.system true"
system_gems "rack-1.0.0"
install_gemfile <<-G
@@ -1090,9 +1034,9 @@ end
end.ref_for("HEAD")
bundle :install
- expect(out.lines.map(&:chomp)).to include(
+ expect(err.lines.map(&:chomp)).to include(
a_string_starting_with("[!] There was an error while loading `bar.gemspec`:"),
- RUBY_VERSION >= "1.9" ? a_string_starting_with("Does it try to require a relative path? That's been removed in Ruby 1.9.") : "",
+ a_string_starting_with("Does it try to require a relative path? That's been removed in Ruby 1.9."),
" # from #{default_bundle_path "bundler", "gems", "bar-1.0-#{ref[0, 12]}", "bar.gemspec"}:1",
" > require 'foobarbaz'"
)
@@ -1109,7 +1053,7 @@ end
Bundler.load
RUBY
- expect(err).to lack_errors
+ expect(err).to be_empty
expect(out).to eq("")
end
end
@@ -1120,8 +1064,8 @@ end
gem "bundler", :path => "#{File.expand_path("..", lib)}"
G
- bundle %(exec ruby -e "require 'bundler'; Bundler.setup"), :env => { :RUBYOPT => "-r#{spec_dir.join("support/hax")}" }
- expect(err).to lack_errors
+ bundle %(exec ruby -e "require 'bundler'; Bundler.setup")
+ expect(err).to be_empty
end
end
@@ -1244,7 +1188,7 @@ end
end
describe "with gemified standard libraries" do
- it "does not load Psych", :ruby => "~> 2.2" do
+ it "does not load Psych" do
gemfile ""
ruby <<-RUBY
require 'bundler/setup'
@@ -1270,7 +1214,7 @@ end
describe "default gem activation" do
let(:exemptions) do
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new("2.7") || ENV["RGV"] == "master"
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new("2.7")
[]
else
%w[io-console openssl]
@@ -1316,14 +1260,14 @@ end
it "activates no gems with -rbundler/setup" do
install_gemfile! ""
ruby! code, :env => { :RUBYOPT => activation_warning_hack_rubyopt + " -rbundler/setup" }
- expect(last_command.stdout).to eq("{}")
+ expect(out).to eq("{}")
end
it "activates no gems with bundle exec" do
install_gemfile! ""
create_file("script.rb", code)
bundle! "exec ruby ./script.rb", :env => { :RUBYOPT => activation_warning_hack_rubyopt }
- expect(last_command.stdout).to eq("{}")
+ expect(out).to eq("{}")
end
it "activates no gems with bundle exec that is loaded" do
@@ -1331,7 +1275,7 @@ end
create_file("script.rb", "#!/usr/bin/env ruby\n\n#{code}")
FileUtils.chmod(0o777, bundled_app("script.rb"))
bundle! "exec ./script.rb", :artifice => nil, :env => { :RUBYOPT => activation_warning_hack_rubyopt }
- expect(last_command.stdout).to eq("{}")
+ expect(out).to eq("{}")
end
let(:default_gems) do
@@ -1383,7 +1327,7 @@ end
end
describe "after setup" do
- it "allows calling #gem on random objects", :bundler => "< 2" do
+ it "allows calling #gem on random objects", :bundler => "< 3" do
install_gemfile <<-G
source "file:#{gem_repo1}"
gem "rack"
@@ -1398,7 +1342,7 @@ end
expect(out).to eq("rack-1.0.0")
end
- it "keeps Kernel#gem private", :bundler => "2" do
+ it "keeps Kernel#gem private", :bundler => "3" do
install_gemfile! <<-G
source "file:#{gem_repo1}"
gem "rack"
@@ -1411,7 +1355,7 @@ end
RUBY
expect(last_command.stdboth).not_to include "FAIL"
- expect(last_command.stderr).to include "private method `gem'"
+ expect(err).to include "private method `gem'"
end
it "keeps Kernel#require private" do
@@ -1427,7 +1371,7 @@ end
RUBY
expect(last_command.stdboth).not_to include "FAIL"
- expect(last_command.stderr).to include "private method `require'"
+ expect(err).to include "private method `require'"
end
end
end
diff --git a/spec/runtime/with_unbundled_env_spec.rb b/spec/runtime/with_unbundled_env_spec.rb
index 83eb1eac13..b901f28c8b 100644
--- a/spec/runtime/with_unbundled_env_spec.rb
+++ b/spec/runtime/with_unbundled_env_spec.rb
@@ -1,17 +1,13 @@
# frozen_string_literal: true
RSpec.describe "Bundler.with_env helpers" do
- def bundle_exec_ruby!(code, *args)
+ def bundle_exec_ruby!(code)
build_bundler_context
- opts = args.last.is_a?(Hash) ? args.pop : {}
- env = opts[:env] ||= {}
- env[:RUBYOPT] ||= "-r#{spec_dir.join("support/hax")}"
- args.push opts
- bundle! "exec '#{Gem.ruby}' -e #{code}", *args
+ bundle! "exec '#{Gem.ruby}' -e #{code}"
end
def build_bundler_context
- bundle "config path vendor/bundle"
+ bundle "config set path vendor/bundle"
gemfile ""
bundle "install"
end
@@ -48,7 +44,7 @@ RSpec.describe "Bundler.with_env helpers" do
path = `getconf PATH`.strip + File::PATH_SEPARATOR + File.dirname(Gem.ruby)
with_path_as(path) do
build_bundler_context
- bundle! "exec '#{Gem.ruby}' #{bundled_app("exe.rb")} 2", :env => { :RUBYOPT => "-r#{spec_dir.join("support/hax")}" }
+ bundle! "exec '#{Gem.ruby}' #{bundled_app("exe.rb")} 2"
end
expect(err).to eq <<-EOS.strip
2 false
@@ -58,7 +54,7 @@ RSpec.describe "Bundler.with_env helpers" do
end
it "removes variables that bundler added", :ruby_repo do
- original = ruby!('puts ENV.to_a.map {|e| e.join("=") }.sort.join("\n")', :env => { :RUBYOPT => "-r#{spec_dir.join("support/hax")}" })
+ original = ruby!('puts ENV.to_a.map {|e| e.join("=") }.sort.join("\n")')
code = 'puts Bundler.original_env.to_a.map {|e| e.join("=") }.sort.join("\n")'
bundle_exec_ruby! code.dump
expect(out).to eq original
@@ -75,7 +71,7 @@ RSpec.describe "Bundler.with_env helpers" do
it "should remove '-rbundler/setup' from RUBYOPT" do
code = "print #{modified_env}['RUBYOPT']"
- ENV["RUBYOPT"] = "-W2 -rbundler/setup"
+ ENV["RUBYOPT"] = "-W2 -rbundler/setup #{ENV["RUBYOPT"]}"
bundle_exec_ruby! code.dump
expect(last_command.stdboth).not_to include("-rbundler/setup")
end
@@ -102,28 +98,10 @@ RSpec.describe "Bundler.with_env helpers" do
it_behaves_like "an unbundling helper"
end
- describe "Bundler.clean_env" do
+ describe "Bundler.clean_env", :bundler => 2 do
let(:modified_env) { "Bundler.clean_env" }
it_behaves_like "an unbundling helper"
-
- it "prints a deprecation", :bundler => 2 do
- code = "Bundler.clean_env"
- bundle_exec_ruby! code.dump
- expect(last_command.stdboth).to include(
- "[DEPRECATED FOR 2.0] `Bundler.clean_env` has been deprecated in favor of `Bundler.unbundled_env`. " \
- "If you instead want the environment before bundler was originally loaded, use `Bundler.original_env`"
- )
- end
-
- it "does not print a deprecation", :bundler => "< 2" do
- code = "Bundler.clean_env"
- bundle_exec_ruby! code.dump
- expect(last_command.stdboth).not_to include(
- "[DEPRECATED FOR 2.0] `Bundler.clean_env` has been deprecated in favor of `Bundler.unbundled_env`. " \
- "If you instead want the environment before bundler was originally loaded, use `Bundler.original_env`"
- )
- end
end
describe "Bundler.with_original_env" do
@@ -142,7 +120,7 @@ RSpec.describe "Bundler.with_env helpers" do
end
end
- describe "Bundler.with_clean_env" do
+ describe "Bundler.with_clean_env", :bundler => 2 do
it "should set ENV to unbundled_env in the block" do
expected = Bundler.unbundled_env
actual = Bundler.with_clean_env { ENV.to_hash }
@@ -156,24 +134,6 @@ RSpec.describe "Bundler.with_env helpers" do
expect(ENV).not_to have_key("FOO")
end
-
- it "prints a deprecation", :bundler => 2 do
- code = "Bundler.with_clean_env {}"
- bundle_exec_ruby! code.dump
- expect(last_command.stdboth).to include(
- "[DEPRECATED FOR 2.0] `Bundler.with_clean_env` has been deprecated in favor of `Bundler.with_unbundled_env`. " \
- "If you instead want the environment before bundler was originally loaded, use `Bundler.with_original_env`"
- )
- end
-
- it "does not print a deprecation", :bundler => "< 2" do
- code = "Bundler.with_clean_env {}"
- bundle_exec_ruby! code.dump
- expect(last_command.stdboth).not_to include(
- "[DEPRECATED FOR 2.0] `Bundler.with_clean_env` has been deprecated in favor of `Bundler.with_unbundled_env`. " \
- "If you instead want the environment before bundler was originally loaded, use `Bundler.with_original_env`"
- )
- end
end
describe "Bundler.with_unbundled_env" do
@@ -192,20 +152,111 @@ RSpec.describe "Bundler.with_env helpers" do
end
end
- describe "Bundler.clean_system", :ruby => ">= 1.9", :bundler => "< 2" do
+ describe "Bundler.original_system" do
+ let(:code) do
+ <<~RUBY
+ Bundler.original_system(%([ "\$BUNDLE_FOO" = "bar" ] && exit 42))
+
+ exit $?.exitstatus
+ RUBY
+ end
+
+ it "runs system inside with_original_env" do
+ lib = File.expand_path("../../lib", __dir__)
+ system({ "BUNDLE_FOO" => "bar" }, "ruby -I#{lib} -rbundler -e '#{code}'")
+ expect($?.exitstatus).to eq(42)
+ end
+ end
+
+ describe "Bundler.clean_system", :bundler => 2 do
+ let(:code) do
+ <<~RUBY
+ Bundler.clean_system(%([ "\$BUNDLE_FOO" = "bar" ] || exit 42))
+
+ exit $?.exitstatus
+ RUBY
+ end
+
it "runs system inside with_clean_env" do
- Bundler.clean_system(%(echo 'if [ "$BUNDLE_PATH" = "" ]; then exit 42; else exit 1; fi' | /bin/sh))
+ lib = File.expand_path("../../lib", __dir__)
+ system({ "BUNDLE_FOO" => "bar" }, "ruby -I#{lib} -rbundler -e '#{code}'")
expect($?.exitstatus).to eq(42)
end
end
- describe "Bundler.clean_exec", :ruby => ">= 1.9", :bundler => "< 2" do
- it "runs exec inside with_clean_env" do
- pid = Kernel.fork do
- Bundler.clean_exec(%(echo 'if [ "$BUNDLE_PATH" = "" ]; then exit 42; else exit 1; fi' | /bin/sh))
- end
- Process.wait(pid)
+ describe "Bundler.unbundled_system" do
+ let(:code) do
+ <<~RUBY
+ Bundler.unbundled_system(%([ "\$BUNDLE_FOO" = "bar" ] || exit 42))
+
+ exit $?.exitstatus
+ RUBY
+ end
+
+ it "runs system inside with_unbundled_env" do
+ lib = File.expand_path("../../lib", __dir__)
+ system({ "BUNDLE_FOO" => "bar" }, "ruby -I#{lib} -rbundler -e '#{code}'")
expect($?.exitstatus).to eq(42)
end
end
+
+ describe "Bundler.original_exec" do
+ let(:code) do
+ <<~RUBY
+ Process.fork do
+ exit Bundler.original_exec(%(test "\$BUNDLE_FOO" = "bar"))
+ end
+
+ _, status = Process.wait2
+
+ exit(status.exitstatus)
+ RUBY
+ end
+
+ it "runs exec inside with_original_env" do
+ lib = File.expand_path("../../lib", __dir__)
+ system({ "BUNDLE_FOO" => "bar" }, "ruby -I#{lib} -rbundler -e '#{code}'")
+ expect($?.exitstatus).to eq(0)
+ end
+ end
+
+ describe "Bundler.clean_exec", :bundler => 2 do
+ let(:code) do
+ <<~RUBY
+ Process.fork do
+ exit Bundler.clean_exec(%(test "\$BUNDLE_FOO" = "bar"))
+ end
+
+ _, status = Process.wait2
+
+ exit(status.exitstatus)
+ RUBY
+ end
+
+ it "runs exec inside with_clean_env" do
+ lib = File.expand_path("../../lib", __dir__)
+ system({ "BUNDLE_FOO" => "bar" }, "ruby -I#{lib} -rbundler -e '#{code}'")
+ expect($?.exitstatus).to eq(1)
+ end
+ end
+
+ describe "Bundler.unbundled_exec" do
+ let(:code) do
+ <<~RUBY
+ Process.fork do
+ exit Bundler.unbundled_exec(%(test "\$BUNDLE_FOO" = "bar"))
+ end
+
+ _, status = Process.wait2
+
+ exit(status.exitstatus)
+ RUBY
+ end
+
+ it "runs exec inside with_clean_env" do
+ lib = File.expand_path("../../lib", __dir__)
+ system({ "BUNDLE_FOO" => "bar" }, "ruby -I#{lib} -rbundler -e '#{code}'")
+ expect($?.exitstatus).to eq(1)
+ end
+ end
end
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index 9355bfb33f..35cf8bfefb 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -3,26 +3,6 @@
$:.unshift File.expand_path("..", __FILE__)
$:.unshift File.expand_path("../../lib", __FILE__)
-require "rubygems"
-module Gem
- if defined?(@path_to_default_spec_map)
- @path_to_default_spec_map.delete_if do |_path, spec|
- spec.name == "bundler"
- end
- end
-end
-
-begin
- require File.expand_path("../support/path.rb", __FILE__)
- spec = Gem::Specification.load(Spec::Path.gemspec.to_s)
- rspec = spec.dependencies.find {|d| d.name == "rspec" }
- gem "rspec", rspec.requirement.to_s
- require "rspec"
- require "diff/lcs"
-rescue LoadError
- abort "Run rake spec:deps to install development dependencies"
-end
-
require "bundler/psyched_yaml"
require "bundler/vendored_fileutils"
require "uri"
@@ -33,6 +13,7 @@ if File.expand_path(__FILE__) =~ %r{([^\w/\.:\-])}
end
require "bundler"
+require "rspec"
Dir["#{File.expand_path("../support", __FILE__)}/*.rb"].each do |file|
file = file.gsub(%r{\A#{Regexp.escape File.expand_path("..", __FILE__)}/}, "")
@@ -41,17 +22,14 @@ end
$debug = false
-Spec::Manpages.setup
+Spec::Manpages.setup unless Gem.win_platform?
Spec::Rubygems.setup
-FileUtils.rm_rf(Spec::Path.gem_repo1)
ENV["RUBYOPT"] = "#{ENV["RUBYOPT"]} -r#{Spec::Path.spec_dir}/support/hax.rb"
ENV["BUNDLE_SPEC_RUN"] = "true"
# Don't wrap output in tests
ENV["THOR_COLUMNS"] = "10000"
-Spec::CodeClimate.setup
-
module Gem
def self.ruby=(ruby)
@ruby = ruby
@@ -92,13 +70,10 @@ RSpec.configure do |config|
config.filter_run_excluding :realworld => true
end
- git_version = Bundler::Source::Git::GitProxy.new(nil, nil, nil).version
-
- config.filter_run_excluding :ruby => LessThanProc.with(RUBY_VERSION)
- config.filter_run_excluding :rubygems => LessThanProc.with(Gem::VERSION)
- config.filter_run_excluding :git => LessThanProc.with(git_version)
+ config.filter_run_excluding :ruby => RequirementChecker.against(RUBY_VERSION)
+ config.filter_run_excluding :rubygems => RequirementChecker.against(Gem::VERSION)
config.filter_run_excluding :rubygems_master => (ENV["RGV"] != "master")
- config.filter_run_excluding :bundler => LessThanProc.with(Bundler::VERSION.split(".")[0, 2].join("."))
+ config.filter_run_excluding :bundler => RequirementChecker.against(Bundler::VERSION.split(".")[0])
config.filter_run_excluding :ruby_repo => !(ENV["BUNDLE_RUBY"] && ENV["BUNDLE_GEM"]).nil?
config.filter_run_when_matching :focus unless ENV["CI"]
diff --git a/spec/support/artifice/compact_index.rb b/spec/support/artifice/compact_index.rb
index 38559e2e23..4f01690ae4 100644
--- a/spec/support/artifice/compact_index.rb
+++ b/spec/support/artifice/compact_index.rb
@@ -21,7 +21,7 @@ class CompactIndexAPI < Endpoint
headers "Surrogate-Control" => "max-age=2592000, stale-while-revalidate=60"
content_type "text/plain"
requested_range_for(response_body)
- rescue => e
+ rescue StandardError => e
puts e
puts e.backtrace
raise
@@ -57,11 +57,7 @@ class CompactIndexAPI < Endpoint
end
def slice_body(body, range)
- if body.respond_to?(:byteslice)
- body.byteslice(range)
- else # pre-1.9.3
- body.unpack("@#{range.first}a#{range.end + 1}").first
- end
+ body.byteslice(range)
end
def gems(gem_repo = GEM_REPO)
@@ -83,7 +79,7 @@ class CompactIndexAPI < Endpoint
end
checksum = begin
Digest(:SHA256).file("#{GEM_REPO}/gems/#{spec.original_name}.gem").base64digest
- rescue
+ rescue StandardError
nil
end
CompactIndex::GemVersion.new(spec.version.version, spec.platform.to_s, checksum, nil,
diff --git a/spec/support/artifice/compact_index_api_missing.rb b/spec/support/artifice/compact_index_api_missing.rb
index d4e68c38e8..94e6b73000 100644
--- a/spec/support/artifice/compact_index_api_missing.rb
+++ b/spec/support/artifice/compact_index_api_missing.rb
@@ -6,7 +6,7 @@ Artifice.deactivate
class CompactIndexApiMissing < CompactIndexAPI
get "/fetch/actual/gem/:id" do
- $stderr.puts params[:id]
+ warn params[:id]
if params[:id] == "rack-1.0.gemspec.rz"
halt 404
else
diff --git a/spec/support/artifice/compact_index_rate_limited.rb b/spec/support/artifice/compact_index_rate_limited.rb
new file mode 100644
index 0000000000..d8f4fc941c
--- /dev/null
+++ b/spec/support/artifice/compact_index_rate_limited.rb
@@ -0,0 +1,48 @@
+# frozen_string_literal: true
+
+require File.expand_path("../compact_index", __FILE__)
+
+Artifice.deactivate
+
+class CompactIndexRateLimited < CompactIndexAPI
+ class RequestCounter
+ def self.queue
+ @queue ||= Queue.new
+ end
+
+ def self.size
+ @queue.size
+ end
+
+ def self.enq(name)
+ @queue.enq(name)
+ end
+
+ def self.deq
+ @queue.deq
+ end
+ end
+
+ configure do
+ RequestCounter.queue
+ end
+
+ get "/info/:name" do
+ RequestCounter.enq(params[:name])
+
+ begin
+ if RequestCounter.size == 1
+ etag_response do
+ gem = gems.find {|g| g.name == params[:name] }
+ CompactIndex.info(gem ? gem.versions : [])
+ end
+ else
+ status 429
+ end
+ ensure
+ RequestCounter.deq
+ end
+ end
+end
+
+Artifice.activate_with(CompactIndexRateLimited)
diff --git a/spec/support/artifice/endpoint.rb b/spec/support/artifice/endpoint.rb
index 9a0cfae8a2..fcced6ea35 100644
--- a/spec/support/artifice/endpoint.rb
+++ b/spec/support/artifice/endpoint.rb
@@ -59,7 +59,7 @@ class Endpoint < Sinatra::Base
:platform => spec.platform.to_s,
:dependencies => spec.dependencies.select {|dep| dep.type == :runtime }.map do |dep|
[dep.name, dep.requirement.requirements.map {|a| a.join(" ") }.join(", ")]
- end
+ end,
}
end.compact
end
diff --git a/spec/support/artifice/endpoint_api_missing.rb b/spec/support/artifice/endpoint_api_missing.rb
index 95db8e2a7e..2ada0dc553 100644
--- a/spec/support/artifice/endpoint_api_missing.rb
+++ b/spec/support/artifice/endpoint_api_missing.rb
@@ -6,7 +6,7 @@ Artifice.deactivate
class EndpointApiMissing < Endpoint
get "/fetch/actual/gem/:id" do
- $stderr.puts params[:id]
+ warn params[:id]
if params[:id] == "rack-1.0.gemspec.rz"
halt 404
else
diff --git a/spec/support/artifice/vcr.rb b/spec/support/artifice/vcr.rb
index edd2f49a91..1e3809ff62 100644
--- a/spec/support/artifice/vcr.rb
+++ b/spec/support/artifice/vcr.rb
@@ -1,13 +1,6 @@
# frozen_string_literal: true
require "net/http"
-if RUBY_VERSION < "1.9"
- begin
- require "net/https"
- rescue LoadError
- nil # net/https or openssl
- end
-end # but only for 1.8
CASSETTE_PATH = File.expand_path("../vcr_cassettes", __FILE__)
CASSETTE_NAME = ENV.fetch("BUNDLER_SPEC_VCR_CASSETTE_NAME") { "realworld" }
diff --git a/spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/api/v1/dependencies-gems=bundler/GET/request b/spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/api/v1/dependencies-gems=bundler/GET/request
deleted file mode 100644
index 00dcd51750..0000000000
--- a/spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/api/v1/dependencies-gems=bundler/GET/request
+++ /dev/null
@@ -1,7 +0,0 @@
-> GET /api/v1/dependencies?gems=bundler
-> accept-encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
-> accept: */*
-> user-agent: Ruby
-> connection: keep-alive
-> keep-alive: 30
-> host: api.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/api/v1/dependencies-gems=bundler/GET/response b/spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/api/v1/dependencies-gems=bundler/GET/response
deleted file mode 100644
index 2dd5aa76f8..0000000000
--- a/spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/api/v1/dependencies-gems=bundler/GET/response
+++ /dev/null
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/api/v1/dependencies/HEAD/request b/spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/api/v1/dependencies/HEAD/request
deleted file mode 100644
index 13b3c98dd2..0000000000
--- a/spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/api/v1/dependencies/HEAD/request
+++ /dev/null
@@ -1,6 +0,0 @@
-> HEAD /api/v1/dependencies
-> accept: */*
-> user-agent: Ruby
-> connection: keep-alive
-> keep-alive: 30
-> host: api.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/api/v1/dependencies/HEAD/response b/spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/api/v1/dependencies/HEAD/response
deleted file mode 100644
index fa6cc543da..0000000000
--- a/spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/api/v1/dependencies/HEAD/response
+++ /dev/null
@@ -1,24 +0,0 @@
-HTTP/1.1 200 OK
-content-type: text/plain; charset=utf-8
-x-frame-options: SAMEORIGIN
-x-xss-protection: 1; mode=block
-x-content-type-options: nosniff
-content-security-policy: default-src 'self'; script-src 'self' https://secure.gaug.es; style-src 'self' https://fonts.googleapis.com; img-src 'self' https://secure.gaug.es https://gravatar.com https://secure.gravatar.com; font-src 'self' https://fonts.gstatic.com; connect-src https://s3-us-west-2.amazonaws.com/rubygems-dumps/; frame-src https://ghbtns.com
-cache-control: no-cache
-x-request-id: a7d87e66-6bb3-4b7a-9d3a-89ee68784d0e
-x-runtime: 0.003648
-x-ua-compatible: IE=Edge,chrome=1
-x-backend: F_Rails 54.186.104.15:443
-content-length: 0
-accept-ranges: bytes
-date: Fri, 28 Apr 2017 09:22:23 GMT
-via: 1.1 varnish
-age: 3103
-connection: keep-alive
-x-served-by: cache-fra1243-FRA
-x-cache: HIT
-x-cache-hits: 107
-x-timer: S1493371344.878545,VS0,VE0
-vary: Accept-Encoding,Fastly-SSL
-server: RubyGems.org
-
diff --git a/spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/gems/bundler-1.12.3.gem/GET/response b/spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/gems/bundler-1.12.3.gem/GET/response
deleted file mode 100644
index 8f5d12c8eb..0000000000
--- a/spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/gems/bundler-1.12.3.gem/GET/response
+++ /dev/null
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/quick/Marshal.4.8/bundler-1.12.3.gemspec.rz/GET/request b/spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/quick/Marshal.4.8/bundler-1.12.3.gemspec.rz/GET/request
deleted file mode 100644
index c9337e9a6b..0000000000
--- a/spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/quick/Marshal.4.8/bundler-1.12.3.gemspec.rz/GET/request
+++ /dev/null
@@ -1,7 +0,0 @@
-> GET /quick/Marshal.4.8/bundler-1.12.3.gemspec.rz
-> accept-encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
-> accept: */*
-> user-agent: Ruby
-> connection: keep-alive
-> keep-alive: 30
-> host: api.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/quick/Marshal.4.8/bundler-1.12.3.gemspec.rz/GET/response b/spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/quick/Marshal.4.8/bundler-1.12.3.gemspec.rz/GET/response
deleted file mode 100644
index d6b53b54a0..0000000000
--- a/spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/quick/Marshal.4.8/bundler-1.12.3.gemspec.rz/GET/response
+++ /dev/null
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/specs.4.8.gz/GET/response b/spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/specs.4.8.gz/GET/response
deleted file mode 100644
index bd54f4d8cd..0000000000
--- a/spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/specs.4.8.gz/GET/response
+++ /dev/null
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/CFPropertyList/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/CFPropertyList/GET/request
index a92b8bb55f..53b922240b 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/CFPropertyList/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/CFPropertyList/GET/request
@@ -1,7 +1,7 @@
> GET /info/CFPropertyList
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/CFPropertyList/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/CFPropertyList/GET/response
index 3e4ec8fdfb..156c87b8fb 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/CFPropertyList/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/CFPropertyList/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ParseTree/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ParseTree/GET/request
index 278c2103b3..5a0391fa48 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ParseTree/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ParseTree/GET/request
@@ -1,7 +1,7 @@
> GET /info/ParseTree
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ParseTree/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ParseTree/GET/response
index 10fc08ccb2..28f46d9d6a 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ParseTree/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ParseTree/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/RedCloth/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/RedCloth/GET/request
index 895b7dfd54..0949be4138 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/RedCloth/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/RedCloth/GET/request
@@ -1,7 +1,7 @@
> GET /info/RedCloth
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/install options/retry,path,disable_shared_gems,spec_run,plugins,trampoline_disable d59b382d069fc94f
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/install options/retry,no_install,path,spec_run 4001db3dbc9e7104
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/RedCloth/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/RedCloth/GET/response
index dac79849bf..098ce178c9 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/RedCloth/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/RedCloth/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/RubyInline/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/RubyInline/GET/request
index 6bf0e6d3af..49ff40d096 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/RubyInline/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/RubyInline/GET/request
@@ -1,7 +1,7 @@
> GET /info/RubyInline
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/RubyInline/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/RubyInline/GET/response
index 03a6377fc5..466ca15ae3 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/RubyInline/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/RubyInline/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/SexpProcessor/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/SexpProcessor/GET/request
index 30a9943801..1ae4415008 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/SexpProcessor/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/SexpProcessor/GET/request
@@ -1,7 +1,7 @@
> GET /info/SexpProcessor
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/SexpProcessor/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/SexpProcessor/GET/response
index 47e0c3e7e4..81c19a2a60 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/SexpProcessor/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/SexpProcessor/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ZenTest/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ZenTest/GET/request
index 927fce847b..0596ea4e17 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ZenTest/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ZenTest/GET/request
@@ -1,7 +1,7 @@
> GET /info/ZenTest
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ZenTest/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ZenTest/GET/response
index 669b149feb..b6d22eccce 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ZenTest/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ZenTest/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/abstract/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/abstract/GET/request
index 33ba985fc9..f8242f6d6e 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/abstract/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/abstract/GET/request
@@ -1,7 +1,7 @@
> GET /info/abstract
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/abstract/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/abstract/GET/response
index 1edf821062..ca9b9c9c46 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/abstract/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/abstract/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actioncable/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actioncable/GET/request
index 67f6acff19..bf93cf94d8 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actioncable/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actioncable/GET/request
@@ -1,7 +1,7 @@
> GET /info/actioncable
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actioncable/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actioncable/GET/response
index ea6d8e5c4d..60bdad1591 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actioncable/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actioncable/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionmailbox/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionmailbox/GET/request
new file mode 100644
index 0000000000..6314d275b0
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionmailbox/GET/request
@@ -0,0 +1,7 @@
+> GET /info/actionmailbox
+> accept-encoding: gzip
+> accept: */*
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
+> connection: keep-alive
+> keep-alive: 30
+> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionmailbox/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionmailbox/GET/response
new file mode 100644
index 0000000000..96a97ec687
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionmailbox/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionmailer/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionmailer/GET/request
index ff277f113a..b3678517f5 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionmailer/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionmailer/GET/request
@@ -1,7 +1,7 @@
> GET /info/actionmailer
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionmailer/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionmailer/GET/response
index 0cdee06fda..60f11ca489 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionmailer/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionmailer/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionpack/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionpack/GET/request
index 85c039b7eb..9e06a4f905 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionpack/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionpack/GET/request
@@ -1,7 +1,7 @@
> GET /info/actionpack
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionpack/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionpack/GET/response
index d95b8da544..600c9a0941 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionpack/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionpack/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actiontext/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actiontext/GET/request
new file mode 100644
index 0000000000..0efa97fdea
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actiontext/GET/request
@@ -0,0 +1,7 @@
+> GET /info/actiontext
+> accept-encoding: gzip
+> accept: */*
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
+> connection: keep-alive
+> keep-alive: 30
+> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actiontext/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actiontext/GET/response
new file mode 100644
index 0000000000..29cc3925d2
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actiontext/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionview/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionview/GET/request
index 8b11f69250..27843d96cc 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionview/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionview/GET/request
@@ -1,7 +1,7 @@
> GET /info/actionview
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionview/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionview/GET/response
index 7edc784c99..2b5b0ac8b2 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionview/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionview/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionwebservice/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionwebservice/GET/request
index 2ec89cf1b2..cb2cbe94a3 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionwebservice/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionwebservice/GET/request
@@ -1,7 +1,7 @@
> GET /info/actionwebservice
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionwebservice/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionwebservice/GET/response
index 817028d7c4..c06023f220 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionwebservice/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/actionwebservice/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activejob/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activejob/GET/request
index a215f0abf9..5a4830c1e3 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activejob/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activejob/GET/request
@@ -1,7 +1,7 @@
> GET /info/activejob
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activejob/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activejob/GET/response
index 0aa7649bd3..ac5a566be9 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activejob/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activejob/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activemodel-globalid/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activemodel-globalid/GET/request
index ceae0f0950..146171180e 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activemodel-globalid/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activemodel-globalid/GET/request
@@ -1,7 +1,7 @@
> GET /info/activemodel-globalid
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activemodel-globalid/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activemodel-globalid/GET/response
index e21616fdef..9b4f1d70dd 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activemodel-globalid/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activemodel-globalid/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activemodel-serializers-xml/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activemodel-serializers-xml/GET/request
new file mode 100644
index 0000000000..f14423dcf0
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activemodel-serializers-xml/GET/request
@@ -0,0 +1,7 @@
+> GET /info/activemodel-serializers-xml
+> accept-encoding: gzip
+> accept: */*
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
+> connection: keep-alive
+> keep-alive: 30
+> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activemodel-serializers-xml/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activemodel-serializers-xml/GET/response
new file mode 100644
index 0000000000..7026506ee7
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activemodel-serializers-xml/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activemodel/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activemodel/GET/request
index e4b113569e..c1b5f7b27c 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activemodel/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activemodel/GET/request
@@ -1,7 +1,7 @@
> GET /info/activemodel
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activemodel/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activemodel/GET/response
index 6600b05e58..af1ff83c53 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activemodel/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activemodel/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activerecord-deprecated_finders/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activerecord-deprecated_finders/GET/request
index 095307216d..fbbdae59f8 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activerecord-deprecated_finders/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activerecord-deprecated_finders/GET/request
@@ -1,7 +1,7 @@
> GET /info/activerecord-deprecated_finders
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activerecord-deprecated_finders/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activerecord-deprecated_finders/GET/response
index fa5752cd5a..20e8121eaa 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activerecord-deprecated_finders/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activerecord-deprecated_finders/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activerecord/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activerecord/GET/request
index 72983afdb3..11eabc07dd 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activerecord/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activerecord/GET/request
@@ -1,7 +1,7 @@
> GET /info/activerecord
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activerecord/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activerecord/GET/response
index bff1e60a3d..cd44b94204 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activerecord/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activerecord/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activeresource/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activeresource/GET/request
index 6da07e07c1..73be627ae5 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activeresource/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activeresource/GET/request
@@ -1,7 +1,7 @@
> GET /info/activeresource
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activeresource/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activeresource/GET/response
index eb2d07c38e..adaba3ef44 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activeresource/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activeresource/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activestorage/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activestorage/GET/request
new file mode 100644
index 0000000000..f94cd35e0d
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activestorage/GET/request
@@ -0,0 +1,7 @@
+> GET /info/activestorage
+> accept-encoding: gzip
+> accept: */*
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
+> connection: keep-alive
+> keep-alive: 30
+> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activestorage/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activestorage/GET/response
new file mode 100644
index 0000000000..cac7079a94
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activestorage/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activesupport/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activesupport/GET/request
index e850b19891..e81feece82 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activesupport/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activesupport/GET/request
@@ -1,7 +1,7 @@
> GET /info/activesupport
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activesupport/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activesupport/GET/response
index 0830e66af9..4723f7ad84 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activesupport/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/activesupport/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/adamantium/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/adamantium/GET/request
index b85f0d4abc..55e14e4d6d 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/adamantium/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/adamantium/GET/request
@@ -1,7 +1,7 @@
> GET /info/adamantium
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/adamantium/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/adamantium/GET/response
index 6a48c16d28..0ce423be41 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/adamantium/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/adamantium/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/addressable/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/addressable/GET/request
index 332d846d65..433ae7f3eb 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/addressable/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/addressable/GET/request
@@ -1,7 +1,7 @@
> GET /info/addressable
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/addressable/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/addressable/GET/response
index 19a91431c8..8d0a543b0d 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/addressable/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/addressable/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/allison/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/allison/GET/request
index 8b0e9de941..9d25ed14ee 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/allison/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/allison/GET/request
@@ -1,7 +1,7 @@
> GET /info/allison
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/allison/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/allison/GET/response
index d3ba22327f..fedece5efb 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/allison/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/allison/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ansi/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ansi/GET/request
index 35a798ad01..4826bcaa66 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ansi/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ansi/GET/request
@@ -1,7 +1,7 @@
> GET /info/ansi
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ansi/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ansi/GET/response
index d0d16ff6dd..38ceb1835d 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ansi/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ansi/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/archive-tar-minitar/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/archive-tar-minitar/GET/request
index 15113c6b35..3003be005d 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/archive-tar-minitar/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/archive-tar-minitar/GET/request
@@ -1,7 +1,7 @@
> GET /info/archive-tar-minitar
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/archive-tar-minitar/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/archive-tar-minitar/GET/response
index 66ba424eb4..97a818172f 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/archive-tar-minitar/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/archive-tar-minitar/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/arel/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/arel/GET/request
index c8e60e5198..7e8270c1c7 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/arel/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/arel/GET/request
@@ -1,7 +1,7 @@
> GET /info/arel
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/arel/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/arel/GET/response
index 71d017141e..4e45b82730 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/arel/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/arel/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ast/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ast/GET/request
index 83c157b83d..02aa87fdf0 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ast/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ast/GET/request
@@ -1,7 +1,7 @@
> GET /info/ast
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ast/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ast/GET/response
index 34e8984f9c..e4fd506460 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ast/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ast/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/astrolabe/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/astrolabe/GET/request
index eb816b9425..df24c557b9 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/astrolabe/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/astrolabe/GET/request
@@ -1,7 +1,7 @@
> GET /info/astrolabe
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/astrolabe/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/astrolabe/GET/response
index c608b4fcb7..ef8fefe9a3 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/astrolabe/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/astrolabe/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/atomic/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/atomic/GET/request
index 95416a8856..2f6ec95cfb 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/atomic/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/atomic/GET/request
@@ -1,7 +1,7 @@
> GET /info/atomic
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/atomic/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/atomic/GET/response
index 5d99e7e614..3e9cafef35 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/atomic/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/atomic/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/autoparse/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/autoparse/GET/request
index 9a7e6768c9..6eefe2c756 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/autoparse/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/autoparse/GET/request
@@ -1,7 +1,7 @@
> GET /info/autoparse
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/autoparse/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/autoparse/GET/response
index 04b544fda2..1906139001 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/autoparse/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/autoparse/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/axiom-types/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/axiom-types/GET/request
index 56d2f3f4be..64117f471d 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/axiom-types/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/axiom-types/GET/request
@@ -1,7 +1,7 @@
> GET /info/axiom-types
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/axiom-types/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/axiom-types/GET/response
index 096e712deb..ca4081b561 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/axiom-types/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/axiom-types/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/backports/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/backports/GET/request
index d39a8eefed..6a08b05e24 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/backports/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/backports/GET/request
@@ -1,7 +1,7 @@
> GET /info/backports
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/backports/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/backports/GET/response
index b964586e01..061d703c1f 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/backports/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/backports/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bacon/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bacon/GET/request
index 99b3624b68..7e0c12a20d 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bacon/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bacon/GET/request
@@ -1,7 +1,7 @@
> GET /info/bacon
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/install options/retry,path,disable_shared_gems,spec_run,plugins,trampoline_disable d59b382d069fc94f
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/install options/retry,no_install,path,spec_run 4001db3dbc9e7104
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bacon/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bacon/GET/response
index 4e072946c4..42be547868 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bacon/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bacon/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bcrypt-ruby/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bcrypt-ruby/GET/request
index da2d06bb39..cc8b8882c4 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bcrypt-ruby/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bcrypt-ruby/GET/request
@@ -1,7 +1,7 @@
> GET /info/bcrypt-ruby
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bcrypt-ruby/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bcrypt-ruby/GET/response
index 9fd73895da..5c5800232a 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bcrypt-ruby/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bcrypt-ruby/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bcrypt/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bcrypt/GET/request
index 6516d4f90d..d226c44fc6 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bcrypt/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bcrypt/GET/request
@@ -1,7 +1,7 @@
> GET /info/bcrypt
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bcrypt/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bcrypt/GET/response
index 22f10c15a9..b3b58c36e4 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bcrypt/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bcrypt/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bcrypt_pbkdf/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bcrypt_pbkdf/GET/request
index cba3167ca3..6e58421179 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bcrypt_pbkdf/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bcrypt_pbkdf/GET/request
@@ -1,7 +1,7 @@
> GET /info/bcrypt_pbkdf
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bcrypt_pbkdf/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bcrypt_pbkdf/GET/response
index 52e3f662f6..8c195d867e 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bcrypt_pbkdf/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bcrypt_pbkdf/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-extras/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-extras/GET/request
index a42bb5fc39..278df8dd31 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-extras/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-extras/GET/request
@@ -1,7 +1,7 @@
> GET /info/bones-extras
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-extras/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-extras/GET/response
index 17c018a8ac..f069f9f1fe 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-extras/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-extras/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-git/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-git/GET/request
index f887a9d8b9..a364ed3ec8 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-git/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-git/GET/request
@@ -1,7 +1,7 @@
> GET /info/bones-git
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-git/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-git/GET/response
index 08fe306b65..890b08de40 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-git/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-git/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-rcov/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-rcov/GET/request
index 123d71230b..92679330a9 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-rcov/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-rcov/GET/request
@@ -1,7 +1,7 @@
> GET /info/bones-rcov
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-rcov/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-rcov/GET/response
index 76b01488ea..409c8c9106 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-rcov/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-rcov/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-rspec/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-rspec/GET/request
index 11d8de5fd1..c83001bbf6 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-rspec/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-rspec/GET/request
@@ -1,7 +1,7 @@
> GET /info/bones-rspec
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-rspec/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-rspec/GET/response
index a82c0fc9ee..71bce1cdc7 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-rspec/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-rspec/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-rubyforge/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-rubyforge/GET/request
index 759c5dc5a7..d353f4bfce 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-rubyforge/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-rubyforge/GET/request
@@ -1,7 +1,7 @@
> GET /info/bones-rubyforge
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-rubyforge/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-rubyforge/GET/response
index 685f899378..cdef042268 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-rubyforge/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-rubyforge/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-zentest/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-zentest/GET/request
index ae5a9b068f..540dd0bd53 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-zentest/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-zentest/GET/request
@@ -1,7 +1,7 @@
> GET /info/bones-zentest
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-zentest/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-zentest/GET/response
index 2b69b3ed62..bd8395b2dd 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-zentest/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones-zentest/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones/GET/request
index 3e6d44e52f..f8f41490dd 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones/GET/request
@@ -1,7 +1,7 @@
> GET /info/bones
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones/GET/response
index 6dc4b11a25..1b9cb502fc 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bones/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/builder/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/builder/GET/request
index 5fe5431bfa..5da9f39657 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/builder/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/builder/GET/request
@@ -1,7 +1,7 @@
> GET /info/builder
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/builder/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/builder/GET/response
index bd2e97ab92..f2e47bbc72 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/builder/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/builder/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bundler/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bundler/GET/request
index d0af347d8a..b52c2590aa 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bundler/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bundler/GET/request
@@ -1,7 +1,7 @@
> GET /info/bundler
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bundler/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bundler/GET/response
index 41da082444..393bbb5aea 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bundler/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/bundler/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/c21e/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/c21e/GET/request
new file mode 100644
index 0000000000..cee28add8b
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/c21e/GET/request
@@ -0,0 +1,7 @@
+> GET /info/c21e
+> accept-encoding: gzip
+> accept: */*
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
+> connection: keep-alive
+> keep-alive: 30
+> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/c21e/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/c21e/GET/response
new file mode 100644
index 0000000000..0387b14eb7
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/c21e/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/camping/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/camping/GET/request
index d40975748c..41825fbe94 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/camping/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/camping/GET/request
@@ -1,7 +1,7 @@
> GET /info/camping
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/camping/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/camping/GET/response
index c9a4dbcbc1..82bbd3fa9c 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/camping/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/camping/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/capybara/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/capybara/GET/request
index 4e852e84e4..0adb317d97 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/capybara/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/capybara/GET/request
@@ -1,7 +1,7 @@
> GET /info/capybara
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/capybara/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/capybara/GET/response
index 9afec9a3a6..bde57552a6 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/capybara/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/capybara/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celerity/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celerity/GET/request
index 8ae268566f..40f26b15a4 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celerity/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celerity/GET/request
@@ -1,7 +1,7 @@
> GET /info/celerity
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celerity/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celerity/GET/response
index 585c893662..cce06fe731 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celerity/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celerity/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-essentials/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-essentials/GET/request
index caa2b64772..331b44986e 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-essentials/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-essentials/GET/request
@@ -1,7 +1,7 @@
> GET /info/celluloid-essentials
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-essentials/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-essentials/GET/response
index 33973fc9d1..f44cac209f 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-essentials/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-essentials/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-extras/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-extras/GET/request
index 3680210c06..90f394b784 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-extras/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-extras/GET/request
@@ -1,7 +1,7 @@
> GET /info/celluloid-extras
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-extras/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-extras/GET/response
index f01977e2ea..97fd276a5b 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-extras/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-extras/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-fsm/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-fsm/GET/request
index 9ab4a9f9a5..4ce23762a3 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-fsm/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-fsm/GET/request
@@ -1,7 +1,7 @@
> GET /info/celluloid-fsm
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-fsm/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-fsm/GET/response
index 806ba68900..ad7bb7ffcb 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-fsm/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-fsm/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-io/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-io/GET/request
index 48deb49201..66fc542321 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-io/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-io/GET/request
@@ -1,7 +1,7 @@
> GET /info/celluloid-io
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-io/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-io/GET/response
index d56b30c56c..83886469a5 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-io/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-io/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-pool/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-pool/GET/request
index 375710b600..6e921a7f25 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-pool/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-pool/GET/request
@@ -1,7 +1,7 @@
> GET /info/celluloid-pool
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-pool/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-pool/GET/response
index 9668a5eb7f..bbba301a02 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-pool/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-pool/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-supervision/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-supervision/GET/request
index 62acec8401..97936f34e2 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-supervision/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-supervision/GET/request
@@ -1,7 +1,7 @@
> GET /info/celluloid-supervision
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-supervision/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-supervision/GET/response
index 90faa1a6b9..8e500db3cf 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-supervision/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid-supervision/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid/GET/request
index ea4c6081c6..19e9136b84 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid/GET/request
@@ -1,7 +1,7 @@
> GET /info/celluloid
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid/GET/response
index d77594e62d..97170f222f 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/celluloid/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cgi_multipart_eof_fix/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cgi_multipart_eof_fix/GET/request
index 2087abff17..f9fe783598 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cgi_multipart_eof_fix/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cgi_multipart_eof_fix/GET/request
@@ -1,7 +1,7 @@
> GET /info/cgi_multipart_eof_fix
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cgi_multipart_eof_fix/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cgi_multipart_eof_fix/GET/response
index a66ec83d22..ca597d44bc 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cgi_multipart_eof_fix/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cgi_multipart_eof_fix/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/childprocess/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/childprocess/GET/request
index c9c4c8e1c3..fb2fb7ab24 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/childprocess/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/childprocess/GET/request
@@ -1,7 +1,7 @@
> GET /info/childprocess
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/childprocess/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/childprocess/GET/response
index e92674716c..1560b30ffa 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/childprocess/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/childprocess/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/climate_control/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/climate_control/GET/request
index 627dfc2236..79ec1d9c6d 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/climate_control/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/climate_control/GET/request
@@ -1,7 +1,7 @@
> GET /info/climate_control
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 6d5397ce7f8b26e0
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 7053ae03c762ac3b
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/climate_control/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/climate_control/GET/response
index 2d5960987c..6407b190fe 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/climate_control/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/climate_control/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cocaine/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cocaine/GET/request
index 0b58b496a2..fa6f9d9997 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cocaine/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cocaine/GET/request
@@ -1,7 +1,7 @@
> GET /info/cocaine
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 6d5397ce7f8b26e0
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 7053ae03c762ac3b
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cocaine/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cocaine/GET/response
index bfd985f32e..73cacd0fe1 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cocaine/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cocaine/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coercible/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coercible/GET/request
index 26fb80abd9..74d049c73a 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coercible/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coercible/GET/request
@@ -1,7 +1,7 @@
> GET /info/coercible
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coercible/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coercible/GET/response
index 54e169a319..91c85da0a5 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coercible/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coercible/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coffee-rails/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coffee-rails/GET/request
index 35f65b1c96..c5e4f39608 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coffee-rails/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coffee-rails/GET/request
@@ -1,7 +1,7 @@
> GET /info/coffee-rails
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coffee-rails/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coffee-rails/GET/response
index d5e17e5ce9..5bb8231ce8 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coffee-rails/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coffee-rails/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coffee-script-source/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coffee-script-source/GET/request
index c1e276d2f2..0e1f7979f8 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coffee-script-source/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coffee-script-source/GET/request
@@ -1,7 +1,7 @@
> GET /info/coffee-script-source
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coffee-script-source/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coffee-script-source/GET/response
index 95f31d23d8..2bb499d0f2 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coffee-script-source/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coffee-script-source/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coffee-script/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coffee-script/GET/request
index 6fb40106a3..dc5440b6ef 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coffee-script/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coffee-script/GET/request
@@ -1,7 +1,7 @@
> GET /info/coffee-script
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coffee-script/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coffee-script/GET/response
index f513d56091..351350ed61 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coffee-script/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coffee-script/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/colorize/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/colorize/GET/request
index 86a09b2b35..af45310d3a 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/colorize/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/colorize/GET/request
@@ -1,7 +1,7 @@
> GET /info/colorize
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/colorize/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/colorize/GET/response
index 25dd358184..e3cd38ed11 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/colorize/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/colorize/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/concurrent-ruby/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/concurrent-ruby/GET/request
index 0069d6d724..76fd5d3b91 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/concurrent-ruby/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/concurrent-ruby/GET/request
@@ -1,7 +1,7 @@
> GET /info/concurrent-ruby
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/concurrent-ruby/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/concurrent-ruby/GET/response
index 186892a49c..f1d4e2efcb 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/concurrent-ruby/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/concurrent-ruby/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/configuration/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/configuration/GET/request
index 70e600db3d..7e14f2268d 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/configuration/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/configuration/GET/request
@@ -1,7 +1,7 @@
> GET /info/configuration
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/configuration/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/configuration/GET/response
index 1e1fb6fa74..1f3289ddc1 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/configuration/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/configuration/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coveralls/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coveralls/GET/request
index 5692539d94..61912ad096 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coveralls/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coveralls/GET/request
@@ -1,7 +1,7 @@
> GET /info/coveralls
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coveralls/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coveralls/GET/response
index 314e64865c..cef3cfc3cc 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coveralls/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/coveralls/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/crass/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/crass/GET/request
index 8b9407ffc0..b66e745523 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/crass/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/crass/GET/request
@@ -1,7 +1,7 @@
> GET /info/crass
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/crass/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/crass/GET/response
index d73b4d2f17..8efc66c77c 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/crass/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/crass/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-core/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-core/GET/request
index 2675af7847..0850b08c84 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-core/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-core/GET/request
@@ -1,7 +1,7 @@
> GET /info/cucumber-core
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-core/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-core/GET/response
index defc43e284..3dd709b702 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-core/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-core/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-expressions/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-expressions/GET/request
new file mode 100644
index 0000000000..af97930d61
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-expressions/GET/request
@@ -0,0 +1,7 @@
+> GET /info/cucumber-expressions
+> accept-encoding: gzip
+> accept: */*
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
+> connection: keep-alive
+> keep-alive: 30
+> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-expressions/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-expressions/GET/response
new file mode 100644
index 0000000000..d9fd614926
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-expressions/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-formatter-dots/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-formatter-dots/GET/request
new file mode 100644
index 0000000000..6adffff6fa
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-formatter-dots/GET/request
@@ -0,0 +1,7 @@
+> GET /info/cucumber-formatter-dots
+> accept-encoding: gzip
+> accept: */*
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
+> connection: keep-alive
+> keep-alive: 30
+> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-formatter-dots/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-formatter-dots/GET/response
new file mode 100644
index 0000000000..c04a2189c1
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-formatter-dots/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-messages/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-messages/GET/request
new file mode 100644
index 0000000000..99be659e98
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-messages/GET/request
@@ -0,0 +1,7 @@
+> GET /info/cucumber-messages
+> accept-encoding: gzip
+> accept: */*
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
+> connection: keep-alive
+> keep-alive: 30
+> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-messages/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-messages/GET/response
new file mode 100644
index 0000000000..77c2fda21d
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-messages/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-tag_expressions/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-tag_expressions/GET/request
new file mode 100644
index 0000000000..33b3553ed8
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-tag_expressions/GET/request
@@ -0,0 +1,7 @@
+> GET /info/cucumber-tag_expressions
+> accept-encoding: gzip
+> accept: */*
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
+> connection: keep-alive
+> keep-alive: 30
+> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-tag_expressions/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-tag_expressions/GET/response
new file mode 100644
index 0000000000..b47c1ee28a
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-tag_expressions/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-wire/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-wire/GET/request
index f37e871807..77be072f8d 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-wire/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-wire/GET/request
@@ -1,7 +1,7 @@
> GET /info/cucumber-wire
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-wire/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-wire/GET/response
index dd6a2d7a1f..bced1b2dc2 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-wire/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber-wire/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber/GET/request
index db80e44ac1..c5018ab462 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber/GET/request
@@ -1,7 +1,7 @@
> GET /info/cucumber
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber/GET/response
index 8ec223a388..0e32fc5cde 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/cucumber/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/culerity/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/culerity/GET/request
index f92a2f7bc9..7b5c12e4ca 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/culerity/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/culerity/GET/request
@@ -1,7 +1,7 @@
> GET /info/culerity
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/culerity/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/culerity/GET/response
index a26aae4ac6..c86ea617f2 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/culerity/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/culerity/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/curses/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/curses/GET/request
index 1119c8e4fa..d66a62048b 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/curses/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/curses/GET/request
@@ -1,7 +1,7 @@
> GET /info/curses
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/curses/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/curses/GET/response
index 1450b0afdd..6c27dee424 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/curses/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/curses/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/daemons/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/daemons/GET/request
index 5080c98e6d..afb21a078f 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/daemons/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/daemons/GET/request
@@ -1,7 +1,7 @@
> GET /info/daemons
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/daemons/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/daemons/GET/response
index f96024298f..aab43bdb4a 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/daemons/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/daemons/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/database_cleaner/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/database_cleaner/GET/request
index d80f93551a..204e17db86 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/database_cleaner/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/database_cleaner/GET/request
@@ -1,7 +1,7 @@
> GET /info/database_cleaner
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/database_cleaner/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/database_cleaner/GET/response
index 362be4a4da..2a2b6d136a 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/database_cleaner/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/database_cleaner/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/declarative-option/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/declarative-option/GET/request
index f2463924fc..69996d4cd3 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/declarative-option/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/declarative-option/GET/request
@@ -1,7 +1,7 @@
> GET /info/declarative-option
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/declarative-option/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/declarative-option/GET/response
index 02d0a6c4d8..159ac6ce2a 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/declarative-option/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/declarative-option/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/declarative/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/declarative/GET/request
index de13d40070..7e889cadf4 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/declarative/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/declarative/GET/request
@@ -1,7 +1,7 @@
> GET /info/declarative
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/declarative/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/declarative/GET/response
index 0ac050c7dd..921d7af002 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/declarative/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/declarative/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/descendants_tracker/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/descendants_tracker/GET/request
index 563a4f60c2..d52d9ab095 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/descendants_tracker/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/descendants_tracker/GET/request
@@ -1,7 +1,7 @@
> GET /info/descendants_tracker
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/descendants_tracker/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/descendants_tracker/GET/response
index 23fc0f5703..34672fd379 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/descendants_tracker/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/descendants_tracker/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/diff-lcs/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/diff-lcs/GET/request
index 3c60080b38..edb2131298 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/diff-lcs/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/diff-lcs/GET/request
@@ -1,7 +1,7 @@
> GET /info/diff-lcs
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/diff-lcs/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/diff-lcs/GET/response
index a715afbadf..abf53e469b 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/diff-lcs/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/diff-lcs/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/docile/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/docile/GET/request
index de1e687189..28b6f62f0f 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/docile/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/docile/GET/request
@@ -1,7 +1,7 @@
> GET /info/docile
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/docile/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/docile/GET/response
index 56252f4598..0eef601200 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/docile/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/docile/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/domain_name/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/domain_name/GET/request
index 6157da6082..61e2dbc625 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/domain_name/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/domain_name/GET/request
@@ -1,7 +1,7 @@
> GET /info/domain_name
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/domain_name/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/domain_name/GET/response
index 69e0e69025..ecc4e6980b 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/domain_name/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/domain_name/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/dotenv-deployment/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/dotenv-deployment/GET/request
index fe63740e5b..5bee687555 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/dotenv-deployment/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/dotenv-deployment/GET/request
@@ -1,7 +1,7 @@
> GET /info/dotenv-deployment
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/dotenv-deployment/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/dotenv-deployment/GET/response
index a640a58ddc..a6e6b9e703 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/dotenv-deployment/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/dotenv-deployment/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/dotenv/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/dotenv/GET/request
index 234c682a25..0a6f024d88 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/dotenv/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/dotenv/GET/request
@@ -1,7 +1,7 @@
> GET /info/dotenv
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/dotenv/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/dotenv/GET/response
index 7207be4b53..72863d2d02 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/dotenv/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/dotenv/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/echoe/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/echoe/GET/request
index 98ea72af26..333ea17eb1 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/echoe/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/echoe/GET/request
@@ -1,7 +1,7 @@
> GET /info/echoe
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/echoe/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/echoe/GET/response
index 8c48623d2c..3e42d29bf7 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/echoe/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/echoe/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/em-hiredis/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/em-hiredis/GET/request
index 12962c23bb..7024082760 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/em-hiredis/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/em-hiredis/GET/request
@@ -1,7 +1,7 @@
> GET /info/em-hiredis
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/em-hiredis/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/em-hiredis/GET/response
index 36c32f4dc2..428d0d3162 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/em-hiredis/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/em-hiredis/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/english/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/english/GET/request
index e558748718..ce67214047 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/english/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/english/GET/request
@@ -1,7 +1,7 @@
> GET /info/english
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/english/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/english/GET/response
index ff4ad5bfae..9ddc7ae1ae 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/english/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/english/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/equalizer/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/equalizer/GET/request
index 830c2ba57f..3abcefd039 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/equalizer/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/equalizer/GET/request
@@ -1,7 +1,7 @@
> GET /info/equalizer
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/equalizer/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/equalizer/GET/response
index 7947e79a87..101b037c69 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/equalizer/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/equalizer/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/erubi/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/erubi/GET/request
index 60045f3490..fcb06c2cb6 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/erubi/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/erubi/GET/request
@@ -1,7 +1,7 @@
> GET /info/erubi
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/erubi/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/erubi/GET/response
index c9cf020d3c..071dcb3f74 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/erubi/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/erubi/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/erubis/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/erubis/GET/request
index 1f4a5d9599..a50280ddf8 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/erubis/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/erubis/GET/request
@@ -1,7 +1,7 @@
> GET /info/erubis
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/erubis/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/erubis/GET/response
index d8db903ef5..b2397f646f 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/erubis/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/erubis/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/escape_utils/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/escape_utils/GET/request
index 27c56dc41b..8a99cd919e 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/escape_utils/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/escape_utils/GET/request
@@ -1,7 +1,7 @@
> GET /info/escape_utils
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/escape_utils/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/escape_utils/GET/response
index fba2eb7d3f..aba56fb2b0 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/escape_utils/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/escape_utils/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/et-orbi/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/et-orbi/GET/request
index 83753cb9de..c32d4faa2e 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/et-orbi/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/et-orbi/GET/request
@@ -1,7 +1,7 @@
> GET /info/et-orbi
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/install options/retry,path,disable_shared_gems,spec_run,plugins,trampoline_disable d59b382d069fc94f
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/install options/retry,no_install,path,spec_run 4001db3dbc9e7104
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/et-orbi/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/et-orbi/GET/response
index 7ff97e23f3..6474565d85 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/et-orbi/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/et-orbi/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/event-bus/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/event-bus/GET/request
index aad129c8f2..4f051f0f1c 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/event-bus/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/event-bus/GET/request
@@ -1,7 +1,7 @@
> GET /info/event-bus
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/event-bus/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/event-bus/GET/response
index ae88842c6c..d75448d4d4 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/event-bus/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/event-bus/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/eventmachine-le/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/eventmachine-le/GET/request
index 1d83bd53b7..a93223027f 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/eventmachine-le/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/eventmachine-le/GET/request
@@ -1,7 +1,7 @@
> GET /info/eventmachine-le
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/eventmachine-le/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/eventmachine-le/GET/response
index fe84542b87..de112735cd 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/eventmachine-le/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/eventmachine-le/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/eventmachine/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/eventmachine/GET/request
index 614a5bf2a8..0251a1ac34 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/eventmachine/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/eventmachine/GET/request
@@ -1,7 +1,7 @@
> GET /info/eventmachine
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/eventmachine/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/eventmachine/GET/response
index 4f01cf2733..c8a6186615 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/eventmachine/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/eventmachine/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/execjs/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/execjs/GET/request
index 531f5c9b31..ae069c8287 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/execjs/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/execjs/GET/request
@@ -1,7 +1,7 @@
> GET /info/execjs
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/execjs/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/execjs/GET/response
index 2349c04641..ef63aba6b9 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/execjs/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/execjs/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/extlib/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/extlib/GET/request
index 3fa0dea3a5..6a2031fba2 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/extlib/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/extlib/GET/request
@@ -1,7 +1,7 @@
> GET /info/extlib
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/extlib/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/extlib/GET/response
index 6c6c2ba613..886ce0bc29 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/extlib/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/extlib/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/facets/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/facets/GET/request
index 6aae67744b..7b97499c61 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/facets/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/facets/GET/request
@@ -1,7 +1,7 @@
> GET /info/facets
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/facets/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/facets/GET/response
index aa2db990de..7fa5dd44ba 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/facets/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/facets/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/facter/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/facter/GET/request
index 18bdd6e328..fdc3bde13f 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/facter/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/facter/GET/request
@@ -1,7 +1,7 @@
> GET /info/facter
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/facter/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/facter/GET/response
index ec8e0dea90..fe92b13041 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/facter/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/facter/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/faker/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/faker/GET/request
index 7bf2fb9f5d..399efcf186 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/faker/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/faker/GET/request
@@ -1,7 +1,7 @@
> GET /info/faker
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/install options/jobs,spec_run,trampoline_disable,plugins ab677b2f2db78951
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/install options/no_install,jobs,spec_run a258cf11dfed5fa6
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/faker/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/faker/GET/response
index 0e92a79ec6..58310dbb32 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/faker/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/faker/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/faraday/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/faraday/GET/request
index b7ee2f317a..9edac4d63e 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/faraday/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/faraday/GET/request
@@ -1,7 +1,7 @@
> GET /info/faraday
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/faraday/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/faraday/GET/response
index ff1f6f9285..38c7ae3225 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/faraday/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/faraday/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/fastthread/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/fastthread/GET/request
index 7ea5079231..25497e98f8 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/fastthread/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/fastthread/GET/request
@@ -1,7 +1,7 @@
> GET /info/fastthread
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/fastthread/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/fastthread/GET/response
index a8f2fe281c..dec51affb6 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/fastthread/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/fastthread/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/faye-websocket/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/faye-websocket/GET/request
index e865b6d68f..515234cf4e 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/faye-websocket/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/faye-websocket/GET/request
@@ -1,7 +1,7 @@
> GET /info/faye-websocket
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/faye-websocket/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/faye-websocket/GET/response
index 9556c3541a..0a2ddc29b1 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/faye-websocket/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/faye-websocket/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/fcgi/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/fcgi/GET/request
index 4389c71b0c..8405da1230 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/fcgi/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/fcgi/GET/request
@@ -1,7 +1,7 @@
> GET /info/fcgi
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/fcgi/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/fcgi/GET/response
index daf43cba8f..11a5d0bef1 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/fcgi/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/fcgi/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ffi-win32-extensions/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ffi-win32-extensions/GET/request
index c2ea7ed71b..7e60f955d1 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ffi-win32-extensions/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ffi-win32-extensions/GET/request
@@ -1,7 +1,7 @@
> GET /info/ffi-win32-extensions
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ffi-win32-extensions/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ffi-win32-extensions/GET/response
index b9a3383c07..787bddaf54 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ffi-win32-extensions/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ffi-win32-extensions/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ffi/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ffi/GET/request
index 337ccf260d..87d2d6c211 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ffi/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ffi/GET/request
@@ -1,7 +1,7 @@
> GET /info/ffi
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ffi/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ffi/GET/response
index d000af0070..97a1466e1b 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ffi/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ffi/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/flexmock/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/flexmock/GET/request
index 85e3d59016..e5edd9c0f9 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/flexmock/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/flexmock/GET/request
@@ -1,7 +1,7 @@
> GET /info/flexmock
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/flexmock/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/flexmock/GET/response
index fb369fd425..d4284e20b2 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/flexmock/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/flexmock/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/fugit/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/fugit/GET/request
new file mode 100644
index 0000000000..b3399f003c
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/fugit/GET/request
@@ -0,0 +1,7 @@
+> GET /info/fugit
+> accept-encoding: gzip
+> accept: */*
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/install options/retry,no_install,path,spec_run 4001db3dbc9e7104
+> connection: keep-alive
+> keep-alive: 30
+> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/fugit/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/fugit/GET/response
new file mode 100644
index 0000000000..1373f107e2
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/fugit/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/functional-ruby/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/functional-ruby/GET/request
index 2946076a0c..8245df3652 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/functional-ruby/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/functional-ruby/GET/request
@@ -1,7 +1,7 @@
> GET /info/functional-ruby
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/functional-ruby/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/functional-ruby/GET/response
index 20c2d272bb..dccd606d33 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/functional-ruby/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/functional-ruby/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gem_plugin/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gem_plugin/GET/request
index 037082143d..25a6c173e0 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gem_plugin/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gem_plugin/GET/request
@@ -1,7 +1,7 @@
> GET /info/gem_plugin
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gem_plugin/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gem_plugin/GET/response
index 7fae98bbb3..5cac5bbc68 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gem_plugin/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gem_plugin/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gemcutter/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gemcutter/GET/request
index 48a190b596..f04482cdee 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gemcutter/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gemcutter/GET/request
@@ -1,7 +1,7 @@
> GET /info/gemcutter
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gemcutter/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gemcutter/GET/response
index a0dbe8851d..b73c60cd11 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gemcutter/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gemcutter/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gherkin/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gherkin/GET/request
index e16c323f9f..ba8a6674e1 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gherkin/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gherkin/GET/request
@@ -1,7 +1,7 @@
> GET /info/gherkin
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gherkin/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gherkin/GET/response
index 829f722690..84c12fc64c 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gherkin/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gherkin/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gherkin3/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gherkin3/GET/request
index 51c1b8dbd1..7e9d307ba7 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gherkin3/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gherkin3/GET/request
@@ -1,7 +1,7 @@
> GET /info/gherkin3
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gherkin3/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gherkin3/GET/response
index a84fde4ecc..beb25e9605 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gherkin3/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gherkin3/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/git/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/git/GET/request
index a17b1c9fd9..bae4ddadcf 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/git/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/git/GET/request
@@ -1,7 +1,7 @@
> GET /info/git
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/git/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/git/GET/response
index 48b2f3e525..7228fcf3ee 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/git/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/git/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/globalid/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/globalid/GET/request
index 0b5cc95383..6d2a7aa90d 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/globalid/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/globalid/GET/request
@@ -1,7 +1,7 @@
> GET /info/globalid
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/globalid/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/globalid/GET/response
index 3682bcef6e..99b523aabb 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/globalid/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/globalid/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/google-api-client/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/google-api-client/GET/request
index 6997e2f1b1..9782deb1ce 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/google-api-client/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/google-api-client/GET/request
@@ -1,7 +1,7 @@
> GET /info/google-api-client
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/google-api-client/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/google-api-client/GET/response
index c976f20fe6..e82fac42e5 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/google-api-client/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/google-api-client/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/google-protobuf/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/google-protobuf/GET/request
new file mode 100644
index 0000000000..862aecb264
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/google-protobuf/GET/request
@@ -0,0 +1,7 @@
+> GET /info/google-protobuf
+> accept-encoding: gzip
+> accept: */*
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
+> connection: keep-alive
+> keep-alive: 30
+> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/google-protobuf/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/google-protobuf/GET/response
new file mode 100644
index 0000000000..446395ac75
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/google-protobuf/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/googleauth/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/googleauth/GET/request
index a5af0919c9..7a5fc2ed99 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/googleauth/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/googleauth/GET/request
@@ -1,7 +1,7 @@
> GET /info/googleauth
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/googleauth/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/googleauth/GET/response
index a8feae6890..7f66219a73 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/googleauth/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/googleauth/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gxapi_rails/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gxapi_rails/GET/request
index 35f5608ebe..b1ab2b22ec 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gxapi_rails/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gxapi_rails/GET/request
@@ -1,7 +1,7 @@
> GET /info/gxapi_rails
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gxapi_rails/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gxapi_rails/GET/response
index fbdf6f55bf..b4997c76bb 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gxapi_rails/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/gxapi_rails/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hashie/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hashie/GET/request
index 385ec2b595..26226162a0 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hashie/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hashie/GET/request
@@ -1,7 +1,7 @@
> GET /info/hashie
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hashie/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hashie/GET/response
index 3d47fc2375..e5e4699ae1 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hashie/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hashie/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/highline/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/highline/GET/request
index 4b571d66c1..bbe19f0a6c 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/highline/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/highline/GET/request
@@ -1,7 +1,7 @@
> GET /info/highline
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/highline/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/highline/GET/response
index 338daddcc1..6fff4f705d 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/highline/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/highline/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hike/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hike/GET/request
index f6c38deaaa..16a72a29b8 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hike/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hike/GET/request
@@ -1,7 +1,7 @@
> GET /info/hike
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hike/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hike/GET/response
index 2b957a4ff6..11df3d317e 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hike/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hike/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hiredis/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hiredis/GET/request
index 6113e85b8d..5d2dd02bb4 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hiredis/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hiredis/GET/request
@@ -1,7 +1,7 @@
> GET /info/hiredis
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hiredis/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hiredis/GET/response
index d173e1925a..9edc86a4dd 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hiredis/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hiredis/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hitimes/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hitimes/GET/request
index 4a3c1bbdab..df570cc1e4 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hitimes/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hitimes/GET/request
@@ -1,7 +1,7 @@
> GET /info/hitimes
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hitimes/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hitimes/GET/response
index 24355f1810..4f6cd1d663 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hitimes/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hitimes/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hoe/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hoe/GET/request
index e86bcea319..d45183c338 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hoe/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hoe/GET/request
@@ -1,7 +1,7 @@
> GET /info/hoe
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hoe/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hoe/GET/response
index 82c2887f97..4aa4c1f87b 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hoe/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hoe/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hooks/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hooks/GET/request
index 40972439c4..4203f4f853 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hooks/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hooks/GET/request
@@ -1,7 +1,7 @@
> GET /info/hooks
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hooks/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hooks/GET/response
index b74b3e7313..e91eeff7f9 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hooks/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hooks/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/http-accept/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/http-accept/GET/request
new file mode 100644
index 0000000000..60047f88f6
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/http-accept/GET/request
@@ -0,0 +1,7 @@
+> GET /info/http-accept
+> accept-encoding: gzip
+> accept: */*
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
+> connection: keep-alive
+> keep-alive: 30
+> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/http-accept/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/http-accept/GET/response
new file mode 100644
index 0000000000..073b589134
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/http-accept/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/http-cookie/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/http-cookie/GET/request
index dc272ed3b8..ca44efd68a 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/http-cookie/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/http-cookie/GET/request
@@ -1,7 +1,7 @@
> GET /info/http-cookie
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/http-cookie/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/http-cookie/GET/response
index d8db0ab577..548b9c2234 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/http-cookie/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/http-cookie/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/http_parser.rb/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/http_parser.rb/GET/request
index e67979aa78..bdddf8ffff 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/http_parser.rb/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/http_parser.rb/GET/request
@@ -1,7 +1,7 @@
> GET /info/http_parser.rb
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/http_parser.rb/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/http_parser.rb/GET/response
index ed892d2641..cb4615f9a5 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/http_parser.rb/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/http_parser.rb/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/httpadapter/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/httpadapter/GET/request
index c9d3ce3546..58000e2079 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/httpadapter/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/httpadapter/GET/request
@@ -1,7 +1,7 @@
> GET /info/httpadapter
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/httpadapter/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/httpadapter/GET/response
index 2085d78734..9d795a6619 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/httpadapter/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/httpadapter/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/httpclient/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/httpclient/GET/request
index 499c716b32..32cb1aaee8 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/httpclient/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/httpclient/GET/request
@@ -1,7 +1,7 @@
> GET /info/httpclient
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/httpclient/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/httpclient/GET/response
index 2085e02351..6ecfffb7a7 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/httpclient/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/httpclient/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hurley/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hurley/GET/request
index 218736d428..f1aeab8605 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hurley/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hurley/GET/request
@@ -1,7 +1,7 @@
> GET /info/hurley
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hurley/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hurley/GET/response
index 5268938361..1454389d6e 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hurley/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/hurley/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/i18n/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/i18n/GET/request
index ad35d73f0b..fb3fa8753a 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/i18n/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/i18n/GET/request
@@ -1,7 +1,7 @@
> GET /info/i18n
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/i18n/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/i18n/GET/response
index a5d8e4a8d8..fcb9e3ecf6 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/i18n/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/i18n/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ice_nine/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ice_nine/GET/request
index 0c7e990bf7..8ae735ddb5 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ice_nine/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ice_nine/GET/request
@@ -1,7 +1,7 @@
> GET /info/ice_nine
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ice_nine/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ice_nine/GET/response
index 9640b04f66..1fc0ecccf3 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ice_nine/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ice_nine/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/jar-dependencies/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/jar-dependencies/GET/request
new file mode 100644
index 0000000000..ded530aa3c
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/jar-dependencies/GET/request
@@ -0,0 +1,7 @@
+> GET /info/jar-dependencies
+> accept-encoding: gzip
+> accept: */*
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
+> connection: keep-alive
+> keep-alive: 30
+> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/jar-dependencies/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/jar-dependencies/GET/response
new file mode 100644
index 0000000000..e97dda90c5
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/jar-dependencies/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/jaro_winkler/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/jaro_winkler/GET/request
new file mode 100644
index 0000000000..1780b36076
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/jaro_winkler/GET/request
@@ -0,0 +1,7 @@
+> GET /info/jaro_winkler
+> accept-encoding: gzip
+> accept: */*
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
+> connection: keep-alive
+> keep-alive: 30
+> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/jaro_winkler/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/jaro_winkler/GET/response
new file mode 100644
index 0000000000..e1bbb96cf1
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/jaro_winkler/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/journey/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/journey/GET/request
index 8f9b0132c2..c91f5e0bec 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/journey/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/journey/GET/request
@@ -1,7 +1,7 @@
> GET /info/journey
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/journey/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/journey/GET/response
index 18f04980b2..9192a20307 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/journey/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/journey/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/jruby-pageant/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/jruby-pageant/GET/request
index 6dd6f3f43b..21b0f5b7eb 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/jruby-pageant/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/jruby-pageant/GET/request
@@ -1,7 +1,7 @@
> GET /info/jruby-pageant
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/jruby-pageant/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/jruby-pageant/GET/response
index c1d4f95e29..8a0c77e06c 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/jruby-pageant/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/jruby-pageant/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/json/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/json/GET/request
index 7ca746d23e..f1ac940684 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/json/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/json/GET/request
@@ -1,7 +1,7 @@
> GET /info/json
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/json/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/json/GET/response
index dbaffc17f1..e340e1055e 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/json/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/json/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/json_pure/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/json_pure/GET/request
index aa2b18bd1d..685b84f51d 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/json_pure/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/json_pure/GET/request
@@ -1,7 +1,7 @@
> GET /info/json_pure
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/json_pure/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/json_pure/GET/response
index 66abe94a62..67c30a7e79 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/json_pure/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/json_pure/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/jwt/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/jwt/GET/request
index c8669eac08..b712a2dfee 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/jwt/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/jwt/GET/request
@@ -1,7 +1,7 @@
> GET /info/jwt
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/jwt/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/jwt/GET/response
index e262e41c07..b34fbb4be4 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/jwt/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/jwt/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/language/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/language/GET/request
index 4aeefbc7aa..93c58de1a2 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/language/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/language/GET/request
@@ -1,7 +1,7 @@
> GET /info/language
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/language/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/language/GET/response
index 6b63972d50..b02672f6b6 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/language/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/language/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/launchy/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/launchy/GET/request
index 60da8f9a26..f1338b3ba9 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/launchy/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/launchy/GET/request
@@ -1,7 +1,7 @@
> GET /info/launchy
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/launchy/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/launchy/GET/response
index db76626340..8f10f2bcaf 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/launchy/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/launchy/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/libwebsocket/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/libwebsocket/GET/request
index 3764e1e3b1..183d8a3a40 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/libwebsocket/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/libwebsocket/GET/request
@@ -1,7 +1,7 @@
> GET /info/libwebsocket
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/libwebsocket/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/libwebsocket/GET/response
index 244ba5277a..9a20924258 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/libwebsocket/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/libwebsocket/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/libxml-ruby/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/libxml-ruby/GET/request
index fad58483fe..d9fc0498c1 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/libxml-ruby/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/libxml-ruby/GET/request
@@ -1,7 +1,7 @@
> GET /info/libxml-ruby
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/libxml-ruby/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/libxml-ruby/GET/response
index 2742abd449..b5526da28c 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/libxml-ruby/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/libxml-ruby/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/liquid/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/liquid/GET/request
index 9ac0105694..4805bc60a3 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/liquid/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/liquid/GET/request
@@ -1,7 +1,7 @@
> GET /info/liquid
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/liquid/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/liquid/GET/response
index fa37cb788f..84c3156cca 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/liquid/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/liquid/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/listen/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/listen/GET/request
index d8ac06f4ea..1a57b05c2e 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/listen/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/listen/GET/request
@@ -1,7 +1,7 @@
> GET /info/listen
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/listen/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/listen/GET/response
index 74dd5df6ce..1f87134b12 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/listen/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/listen/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/little-plugger/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/little-plugger/GET/request
index 34f643d772..6558ba05e2 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/little-plugger/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/little-plugger/GET/request
@@ -1,7 +1,7 @@
> GET /info/little-plugger
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/little-plugger/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/little-plugger/GET/response
index 2b8b21982f..d6f4327e1e 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/little-plugger/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/little-plugger/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/lockfile/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/lockfile/GET/request
index 21ccaf6be5..2132a5f562 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/lockfile/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/lockfile/GET/request
@@ -1,7 +1,7 @@
> GET /info/lockfile
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/lockfile/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/lockfile/GET/response
index fde932b183..05635fe2bf 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/lockfile/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/lockfile/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/logging/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/logging/GET/request
index 8a7bd45f35..946206de24 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/logging/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/logging/GET/request
@@ -1,7 +1,7 @@
> GET /info/logging
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/logging/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/logging/GET/response
index cbe9bfdebf..cad5697259 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/logging/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/logging/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/loofah/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/loofah/GET/request
index 2cb6d57679..8cc27c55bd 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/loofah/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/loofah/GET/request
@@ -1,7 +1,7 @@
> GET /info/loofah
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/loofah/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/loofah/GET/response
index 848cc7b05b..6842ddb32c 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/loofah/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/loofah/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/loquacious/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/loquacious/GET/request
index bda60b4dc3..978053d6a1 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/loquacious/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/loquacious/GET/request
@@ -1,7 +1,7 @@
> GET /info/loquacious
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/loquacious/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/loquacious/GET/response
index bbda4bc450..2c2fa117b7 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/loquacious/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/loquacious/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mab/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mab/GET/request
index 115c6e6448..23b183bad5 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mab/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mab/GET/request
@@ -1,7 +1,7 @@
> GET /info/mab
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mab/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mab/GET/response
index 067827ad9c..efc6e766dd 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mab/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mab/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mail/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mail/GET/request
index ea11e0bd0c..af8ae45eca 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mail/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mail/GET/request
@@ -1,7 +1,7 @@
> GET /info/mail
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mail/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mail/GET/response
index 5dd7ab169c..4d3fec50a2 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mail/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mail/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/marcel/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/marcel/GET/request
new file mode 100644
index 0000000000..48f1db1cc5
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/marcel/GET/request
@@ -0,0 +1,7 @@
+> GET /info/marcel
+> accept-encoding: gzip
+> accept: */*
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
+> connection: keep-alive
+> keep-alive: 30
+> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/marcel/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/marcel/GET/response
new file mode 100644
index 0000000000..11295065f5
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/marcel/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/markaby/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/markaby/GET/request
index 27db5d09cf..d22301559a 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/markaby/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/markaby/GET/request
@@ -1,7 +1,7 @@
> GET /info/markaby
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/markaby/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/markaby/GET/response
index 917d9f7777..81be02d900 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/markaby/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/markaby/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/maven-tools/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/maven-tools/GET/request
new file mode 100644
index 0000000000..51009e91be
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/maven-tools/GET/request
@@ -0,0 +1,7 @@
+> GET /info/maven-tools
+> accept-encoding: gzip
+> accept: */*
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
+> connection: keep-alive
+> keep-alive: 30
+> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/maven-tools/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/maven-tools/GET/response
new file mode 100644
index 0000000000..56f126ce0f
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/maven-tools/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/memcache-client/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/memcache-client/GET/request
index 4b0c275c6e..aa093dd07a 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/memcache-client/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/memcache-client/GET/request
@@ -1,7 +1,7 @@
> GET /info/memcache-client
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/memcache-client/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/memcache-client/GET/response
index a1fb37c9f7..da14152af8 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/memcache-client/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/memcache-client/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/memoist/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/memoist/GET/request
index fcda1676de..48fa5d5ad8 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/memoist/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/memoist/GET/request
@@ -1,7 +1,7 @@
> GET /info/memoist
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/memoist/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/memoist/GET/response
index b3b4112024..f14181c807 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/memoist/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/memoist/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/memoizable/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/memoizable/GET/request
index ae7e5e0371..980b71c224 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/memoizable/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/memoizable/GET/request
@@ -1,7 +1,7 @@
> GET /info/memoizable
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/memoizable/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/memoizable/GET/response
index 730066f3b8..465d690045 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/memoizable/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/memoizable/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/metaclass/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/metaclass/GET/request
index 9f502c21cc..e38cf09c00 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/metaclass/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/metaclass/GET/request
@@ -1,7 +1,7 @@
> GET /info/metaclass
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/metaclass/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/metaclass/GET/response
index 838e17e78b..bd9b97047e 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/metaclass/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/metaclass/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/metaid/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/metaid/GET/request
index 872aea81e0..c0836e3324 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/metaid/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/metaid/GET/request
@@ -1,7 +1,7 @@
> GET /info/metaid
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/metaid/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/metaid/GET/response
index 3b745e234b..6529870e23 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/metaid/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/metaid/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/method_source/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/method_source/GET/request
index 4d02bc1e42..625f034a3b 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/method_source/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/method_source/GET/request
@@ -1,7 +1,7 @@
> GET /info/method_source
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/method_source/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/method_source/GET/response
index 18c79330c5..428274b0ee 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/method_source/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/method_source/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mime-types-data/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mime-types-data/GET/request
index 8081aaa002..13f2460111 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mime-types-data/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mime-types-data/GET/request
@@ -1,7 +1,7 @@
> GET /info/mime-types-data
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mime-types-data/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mime-types-data/GET/response
index c428319a48..b61dd22994 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mime-types-data/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mime-types-data/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mime-types/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mime-types/GET/request
index eb07326eda..55103e35e5 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mime-types/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mime-types/GET/request
@@ -1,7 +1,7 @@
> GET /info/mime-types
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mime-types/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mime-types/GET/response
index c811fa5136..9e924778cf 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mime-types/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mime-types/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mimemagic/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mimemagic/GET/request
index cbb2e4f493..9fc777d048 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mimemagic/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mimemagic/GET/request
@@ -1,7 +1,7 @@
> GET /info/mimemagic
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 6d5397ce7f8b26e0
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mimemagic/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mimemagic/GET/response
index bf480bbe5f..57677dc0f6 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mimemagic/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mimemagic/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mini_mime/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mini_mime/GET/request
new file mode 100644
index 0000000000..1fdb815d7e
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mini_mime/GET/request
@@ -0,0 +1,7 @@
+> GET /info/mini_mime
+> accept-encoding: gzip
+> accept: */*
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
+> connection: keep-alive
+> keep-alive: 30
+> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mini_mime/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mini_mime/GET/response
new file mode 100644
index 0000000000..34463e2827
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mini_mime/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mini_portile/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mini_portile/GET/request
index f536dc4d3e..d4232c6f94 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mini_portile/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mini_portile/GET/request
@@ -1,7 +1,7 @@
> GET /info/mini_portile
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mini_portile/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mini_portile/GET/response
index 0e53b5b3d0..16c1b49fec 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mini_portile/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mini_portile/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mini_portile2/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mini_portile2/GET/request
index ab28a8089a..09cf668af6 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mini_portile2/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mini_portile2/GET/request
@@ -1,7 +1,7 @@
> GET /info/mini_portile2
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mini_portile2/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mini_portile2/GET/response
index e664192bbe..86a057e1db 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mini_portile2/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mini_portile2/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/minitar-cli/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/minitar-cli/GET/request
index d9d5968a5b..501b833f31 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/minitar-cli/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/minitar-cli/GET/request
@@ -1,7 +1,7 @@
> GET /info/minitar-cli
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/minitar-cli/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/minitar-cli/GET/response
index fb853dc6c2..993b6e388d 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/minitar-cli/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/minitar-cli/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/minitar/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/minitar/GET/request
index c8b5697b43..04ab7d0dae 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/minitar/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/minitar/GET/request
@@ -1,7 +1,7 @@
> GET /info/minitar
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/minitar/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/minitar/GET/response
index 17342c80e5..8370ab1e12 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/minitar/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/minitar/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/minitest/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/minitest/GET/request
index 4d88e89a59..12c3568323 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/minitest/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/minitest/GET/request
@@ -1,7 +1,7 @@
> GET /info/minitest
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/minitest/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/minitest/GET/response
index 514aae033a..6eacfa8e25 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/minitest/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/minitest/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mkrf/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mkrf/GET/request
index 3333257711..3f9668c3fe 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mkrf/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mkrf/GET/request
@@ -1,7 +1,7 @@
> GET /info/mkrf
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mkrf/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mkrf/GET/response
index 5e0d4ee277..a29f59355b 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mkrf/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mkrf/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mocha/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mocha/GET/request
index f215f1f8d6..2275c61ad0 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mocha/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mocha/GET/request
@@ -1,7 +1,7 @@
> GET /info/mocha
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mocha/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mocha/GET/response
index da32ecfb8d..a893324be5 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mocha/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mocha/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mongrel/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mongrel/GET/request
index 0181a370bc..d99929e065 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mongrel/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mongrel/GET/request
@@ -1,7 +1,7 @@
> GET /info/mongrel
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mongrel/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mongrel/GET/response
index 0184bd09dc..954cd8e980 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mongrel/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mongrel/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mono_logger/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mono_logger/GET/request
index 088d7a648d..4ead7396de 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mono_logger/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mono_logger/GET/request
@@ -1,7 +1,7 @@
> GET /info/mono_logger
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/install options/retry,path,disable_shared_gems,spec_run,plugins,trampoline_disable d59b382d069fc94f
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/install options/retry,no_install,path,spec_run 4001db3dbc9e7104
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mono_logger/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mono_logger/GET/response
index 5163ec92af..0293e0a422 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mono_logger/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mono_logger/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multi_json/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multi_json/GET/request
index 56942172dc..183558805d 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multi_json/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multi_json/GET/request
@@ -1,7 +1,7 @@
> GET /info/multi_json
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multi_json/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multi_json/GET/response
index 001f44bb08..7c535498e1 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multi_json/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multi_json/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multi_test/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multi_test/GET/request
index 8f4d50696c..f47b4d3539 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multi_test/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multi_test/GET/request
@@ -1,7 +1,7 @@
> GET /info/multi_test
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multi_test/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multi_test/GET/response
index 955de5d64d..273ccebde2 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multi_test/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multi_test/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multimap/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multimap/GET/request
index 1a64e6f47e..49774c92af 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multimap/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multimap/GET/request
@@ -1,7 +1,7 @@
> GET /info/multimap
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multimap/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multimap/GET/response
index da10914932..e0ca21b532 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multimap/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multimap/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multipart-post/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multipart-post/GET/request
index 63eec25ffd..ff4cec7e4b 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multipart-post/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multipart-post/GET/request
@@ -1,7 +1,7 @@
> GET /info/multipart-post
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multipart-post/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multipart-post/GET/response
index ec7b13cfc5..43aea2968b 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multipart-post/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/multipart-post/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mustermann/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mustermann/GET/request
index 710afe0829..1c41bea99f 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mustermann/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mustermann/GET/request
@@ -1,7 +1,7 @@
> GET /info/mustermann
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mustermann/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mustermann/GET/response
index 21ba1104a6..7b8862e9eb 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mustermann/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/mustermann/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/needle/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/needle/GET/request
index 45d8ea2c39..1f4919b4c3 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/needle/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/needle/GET/request
@@ -1,7 +1,7 @@
> GET /info/needle
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/needle/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/needle/GET/response
index 600fcfb700..5c88954fd0 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/needle/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/needle/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/nenv/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/nenv/GET/request
index 4ab184fc81..775aa750ba 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/nenv/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/nenv/GET/request
@@ -1,7 +1,7 @@
> GET /info/nenv
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/nenv/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/nenv/GET/response
index 8bb1ae92e6..34335e1720 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/nenv/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/nenv/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/net-scp/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/net-scp/GET/request
index 8910edf8e6..87cb1e2ec6 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/net-scp/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/net-scp/GET/request
@@ -1,7 +1,7 @@
> GET /info/net-scp
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/net-scp/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/net-scp/GET/response
index 1041db3aa7..b53787e062 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/net-scp/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/net-scp/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/net-ssh/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/net-ssh/GET/request
index 043751da3b..61c032894e 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/net-ssh/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/net-ssh/GET/request
@@ -1,7 +1,7 @@
> GET /info/net-ssh
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/net-ssh/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/net-ssh/GET/response
index 33632b22b5..d1c910fc7c 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/net-ssh/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/net-ssh/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/netrc/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/netrc/GET/request
index 912c799120..fda229566a 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/netrc/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/netrc/GET/request
@@ -1,7 +1,7 @@
> GET /info/netrc
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/netrc/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/netrc/GET/response
index 53a65c4824..91be972d34 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/netrc/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/netrc/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/newgem/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/newgem/GET/request
index ef62899a0c..46491a3a05 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/newgem/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/newgem/GET/request
@@ -1,7 +1,7 @@
> GET /info/newgem
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/install options/retry,path,disable_shared_gems,spec_run,plugins,trampoline_disable d59b382d069fc94f
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/install options/retry,no_install,path,spec_run 4001db3dbc9e7104
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/newgem/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/newgem/GET/response
index 9a5e53ac8c..c768f823b7 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/newgem/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/newgem/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/nio4r/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/nio4r/GET/request
index 44337df0b7..96f90e8f5f 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/nio4r/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/nio4r/GET/request
@@ -1,7 +1,7 @@
> GET /info/nio4r
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/nio4r/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/nio4r/GET/response
index 56e0f5a7e1..b055a37efb 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/nio4r/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/nio4r/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/nokogiri/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/nokogiri/GET/request
index 09c5dd725f..e4e962f352 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/nokogiri/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/nokogiri/GET/request
@@ -1,7 +1,7 @@
> GET /info/nokogiri
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/nokogiri/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/nokogiri/GET/response
index 369a205b2e..6e6dc44caa 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/nokogiri/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/nokogiri/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/os/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/os/GET/request
index 1d82322d8b..cd253c0d79 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/os/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/os/GET/request
@@ -1,7 +1,7 @@
> GET /info/os
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/os/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/os/GET/response
index cd38a4e1ef..9f3cc62744 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/os/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/os/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/paperclip/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/paperclip/GET/request
index c977514627..c21a410dc4 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/paperclip/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/paperclip/GET/request
@@ -1,7 +1,7 @@
> GET /info/paperclip
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 6d5397ce7f8b26e0
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 7053ae03c762ac3b
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/paperclip/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/paperclip/GET/response
index 31b3fdd4d7..d89114d9cd 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/paperclip/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/paperclip/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/parallel/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/parallel/GET/request
new file mode 100644
index 0000000000..bd7881c703
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/parallel/GET/request
@@ -0,0 +1,7 @@
+> GET /info/parallel
+> accept-encoding: gzip
+> accept: */*
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
+> connection: keep-alive
+> keep-alive: 30
+> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/parallel/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/parallel/GET/response
new file mode 100644
index 0000000000..32f123c11a
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/parallel/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/parser/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/parser/GET/request
index 5fc1b9ff8b..b55b27ea40 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/parser/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/parser/GET/request
@@ -1,7 +1,7 @@
> GET /info/parser
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/parser/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/parser/GET/response
index 8de3ebdeeb..3b841268ca 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/parser/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/parser/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/pattern-match/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/pattern-match/GET/request
index 1636fe07b4..37f5fd99be 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/pattern-match/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/pattern-match/GET/request
@@ -1,7 +1,7 @@
> GET /info/pattern-match
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/pattern-match/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/pattern-match/GET/response
index 407bd97444..08e7b4a9d5 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/pattern-match/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/pattern-match/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/pkg-config/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/pkg-config/GET/request
index 8f2f5ae398..8299aa4ddd 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/pkg-config/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/pkg-config/GET/request
@@ -1,7 +1,7 @@
> GET /info/pkg-config
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/pkg-config/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/pkg-config/GET/response
index 892050438f..8d554fe6f3 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/pkg-config/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/pkg-config/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/polyglot/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/polyglot/GET/request
index 8841563b63..8c529beb70 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/polyglot/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/polyglot/GET/request
@@ -1,7 +1,7 @@
> GET /info/polyglot
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/polyglot/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/polyglot/GET/response
index 2e5dba2b76..bc5fe8b131 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/polyglot/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/polyglot/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/power_assert/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/power_assert/GET/request
index 73ef4c0d07..61030e2807 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/power_assert/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/power_assert/GET/request
@@ -1,7 +1,7 @@
> GET /info/power_assert
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/power_assert/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/power_assert/GET/response
index d9cdfe043b..7034d1754b 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/power_assert/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/power_assert/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/powerbar/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/powerbar/GET/request
index 0a69936bc6..bbb55c635f 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/powerbar/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/powerbar/GET/request
@@ -1,7 +1,7 @@
> GET /info/powerbar
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/powerbar/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/powerbar/GET/response
index a71d6494db..b3a2512878 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/powerbar/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/powerbar/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/powerpack/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/powerpack/GET/request
index 20bf19b1af..add0f7bfe4 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/powerpack/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/powerpack/GET/request
@@ -1,7 +1,7 @@
> GET /info/powerpack
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/powerpack/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/powerpack/GET/response
index 18240e5335..e3379ae402 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/powerpack/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/powerpack/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/preforker/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/preforker/GET/request
index 2ba448e12d..0b5243ca23 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/preforker/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/preforker/GET/request
@@ -1,7 +1,7 @@
> GET /info/preforker
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/preforker/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/preforker/GET/response
index c9cf52559e..412f82606f 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/preforker/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/preforker/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/psych/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/psych/GET/request
new file mode 100644
index 0000000000..4e9d65a823
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/psych/GET/request
@@ -0,0 +1,7 @@
+> GET /info/psych
+> accept-encoding: gzip
+> accept: */*
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
+> connection: keep-alive
+> keep-alive: 30
+> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/psych/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/psych/GET/response
new file mode 100644
index 0000000000..f5b0562afa
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/psych/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/public_suffix/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/public_suffix/GET/request
index 9f13c8a79e..6fa3095a85 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/public_suffix/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/public_suffix/GET/request
@@ -1,7 +1,7 @@
> GET /info/public_suffix
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/public_suffix/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/public_suffix/GET/response
index 75a81259f8..28c628a2a8 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/public_suffix/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/public_suffix/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/raabro/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/raabro/GET/request
new file mode 100644
index 0000000000..2ed191f2db
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/raabro/GET/request
@@ -0,0 +1,7 @@
+> GET /info/raabro
+> accept-encoding: gzip
+> accept: */*
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/install options/retry,no_install,path,spec_run 4001db3dbc9e7104
+> connection: keep-alive
+> keep-alive: 30
+> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/raabro/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/raabro/GET/response
new file mode 100644
index 0000000000..d142d81716
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/raabro/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/racc/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/racc/GET/request
index dfc9adfa9d..7efd626582 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/racc/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/racc/GET/request
@@ -1,7 +1,7 @@
> GET /info/racc
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/racc/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/racc/GET/response
index 3b19786ead..37ee86ad24 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/racc/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/racc/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-cache/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-cache/GET/request
index 27a90522f4..7a74a06473 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-cache/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-cache/GET/request
@@ -1,7 +1,7 @@
> GET /info/rack-cache
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-cache/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-cache/GET/response
index 94e686dc49..015cfbc01f 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-cache/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-cache/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-mount/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-mount/GET/request
index 59a7bd8b8d..e1d894224e 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-mount/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-mount/GET/request
@@ -1,7 +1,7 @@
> GET /info/rack-mount
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-mount/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-mount/GET/response
index 42dde6a265..7a874f60fa 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-mount/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-mount/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-protection/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-protection/GET/request
index 4eb6557436..e3dcaa3a5d 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-protection/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-protection/GET/request
@@ -1,7 +1,7 @@
> GET /info/rack-protection
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-protection/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-protection/GET/response
index 8ac5f63f69..78db96e7c9 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-protection/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-protection/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-ssl/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-ssl/GET/request
index 6871bc0308..f59614d7e7 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-ssl/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-ssl/GET/request
@@ -1,7 +1,7 @@
> GET /info/rack-ssl
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-ssl/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-ssl/GET/response
index 47375b7ed8..5de5f5ece2 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-ssl/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-ssl/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-test/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-test/GET/request
index 624dd07678..76741611ed 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-test/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-test/GET/request
@@ -1,7 +1,7 @@
> GET /info/rack-test
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-test/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-test/GET/response
index ee93493b49..0a168562e0 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-test/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack-test/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack/GET/request
index 16a0feac8c..022c64a97a 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack/GET/request
@@ -1,7 +1,7 @@
> GET /info/rack
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack/GET/response
index 867035cd63..d01b536213 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rack/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-deprecated_sanitizer/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-deprecated_sanitizer/GET/request
index 67514b94c8..29ef25191a 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-deprecated_sanitizer/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-deprecated_sanitizer/GET/request
@@ -1,7 +1,7 @@
> GET /info/rails-deprecated_sanitizer
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-deprecated_sanitizer/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-deprecated_sanitizer/GET/response
index 1344345709..dddbda8e5e 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-deprecated_sanitizer/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-deprecated_sanitizer/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-dom-testing/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-dom-testing/GET/request
index 2caa6d814e..d7f92ca2c0 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-dom-testing/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-dom-testing/GET/request
@@ -1,7 +1,7 @@
> GET /info/rails-dom-testing
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-dom-testing/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-dom-testing/GET/response
index cc215cf4f0..30c91d6357 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-dom-testing/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-dom-testing/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-html-sanitizer/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-html-sanitizer/GET/request
index 54db344173..c565e3d282 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-html-sanitizer/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-html-sanitizer/GET/request
@@ -1,7 +1,7 @@
> GET /info/rails-html-sanitizer
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-html-sanitizer/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-html-sanitizer/GET/response
index 6dbdd7d5c3..3de230ad21 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-html-sanitizer/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-html-sanitizer/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-observers/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-observers/GET/request
index 3fb8b11adf..5523ca353f 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-observers/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-observers/GET/request
@@ -1,7 +1,7 @@
> GET /info/rails-observers
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-observers/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-observers/GET/response
index ba7e9367fa..eb567b882d 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-observers/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails-observers/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails/GET/request
index b156e7be25..4fca8b0130 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails/GET/request
@@ -1,7 +1,7 @@
> GET /info/rails
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails/GET/response
index 9ff62db657..99b358fd95 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rails/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/railties/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/railties/GET/request
index 40f66c8a6f..c379d76dbe 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/railties/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/railties/GET/request
@@ -1,7 +1,7 @@
> GET /info/railties
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/railties/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/railties/GET/response
index c95e7e7edd..285217e961 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/railties/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/railties/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rainbow/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rainbow/GET/request
index ae1ee0cee9..fe9cae07bc 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rainbow/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rainbow/GET/request
@@ -1,7 +1,7 @@
> GET /info/rainbow
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rainbow/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rainbow/GET/response
index f09bf393c2..fe3070b558 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rainbow/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rainbow/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rake-compiler/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rake-compiler/GET/request
index 2f777a05bf..ae70edf6cb 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rake-compiler/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rake-compiler/GET/request
@@ -1,7 +1,7 @@
> GET /info/rake-compiler
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rake-compiler/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rake-compiler/GET/response
index 23e76df066..b17a1ffe07 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rake-compiler/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rake-compiler/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rake/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rake/GET/request
index c161c917e1..5f2f38292c 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rake/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rake/GET/request
@@ -1,7 +1,7 @@
> GET /info/rake
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rake/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rake/GET/response
index da73b27d17..cbd61a1990 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rake/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rake/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-fchange/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-fchange/GET/request
index 101066914a..97d07d3468 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-fchange/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-fchange/GET/request
@@ -1,7 +1,7 @@
> GET /info/rb-fchange
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-fchange/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-fchange/GET/response
index 99ed1a9fdf..3dccf1d56f 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-fchange/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-fchange/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-fsevent/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-fsevent/GET/request
index 192253cb0c..11209cdcd7 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-fsevent/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-fsevent/GET/request
@@ -1,7 +1,7 @@
> GET /info/rb-fsevent
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-fsevent/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-fsevent/GET/response
index 536d498501..9e61d1ba2c 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-fsevent/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-fsevent/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-inotify/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-inotify/GET/request
index cf7287e37b..156600fde9 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-inotify/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-inotify/GET/request
@@ -1,7 +1,7 @@
> GET /info/rb-inotify
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-inotify/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-inotify/GET/response
index 6e34ecb855..5a171dbe9c 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-inotify/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-inotify/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-kqueue/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-kqueue/GET/request
index 6d256b9e11..26f5dc5094 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-kqueue/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-kqueue/GET/request
@@ -1,7 +1,7 @@
> GET /info/rb-kqueue
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-kqueue/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-kqueue/GET/response
index 63953471b7..161f6938cc 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-kqueue/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rb-kqueue/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rbnacl-libsodium/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rbnacl-libsodium/GET/request
index 0a269f784f..69233761ce 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rbnacl-libsodium/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rbnacl-libsodium/GET/request
@@ -1,7 +1,7 @@
> GET /info/rbnacl-libsodium
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rbnacl-libsodium/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rbnacl-libsodium/GET/response
index 158fec8538..13e3a5df99 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rbnacl-libsodium/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rbnacl-libsodium/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rbnacl/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rbnacl/GET/request
index d28de6c266..d73fe50e0c 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rbnacl/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rbnacl/GET/request
@@ -1,7 +1,7 @@
> GET /info/rbnacl
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rbnacl/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rbnacl/GET/response
index 6a5555bc2b..1636735e82 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rbnacl/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rbnacl/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rcov/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rcov/GET/request
index 611a286a4c..fab1c65a68 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rcov/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rcov/GET/request
@@ -1,7 +1,7 @@
> GET /info/rcov
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rcov/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rcov/GET/response
index 7ef58c5aab..71320058b8 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rcov/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rcov/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rdoc/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rdoc/GET/request
index 8402303257..ed1fc38c9c 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rdoc/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rdoc/GET/request
@@ -1,7 +1,7 @@
> GET /info/rdoc
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rdoc/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rdoc/GET/response
index 3d86e4f442..556fb52de3 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rdoc/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rdoc/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/redis-namespace/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/redis-namespace/GET/request
index 9b78830065..c4c31b1f1c 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/redis-namespace/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/redis-namespace/GET/request
@@ -1,7 +1,7 @@
> GET /info/redis-namespace
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/install options/retry,path,disable_shared_gems,spec_run,plugins,trampoline_disable d59b382d069fc94f
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/install options/retry,no_install,path,spec_run 4001db3dbc9e7104
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/redis-namespace/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/redis-namespace/GET/response
index 03d9194045..e322e4a8e3 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/redis-namespace/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/redis-namespace/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/redis/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/redis/GET/request
index 9bfcfc80fd..a8381bd8b5 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/redis/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/redis/GET/request
@@ -1,7 +1,7 @@
> GET /info/redis
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/redis/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/redis/GET/response
index 9f5d4406e5..c482655b9f 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/redis/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/redis/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ref/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ref/GET/request
index 42ee151f68..fad1bb1bc4 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ref/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ref/GET/request
@@ -1,7 +1,7 @@
> GET /info/ref
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ref/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ref/GET/response
index 528ef107b5..8da1fe2b44 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ref/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ref/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/regexp_parser/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/regexp_parser/GET/request
new file mode 100644
index 0000000000..ba4e22503e
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/regexp_parser/GET/request
@@ -0,0 +1,7 @@
+> GET /info/regexp_parser
+> accept-encoding: gzip
+> accept: */*
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
+> connection: keep-alive
+> keep-alive: 30
+> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/regexp_parser/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/regexp_parser/GET/response
new file mode 100644
index 0000000000..304d0dd69f
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/regexp_parser/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/representable/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/representable/GET/request
index 73a5ca084e..10b7b0f0d5 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/representable/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/representable/GET/request
@@ -1,7 +1,7 @@
> GET /info/representable
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/representable/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/representable/GET/response
index 5a28b34afb..3c233b804c 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/representable/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/representable/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/resque-scheduler/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/resque-scheduler/GET/request
index aa9132aedb..b9b0e3edfd 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/resque-scheduler/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/resque-scheduler/GET/request
@@ -1,7 +1,7 @@
> GET /info/resque-scheduler
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/install options/retry,path,disable_shared_gems,spec_run,plugins,trampoline_disable d59b382d069fc94f
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/install options/retry,no_install,path,spec_run 4001db3dbc9e7104
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/resque-scheduler/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/resque-scheduler/GET/response
index 8e0c95e2cb..5a3a8550c4 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/resque-scheduler/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/resque-scheduler/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/resque/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/resque/GET/request
index 616a9e5b9f..b343d4f61a 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/resque/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/resque/GET/request
@@ -1,7 +1,7 @@
> GET /info/resque
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/install options/retry,path,disable_shared_gems,spec_run,plugins,trampoline_disable d59b382d069fc94f
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/install options/retry,no_install,path,spec_run 4001db3dbc9e7104
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/resque/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/resque/GET/response
index 32c3e51e9b..1dd998b652 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/resque/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/resque/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rest-client/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rest-client/GET/request
index 5935658273..24813b41af 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rest-client/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rest-client/GET/request
@@ -1,7 +1,7 @@
> GET /info/rest-client
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rest-client/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rest-client/GET/response
index 5363438b08..424c8cb18f 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rest-client/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rest-client/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/retriable/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/retriable/GET/request
index a76f439668..19639f592f 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/retriable/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/retriable/GET/request
@@ -1,7 +1,7 @@
> GET /info/retriable
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/retriable/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/retriable/GET/response
index 1ee15eeb98..4dedfaaa86 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/retriable/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/retriable/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rexical/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rexical/GET/request
index 0390a17867..4f8bb736bc 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rexical/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rexical/GET/request
@@ -1,7 +1,7 @@
> GET /info/rexical
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rexical/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rexical/GET/response
index 9e6fb35c6c..653f3dfd60 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rexical/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rexical/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/right_aws/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/right_aws/GET/request
index 46fa433f4a..7bd8c224d5 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/right_aws/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/right_aws/GET/request
@@ -1,7 +1,7 @@
> GET /info/right_aws
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 6d5397ce7f8b26e0
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 7053ae03c762ac3b
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/right_aws/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/right_aws/GET/response
index eb62d2516c..de5e2f6ca1 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/right_aws/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/right_aws/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/right_http_connection/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/right_http_connection/GET/request
index 9afacd1726..9ab3e5b5b5 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/right_http_connection/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/right_http_connection/GET/request
@@ -1,7 +1,7 @@
> GET /info/right_http_connection
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 6d5397ce7f8b26e0
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 7053ae03c762ac3b
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/right_http_connection/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/right_http_connection/GET/response
index 05212f5e5e..2d65542a5b 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/right_http_connection/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/right_http_connection/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-core/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-core/GET/request
index c9398deae9..970d81af63 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-core/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-core/GET/request
@@ -1,7 +1,7 @@
> GET /info/rspec-core
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-core/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-core/GET/response
index e34e0f1740..b27b576aac 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-core/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-core/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-expectations/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-expectations/GET/request
index 660b24d100..b4ee08ffe2 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-expectations/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-expectations/GET/request
@@ -1,7 +1,7 @@
> GET /info/rspec-expectations
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-expectations/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-expectations/GET/response
index a51f67f84a..25c82fa8d2 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-expectations/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-expectations/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-logsplit/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-logsplit/GET/request
index 5ff447f187..42b48afdc4 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-logsplit/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-logsplit/GET/request
@@ -1,7 +1,7 @@
> GET /info/rspec-logsplit
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-logsplit/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-logsplit/GET/response
index b0780175c6..7400f0895e 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-logsplit/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-logsplit/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-mocks/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-mocks/GET/request
index 0a961c6ffd..71517920f8 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-mocks/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-mocks/GET/request
@@ -1,7 +1,7 @@
> GET /info/rspec-mocks
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-mocks/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-mocks/GET/response
index b80ac128fe..39afa81a58 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-mocks/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-mocks/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-support/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-support/GET/request
index ab2d3175ec..dd312a431d 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-support/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-support/GET/request
@@ -1,7 +1,7 @@
> GET /info/rspec-support
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-support/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-support/GET/response
index b5ac515f64..f1b1e6ea4a 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-support/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec-support/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec/GET/request
index 3f327837cc..34786fedb1 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec/GET/request
@@ -1,7 +1,7 @@
> GET /info/rspec
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec/GET/response
index 15739a2536..2e975171b1 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rspec/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubigen/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubigen/GET/request
index 19c742edd3..b99bf6e88e 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubigen/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubigen/GET/request
@@ -1,7 +1,7 @@
> GET /info/rubigen
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/install options/retry,path,disable_shared_gems,spec_run,plugins,trampoline_disable d59b382d069fc94f
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/install options/retry,no_install,path,spec_run 4001db3dbc9e7104
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubigen/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubigen/GET/response
index d891923d0f..6f9b03b25b 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubigen/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubigen/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubocop/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubocop/GET/request
index 49899f0274..11b540193d 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubocop/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubocop/GET/request
@@ -1,7 +1,7 @@
> GET /info/rubocop
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubocop/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubocop/GET/response
index b04daa0835..bd82accc36 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubocop/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubocop/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-maven-libs/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-maven-libs/GET/request
new file mode 100644
index 0000000000..7fb8eb8637
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-maven-libs/GET/request
@@ -0,0 +1,7 @@
+> GET /info/ruby-maven-libs
+> accept-encoding: gzip
+> accept: */*
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
+> connection: keep-alive
+> keep-alive: 30
+> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-maven-libs/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-maven-libs/GET/response
new file mode 100644
index 0000000000..943b5a8471
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-maven-libs/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-maven/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-maven/GET/request
new file mode 100644
index 0000000000..7ddea467a9
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-maven/GET/request
@@ -0,0 +1,7 @@
+> GET /info/ruby-maven
+> accept-encoding: gzip
+> accept: */*
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
+> connection: keep-alive
+> keep-alive: 30
+> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-maven/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-maven/GET/response
new file mode 100644
index 0000000000..d6ba1fc4ec
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-maven/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-openid/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-openid/GET/request
index 83ae0d71e7..d4684cc146 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-openid/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-openid/GET/request
@@ -1,7 +1,7 @@
> GET /info/ruby-openid
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-openid/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-openid/GET/response
index 52ed57c65f..28c97e2452 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-openid/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-openid/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-progressbar/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-progressbar/GET/request
index 85bcdde042..5d52273104 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-progressbar/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-progressbar/GET/request
@@ -1,7 +1,7 @@
> GET /info/ruby-progressbar
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-progressbar/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-progressbar/GET/response
index 17ac9088ac..bff1f736e3 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-progressbar/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-progressbar/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-yadis/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-yadis/GET/request
index e12117e5dc..4aa072175e 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-yadis/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-yadis/GET/request
@@ -1,7 +1,7 @@
> GET /info/ruby-yadis
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-yadis/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-yadis/GET/response
index 13432135e4..677ca4dc4c 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-yadis/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby-yadis/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby_dep/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby_dep/GET/request
index 43d58ead74..1ca707a7fb 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby_dep/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby_dep/GET/request
@@ -1,7 +1,7 @@
> GET /info/ruby_dep
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby_dep/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby_dep/GET/response
index cc0788c900..9c69721e3e 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby_dep/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby_dep/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby_parser/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby_parser/GET/request
index 460ff43276..5a6bba7091 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby_parser/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby_parser/GET/request
@@ -1,7 +1,7 @@
> GET /info/ruby_parser
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby_parser/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby_parser/GET/response
index 63c6ef0386..7f2e69444c 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby_parser/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/ruby_parser/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubyforge/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubyforge/GET/request
index 92e612095d..0b51288835 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubyforge/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubyforge/GET/request
@@ -1,7 +1,7 @@
> GET /info/rubyforge
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubyforge/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubyforge/GET/response
index 16d3d25a0e..c2f35fb626 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubyforge/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubyforge/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubyzip/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubyzip/GET/request
index 56ff5252ce..5c48b6a8ee 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubyzip/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubyzip/GET/request
@@ -1,7 +1,7 @@
> GET /info/rubyzip
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubyzip/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubyzip/GET/response
index 073c6fc055..a2edef2c4f 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubyzip/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rubyzip/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rufus-scheduler/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rufus-scheduler/GET/request
index 9c499d7320..4806f24c49 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rufus-scheduler/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rufus-scheduler/GET/request
@@ -1,7 +1,7 @@
> GET /info/rufus-scheduler
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/install options/retry,path,disable_shared_gems,spec_run,plugins,trampoline_disable d59b382d069fc94f
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/install options/retry,no_install,path,spec_run 4001db3dbc9e7104
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rufus-scheduler/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rufus-scheduler/GET/response
index 812fe87e81..19aa19c05d 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rufus-scheduler/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/rufus-scheduler/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sass-listen/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sass-listen/GET/request
index 98051f0722..6f0241c73d 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sass-listen/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sass-listen/GET/request
@@ -1,7 +1,7 @@
> GET /info/sass-listen
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sass-listen/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sass-listen/GET/response
index 8c9edc10b3..d6c19b19d4 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sass-listen/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sass-listen/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sass-rails/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sass-rails/GET/request
index ab996f5ead..083bd8072b 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sass-rails/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sass-rails/GET/request
@@ -1,7 +1,7 @@
> GET /info/sass-rails
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sass-rails/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sass-rails/GET/response
index c4a9239718..9cd53d6c22 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sass-rails/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sass-rails/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sass/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sass/GET/request
index 16f4a2d834..be1e28f4be 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sass/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sass/GET/request
@@ -1,7 +1,7 @@
> GET /info/sass
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sass/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sass/GET/response
index 313c6759ab..f5f621d745 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sass/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sass/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/selenium-webdriver/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/selenium-webdriver/GET/request
index 3128daa2f7..f2eb97c74e 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/selenium-webdriver/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/selenium-webdriver/GET/request
@@ -1,7 +1,7 @@
> GET /info/selenium-webdriver
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/selenium-webdriver/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/selenium-webdriver/GET/response
index 5776c2ea14..c176ecee27 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/selenium-webdriver/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/selenium-webdriver/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sexp_processor/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sexp_processor/GET/request
index e92bfe4e50..97bed157b5 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sexp_processor/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sexp_processor/GET/request
@@ -1,7 +1,7 @@
> GET /info/sexp_processor
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sexp_processor/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sexp_processor/GET/response
index d7ebe60e4b..fc0d925d8c 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sexp_processor/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sexp_processor/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/shotgun/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/shotgun/GET/request
index 9d6b958cc5..63fda90f9a 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/shotgun/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/shotgun/GET/request
@@ -1,7 +1,7 @@
> GET /info/shotgun
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/shotgun/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/shotgun/GET/response
index 5818a8035a..506717d956 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/shotgun/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/shotgun/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/signet/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/signet/GET/request
index bd4257ed35..880d52030f 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/signet/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/signet/GET/request
@@ -1,7 +1,7 @@
> GET /info/signet
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/signet/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/signet/GET/response
index 8fc0070487..de2fcba275 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/signet/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/signet/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/simplecov-html/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/simplecov-html/GET/request
index daf148a4f8..331ce2e176 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/simplecov-html/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/simplecov-html/GET/request
@@ -1,7 +1,7 @@
> GET /info/simplecov-html
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/simplecov-html/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/simplecov-html/GET/response
index 6f69f67f0f..c8f15b1372 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/simplecov-html/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/simplecov-html/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/simplecov/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/simplecov/GET/request
index be9dec39be..fdd3f7ca8c 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/simplecov/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/simplecov/GET/request
@@ -1,7 +1,7 @@
> GET /info/simplecov
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/simplecov/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/simplecov/GET/response
index a3e776cc99..937887d913 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/simplecov/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/simplecov/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sinatra/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sinatra/GET/request
index f442fa89f6..ecca8fb509 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sinatra/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sinatra/GET/request
@@ -1,7 +1,7 @@
> GET /info/sinatra
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sinatra/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sinatra/GET/response
index 75911724b2..ba5e920646 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sinatra/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sinatra/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/slop/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/slop/GET/request
index f4a1685ba2..2c8804ba12 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/slop/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/slop/GET/request
@@ -1,7 +1,7 @@
> GET /info/slop
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/slop/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/slop/GET/response
index 4596867818..296997c21d 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/slop/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/slop/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/spicycode-rcov/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/spicycode-rcov/GET/request
index c9686cae49..014f2a608c 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/spicycode-rcov/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/spicycode-rcov/GET/request
@@ -1,7 +1,7 @@
> GET /info/spicycode-rcov
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/spicycode-rcov/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/spicycode-rcov/GET/response
index 02f19182ab..89d39497bd 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/spicycode-rcov/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/spicycode-rcov/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/spoon/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/spoon/GET/request
index d1f41c369a..b53def174d 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/spoon/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/spoon/GET/request
@@ -1,7 +1,7 @@
> GET /info/spoon
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/spoon/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/spoon/GET/response
index 1f3ef61f03..28cfe5d961 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/spoon/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/spoon/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sprockets-rails/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sprockets-rails/GET/request
index 7b7ba15490..90f4e6ec50 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sprockets-rails/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sprockets-rails/GET/request
@@ -1,7 +1,7 @@
> GET /info/sprockets-rails
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sprockets-rails/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sprockets-rails/GET/response
index 7e3e31b886..31f4933d59 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sprockets-rails/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sprockets-rails/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sprockets/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sprockets/GET/request
index 06767f04a6..ced5d17d16 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sprockets/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sprockets/GET/request
@@ -1,7 +1,7 @@
> GET /info/sprockets
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sprockets/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sprockets/GET/response
index e4bc7d20e3..b52e192608 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sprockets/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sprockets/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/spruz/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/spruz/GET/request
index a9995940f5..3077aaece6 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/spruz/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/spruz/GET/request
@@ -1,7 +1,7 @@
> GET /info/spruz
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/spruz/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/spruz/GET/response
index 3bf25600b0..e9605e4607 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/spruz/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/spruz/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sqlite3/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sqlite3/GET/request
index 39542c09e8..39a3e7e9a6 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sqlite3/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sqlite3/GET/request
@@ -1,7 +1,7 @@
> GET /info/sqlite3
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sqlite3/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sqlite3/GET/response
index efc03a2679..c1bb2e82e2 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sqlite3/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sqlite3/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/syntax/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/syntax/GET/request
index 462e2bd29b..9ca2d29a72 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/syntax/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/syntax/GET/request
@@ -1,7 +1,7 @@
> GET /info/syntax
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/syntax/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/syntax/GET/response
index afa8ce7387..a35611e00d 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/syntax/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/syntax/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sys-admin/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sys-admin/GET/request
index 4ce082dcaa..657fc83cf5 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sys-admin/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sys-admin/GET/request
@@ -1,7 +1,7 @@
> GET /info/sys-admin
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sys-admin/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sys-admin/GET/response
index 249397108b..e737d33abb 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sys-admin/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/sys-admin/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tenderlove-frex/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tenderlove-frex/GET/request
index 39f37ebdf3..b76a25fdbf 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tenderlove-frex/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tenderlove-frex/GET/request
@@ -1,7 +1,7 @@
> GET /info/tenderlove-frex
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tenderlove-frex/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tenderlove-frex/GET/response
index 53e2fb263e..89f6e3eaf8 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tenderlove-frex/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tenderlove-frex/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/term-ansicolor/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/term-ansicolor/GET/request
index 23c9c82fcf..f47f06a940 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/term-ansicolor/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/term-ansicolor/GET/request
@@ -1,7 +1,7 @@
> GET /info/term-ansicolor
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/term-ansicolor/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/term-ansicolor/GET/response
index 9baf5c0838..be1ac03ee9 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/term-ansicolor/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/term-ansicolor/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/termios/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/termios/GET/request
index 17087a36e1..639aebc904 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/termios/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/termios/GET/request
@@ -1,7 +1,7 @@
> GET /info/termios
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/termios/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/termios/GET/response
index ed5ff907da..239da575a9 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/termios/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/termios/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/terrapin/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/terrapin/GET/request
new file mode 100644
index 0000000000..e53c5c2f25
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/terrapin/GET/request
@@ -0,0 +1,7 @@
+> GET /info/terrapin
+> accept-encoding: gzip
+> accept: */*
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 7053ae03c762ac3b
+> connection: keep-alive
+> keep-alive: 30
+> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/terrapin/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/terrapin/GET/response
new file mode 100644
index 0000000000..da51b8a668
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/terrapin/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/test-spec/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/test-spec/GET/request
index 1d2d581583..7b545d01bd 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/test-spec/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/test-spec/GET/request
@@ -1,7 +1,7 @@
> GET /info/test-spec
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/test-spec/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/test-spec/GET/response
index 4c95e0f607..e9d742ca97 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/test-spec/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/test-spec/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/test-unit/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/test-unit/GET/request
index 92b85c1751..6179f1a057 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/test-unit/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/test-unit/GET/request
@@ -1,7 +1,7 @@
> GET /info/test-unit
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/test-unit/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/test-unit/GET/response
index bb27d58d78..c6d818b3b8 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/test-unit/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/test-unit/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/text-format/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/text-format/GET/request
index 3a8cbe23e1..b7ce7aa045 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/text-format/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/text-format/GET/request
@@ -1,7 +1,7 @@
> GET /info/text-format
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/text-format/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/text-format/GET/response
index f1c0e296e5..e72afeb4e9 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/text-format/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/text-format/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/text-hyphen/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/text-hyphen/GET/request
index 5aa85a177c..ad1d0ac22d 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/text-hyphen/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/text-hyphen/GET/request
@@ -1,7 +1,7 @@
> GET /info/text-hyphen
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/text-hyphen/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/text-hyphen/GET/response
index 415db7ffb8..18f93920cc 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/text-hyphen/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/text-hyphen/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thin/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thin/GET/request
index ce6a7c8e8e..a5e99e6137 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thin/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thin/GET/request
@@ -1,7 +1,7 @@
> GET /info/thin
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thin/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thin/GET/response
index 2816f819c1..8c78eb80c6 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thin/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thin/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thor/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thor/GET/request
index 413597fd9d..ab4c8d801b 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thor/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thor/GET/request
@@ -1,7 +1,7 @@
> GET /info/thor
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thor/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thor/GET/response
index e7ffff2c35..55fb0868a8 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thor/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thor/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thoughtbot-shoulda/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thoughtbot-shoulda/GET/request
index b420081022..7fe1b6b562 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thoughtbot-shoulda/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thoughtbot-shoulda/GET/request
@@ -1,7 +1,7 @@
> GET /info/thoughtbot-shoulda
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 6d5397ce7f8b26e0
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 7053ae03c762ac3b
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thoughtbot-shoulda/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thoughtbot-shoulda/GET/response
index f9e7a1a93d..0df8733ceb 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thoughtbot-shoulda/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thoughtbot-shoulda/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thread_safe/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thread_safe/GET/request
index f5f0fffab3..19ed10e6ad 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thread_safe/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thread_safe/GET/request
@@ -1,7 +1,7 @@
> GET /info/thread_safe
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thread_safe/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thread_safe/GET/response
index aea7453992..8def3f4c92 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thread_safe/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/thread_safe/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tilt/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tilt/GET/request
index 039aa0341f..349d34b503 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tilt/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tilt/GET/request
@@ -1,7 +1,7 @@
> GET /info/tilt
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tilt/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tilt/GET/response
index 2345ec0b21..a3534c757f 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tilt/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tilt/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/timers/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/timers/GET/request
index 2fc37f3a88..05c93bdfec 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/timers/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/timers/GET/request
@@ -1,7 +1,7 @@
> GET /info/timers
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/timers/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/timers/GET/response
index e86a9276f5..ccd3c27476 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/timers/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/timers/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tins/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tins/GET/request
index be1d206beb..e002e5c739 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tins/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tins/GET/request
@@ -1,7 +1,7 @@
> GET /info/tins
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tins/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tins/GET/response
index b115ddbd57..b80ad70d4a 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tins/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tins/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tlsmail/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tlsmail/GET/request
index 56ebce0f3f..9e1db47da6 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tlsmail/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tlsmail/GET/request
@@ -1,7 +1,7 @@
> GET /info/tlsmail
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tlsmail/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tlsmail/GET/response
index ecd321ccbc..854b67c2d3 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tlsmail/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tlsmail/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tool/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tool/GET/request
index a8492ade82..ec6d9fe4fb 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tool/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tool/GET/request
@@ -1,7 +1,7 @@
> GET /info/tool
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tool/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tool/GET/response
index 634d8a43da..b6e87943d2 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tool/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tool/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/treetop/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/treetop/GET/request
index 52f2db382f..d9119a3bc7 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/treetop/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/treetop/GET/request
@@ -1,7 +1,7 @@
> GET /info/treetop
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/treetop/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/treetop/GET/response
index 7c41530d1c..5f621e1e13 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/treetop/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/treetop/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/trollop/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/trollop/GET/request
index 224cab6988..477fc975f6 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/trollop/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/trollop/GET/request
@@ -1,7 +1,7 @@
> GET /info/trollop
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/trollop/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/trollop/GET/response
index 0b27048b76..0b65bbd195 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/trollop/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/trollop/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tzinfo/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tzinfo/GET/request
index 0175216dd1..927d90bd8e 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tzinfo/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tzinfo/GET/request
@@ -1,7 +1,7 @@
> GET /info/tzinfo
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tzinfo/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tzinfo/GET/response
index 53f6c4697b..237de4cc23 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tzinfo/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/tzinfo/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/uber/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/uber/GET/request
index 9fe5b0c30a..e42f62d4cd 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/uber/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/uber/GET/request
@@ -1,7 +1,7 @@
> GET /info/uber
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/uber/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/uber/GET/response
index eba3bd402e..f2ce8d1e30 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/uber/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/uber/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/unf/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/unf/GET/request
index f67c99558f..ebaa275a9b 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/unf/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/unf/GET/request
@@ -1,7 +1,7 @@
> GET /info/unf
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/unf/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/unf/GET/response
index ffc37964aa..76dda92f2b 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/unf/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/unf/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/unf_ext/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/unf_ext/GET/request
index 77598fe741..46de08b182 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/unf_ext/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/unf_ext/GET/request
@@ -1,7 +1,7 @@
> GET /info/unf_ext
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/unf_ext/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/unf_ext/GET/response
index df21493ce7..2812985ff2 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/unf_ext/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/unf_ext/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/unicode-display_width/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/unicode-display_width/GET/request
index 9d4f27056b..ef24952b56 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/unicode-display_width/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/unicode-display_width/GET/request
@@ -1,7 +1,7 @@
> GET /info/unicode-display_width
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/unicode-display_width/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/unicode-display_width/GET/response
index 4c6e844651..f5d3584685 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/unicode-display_width/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/unicode-display_width/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/uuidtools/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/uuidtools/GET/request
index 5daed37793..ca921a1154 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/uuidtools/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/uuidtools/GET/request
@@ -1,7 +1,7 @@
> GET /info/uuidtools
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9138760e40ab97c9
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/uuidtools/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/uuidtools/GET/response
index dce91487b9..0f437fe432 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/uuidtools/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/uuidtools/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/vegas/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/vegas/GET/request
index f22bf57945..43948bae45 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/vegas/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/vegas/GET/request
@@ -1,7 +1,7 @@
> GET /info/vegas
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/install options/retry,path,disable_shared_gems,spec_run,plugins,trampoline_disable d59b382d069fc94f
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/install options/retry,no_install,path,spec_run 4001db3dbc9e7104
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/vegas/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/vegas/GET/response
index c927a24960..b61a5b21b1 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/vegas/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/vegas/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/virtus/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/virtus/GET/request
index 858ceea38d..6e4e2b68b9 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/virtus/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/virtus/GET/request
@@ -1,7 +1,7 @@
> GET /info/virtus
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 53c83f3e5793993c
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/virtus/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/virtus/GET/response
index 5f4a979efb..b140cefd4f 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/virtus/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/virtus/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/weakling/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/weakling/GET/request
index f6a7eb9098..2f843ae2bf 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/weakling/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/weakling/GET/request
@@ -1,7 +1,7 @@
> GET /info/weakling
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/weakling/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/weakling/GET/response
index 6bb2bd7f81..2b6e8cbafc 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/weakling/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/weakling/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/websocket-driver/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/websocket-driver/GET/request
index 06463439e0..c3ce4ab6e9 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/websocket-driver/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/websocket-driver/GET/request
@@ -1,7 +1,7 @@
> GET /info/websocket-driver
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/websocket-driver/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/websocket-driver/GET/response
index 3e008063cf..3ce805da65 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/websocket-driver/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/websocket-driver/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/websocket-extensions/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/websocket-extensions/GET/request
index 4757f24824..da7778cc41 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/websocket-extensions/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/websocket-extensions/GET/request
@@ -1,7 +1,7 @@
> GET /info/websocket-extensions
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/websocket-extensions/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/websocket-extensions/GET/response
index 82d7d627ef..1ee5deb61e 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/websocket-extensions/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/websocket-extensions/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/websocket/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/websocket/GET/request
index 45eaa04e55..b27d36daf0 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/websocket/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/websocket/GET/request
@@ -1,7 +1,7 @@
> GET /info/websocket
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/websocket/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/websocket/GET/response
index 12f2851eb4..3353f782cb 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/websocket/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/websocket/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32-api/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32-api/GET/request
index 9d47c2709b..a3bc6bacda 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32-api/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32-api/GET/request
@@ -1,7 +1,7 @@
> GET /info/win32-api
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32-api/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32-api/GET/response
index 0949fa6bd6..387e0aa16b 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32-api/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32-api/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32-dir/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32-dir/GET/request
index 6a11013349..20af4069c7 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32-dir/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32-dir/GET/request
@@ -1,7 +1,7 @@
> GET /info/win32-dir
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32-dir/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32-dir/GET/response
index e3ef8912a4..433cfa497b 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32-dir/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32-dir/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32-security/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32-security/GET/request
index d89f956691..99f1c55b97 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32-security/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32-security/GET/request
@@ -1,7 +1,7 @@
> GET /info/win32-security
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32-security/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32-security/GET/response
index bb0c9a7e36..33a50775fb 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32-security/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32-security/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32console/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32console/GET/request
index 37acaa6088..5e35b5eca4 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32console/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32console/GET/request
@@ -1,7 +1,7 @@
> GET /info/win32console
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32console/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32console/GET/response
index 521817fcfc..57e39baa89 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32console/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/win32console/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/windows-api/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/windows-api/GET/request
index 30402b17e0..bf18b53ee1 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/windows-api/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/windows-api/GET/request
@@ -1,7 +1,7 @@
> GET /info/windows-api
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/windows-api/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/windows-api/GET/response
index a5f9ab5106..37a8110ec8 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/windows-api/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/windows-api/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/windows-pr/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/windows-pr/GET/request
index 31c1180ac7..c7a88b5ead 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/windows-pr/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/windows-pr/GET/request
@@ -1,7 +1,7 @@
> GET /info/windows-pr
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/windows-pr/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/windows-pr/GET/response
index da32f51343..6e44b07c29 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/windows-pr/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/windows-pr/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/xpath/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/xpath/GET/request
index 5cc409d8db..9842d78085 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/xpath/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/xpath/GET/request
@@ -1,7 +1,7 @@
> GET /info/xpath
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/lock options/spec_run 9d9d3e8c8762d996
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/xpath/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/xpath/GET/response
index 07edc592e7..1d9f171853 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/xpath/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/info/xpath/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/versions/GET/request b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/versions/GET/request
index ec73805dff..aba35a7fae 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/versions/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/versions/GET/request
@@ -1,7 +1,7 @@
> GET /versions
> accept-encoding: gzip
> accept: */*
-> user-agent: bundler/1.15.0.pre.2 rubygems/2.6.11 ruby/2.4.1 (x86_64-apple-darwin16.5.0) command/lock options/spec_run,plugins,trampoline_disable 7edfb7e0938d0c35
+> user-agent: bundler/2.0.0.dev rubygems/3.1.0.pre1 ruby/2.6.1 (x86_64-pc-linux-gnu) command/ options/inline,spec_run,gemfile 2b245065a74de07f
> connection: keep-alive
> keep-alive: 30
> host: index.rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/versions/GET/response b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/versions/GET/response
index 0a46b96850..b691a401ca 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/versions/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/index.rubygems.org/versions/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/activesupport-3.2.12.gem/GET/response b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/activesupport-3.2.12.gem/GET/response
index 7690c1c76d..f1faae50b0 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/activesupport-3.2.12.gem/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/activesupport-3.2.12.gem/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/activesupport-3.2.22.5.gem/GET/response b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/activesupport-3.2.22.5.gem/GET/response
index 3659fabd5f..3988e693d3 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/activesupport-3.2.22.5.gem/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/activesupport-3.2.22.5.gem/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/bundler-1.12.3.gem/GET/response b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/bundler-1.12.3.gem/GET/response
deleted file mode 100644
index 8a5dc75d9e..0000000000
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/bundler-1.12.3.gem/GET/response
+++ /dev/null
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/gems/bundler-1.12.3.gem/GET/request b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/concurrent-ruby-1.1.4.gem/GET/request
index 230892854c..ed9d94f1be 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/gems/bundler-1.12.3.gem/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/concurrent-ruby-1.1.4.gem/GET/request
@@ -1,7 +1,7 @@
-> GET /gems/bundler-1.12.3.gem
+> GET /gems/concurrent-ruby-1.1.4.gem
> accept-encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
> accept: */*
> user-agent: Ruby
> connection: keep-alive
> keep-alive: 30
-> host: api.rubygems.org \ No newline at end of file
+> host: rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/concurrent-ruby-1.1.4.gem/GET/response b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/concurrent-ruby-1.1.4.gem/GET/response
new file mode 100644
index 0000000000..8e399c4708
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/concurrent-ruby-1.1.4.gem/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/diff-lcs-1.3.gem/GET/response b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/diff-lcs-1.3.gem/GET/response
index 908888f595..9a7f4ec4cd 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/diff-lcs-1.3.gem/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/diff-lcs-1.3.gem/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/faker-1.1.2.gem/GET/response b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/faker-1.1.2.gem/GET/response
index 19bf053db5..b173c41d39 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/faker-1.1.2.gem/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/faker-1.1.2.gem/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/i18n-0.6.11.gem/GET/response b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/i18n-0.6.11.gem/GET/response
index 0253208389..6ff4240791 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/i18n-0.6.11.gem/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/i18n-0.6.11.gem/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/i18n-0.8.1.gem/GET/response b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/i18n-0.8.1.gem/GET/response
deleted file mode 100644
index e746a6b73d..0000000000
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/i18n-0.8.1.gem/GET/response
+++ /dev/null
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/i18n-0.8.1.gem/GET/request b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/i18n-0.9.5.gem/GET/request
index 04e800510b..3ac549de64 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/i18n-0.8.1.gem/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/i18n-0.9.5.gem/GET/request
@@ -1,4 +1,4 @@
-> GET /gems/i18n-0.8.1.gem
+> GET /gems/i18n-0.9.5.gem
> accept-encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
> accept: */*
> user-agent: Ruby
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/i18n-0.9.5.gem/GET/response b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/i18n-0.9.5.gem/GET/response
new file mode 100644
index 0000000000..4dbd55135c
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/i18n-0.9.5.gem/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/mono_logger-1.1.0.gem/GET/response b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/mono_logger-1.1.0.gem/GET/response
index 3e1edd9559..35cf30df71 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/mono_logger-1.1.0.gem/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/mono_logger-1.1.0.gem/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/multi_json-1.12.1.gem/GET/response b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/multi_json-1.12.1.gem/GET/response
deleted file mode 100644
index 3a5565f9e0..0000000000
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/multi_json-1.12.1.gem/GET/response
+++ /dev/null
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/multi_json-1.12.1.gem/GET/request b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/multi_json-1.13.1.gem/GET/request
index fa8e059e91..c383e3cd0b 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/multi_json-1.12.1.gem/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/multi_json-1.13.1.gem/GET/request
@@ -1,4 +1,4 @@
-> GET /gems/multi_json-1.12.1.gem
+> GET /gems/multi_json-1.13.1.gem
> accept-encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
> accept: */*
> user-agent: Ruby
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/multi_json-1.13.1.gem/GET/response b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/multi_json-1.13.1.gem/GET/response
new file mode 100644
index 0000000000..d035fd023d
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/multi_json-1.13.1.gem/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/bundler-1.12.3.gem/GET/request b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/mustermann-1.0.3.gem/GET/request
index af03dfd189..bb59c7a10c 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/bundler-1.12.3.gem/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/mustermann-1.0.3.gem/GET/request
@@ -1,4 +1,4 @@
-> GET /gems/bundler-1.12.3.gem
+> GET /gems/mustermann-1.0.3.gem
> accept-encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
> accept: */*
> user-agent: Ruby
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/mustermann-1.0.3.gem/GET/response b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/mustermann-1.0.3.gem/GET/response
new file mode 100644
index 0000000000..4158b2a54f
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/mustermann-1.0.3.gem/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-1.0.1.gem/GET/response b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-1.0.1.gem/GET/response
index 3c461eee58..5022f9b573 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-1.0.1.gem/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-1.0.1.gem/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-1.6.5.gem/GET/response b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-1.6.5.gem/GET/response
deleted file mode 100644
index 81fbf129bb..0000000000
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-1.6.5.gem/GET/response
+++ /dev/null
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-2.0.1.gem/GET/response b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-2.0.1.gem/GET/response
deleted file mode 100644
index 4e2fc2b8cd..0000000000
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-2.0.1.gem/GET/response
+++ /dev/null
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/specs.4.8.gz/GET/request b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-2.0.6.gem/GET/request
index 94f2b68688..da6fab8771 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/api.rubygems.org/specs.4.8.gz/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-2.0.6.gem/GET/request
@@ -1,7 +1,7 @@
-> GET /specs.4.8.gz
+> GET /gems/rack-2.0.6.gem
> accept-encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
> accept: */*
> user-agent: Ruby
> connection: keep-alive
> keep-alive: 30
-> host: api.rubygems.org \ No newline at end of file
+> host: rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-2.0.6.gem/GET/response b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-2.0.6.gem/GET/response
new file mode 100644
index 0000000000..99e0bbc1cd
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-2.0.6.gem/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-protection-1.5.3.gem/GET/request b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-protection-1.5.3.gem/GET/request
deleted file mode 100644
index 03a85b2308..0000000000
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-protection-1.5.3.gem/GET/request
+++ /dev/null
@@ -1,7 +0,0 @@
-> GET /gems/rack-protection-1.5.3.gem
-> accept-encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
-> accept: */*
-> user-agent: Ruby
-> connection: keep-alive
-> keep-alive: 30
-> host: rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-protection-1.5.3.gem/GET/response b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-protection-1.5.3.gem/GET/response
deleted file mode 100644
index 5753f9f8c6..0000000000
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-protection-1.5.3.gem/GET/response
+++ /dev/null
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-protection-2.0.5.gem/GET/request b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-protection-2.0.5.gem/GET/request
new file mode 100644
index 0000000000..76fd9283e0
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-protection-2.0.5.gem/GET/request
@@ -0,0 +1,7 @@
+> GET /gems/rack-protection-2.0.5.gem
+> accept-encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
+> accept: */*
+> user-agent: Ruby
+> connection: keep-alive
+> keep-alive: 30
+> host: rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-protection-2.0.5.gem/GET/response b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-protection-2.0.5.gem/GET/response
new file mode 100644
index 0000000000..24dc106683
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-protection-2.0.5.gem/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/redis-3.3.3.gem/GET/request b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/redis-3.3.3.gem/GET/request
deleted file mode 100644
index 7d5ad5ad23..0000000000
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/redis-3.3.3.gem/GET/request
+++ /dev/null
@@ -1,7 +0,0 @@
-> GET /gems/redis-3.3.3.gem
-> accept-encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
-> accept: */*
-> user-agent: Ruby
-> connection: keep-alive
-> keep-alive: 30
-> host: rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/redis-3.3.3.gem/GET/response b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/redis-3.3.3.gem/GET/response
deleted file mode 100644
index 375d86d9d7..0000000000
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/redis-3.3.3.gem/GET/response
+++ /dev/null
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-2.0.1.gem/GET/request b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/redis-4.1.0.gem/GET/request
index ed63e334fa..4c0afb57f7 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-2.0.1.gem/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/redis-4.1.0.gem/GET/request
@@ -1,4 +1,4 @@
-> GET /gems/rack-2.0.1.gem
+> GET /gems/redis-4.1.0.gem
> accept-encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
> accept: */*
> user-agent: Ruby
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/redis-4.1.0.gem/GET/response b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/redis-4.1.0.gem/GET/response
new file mode 100644
index 0000000000..6d81d6fab4
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/redis-4.1.0.gem/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/redis-namespace-1.5.3.gem/GET/request b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/redis-namespace-1.5.3.gem/GET/request
deleted file mode 100644
index f928e29dd3..0000000000
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/redis-namespace-1.5.3.gem/GET/request
+++ /dev/null
@@ -1,7 +0,0 @@
-> GET /gems/redis-namespace-1.5.3.gem
-> accept-encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
-> accept: */*
-> user-agent: Ruby
-> connection: keep-alive
-> keep-alive: 30
-> host: rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/redis-namespace-1.5.3.gem/GET/response b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/redis-namespace-1.5.3.gem/GET/response
deleted file mode 100644
index eab27de2e2..0000000000
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/redis-namespace-1.5.3.gem/GET/response
+++ /dev/null
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/redis-namespace-1.6.0.gem/GET/request b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/redis-namespace-1.6.0.gem/GET/request
new file mode 100644
index 0000000000..b942155d2d
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/redis-namespace-1.6.0.gem/GET/request
@@ -0,0 +1,7 @@
+> GET /gems/redis-namespace-1.6.0.gem
+> accept-encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
+> accept: */*
+> user-agent: Ruby
+> connection: keep-alive
+> keep-alive: 30
+> host: rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/redis-namespace-1.6.0.gem/GET/response b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/redis-namespace-1.6.0.gem/GET/response
new file mode 100644
index 0000000000..376f1f2eca
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/redis-namespace-1.6.0.gem/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/resque-1.24.1.gem/GET/response b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/resque-1.24.1.gem/GET/response
index 33d38e4c6c..462217ab00 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/resque-1.24.1.gem/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/resque-1.24.1.gem/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/resque-scheduler-2.2.0.gem/GET/response b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/resque-scheduler-2.2.0.gem/GET/response
index 455dc8bb01..9adea527b3 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/resque-scheduler-2.2.0.gem/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/resque-scheduler-2.2.0.gem/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rufus-scheduler-2.0.24.gem/GET/response b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rufus-scheduler-2.0.24.gem/GET/response
index 72b58e69dd..89d63b5641 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rufus-scheduler-2.0.24.gem/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rufus-scheduler-2.0.24.gem/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/sinatra-1.4.8.gem/GET/request b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/sinatra-1.4.8.gem/GET/request
deleted file mode 100644
index ee93e5d100..0000000000
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/sinatra-1.4.8.gem/GET/request
+++ /dev/null
@@ -1,7 +0,0 @@
-> GET /gems/sinatra-1.4.8.gem
-> accept-encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
-> accept: */*
-> user-agent: Ruby
-> connection: keep-alive
-> keep-alive: 30
-> host: rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/sinatra-1.4.8.gem/GET/response b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/sinatra-1.4.8.gem/GET/response
deleted file mode 100644
index c3aa1333c6..0000000000
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/sinatra-1.4.8.gem/GET/response
+++ /dev/null
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/sinatra-2.0.5.gem/GET/request b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/sinatra-2.0.5.gem/GET/request
new file mode 100644
index 0000000000..16692fad88
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/sinatra-2.0.5.gem/GET/request
@@ -0,0 +1,7 @@
+> GET /gems/sinatra-2.0.5.gem
+> accept-encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
+> accept: */*
+> user-agent: Ruby
+> connection: keep-alive
+> keep-alive: 30
+> host: rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/sinatra-2.0.5.gem/GET/response b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/sinatra-2.0.5.gem/GET/response
new file mode 100644
index 0000000000..20ffc1b34d
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/sinatra-2.0.5.gem/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/thread_safe-0.3.6.gem/GET/request b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/thread_safe-0.3.6.gem/GET/request
deleted file mode 100644
index 51ddc098ae..0000000000
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/thread_safe-0.3.6.gem/GET/request
+++ /dev/null
@@ -1,7 +0,0 @@
-> GET /gems/thread_safe-0.3.6.gem
-> accept-encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
-> accept: */*
-> user-agent: Ruby
-> connection: keep-alive
-> keep-alive: 30
-> host: rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/thread_safe-0.3.6.gem/GET/response b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/thread_safe-0.3.6.gem/GET/response
deleted file mode 100644
index 9007f04014..0000000000
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/thread_safe-0.3.6.gem/GET/response
+++ /dev/null
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/tilt-2.0.7.gem/GET/request b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/tilt-2.0.7.gem/GET/request
deleted file mode 100644
index c329c7b4c2..0000000000
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/tilt-2.0.7.gem/GET/request
+++ /dev/null
@@ -1,7 +0,0 @@
-> GET /gems/tilt-2.0.7.gem
-> accept-encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
-> accept: */*
-> user-agent: Ruby
-> connection: keep-alive
-> keep-alive: 30
-> host: rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/tilt-2.0.7.gem/GET/response b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/tilt-2.0.7.gem/GET/response
deleted file mode 100644
index 46add52ee8..0000000000
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/tilt-2.0.7.gem/GET/response
+++ /dev/null
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-1.6.5.gem/GET/request b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/tilt-2.0.9.gem/GET/request
index 4ae9745db3..6c0f46874e 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/rack-1.6.5.gem/GET/request
+++ b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/tilt-2.0.9.gem/GET/request
@@ -1,4 +1,4 @@
-> GET /gems/rack-1.6.5.gem
+> GET /gems/tilt-2.0.9.gem
> accept-encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
> accept: */*
> user-agent: Ruby
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/tilt-2.0.9.gem/GET/response b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/tilt-2.0.9.gem/GET/response
new file mode 100644
index 0000000000..d6fc73c8f2
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/tilt-2.0.9.gem/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/tzinfo-1.2.3.gem/GET/request b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/tzinfo-1.2.3.gem/GET/request
deleted file mode 100644
index df7b05b346..0000000000
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/tzinfo-1.2.3.gem/GET/request
+++ /dev/null
@@ -1,7 +0,0 @@
-> GET /gems/tzinfo-1.2.3.gem
-> accept-encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
-> accept: */*
-> user-agent: Ruby
-> connection: keep-alive
-> keep-alive: 30
-> host: rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/tzinfo-1.2.3.gem/GET/response b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/tzinfo-1.2.3.gem/GET/response
deleted file mode 100644
index a64e2fda89..0000000000
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/tzinfo-1.2.3.gem/GET/response
+++ /dev/null
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/tzinfo-2.0.0.gem/GET/request b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/tzinfo-2.0.0.gem/GET/request
new file mode 100644
index 0000000000..a86d867d8e
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/tzinfo-2.0.0.gem/GET/request
@@ -0,0 +1,7 @@
+> GET /gems/tzinfo-2.0.0.gem
+> accept-encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
+> accept: */*
+> user-agent: Ruby
+> connection: keep-alive
+> keep-alive: 30
+> host: rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/tzinfo-2.0.0.gem/GET/response b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/tzinfo-2.0.0.gem/GET/response
new file mode 100644
index 0000000000..6a4228bd9e
--- /dev/null
+++ b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/tzinfo-2.0.0.gem/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/vegas-0.1.11.gem/GET/response b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/vegas-0.1.11.gem/GET/response
index b84b62a38c..0aaea9e31c 100644
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/vegas-0.1.11.gem/GET/response
+++ b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/gems/vegas-0.1.11.gem/GET/response
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/quick/Marshal.4.8/bundler-1.12.3.gemspec.rz/GET/request b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/quick/Marshal.4.8/bundler-1.12.3.gemspec.rz/GET/request
deleted file mode 100644
index ef6eab21ce..0000000000
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/quick/Marshal.4.8/bundler-1.12.3.gemspec.rz/GET/request
+++ /dev/null
@@ -1,7 +0,0 @@
-> GET /quick/Marshal.4.8/bundler-1.12.3.gemspec.rz
-> accept-encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
-> accept: */*
-> user-agent: Ruby
-> connection: keep-alive
-> keep-alive: 30
-> host: rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/quick/Marshal.4.8/bundler-1.12.3.gemspec.rz/GET/response b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/quick/Marshal.4.8/bundler-1.12.3.gemspec.rz/GET/response
deleted file mode 100644
index c2e8cb4bce..0000000000
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/quick/Marshal.4.8/bundler-1.12.3.gemspec.rz/GET/response
+++ /dev/null
Binary files differ
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/specs.4.8.gz/GET/request b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/specs.4.8.gz/GET/request
deleted file mode 100644
index ca0f179471..0000000000
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/specs.4.8.gz/GET/request
+++ /dev/null
@@ -1,7 +0,0 @@
-> GET /specs.4.8.gz
-> accept-encoding: gzip;q=1.0,deflate;q=0.6,identity;q=0.3
-> accept: */*
-> user-agent: Ruby
-> connection: keep-alive
-> keep-alive: 30
-> host: rubygems.org \ No newline at end of file
diff --git a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/specs.4.8.gz/GET/response b/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/specs.4.8.gz/GET/response
deleted file mode 100644
index 95277c9b51..0000000000
--- a/spec/support/artifice/vcr_cassettes/realworld/rubygems.org/specs.4.8.gz/GET/response
+++ /dev/null
Binary files differ
diff --git a/spec/support/builders.rb b/spec/support/builders.rb
index 188b1d3eb7..33a81f6f65 100644
--- a/spec/support/builders.rb
+++ b/spec/support/builders.rb
@@ -40,7 +40,7 @@ module Spec
build_gem "rails", "2.3.2" do |s|
s.executables = "rails"
- s.add_dependency "rake", "10.0.2"
+ s.add_dependency "rake", "12.3.2"
s.add_dependency "actionpack", "2.3.2"
s.add_dependency "activerecord", "2.3.2"
s.add_dependency "actionmailer", "2.3.2"
@@ -649,7 +649,7 @@ module Spec
`git config user.email "lol@wut.com"`
`git config user.name "lolwut"`
`git config commit.gpgsign false`
- `git commit -m 'OMG INITIAL COMMIT'`
+ `git commit -m "OMG INITIAL COMMIT"`
end
end
end
diff --git a/spec/support/code_climate.rb b/spec/support/code_climate.rb
deleted file mode 100644
index a15442cabe..0000000000
--- a/spec/support/code_climate.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-# frozen_string_literal: true
-
-module Spec
- module CodeClimate
- def self.setup
- require "codeclimate-test-reporter"
- ::CodeClimate::TestReporter.start
- configure_exclusions
- rescue LoadError
- # it's fine if CodeClimate isn't set up
- nil
- end
-
- def self.configure_exclusions
- SimpleCov.start do
- add_filter "/bin/"
- add_filter "/lib/bundler/man/"
- add_filter "/lib/bundler/vendor/"
- add_filter "/man/"
- add_filter "/pkg/"
- add_filter "/spec/"
- add_filter "/tmp/"
- end
- end
- end
-end
diff --git a/spec/support/command_execution.rb b/spec/support/command_execution.rb
index 556285ac52..cec531d6c3 100644
--- a/spec/support/command_execution.rb
+++ b/spec/support/command_execution.rb
@@ -27,14 +27,6 @@ module Spec
@stdboth ||= [stderr, stdout].join("\n").strip
end
- def bundler_err
- if Bundler::VERSION.start_with?("1.")
- stdout
- else
- stderr
- end
- end
-
def to_s_verbose
[
to_s,
diff --git a/spec/support/helpers.rb b/spec/support/helpers.rb
index af6b1c556a..478fe60822 100644
--- a/spec/support/helpers.rb
+++ b/spec/support/helpers.rb
@@ -41,19 +41,25 @@ module Spec
end
def out
- last_command.stdboth
+ last_command.stdout
end
def err
last_command.stderr
end
- def exitstatus
- last_command.exitstatus
+ MAJOR_DEPRECATION = /^\[DEPRECATED\]\s*/.freeze
+
+ def err_without_deprecations
+ err.gsub(/#{MAJOR_DEPRECATION}.+[\n]?/, "")
end
- def bundle_update_requires_all?
- Bundler::VERSION.start_with?("1.") ? nil : true
+ def deprecations
+ err.split("\n").select {|l| l =~ MAJOR_DEPRECATION }.join("\n").split(MAJOR_DEPRECATION)
+ end
+
+ def exitstatus
+ last_command.exitstatus
end
def in_app_root(&blk)
@@ -71,7 +77,7 @@ module Spec
def run(cmd, *args)
opts = args.last.is_a?(Hash) ? args.pop : {}
groups = args.map(&:inspect).join(", ")
- setup = "require 'rubygems' ; require 'bundler' ; Bundler.setup(#{groups})\n"
+ setup = "require 'bundler' ; Bundler.setup(#{groups})\n"
ruby(setup + cmd, opts)
end
bang :run
@@ -131,8 +137,6 @@ module Spec
load_path << spec
load_path_str = "-I#{load_path.join(File::PATH_SEPARATOR)}"
- env = env.map {|k, v| "#{k}='#{v}'" }.join(" ")
-
args = options.map do |k, v|
case v
when nil
@@ -146,13 +150,13 @@ module Spec
end
end.join
- cmd = "#{env} #{sudo} #{Gem.ruby} #{load_path_str} #{requires_str} #{bundle_bin} #{cmd}#{args}"
- sys_exec(cmd) {|i, o, thr| yield i, o, thr if block_given? }
+ cmd = "#{sudo} #{Gem.ruby} #{load_path_str} #{requires_str} #{bundle_bin} #{cmd}#{args}"
+ sys_exec(cmd, env) {|i, o, thr| yield i, o, thr if block_given? }
end
bang :bundle
def forgotten_command_line_options(options)
- remembered = Bundler::VERSION.split(".", 2).first == "1"
+ remembered = Bundler::VERSION.split(".", 2).first == "2"
options = options.map do |k, v|
k = Array(k)[remembered ? 0 : -1]
v = '""' if v && v.to_s.empty?
@@ -161,9 +165,9 @@ module Spec
return Hash[options] if remembered
options.each do |k, v|
if v.nil?
- bundle! "config --delete #{k}"
+ bundle! "config unset #{k}"
else
- bundle! "config --local #{k} #{v}"
+ bundle! "config set --local #{k} #{v}"
end
end
{}
@@ -216,10 +220,12 @@ module Spec
"#{Gem.ruby} -S #{ENV["GEM_PATH"]}/bin/rake"
end
- def sys_exec(cmd)
+ def sys_exec(cmd, env = {})
command_execution = CommandExecution.new(cmd.to_s, Dir.pwd)
- Open3.popen3(cmd.to_s) do |stdin, stdout, stderr, wait_thr|
+ env = env.map {|k, v| [k.to_s, v.to_s] }.to_h # convert env keys and values to string
+
+ Open3.popen3(env, cmd.to_s) do |stdin, stdout, stderr, wait_thr|
yield stdin, stdout, wait_thr if block_given?
stdin.close
@@ -258,18 +264,22 @@ module Spec
end
def gemfile(*args)
- if args.empty?
+ contents = args.shift
+
+ if contents.nil?
File.open("Gemfile", "r", &:read)
else
- create_file("Gemfile", *args)
+ create_file("Gemfile", contents, *args)
end
end
def lockfile(*args)
- if args.empty?
+ contents = args.shift
+
+ if contents.nil?
File.open("Gemfile.lock", "r", &:read)
else
- create_file("Gemfile.lock", *args)
+ create_file("Gemfile.lock", normalize_uri_file(contents), *args)
end
end
@@ -308,13 +318,17 @@ module Spec
gem_repo = options.fetch(:gem_repo) { gem_repo1 }
gems.each do |g|
path = if g == :bundler
- Dir.chdir(root) { gem_command! :build, gemspec.to_s }
- bundler_path = if ruby_core?
- root + "lib/bundler-#{Bundler::VERSION}.gem"
+ if ruby_core?
+ spec = Gem::Specification.load(gemspec.to_s)
+ spec.bindir = "libexec"
+ File.open(root.join("bundler.gemspec").to_s, "w") {|f| f.write spec.to_ruby }
+ Dir.chdir(root) { gem_command! :build, root.join("bundler.gemspec").to_s }
+ FileUtils.rm(root.join("bundler.gemspec"))
else
- root + "bundler-#{Bundler::VERSION}.gem"
+ Dir.chdir(root) { gem_command! :build, gemspec.to_s }
end
- elsif g.to_s =~ %r{\A/.*\.gem\z}
+ bundler_path = root + "bundler-#{Bundler::VERSION}.gem"
+ elsif g.to_s =~ %r{\A(?:[A-Z]:)?/.*\.gem\z}
g
else
"#{gem_repo}/gems/#{g}.gem"
@@ -425,7 +439,7 @@ module Spec
ENV["GEM_PATH"] = system_gem_path.to_s
gems.each do |gem|
- gem_command :install, "--no-rdoc --no-ri #{gem}"
+ gem_command! :install, "--no-document #{gem}"
end
return unless block_given?
begin
@@ -565,7 +579,7 @@ module Spec
tries = 0
sleep 0.5
TCPSocket.new(host, port)
- rescue => e
+ rescue StandardError => e
raise(e) if tries > (seconds * 2)
tries += 1
retry
@@ -575,7 +589,7 @@ module Spec
port = 21_453
begin
port += 1 while TCPSocket.new("127.0.0.1", port)
- rescue
+ rescue StandardError
false
end
port
diff --git a/spec/support/less_than_proc.rb b/spec/support/less_than_proc.rb
deleted file mode 100644
index 68d37b44c9..0000000000
--- a/spec/support/less_than_proc.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-# frozen_string_literal: true
-
-class LessThanProc < Proc
- attr_accessor :present
-
- def self.with(present)
- provided = Gem::Version.new(present.dup)
- new do |required|
- if required.is_a?(String) && required =~ /[=><~]/
- !Gem::Requirement.new(required).satisfied_by?(provided)
- else
- provided < Gem::Version.new(required)
- end
- end.tap {|l| l.present = present }
- end
-
- def inspect
- "\"=< #{present}\""
- end
-end
diff --git a/spec/support/matchers.rb b/spec/support/matchers.rb
index 8e17be3a02..5d1a6a7919 100644
--- a/spec/support/matchers.rb
+++ b/spec/support/matchers.rb
@@ -60,36 +60,6 @@ module Spec
end
end
- MAJOR_DEPRECATION = /^\[DEPRECATED FOR 2\.0\]\s*/
-
- RSpec::Matchers.define :lack_errors do
- diffable
- match do |actual|
- actual.gsub(/#{MAJOR_DEPRECATION}.+[\n]?/, "") == ""
- end
- end
-
- RSpec::Matchers.define :eq_err do |expected|
- diffable
- match do |actual|
- actual.gsub(/#{MAJOR_DEPRECATION}.+[\n]?/, "") == expected
- end
- end
-
- RSpec::Matchers.define :have_major_deprecation do |expected|
- diffable
- match do |actual|
- deprecations = actual.split(MAJOR_DEPRECATION)
-
- return !expected.nil? if deprecations.size <= 1
- return true if expected.nil?
-
- deprecations.any? do |d|
- !d.empty? && values_match?(expected, d.strip)
- end
- end
- end
-
RSpec::Matchers.define :have_dep do |*args|
dep = Bundler::Dependency.new(*args)
@@ -128,6 +98,14 @@ module Spec
end
end
+ RSpec::Matchers.define :be_well_formed do
+ match(&:empty?)
+
+ failure_message do |actual|
+ actual.join("\n")
+ end
+ end
+
define_compound_matcher :read_as, [exist] do |file_contents|
diffable
@@ -152,11 +130,10 @@ module Spec
version_const = name == "bundler" ? "Bundler::VERSION" : Spec::Builders.constantize(name)
begin
run! "require '#{name}.rb'; puts #{version_const}", *groups
- rescue => e
+ rescue StandardError => e
next "#{name} is not installed:\n#{indent(e)}"
end
- last_command.stdout.gsub!(/#{MAJOR_DEPRECATION}.*$/, "")
- actual_version, actual_platform = last_command.stdout.strip.split(/\s+/, 2)
+ actual_version, actual_platform = out.strip.split(/\s+/, 2)
unless Gem::Version.new(actual_version) == Gem::Version.new(version)
next "#{name} was expected to be at version #{version} but was #{actual_version}"
end
@@ -167,11 +144,10 @@ module Spec
begin
source_const = "#{Spec::Builders.constantize(name)}_SOURCE"
run! "require '#{name}/source'; puts #{source_const}", *groups
- rescue
+ rescue StandardError
next "#{name} does not have a source defined:\n#{indent(e)}"
end
- last_command.stdout.gsub!(/#{MAJOR_DEPRECATION}.*$/, "")
- unless last_command.stdout.strip == source
+ unless out.strip == source
next "Expected #{name} (#{version}) to be installed from `#{source}`, was actually from `#{out}`"
end
end.compact
@@ -193,12 +169,12 @@ module Spec
puts "WIN"
end
R
- rescue => e
+ rescue StandardError => e
next "checking for #{name} failed:\n#{e}"
end
- next if last_command.stdout == "WIN"
+ next if out == "WIN"
next "expected #{name} to not be installed, but it was" if version.nil?
- if Gem::Version.new(last_command.stdout) == Gem::Version.new(version)
+ if Gem::Version.new(out) == Gem::Version.new(version)
next "expected #{name} (#{version}) not to be installed, but it was"
end
end.compact
@@ -218,7 +194,7 @@ module Spec
RSpec::Matchers.alias_matcher :include_gem, :include_gems
def have_lockfile(expected)
- read_as(strip_whitespace(expected))
+ read_as(normalize_uri_file(strip_whitespace(expected)))
end
def plugin_should_be_installed(*names)
@@ -236,7 +212,7 @@ module Spec
end
def lockfile_should_be(expected)
- expect(bundled_app("Gemfile.lock")).to read_as(normalize_uri_file(strip_whitespace(expected)))
+ expect(bundled_app("Gemfile.lock")).to have_lockfile(expected)
end
def gemfile_should_be(expected)
diff --git a/spec/support/path.rb b/spec/support/path.rb
index f85fbf330f..dc4b3bb6eb 100644
--- a/spec/support/path.rb
+++ b/spec/support/path.rb
@@ -9,7 +9,7 @@ module Spec
end
def gemspec
- @gemspec ||= root.join(ruby_core? ? "lib/bundler.gemspec" : "bundler.gemspec")
+ @gemspec ||= root.join(ruby_core? ? "lib/bundler/bundler.gemspec" : "bundler.gemspec")
end
def bindir
@@ -29,7 +29,7 @@ module Spec
end
def default_bundle_path(*path)
- if Bundler::VERSION.split(".").first.to_i < 2
+ if Bundler::VERSION.split(".").first.to_i < 3
system_gem_path(*path)
else
bundled_app(*[".bundle", ENV.fetch("BUNDLER_SPEC_RUBY_ENGINE", Gem.ruby_engine), Gem::ConfigMap[:ruby_version], *path].compact)
diff --git a/spec/support/platforms.rb b/spec/support/platforms.rb
index 39040a61bd..caac7734bf 100644
--- a/spec/support/platforms.rb
+++ b/spec/support/platforms.rb
@@ -100,13 +100,12 @@ module Spec
9999
end
- def lockfile_platforms(*platforms)
- platforms = local_platforms if platforms.empty?
- platforms.map(&:to_s).sort.join("\n ")
+ def lockfile_platforms
+ local_platforms.map(&:to_s).sort.join("\n ")
end
def local_platforms
- if Bundler::VERSION.split(".").first.to_i > 1
+ if Bundler.feature_flag.specific_platform?
[local, specific_local_platform]
else
[local]
diff --git a/spec/support/requirement_checker.rb b/spec/support/requirement_checker.rb
new file mode 100644
index 0000000000..d8f5fd5e5f
--- /dev/null
+++ b/spec/support/requirement_checker.rb
@@ -0,0 +1,11 @@
+# frozen_string_literal: true
+
+class RequirementChecker < Proc
+ def self.against(present)
+ provided = Gem::Version.new(present)
+
+ new do |required|
+ !Gem::Requirement.new(required).satisfied_by?(provided)
+ end
+ end
+end
diff --git a/spec/support/rubygems_ext.rb b/spec/support/rubygems_ext.rb
index 7a69d713cb..2f3d252865 100644
--- a/spec/support/rubygems_ext.rb
+++ b/spec/support/rubygems_ext.rb
@@ -1,31 +1,25 @@
# frozen_string_literal: true
require "rubygems/user_interaction"
-require "support/path" unless defined?(Spec::Path)
+require "support/path"
+require "fileutils"
module Spec
module Rubygems
DEPS = begin
- deps = {
- # rack 2.x requires Ruby version >= 2.2.2.
+ {
# artifice doesn't support rack 2.x now.
- # TODO: revert to `< 2` once https://github.com/rack/rack/issues/1168 is
- # addressed
- "rack" => "1.6.6",
- # rack-test 0.7.0 dropped 1.8.7 support
- # https://github.com/rack-test/rack-test/issues/193#issuecomment-314230318
- "rack-test" => "< 0.7.0",
+ "rack" => "< 2.0",
+ "rack-test" => "~> 1.1",
"artifice" => "~> 0.6.0",
"compact_index" => "~> 0.11.0",
"sinatra" => "~> 1.4.7",
# Rake version has to be consistent for tests to pass
- "rake" => "10.0.2",
- # 3.0.0 breaks 1.9.2 specs
- "builder" => "2.1.2",
+ "rake" => "12.3.2",
+ "builder" => "~> 3.2",
+ # ruby-graphviz is used by the viz tests
+ "ruby-graphviz" => nil,
}
- # ruby-graphviz is used by the viz tests
- deps["ruby-graphviz"] = nil if RUBY_VERSION >= "1.9.3"
- deps
end
def self.setup
@@ -54,12 +48,11 @@ module Spec
def self.install_gems(gems)
reqs, no_reqs = gems.partition {|_, req| !req.nil? && !req.split(" ").empty? }
- # TODO: remove when we drop ruby 1.8.7-2.2.2 support
- reqs = reqs.sort_by {|name, _| name == "rack" ? 0 : 1 }.sort_by {|name, _| name =~ /rack/ ? 0 : 1 }
no_reqs.map!(&:first)
reqs.map! {|name, req| "'#{name}:#{req}'" }
deps = reqs.concat(no_reqs).join(" ")
- cmd = "#{Gem.ruby} -S gem install #{deps} --no-document --conservative"
+ gem = Spec::Path.ruby_core? ? ENV["BUNDLE_GEM"] : "#{Gem.ruby} -S gem"
+ cmd = "#{gem} install #{deps} --no-document --conservative"
puts cmd
system(cmd) || raise("Installing gems #{deps} for the tests to use failed!")
end
diff --git a/spec/update/gemfile_spec.rb b/spec/update/gemfile_spec.rb
index f59f3a2d32..6c47c254cd 100644
--- a/spec/update/gemfile_spec.rb
+++ b/spec/update/gemfile_spec.rb
@@ -9,7 +9,7 @@ RSpec.describe "bundle update" do
G
bundle! :install, :gemfile => bundled_app("NotGemfile")
- bundle! :update, :gemfile => bundled_app("NotGemfile"), :all => bundle_update_requires_all?
+ bundle! :update, :gemfile => bundled_app("NotGemfile"), :all => true
# Specify BUNDLE_GEMFILE for `the_bundle`
# to retrieve the proper Gemfile
@@ -25,12 +25,12 @@ RSpec.describe "bundle update" do
gem 'rack'
G
- bundle "config --local gemfile #{bundled_app("NotGemfile")}"
+ bundle "config set --local gemfile #{bundled_app("NotGemfile")}"
bundle! :install
end
it "uses the gemfile to update" do
- bundle! "update", :all => bundle_update_requires_all?
+ bundle! "update", :all => true
bundle "list"
expect(out).to include("rack (1.0.0)")
@@ -39,28 +39,11 @@ RSpec.describe "bundle update" do
it "uses the gemfile while in a subdirectory" do
bundled_app("subdir").mkpath
Dir.chdir(bundled_app("subdir")) do
- bundle! "update", :all => bundle_update_requires_all?
+ bundle! "update", :all => true
bundle "list"
expect(out).to include("rack (1.0.0)")
end
end
end
-
- context "with prefer_gems_rb set" do
- before { bundle! "config prefer_gems_rb true" }
-
- it "prefers gems.rb to Gemfile" do
- create_file("gems.rb", "gem 'bundler'")
- create_file("Gemfile", "raise 'wrong Gemfile!'")
-
- bundle! :install
- bundle! :update, :all => bundle_update_requires_all?
-
- expect(bundled_app("gems.rb")).to be_file
- expect(bundled_app("Gemfile.lock")).not_to be_file
-
- expect(the_bundle).to include_gem "bundler #{Bundler::VERSION}"
- end
- end
end
diff --git a/spec/update/gems/post_install_spec.rb b/spec/update/gems/post_install_spec.rb
index 2fb3547806..f6b7f39d0b 100644
--- a/spec/update/gems/post_install_spec.rb
+++ b/spec/update/gems/post_install_spec.rb
@@ -10,7 +10,7 @@ RSpec.describe "bundle update" do
gem 'thin'
G
- bundle! "config #{config}" if config
+ bundle! "config set #{config}" if config
bundle! :install
end
@@ -52,7 +52,7 @@ RSpec.describe "bundle update" do
gem 'thin'
G
- bundle! :update, :all => bundle_update_requires_all?
+ bundle! :update, :all => true
end
it_behaves_like "a post-install message outputter"
@@ -67,7 +67,7 @@ RSpec.describe "bundle update" do
gem 'thin'
G
- bundle! :update, :all => bundle_update_requires_all?
+ bundle! :update, :all => true
end
it_behaves_like "a post-install message outputter"
diff --git a/spec/update/git_spec.rb b/spec/update/git_spec.rb
index b4cbb79434..bc230a3575 100644
--- a/spec/update/git_spec.rb
+++ b/spec/update/git_spec.rb
@@ -16,7 +16,7 @@ RSpec.describe "bundle update" do
s.write "lib/foo.rb", "FOO = '1.1'"
end
- bundle "update", :all => bundle_update_requires_all?
+ bundle "update", :all => true
expect(the_bundle).to include_gems "foo 1.1"
end
@@ -88,7 +88,7 @@ RSpec.describe "bundle update" do
gem "foo", "1.0", :git => "#{lib_path("foo_two")}"
G
- expect(err).to lack_errors
+ expect(err).to be_empty
expect(out).to include("Fetching #{lib_path}/foo_two")
expect(out).to include("Bundle complete!")
end
@@ -111,7 +111,7 @@ RSpec.describe "bundle update" do
gem 'foo', :git => "#{@remote.path}", :tag => "fubar"
G
- bundle "update", :all => bundle_update_requires_all?
+ bundle "update", :all => true
expect(exitstatus).to eq(0) if exitstatus
end
@@ -191,8 +191,8 @@ RSpec.describe "bundle update" do
lib_path("foo-1.0").join(".git").rmtree
- bundle :update, :all => bundle_update_requires_all?
- expect(last_command.bundler_err).to include(lib_path("foo-1.0").to_s).
+ bundle :update, :all => true
+ expect(err).to include(lib_path("foo-1.0").to_s).
and match(/Git error: command `git fetch.+has failed/)
end
@@ -208,7 +208,7 @@ RSpec.describe "bundle update" do
gem "rack", :git => "#{lib_path("rack-0.8")}", :branch => "master"
G
- bundle %(config local.rack #{lib_path("local-rack")})
+ bundle %(config set local.rack #{lib_path("local-rack")})
bundle "update rack"
expect(out).to include("Bundle updated!")
end
@@ -233,7 +233,7 @@ RSpec.describe "bundle update" do
rails!
G
- bundle "update", :all => bundle_update_requires_all?
+ bundle "update", :all => true
expect(out).to include("Using rails 3.0 (was 2.3.2) from #{lib_path("rails")} (at master@#{revision_for(lib_path("rails"))[0..6]})")
end
end
@@ -299,7 +299,7 @@ RSpec.describe "bundle update" do
G
end
- it "the --source flag updates version of gems that were originally pulled in by the source", :bundler => "< 2" do
+ it "the --source flag updates version of gems that were originally pulled in by the source", :bundler => "< 3" do
spec_lines = lib_path("bar/foo.gemspec").read.split("\n")
spec_lines[5] = "s.version = '2.0'"
@@ -335,7 +335,7 @@ RSpec.describe "bundle update" do
G
end
- it "the --source flag updates version of gems that were originally pulled in by the source", :bundler => "2" do
+ it "the --source flag updates version of gems that were originally pulled in by the source", :bundler => "3" do
spec_lines = lib_path("bar/foo.gemspec").read.split("\n")
spec_lines[5] = "s.version = '2.0'"
@@ -348,17 +348,17 @@ RSpec.describe "bundle update" do
bundle "update --source bar"
lockfile_should_be <<-G
- GEM
- remote: file://localhost#{gem_repo2}/
- specs:
- rack (1.0.0)
-
GIT
remote: #{@git.path}
revision: #{ref}
specs:
foo (2.0)
+ GEM
+ remote: file://localhost#{gem_repo2}/
+ specs:
+ rack (1.0.0)
+
PLATFORMS
#{lockfile_platforms}
diff --git a/spec/update/redownload_spec.rb b/spec/update/redownload_spec.rb
index 5a739c51b3..39edac0902 100644
--- a/spec/update/redownload_spec.rb
+++ b/spec/update/redownload_spec.rb
@@ -11,34 +11,24 @@ RSpec.describe "bundle update" do
describe "with --force" do
it "shows a deprecation when single flag passed", :bundler => 2 do
bundle! "update rack --force"
- expect(out).to include "[DEPRECATED FOR 2.0] The `--force` option has been renamed to `--redownload`"
+ expect(err).to include "[DEPRECATED] The `--force` option has been renamed to `--redownload`"
end
it "shows a deprecation when multiple flags passed", :bundler => 2 do
bundle! "update rack --no-color --force"
- expect(out).to include "[DEPRECATED FOR 2.0] The `--force` option has been renamed to `--redownload`"
- end
-
- it "does not show a deprecation when single flag passed", :bundler => "< 2" do
- bundle! "update rack --force"
- expect(out).not_to include "[DEPRECATED FOR 2.0] The `--force` option has been renamed to `--redownload`"
- end
-
- it "does not show a deprecation when multiple flags passed", :bundler => "< 2" do
- bundle! "update rack --no-color --force"
- expect(out).not_to include "[DEPRECATED FOR 2.0] The `--force` option has been renamed to `--redownload`"
+ expect(err).to include "[DEPRECATED] The `--force` option has been renamed to `--redownload`"
end
end
describe "with --redownload" do
it "does not show a deprecation when single flag passed" do
bundle! "update rack --redownload"
- expect(out).not_to include "[DEPRECATED FOR 2.0] The `--force` option has been renamed to `--redownload`"
+ expect(err).not_to include "[DEPRECATED] The `--force` option has been renamed to `--redownload`"
end
it "does not show a deprecation when single multiple flags passed" do
bundle! "update rack --no-color --redownload"
- expect(out).not_to include "[DEPRECATED FOR 2.0] The `--force` option has been renamed to `--redownload`"
+ expect(err).not_to include "[DEPRECATED] The `--force` option has been renamed to `--redownload`"
end
end
end
diff --git a/task/build_metadata.rake b/task/build_metadata.rake
index f899562b46..55ffaf4ba7 100644
--- a/task/build_metadata.rake
+++ b/task/build_metadata.rake
@@ -1,5 +1,9 @@
# frozen_string_literal: true
+def bundler_spec
+ Gem::Specification.load("bundler.gemspec")
+end
+
def write_build_metadata(build_metadata)
build_metadata_file = "lib/bundler/build_metadata.rb"
diff --git a/task/release.rake b/task/release.rake
index 3a48c1d255..29fdc1dcb3 100644
--- a/task/release.rake
+++ b/task/release.rake
@@ -4,9 +4,33 @@ require "bundler/gem_tasks"
task :build => ["build_metadata", "man:build", "generate_files"] do
Rake::Task["build_metadata:clean"].tap(&:reenable).real_invoke
end
-task :release => ["man:require", "man:build", "release:verify_github", "build_metadata"]
+task :release => ["man:build", "release:verify_files", "release:verify_github", "build_metadata"]
namespace :release do
+ task :verify_files do
+ git_list = IO.popen("git ls-files -z", &:read).split("\x0").select {|f| f.match(%r{^(lib|exe)/}) }
+ git_list += %w[CHANGELOG.md LICENSE.md README.md bundler.gemspec]
+ git_list += Dir.glob("man/**/*")
+
+ gem_list = Gem::Specification.load("bundler.gemspec").files
+
+ extra_files = gem_list.to_set - git_list.to_set
+
+ error_msg = <<~MSG
+
+ You intend to ship some files with the gem that are not generated man pages
+ nor source control files. Please review the extra list of files and try
+ again:
+
+ #{extra_files.to_a.join("\n ")}
+
+ MSG
+
+ raise error_msg if extra_files.any?
+
+ puts "The file list is correct for a release."
+ end
+
def gh_api_post(opts)
gem "netrc", "~> 0.11.0"
require "netrc"