summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.azure-pipelines/patch_readline.sh3
-rw-r--r--.azure-pipelines/rbreadline.diff41
-rw-r--r--.azure-pipelines/steps.yml39
-rw-r--r--.github/FUNDING.yml1
-rw-r--r--.github/config.yml9
-rw-r--r--.github/welcome_message.md7
-rw-r--r--.rspec1
-rw-r--r--.rubocop.yml809
-rw-r--r--.rubocop_todo.yml492
-rw-r--r--.travis.yml66
-rw-r--r--CHANGELOG.md1153
-rw-r--r--CONTRIBUTING.md17
-rw-r--r--LICENSE.md37
-rw-r--r--README.md7
-rw-r--r--Rakefile400
-rw-r--r--azure-pipelines.yml7
-rwxr-xr-xbin/rake17
-rwxr-xr-xbin/rspec13
-rwxr-xr-xbin/rubocop15
-rwxr-xr-xbin/with_rubygems20
-rw-r--r--bundler.gemspec22
-rw-r--r--doc/POLICIES.md77
-rw-r--r--doc/TROUBLESHOOTING.md2
-rw-r--r--doc/contributing/BUG_TRIAGE.md13
-rw-r--r--doc/contributing/HOW_YOU_CAN_HELP.md4
-rw-r--r--doc/contributing/README.md43
-rw-r--r--doc/development/PULL_REQUESTS.md4
-rw-r--r--doc/development/RELEASING.md9
-rw-r--r--doc/development/SETUP.md24
-rw-r--r--doc/playbooks/RELEASING.md147
-rw-r--r--doc/playbooks/TEAM_CHANGES.md43
-rwxr-xr-xexe/bundle6
-rwxr-xr-xexe/bundle_ruby60
-rw-r--r--lib/bundler.rb185
-rw-r--r--lib/bundler/capistrano.rb6
-rw-r--r--lib/bundler/cli.rb225
-rw-r--r--lib/bundler/cli/add.rb43
-rw-r--r--lib/bundler/cli/cache.rb2
-rw-r--r--lib/bundler/cli/common.rb21
-rw-r--r--lib/bundler/cli/config.rb247
-rw-r--r--lib/bundler/cli/console.rb4
-rw-r--r--lib/bundler/cli/doctor.rb6
-rw-r--r--lib/bundler/cli/exec.rb11
-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.rb6
-rw-r--r--lib/bundler/cli/issue.rb2
-rw-r--r--lib/bundler/cli/outdated.rb16
-rw-r--r--lib/bundler/cli/package.rb4
-rw-r--r--lib/bundler/cli/plugin.rb11
-rw-r--r--lib/bundler/cli/pristine.rb2
-rw-r--r--lib/bundler/cli/show.rb2
-rw-r--r--lib/bundler/cli/update.rb44
-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.rb6
-rw-r--r--lib/bundler/definition.rb36
-rw-r--r--lib/bundler/dependency.rb14
-rw-r--r--lib/bundler/deployment.rb4
-rw-r--r--lib/bundler/dsl.rb58
-rw-r--r--lib/bundler/env.rb9
-rw-r--r--lib/bundler/feature_flag.rb11
-rw-r--r--lib/bundler/fetcher.rb20
-rw-r--r--lib/bundler/fetcher/compact_index.rb38
-rw-r--r--lib/bundler/fetcher/dependency.rb2
-rw-r--r--lib/bundler/fetcher/downloader.rb3
-rw-r--r--lib/bundler/fetcher/index.rb3
-rw-r--r--lib/bundler/friendly_errors.rb9
-rw-r--r--lib/bundler/gem_helper.rb4
-rw-r--r--lib/bundler/gem_helpers.rb2
-rw-r--r--lib/bundler/gem_tasks.rb2
-rw-r--r--lib/bundler/gem_version_promoter.rb6
-rw-r--r--lib/bundler/graph.rb4
-rw-r--r--lib/bundler/injector.rb4
-rw-r--r--lib/bundler/inline.rb37
-rw-r--r--lib/bundler/installer.rb19
-rw-r--r--lib/bundler/installer/gem_installer.rb6
-rw-r--r--lib/bundler/installer/parallel_installer.rb8
-rw-r--r--lib/bundler/lazy_specification.rb4
-rw-r--r--lib/bundler/lockfile_parser.rb34
-rw-r--r--lib/bundler/match_platform.rb2
-rw-r--r--lib/bundler/plugin.rb37
-rw-r--r--lib/bundler/plugin/api.rb2
-rw-r--r--lib/bundler/plugin/api/source.rb2
-rw-r--r--lib/bundler/plugin/index.rb12
-rw-r--r--lib/bundler/plugin/installer.rb43
-rw-r--r--lib/bundler/psyched_yaml.rb2
-rw-r--r--lib/bundler/resolver.rb96
-rw-r--r--lib/bundler/resolver/spec_group.rb4
-rw-r--r--lib/bundler/retry.rb4
-rw-r--r--lib/bundler/ruby_version.rb4
-rw-r--r--lib/bundler/rubygems_ext.rb75
-rw-r--r--lib/bundler/rubygems_gem_installer.rb2
-rw-r--r--lib/bundler/rubygems_integration.rb510
-rw-r--r--lib/bundler/runtime.rb11
-rw-r--r--lib/bundler/settings.rb62
-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.rb10
-rw-r--r--lib/bundler/source/git.rb21
-rw-r--r--lib/bundler/source/git/git_proxy.rb54
-rw-r--r--lib/bundler/source/metadata.rb9
-rw-r--r--lib/bundler/source/path.rb10
-rw-r--r--lib/bundler/source/rubygems.rb16
-rw-r--r--lib/bundler/source_list.rb21
-rw-r--r--lib/bundler/spec_set.rb1
-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/README.md.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.rb6
-rw-r--r--lib/bundler/ui/rg_proxy.rb2
-rw-r--r--lib/bundler/ui/shell.rb8
-rw-r--r--lib/bundler/uri_credentials_filter.rb2
-rw-r--r--lib/bundler/vendor/fileutils/lib/fileutils.rb2
-rw-r--r--lib/bundler/vendor/molinillo/lib/molinillo.rb12
-rw-r--r--lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb4
-rw-r--r--lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb2
-rw-r--r--lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb2
-rw-r--r--lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb2
-rw-r--r--lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb2
-rw-r--r--lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb12
-rw-r--r--lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb2
-rw-r--r--lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb2
-rw-r--r--lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb38
-rw-r--r--lib/bundler/vendor/molinillo/lib/molinillo/errors.rb2
-rw-r--r--lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb8
-rw-r--r--lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb4
-rw-r--r--lib/bundler/vendor/thor/lib/thor.rb2
-rw-r--r--lib/bundler/vendor/thor/lib/thor/actions.rb14
-rw-r--r--lib/bundler/vendor/thor/lib/thor/actions/create_file.rb2
-rw-r--r--lib/bundler/vendor/thor/lib/thor/actions/create_link.rb2
-rw-r--r--lib/bundler/vendor/thor/lib/thor/actions/directory.rb2
-rw-r--r--lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb2
-rw-r--r--lib/bundler/vendor/thor/lib/thor/base.rb26
-rw-r--r--lib/bundler/vendor/thor/lib/thor/group.rb2
-rw-r--r--lib/bundler/vendor/thor/lib/thor/line_editor.rb4
-rw-r--r--lib/bundler/vendor/thor/lib/thor/parser.rb8
-rw-r--r--lib/bundler/vendor/thor/lib/thor/runner.rb8
-rw-r--r--lib/bundler/vendor/thor/lib/thor/shell.rb6
-rw-r--r--lib/bundler/vendor/thor/lib/thor/shell/color.rb2
-rw-r--r--lib/bundler/vendor/thor/lib/thor/shell/html.rb2
-rw-r--r--lib/bundler/vendor/thor/lib/thor/util.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.rb4
-rw-r--r--lib/bundler/version.rb21
-rw-r--r--lib/bundler/version_ranges.rb56
-rw-r--r--lib/bundler/vlad.rb6
-rw-r--r--lib/bundler/worker.rb4
-rw-r--r--lib/bundler/yaml_serializer.rb7
-rw-r--r--man/bundle-add.ronn8
-rw-r--r--man/bundle-config.ronn71
-rw-r--r--man/bundle-install.ronn13
-rw-r--r--man/bundle-update.ronn6
-rw-r--r--man/bundle.ronn2
-rw-r--r--spec/bundler/bundler_spec.rb84
-rw-r--r--spec/bundler/cli_spec.rb26
-rw-r--r--spec/bundler/definition_spec.rb49
-rw-r--r--spec/bundler/dsl_spec.rb53
-rw-r--r--spec/bundler/env_spec.rb49
-rw-r--r--spec/bundler/fetcher/compact_index_spec.rb9
-rw-r--r--spec/bundler/fetcher/downloader_spec.rb9
-rw-r--r--spec/bundler/fetcher/index_spec.rb23
-rw-r--r--spec/bundler/friendly_errors_spec.rb19
-rw-r--r--spec/bundler/gem_helper_spec.rb2
-rw-r--r--spec/bundler/installer/gem_installer_spec.rb15
-rw-r--r--spec/bundler/mirror_spec.rb4
-rw-r--r--spec/bundler/plugin/events_spec.rb6
-rw-r--r--spec/bundler/plugin/installer_spec.rb35
-rw-r--r--spec/bundler/plugin_spec.rb23
-rw-r--r--spec/bundler/ruby_version_spec.rb10
-rw-r--r--spec/bundler/rubygems_integration_spec.rb22
-rw-r--r--spec/bundler/settings_spec.rb4
-rw-r--r--spec/bundler/shared_helpers_spec.rb20
-rw-r--r--spec/bundler/source/git/git_proxy_spec.rb32
-rw-r--r--spec/bundler/source/rubygems/remote_spec.rb24
-rw-r--r--spec/bundler/source_list_spec.rb16
-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.rb3
-rw-r--r--spec/bundler/version_ranges_spec.rb3
-rw-r--r--spec/cache/cache_path_spec.rb2
-rw-r--r--spec/cache/gems_spec.rb12
-rw-r--r--spec/cache/git_spec.rb10
-rw-r--r--spec/cache/path_spec.rb2
-rw-r--r--spec/commands/add_spec.rb58
-rw-r--r--spec/commands/binstubs_spec.rb98
-rw-r--r--spec/commands/check_spec.rb22
-rw-r--r--spec/commands/clean_spec.rb71
-rw-r--r--spec/commands/config_spec.rb237
-rw-r--r--spec/commands/console_spec.rb6
-rw-r--r--spec/commands/exec_spec.rb164
-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.rb10
-rw-r--r--spec/commands/install_spec.rb50
-rw-r--r--spec/commands/licenses_spec.rb11
-rw-r--r--spec/commands/list_spec.rb83
-rw-r--r--spec/commands/lock_spec.rb56
-rw-r--r--spec/commands/newgem_spec.rb72
-rw-r--r--spec/commands/open_spec.rb6
-rw-r--r--spec/commands/outdated_spec.rb66
-rw-r--r--spec/commands/package_spec.rb12
-rw-r--r--spec/commands/post_bundle_message_spec.rb (renamed from spec/install/post_bundle_message_spec.rb)12
-rw-r--r--spec/commands/pristine_spec.rb16
-rw-r--r--spec/commands/remove_spec.rb28
-rw-r--r--spec/commands/show_spec.rb103
-rw-r--r--spec/commands/update_spec.rb117
-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.rb19
-rw-r--r--spec/install/deploy_spec.rb126
-rw-r--r--spec/install/failure_spec.rb27
-rw-r--r--spec/install/gemfile/gemspec_spec.rb113
-rw-r--r--spec/install/gemfile/git_spec.rb206
-rw-r--r--spec/install/gemfile/groups_spec.rb8
-rw-r--r--spec/install/gemfile/lockfile_spec.rb2
-rw-r--r--spec/install/gemfile/path_spec.rb88
-rw-r--r--spec/install/gemfile/platform_spec.rb11
-rw-r--r--spec/install/gemfile/ruby_spec.rb2
-rw-r--r--spec/install/gemfile/sources_spec.rb198
-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.rb44
-rw-r--r--spec/install/gems/dependency_api_spec.rb26
-rw-r--r--spec/install/gems/flex_spec.rb12
-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.rb35
-rw-r--r--spec/install/gems/standalone_spec.rb22
-rw-r--r--spec/install/gems/sudo_spec.rb41
-rw-r--r--spec/install/gemspecs_spec.rb19
-rw-r--r--spec/install/global_cache_spec.rb10
-rw-r--r--spec/install/path_spec.rb83
-rw-r--r--spec/install/process_lock_spec.rb2
-rw-r--r--spec/install/redownload_spec.rb14
-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.rb341
-rw-r--r--spec/other/bundle_ruby_spec.rb155
-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.rb484
-rw-r--r--spec/other/platform_spec.rb16
-rw-r--r--spec/other/ssl_cert_spec.rb18
-rw-r--r--spec/plugins/command_spec.rb4
-rw-r--r--spec/plugins/install_spec.rb36
-rw-r--r--spec/plugins/list_spec.rb60
-rw-r--r--spec/plugins/source/example_spec.rb16
-rw-r--r--spec/quality_es_spec.rb70
-rw-r--r--spec/quality_spec.rb56
-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.rb61
-rw-r--r--spec/realworld/gemfile_source_header_spec.rb8
-rw-r--r--spec/realworld/mirror_probe_spec.rb22
-rw-r--r--spec/realworld/parallel_spec.rb12
-rw-r--r--spec/resolver/basic_spec.rb6
-rw-r--r--spec/runtime/executable_spec.rb17
-rw-r--r--spec/runtime/gem_tasks_spec.rb6
-rw-r--r--spec/runtime/inline_spec.rb44
-rw-r--r--spec/runtime/platform_spec.rb4
-rw-r--r--spec/runtime/require_spec.rb28
-rw-r--r--spec/runtime/setup_spec.rb172
-rw-r--r--spec/runtime/with_clean_env_spec.rb151
-rw-r--r--spec/runtime/with_unbundled_env_spec.rb262
-rw-r--r--spec/spec_helper.rb75
-rw-r--r--spec/support/artifice/compact_index.rb12
-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.rb5
-rw-r--r--spec/support/code_climate.rb26
-rw-r--r--spec/support/command_execution.rb8
-rw-r--r--spec/support/hax.rb2
-rw-r--r--spec/support/helpers.rb47
-rw-r--r--spec/support/indexes.rb4
-rw-r--r--spec/support/less_than_proc.rb20
-rw-r--r--spec/support/matchers.rb54
-rw-r--r--spec/support/path.rb2
-rw-r--r--spec/support/platforms.rb7
-rw-r--r--spec/support/requirement_checker.rb11
-rw-r--r--spec/support/rubygems_ext.rb37
-rw-r--r--spec/update/gemfile_spec.rb19
-rw-r--r--spec/update/gems/post_install_spec.rb2
-rw-r--r--spec/update/git_spec.rb18
-rw-r--r--spec/update/redownload_spec.rb16
-rw-r--r--task/build_metadata.rake8
-rw-r--r--task/release.rake48
1017 files changed, 7282 insertions, 7701 deletions
diff --git a/.azure-pipelines/patch_readline.sh b/.azure-pipelines/patch_readline.sh
new file mode 100644
index 0000000000..69bf661a1b
--- /dev/null
+++ b/.azure-pipelines/patch_readline.sh
@@ -0,0 +1,3 @@
+ruby_version=$(ruby -e 'puts RUBY_VERSION')
+
+git apply --ignore-space-change --ignore-whitespace '.azure-pipelines\rbreadline.diff' --directory="C:/hostedtoolcache/windows/Ruby/$ruby_version/x64/lib/ruby/site_ruby" --unsafe-paths
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..d23c52b584
--- /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: |
+ bash .azure-pipelines\patch_readline.sh
+ 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: |
+ 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/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 0000000000..be53aae226
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1 @@
+custom: https://rubytogether.org
diff --git a/.github/config.yml b/.github/config.yml
new file mode 100644
index 0000000000..2804985bfc
--- /dev/null
+++ b/.github/config.yml
@@ -0,0 +1,9 @@
+newPRWelcomeComment: |
+ Thanks for opening a pull request and helping make Bundler better! Someone from the Bundler team will take a look at your pull request shortly and leave any feedback. Please make sure that your pull request has tests for any changes or added functionality.
+
+ We use Travis CI to test and make sure your change works functionally and uses acceptable conventions, you can review the current progress of Travis CI in the PR status window below.
+
+ If you have any questions or concerns that you wish to ask, feel free to leave a comment in this PR or join our #bundler channel on [Slack](http://slack.bundler.io/).
+
+ For more information about contributing to the Bundler project feel free to review our [CONTRIBUTING](https://github.com/bundler/bundler/blob/master/doc/contributing/README.md) guide
+
diff --git a/.github/welcome_message.md b/.github/welcome_message.md
deleted file mode 100644
index faacb492e1..0000000000
--- a/.github/welcome_message.md
+++ /dev/null
@@ -1,7 +0,0 @@
-Thanks for opening a pull request and helping make Bundler better! Someone from the Bundler team will take a look at your pull request shortly and leave any feedback. Please make sure that your pull request has tests for any changes or added functionality.
-
-We use Travis CI to test and make sure your change works functionally and uses acceptable conventions, you can review the current progress of Travis CI in the PR status window below.
-
-If you have any questions or concerns that you wish to ask, feel free to leave a comment in this PR or join our #bundler channel on [Slack](http://slack.bundler.io/).
-
-For more information about contributing to the Bundler project feel free to review our [CONTRIBUTING](https://github.com/bundler/bundler/blob/master/CONTRIBUTING.md) guide
diff --git a/.rspec b/.rspec
index 146d615488..a4aa3ddbf0 100644
--- a/.rspec
+++ b/.rspec
@@ -2,3 +2,4 @@
--color
--warnings
--require spec_helper
+--order random
diff --git a/.rubocop.yml b/.rubocop.yml
index cbdb8f8d41..01088346f3 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -1,140 +1,805 @@
-inherit_from:
- - .rubocop_todo.yml
+require: rubocop-performance
AllCops:
+ 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/Loop:
+ Enabled: true
-Lint/UnusedMethodArgument:
- Enabled: false
+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
+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/IndentAssignment:
+ Enabled: true
+
+Layout/IndentFirstArrayElement:
+ Enabled: true
+ EnforcedStyle: consistent
+
+Layout/IndentFirstHashElement:
+ Enabled: true
+ EnforcedStyle: special_inside_parentheses
+
+Layout/IndentFirstArgument:
+ Enabled: true
+
+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/RegexpMatch:
+ Enabled: true
+
+Performance/ReverseEach:
+ 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/EachWithObject:
- Enabled: false
+Style/IfWithSemicolon:
+ Enabled: true
-Style/SpecialGlobalVars:
- Enabled: false
+Style/InfiniteLoop:
+ Enabled: true
-Style/TrailingCommaInArguments:
- Enabled: false
+Style/LambdaCall:
+ Enabled: true
-Performance/FlatMap:
- Enabled: false
+Style/LineEndConcatenation:
+ Enabled: true
-Security/YAMLLoad:
- Enabled: false
+Style/MethodCallWithoutArgsParentheses:
+ Enabled: true
-# Metrics
+Style/MethodDefParentheses:
+ Enabled: true
-# We've chosen to use Rubocop only for style, and not for complexity or quality checks.
-Metrics/ClassLength:
- Enabled: false
+Style/MinMax:
+ Enabled: true
-Metrics/ModuleLength:
- Enabled: false
+Style/MixinGrouping:
+ Enabled: true
-Metrics/MethodLength:
- Enabled: false
+Style/MultilineIfThen:
+ Enabled: true
-Metrics/BlockNesting:
- Enabled: false
+Style/MultilineMemoization:
+ Enabled: true
-Metrics/AbcSize:
- Enabled: false
+Style/MultilineTernaryOperator:
+ Enabled: true
-Metrics/CyclomaticComplexity:
- Enabled: false
+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/ParenthesesAroundCondition:
+ Enabled: true
+
+Style/PercentLiteralDelimiters:
+ Enabled: true
+
+Style/PercentQLiterals:
+ Enabled: true
+
+Style/PreferredHashMethods:
+ Enabled: true
+
+Style/Proc:
+ Enabled: true
+
+Style/RandomWithOffset:
+ Enabled: true
+
+Style/RedundantBegin:
+ Enabled: true
+
+Style/RedundantConditional:
+ Enabled: true
+
+Style/RedundantException:
+ Enabled: true
+
+Style/RedundantParentheses:
+ Enabled: true
+
+Style/RedundantSelf:
+ Enabled: true
+
+Style/RedundantSortBy:
+ Enabled: true
+
+Style/RegexpLiteral:
+ Enabled: true
+
+Style/RescueModifier:
+ Enabled: true
+
+Style/RescueStandardError:
+ Enabled: true
+
+Style/Sample:
+ 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/Strip:
+ Enabled: true
+
+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 832870b8c5..0000000000
--- a/.rubocop_todo.yml
+++ /dev/null
@@ -1,492 +0,0 @@
-# This configuration was generated by
-# `rubocop --auto-gen-config`
-# on 2019-04-04 19:50:10 +1100 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: 2
-# Cop supports --auto-correct.
-Layout/EmptyLinesAroundExceptionHandlingKeywords:
- Exclude:
- - 'Rakefile'
-
-# Offense count: 10
-# Cop supports --auto-correct.
-# Configuration parameters: SupportedStyles, IndentationWidth.
-# SupportedStyles: special_inside_parentheses, consistent, align_brackets
-Layout/IndentArray:
- EnforcedStyle: consistent
-
-# Offense count: 46
-# 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: 1
-# Cop supports --auto-correct.
-# Configuration parameters: AllowForAlignment.
-Layout/SpaceAroundOperators:
- Exclude:
- - 'lib/bundler/retry.rb'
-
-# Offense count: 2
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, SupportedStyles, EnforcedStyleForEmptyBraces, SupportedStylesForEmptyBraces, SpaceBeforeBlockParameters.
-# SupportedStyles: space, no_space
-# SupportedStylesForEmptyBraces: space, no_space
-Layout/SpaceInsideBlockBraces:
- Exclude:
- - 'lib/bundler/installer/parallel_installer.rb'
-
-# Offense count: 30
-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: 1
-Lint/DuplicateMethods:
- Exclude:
- - 'lib/bundler/rubygems_ext.rb'
-
-# Offense count: 2
-Lint/EmptyWhen:
- Exclude:
- - 'lib/bundler/friendly_errors.rb'
- - 'spec/support/builders.rb'
-
-# Offense count: 4
-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: 14
-Lint/RescueWithoutErrorClass:
- Exclude:
- - 'Rakefile'
- - 'lib/bundler/friendly_errors.rb'
- - 'lib/bundler/installer.rb'
- - 'lib/bundler/resolver.rb'
- - 'lib/bundler/retry.rb'
- - 'spec/support/artifice/compact_index.rb'
- - 'spec/support/helpers.rb'
- - 'spec/support/matchers.rb'
- - 'task/release.rake'
-
-# 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: 1
-Lint/UselessAssignment:
- Exclude:
- - 'lib/bundler/index.rb'
-
-# Offense count: 1
-Lint/Void:
- Exclude:
- - 'lib/bundler/spec_set.rb'
-
-# Offense count: 2800
-# 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: 32
-# 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: 37
-Performance/UnfreezeString:
- Enabled: false
-
-# 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: 28
-# 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: 168
-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: 6
-# 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'
-
-# 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: 11
-# 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/support/sometimes.rb'
-
-# Offense count: 1
-# Cop supports --auto-correct.
-# Configuration parameters: MaxLineLength.
-Style/IfUnlessModifier:
- Exclude:
- - 'lib/bundler/dsl.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: 3
-# Cop supports --auto-correct.
-# Configuration parameters: Whitelist.
-# Whitelist: be, be_a, be_an, be_between, be_falsey, be_kind_of, be_instance_of, be_truthy, be_within, eq, eql, end_with, include, match, raise_error, respond_to, start_with
-Style/NestedParenthesizedCalls:
- Exclude:
- - 'lib/bundler/resolver.rb'
- - 'spec/commands/lock_spec.rb'
- - 'spec/runtime/setup_spec.rb'
-
-# Offense count: 6
-# Cop supports --auto-correct.
-# Configuration parameters: AutoCorrect, EnforcedStyle, SupportedStyles.
-# SupportedStyles: predicate, comparison
-Style/NumericPredicate:
- Exclude:
- - 'spec/**/*'
- - 'lib/bundler/cli/common.rb'
- - '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: 24
-# Cop supports --auto-correct.
-Style/RedundantFreeze:
- Exclude:
- - 'bin/bundle1'
- - 'bin/bundle2'
- - 'lib/bundler.rb'
- - 'lib/bundler/endpoint_specification.rb'
- - 'lib/bundler/environment_preserver.rb'
- - 'lib/bundler/index.rb'
- - 'lib/bundler/injector.rb'
- - 'lib/bundler/installer.rb'
- - 'lib/bundler/lockfile_generator.rb'
- - 'lib/bundler/lockfile_parser.rb'
- - 'lib/bundler/plugin.rb'
- - 'lib/bundler/resolver/spec_group.rb'
- - 'lib/bundler/source/path.rb'
- - 'spec/bundler/shared_helpers_spec.rb'
-
-# Offense count: 1
-# Cop supports --auto-correct.
-Style/RedundantParentheses:
- Exclude:
- - 'lib/bundler/cli/console.rb'
-
-# Offense count: 41
-# Cop supports --auto-correct.
-# Configuration parameters: ConvertCodeThatCanStartToReturnNil.
-Style/SafeNavigation:
- Enabled: false
-
-# Offense count: 57
-# Cop supports --auto-correct.
-# Configuration parameters: MinSize, SupportedStyles.
-# SupportedStyles: percent, brackets
-Style/SymbolArray:
- EnforcedStyle: brackets
-
-# Offense count: 2
-# Cop supports --auto-correct.
-# Configuration parameters: EnforcedStyle, SupportedStyles, AllowSafeAssignment.
-# SupportedStyles: require_parentheses, require_no_parentheses, require_parentheses_when_complex
-Style/TernaryParentheses:
- Exclude:
- - 'lib/bundler/cli/common.rb'
- - 'lib/bundler/gem_version_promoter.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 438f22202e..cff8821480 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -2,21 +2,22 @@ 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 override_version
- travis_retry rake man:build
- - travis_retry rake spec:rubygems:clone_rubygems_$RGV
-
-# temporary workaround for https://github.com/travis-ci/travis-ci/issues/8892
-group: deprecated-2017Q4
branches:
only:
- master
- - auto
+ - staging
+ - trying
- /.+-dev$/
- /.+-stable$/
+cache:
+ directories:
+ - tmp/rubocop
+
notifications:
slack:
on_success: change
@@ -24,52 +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.2
+ - 2.6.3
- 2.5.5
- - 2.4.5
- - 2.3.8
+ - 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.3 BUNDLER_SPEC_SUB_VERSION=3.0.0
- RGV=v3.0.3
-matrix:
+jobs:
include:
- # 3.x mode
- - rvm: 2.6.2
- env: RGV=v3.0.3 BUNDLER_SPEC_SUB_VERSION=3.0.0
- # Ruby 2.5, Rubygems 2.7 and up
- - rvm: 2.5.3
- env: RGV=v2.7.7
- # Ruby 2.4, Rubygems 2.6 and up
- - rvm: 2.4.5
+ - rvm: 2.6.3
+ script: rake rubocop
+ stage: linting
+ # Ruby 2.3 also tested in 2.x mode
+ - rvm: 2.3.8
+ env: RGV=master
+ stage: test
+ - rvm: 2.3.8
+ env: RGV=v3.0.3
+ stage: test
+ # Ruby 2.5, Rubygems 2.7
+ - rvm: 2.5.5
+ env: RGV=v2.7.9
+ stage: test
+ # Ruby 2.4, Rubygems 2.6
+ - rvm: 2.4.6
env: RGV=v2.6.14
- - rvm: 2.4.5
- env: RGV=v2.7.7
- # Ruby 2.3, Rubygems 2.5 and up
- - rvm: 2.3.7
+ stage: test
+ # Ruby 2.3, Rubygems 2.5
+ - rvm: 2.3.8
env: RGV=v2.5.2
- - rvm: 2.3.7
- env: RGV=v2.6.14
- - rvm: 2.3.7
- env: RGV=v2.7.7
+ 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
allow_failures:
- rvm: ruby-head
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 25df3babb4..4c3c61093c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -69,6 +69,21 @@ Breaking Changes:
Note: To upgrade your Gemfile to Bundler 2 you will need to run `bundle update --bundler`
+## 1.17.3 (2018-12-27)
+
+Bugfixes:
+
+ - Fix a Bundler error when installing gems on old versions of RubyGems ([#6839](https://github.com/bundler/bundler/issues/6839), @colby-swandale)
+ - Fix a rare issue where Bundler was removing itself after a `bundle clean` ([#6829](https://github.com/bundler/bundler/issues/6829), @colby-swandale)
+
+Documentation:
+
+ - Add entry for the `bundle remove` command to the main Bundler manual page
+
+## 1.17.2 (2018-12-11)
+
+ - Add compatibility for bundler merge with Ruby 2.6
+
## 1.17.1 (2018-10-25)
- Convert `Pathname`s to `String`s before sorting them, fixing #6760 and #6758 ([#6761](https://github.com/bundler/bundler/pull/6761), @alexggordon)
@@ -124,14 +139,14 @@ The following new features are available but are not enabled by default. These a
Changes:
- Add an error message when adding a gem with `bundle add` that's already in the bundle ([#6341](https://github.com/bundler/bundler/issues/6341), @agrim123)
- - Add Homepage, Source Code and Chanagelog URI metadata fields to the `bundle gem` gemspec template (@walf443)
+ - Add Homepage, Source Code and Changelog URI metadata fields to the `bundle gem` gemspec template (@walf443)
Bugfixes:
- Fix issue where updating a gem resulted in the gem's version being downgraded when `BUNDLE_ONLY_UPDATE_TO_NEWER_VERSIONS` was set ([#6529](https://github.com/bundler/bundler/issues/6529), @theflow)
- Fix some rescue calls that don't specifiy error type (@utilum)
- Fix an issue when the Lockfile would contain platform-specific gems that it didn't need ([#6491](https://github.com/bundler/bundler/issues/6491), @segiddins)
- - Improve handlding of adding new gems with only a single group to the Gemfile in `bundle add` (@agrim123)
+ - Improve handling of adding new gems with only a single group to the Gemfile in `bundle add` (@agrim123)
- Refactor check for OpenSSL in `bundle env` (@voxik)
- Remove an unnecessary assignment in Metadata (@voxik)
@@ -257,7 +272,7 @@ Bugfixes:
- avoid an error when running `bundle update --group` ([#6156](https://github.com/bundler/bundler/issues/6156), @mattbrictson)
- ensure the resolver prefers non-pre-release gems when possible ([#6181](https://github.com/bundler/bundler/issues/6181), @greysteil)
- include bundler's gemspec in the built gem ([#6165](https://github.com/bundler/bundler/issues/6165), @dr-itz)
- - ensure locally installed specs are not overriden by those in remote sources during dependency resolution ([#6072](https://github.com/bundler/bundler/issues/6072), @indirect)
+ - ensure locally installed specs are not overridden by those in remote sources during dependency resolution ([#6072](https://github.com/bundler/bundler/issues/6072), @indirect)
- ensure custom gemfiles are respected in generated binstubs (@pftg)
- fail gracefully when loading a bundler-generated binstub when `bin/bundle` was not generated by bundler ([#6149](https://github.com/bundler/bundler/issues/6149), @hsbt)
- allow `bundle init` to be run even when a parent directory contains a gemfile ([#6205](https://github.com/bundler/bundler/issues/6205), @colby-swandale)
@@ -284,10 +299,10 @@ Features:
Bugfixes:
- - fix a bug where installing on FreeBSD would accidentally raise an error (#6013, @olleolleolle)
+ - fix a bug where installing on FreeBSD would accidentally raise an error ([#6013](https://github.com/bundler/bundler/issues/6013), @olleolleolle)
- fix a regression in 1.16 where pre-release gems could accidentally be resolved even when the gemfile contained no pre-release requirements (@greysteil)
- bundler will avoid making unnecessary network requests to fetch dependency data, fixing a regression introduced in 1.16 (@segiddins)
- - the outdated bundler version message is disabled by default until the message has been fine-tuned (#6004, @segiddins)
+ - the outdated bundler version message is disabled by default until the message has been fine-tuned ([#6004](https://github.com/bundler/bundler/issues/6004), @segiddins)
## 1.16.0.pre.2 (2017-09-06)
@@ -301,51 +316,51 @@ Bugfixes:
Features:
- - allow using non-branch symbolic refs in a git source (#4845, @segiddins)
- - allow absolute paths in the `cache path` setting (#5627, @mal)
+ - allow using non-branch symbolic refs in a git source ([#4845](https://github.com/bundler/bundler/issues/4845), @segiddins)
+ - allow absolute paths in the `cache path` setting ([#5627](https://github.com/bundler/bundler/issues/5627), @mal)
- gems created via `bundle gem` with rspec have `--require spec_helper` in their `.rspec` file (@koic)
- - `bundle env` includes `Gem.ruby` and the `bundle` binstub shebang when they don't match (#5616, @segiddins)
+ - `bundle env` includes `Gem.ruby` and the `bundle` binstub shebang when they don't match ([#5616](https://github.com/bundler/bundler/issues/5616), @segiddins)
- allow passing gem names to `bundle pristine` (@segiddins)
- - `bundle version` and `bundle env` include the commit and build date for the bundler gem (#5049, @segiddins)
- - add the `--shebang` option to `bundle binstubs` (#4070, @segiddins, @Zorbash)
- - gemfiles are `eval`ed one fewer time when running `bundle install` (#4952, #3096, #4417, @segiddins)
+ - `bundle version` and `bundle env` include the commit and build date for the bundler gem ([#5049](https://github.com/bundler/bundler/issues/5049), @segiddins)
+ - add the `--shebang` option to `bundle binstubs` ([#4070](https://github.com/bundler/bundler/issues/4070), @segiddins, @Zorbash)
+ - gemfiles are `eval`ed one fewer time when running `bundle install` ([#4952](https://github.com/bundler/bundler/issues/4952), [#3096](https://github.com/bundler/bundler/issues/3096), [#4417](https://github.com/bundler/bundler/issues/4417), @segiddins)
- the `fileutils` gem is now vendored so different versions of the gem can be activated (@segiddins)
- - speed up no-op installations (#5842, @segiddins)
+ - speed up no-op installations ([#5842](https://github.com/bundler/bundler/issues/5842), @segiddins)
- default to keeping the lockfile in the default gem template (@deivid-rodriguez)
- - add a special bundler binstub that ensures the correct version of bundler is activated (#5876, @segiddins)
+ - add a special bundler binstub that ensures the correct version of bundler is activated ([#5876](https://github.com/bundler/bundler/issues/5876), @segiddins)
- speed up dependency resolution and ensure that all resolvable gemfiles can be installed (@segiddins, @greysteil)
- - add a `bundle list` command that prints the gems in use (#4754, @colby-swandale)
+ - add a `bundle list` command that prints the gems in use ([#4754](https://github.com/bundler/bundler/issues/4754), @colby-swandale)
- allow adding credentials to a gem source during deployment when `allow_deployment_source_credential_changes` is set (@adrian-gomez)
- making an outdated (and insecure) TLS connection to rubygems.org will print a warning (@segiddins)
Bugfixes:
- - allow configuring a mirror fallback timeout without a trailing slash (#4830, @segiddins)
+ - allow configuring a mirror fallback timeout without a trailing slash ([#4830](https://github.com/bundler/bundler/issues/4830), @segiddins)
- fix handling of mirrors for file: urls that contain upper-case characters (@segiddins)
- list the correct gem host for `rake release` when `allowed_push_host` has been set (@mdeering)
- - ensure `Bundler.original_env` preserves all env keys that bundler sets (#5700, @segiddins)
+ - ensure `Bundler.original_env` preserves all env keys that bundler sets ([#5700](https://github.com/bundler/bundler/issues/5700), @segiddins)
- ensure `bundle pristine` removes files added to a git gem (@segiddins)
- - load plugin files from path gems before gem installation (#5429, @segiddins)
- - ensure gems containing manpages are properly set up (#5730, @segiddins)
+ - load plugin files from path gems before gem installation ([#5429](https://github.com/bundler/bundler/issues/5429), @segiddins)
+ - ensure gems containing manpages are properly set up ([#5730](https://github.com/bundler/bundler/issues/5730), @segiddins)
- avoid fetching remote specs when all effected gems are in groups that are not being installed (@segiddins)
- - allow `BUNDLE_GEMFILE` to be a relative path (#5712, @gxespino)
- - show a more helpful error message when a gem fails to install due to a corrupted lockfile (#5846, @segiddins)
- - add a process lock to allow multiple concurrent `bundle install`s (#5851, @stefansedich)
+ - allow `BUNDLE_GEMFILE` to be a relative path ([#5712](https://github.com/bundler/bundler/issues/5712), @gxespino)
+ - show a more helpful error message when a gem fails to install due to a corrupted lockfile ([#5846](https://github.com/bundler/bundler/issues/5846), @segiddins)
+ - add a process lock to allow multiple concurrent `bundle install`s ([#5851](https://github.com/bundler/bundler/issues/5851), @stefansedich)
- ensure that specifications always return an array for `#extensions` (@greysteil)
- print a helpful error message when using a gem in the Gemfile with an empty name (@colby-swandale)
- ensure that all gemfiles are included in `bundle env` (@segiddins)
- use ssl client cert and ca cert settings from gem configuration as fallbacks (@stan3)
- - avoid global namespace pollution when loading gems (#5958, @shyouhei)
+ - avoid global namespace pollution when loading gems ([#5958](https://github.com/bundler/bundler/issues/5958), @shyouhei)
- avoid running a complete re-resolve on `bundle update --bundler` (@segiddins)
- allow `bundle binstubs --standalone` to work without `path` being set (@colby-swandale)
- - fix support for bundle paths that include jars or wars on jruby (#5975, @torcido)
+ - fix support for bundle paths that include jars or wars on jruby ([#5975](https://github.com/bundler/bundler/issues/5975), @torcido)
## 1.15.4 (2017-08-19)
Bugfixes:
- handle file conflicts gracefully in `bundle gem` (@rafaelfranca, @segiddins)
- - bundler will fail gracefully when the bundle path contains the system path separator (#5485, ajwann)
+ - bundler will fail gracefully when the bundle path contains the system path separator ([#5485](https://github.com/bundler/bundler/issues/5485), ajwann)
- failed gem downloads will be retried consistently across different RubyGems versions (@shayonj)
- `bundle pristine` will respect build options while re-building native extensions (@NickLaMuro)
@@ -353,7 +368,7 @@ Bugfixes:
Bugfixes:
- - ensure that empty strings passed to `bundle config` are serialized & parsed properly (#5881, @segiddins)
+ - ensure that empty strings passed to `bundle config` are serialized & parsed properly ([#5881](https://github.com/bundler/bundler/issues/5881), @segiddins)
- avoid printing an outdated version warning when running a parseable command (@segiddins)
## 1.15.2 (2017-07-17)
@@ -364,24 +379,24 @@ Features:
Bugfixes:
- - inline gemfiles work when `BUNDLE_BIN` is set (#5847, @segiddins)
- - avoid using the old dependency API when there are no changes to the compact index files (#5373, @greysteil)
- - fail gracefully when the full index serves gemspecs with invalid dependencies (#5797, @segiddins)
+ - inline gemfiles work when `BUNDLE_BIN` is set ([#5847](https://github.com/bundler/bundler/issues/5847), @segiddins)
+ - avoid using the old dependency API when there are no changes to the compact index files ([#5373](https://github.com/bundler/bundler/issues/5373), @greysteil)
+ - fail gracefully when the full index serves gemspecs with invalid dependencies ([#5797](https://github.com/bundler/bundler/issues/5797), @segiddins)
- support installing gemfiles that use `eval_gemfile`, `:path` gems with relative paths, and `--deployment` simultaneously (@NickLaMuro)
- `bundle config` will print settings as the type they are interpreted as (@segiddins)
- - respect the `no_proxy` environment variable when making network requests (#5781, @jakauppila)
+ - respect the `no_proxy` environment variable when making network requests ([#5781](https://github.com/bundler/bundler/issues/5781), @jakauppila)
- commands invoked with `--verbose` will not have default flags printed (@segiddins)
- - allow `bundle viz` to work when another gem has a requirable `grapviz` file (#5707, @segiddins)
- - ensure bundler puts activated gems on the `$LOAD_PATH` in a consistent order (#5696, @segiddins)
+ - allow `bundle viz` to work when another gem has a requirable `grapviz` file ([#5707](https://github.com/bundler/bundler/issues/5707), @segiddins)
+ - ensure bundler puts activated gems on the `$LOAD_PATH` in a consistent order ([#5696](https://github.com/bundler/bundler/issues/5696), @segiddins)
## 1.15.1 (2017-06-02)
Bugfixes:
- - `bundle lock --update GEM` will fail gracefully when the gem is not in the lockfile (#5693, @segiddins)
+ - `bundle lock --update GEM` will fail gracefully when the gem is not in the lockfile ([#5693](https://github.com/bundler/bundler/issues/5693), @segiddins)
- `bundle init --gemspec` will fail gracefully when the gemspec is invalid (@colby-swandale)
- - `bundle install --force` works when the gemfile contains git gems (#5678, @segiddins)
- - `bundle env` will print well-formed markdown when there are no settings (#5677, @segiddins)
+ - `bundle install --force` works when the gemfile contains git gems ([#5678](https://github.com/bundler/bundler/issues/5678), @segiddins)
+ - `bundle env` will print well-formed markdown when there are no settings ([#5677](https://github.com/bundler/bundler/issues/5677), @segiddins)
## 1.15.0 (2017-05-19)
@@ -392,7 +407,7 @@ This space intentionally left blank.
Bugfixes:
- avoid conflicts when `Gem.finish_resolve` is called after the bundle has been set up (@segiddins)
- - ensure that `Gem::Specification.find_by_name` always returns an object that can have `#to_spec` called on it (#5592, @jules2689)
+ - ensure that `Gem::Specification.find_by_name` always returns an object that can have `#to_spec` called on it ([#5592](https://github.com/bundler/bundler/issues/5592), @jules2689)
## 1.15.0.pre.3 (2017-04-30)
@@ -402,32 +417,32 @@ Bugfixes:
- ensure that `open-uri` is not loaded after `bundle exec` (@segiddins)
- print a helpful error message when an activated default gem conflicts with
a gem in the gemfile (@segiddins)
- - only shorten `ref` option for git gems when it is a SHA (#5620, @segiddins)
+ - only shorten `ref` option for git gems when it is a SHA ([#5620](https://github.com/bundler/bundler/issues/5620), @segiddins)
## 1.15.0.pre.2 (2017-04-23)
Bugfixes:
- - ensure pre-existing fit caches are updated from remote sources (#5423, @alextaylor000)
- - avoid duplicating specs in the lockfile after updating with the gem uninstalled (#5599, @segiddins)
- - ensure git gems have their extensions available at runtime (#5594, @jules2689, @segiddins)
+ - ensure pre-existing fit caches are updated from remote sources ([#5423](https://github.com/bundler/bundler/issues/5423), @alextaylor000)
+ - avoid duplicating specs in the lockfile after updating with the gem uninstalled ([#5599](https://github.com/bundler/bundler/issues/5599), @segiddins)
+ - ensure git gems have their extensions available at runtime ([#5594](https://github.com/bundler/bundler/issues/5594), @jules2689, @segiddins)
## 1.15.0.pre.1 (2017-04-16)
Features:
- - print a notification when a newer version of bundler is available (#4683, @segiddins)
- - add man pages for all bundler commands (#4988, @feministy)
+ - print a notification when a newer version of bundler is available ([#4683](https://github.com/bundler/bundler/issues/4683), @segiddins)
+ - add man pages for all bundler commands ([#4988](https://github.com/bundler/bundler/issues/4988), @feministy)
- add the `bundle info` command (@fredrb, @colby-swandale)
- all files created with `bundle gem` comply with the bundler style guide (@zachahn)
- - if installing a gem fails, print out the reason the gem needed to be installed (#5078, @segiddins)
+ - if installing a gem fails, print out the reason the gem needed to be installed ([#5078](https://github.com/bundler/bundler/issues/5078), @segiddins)
- allow setting `gem.push_key` to set the key used when running `rake release` (@DTrierweiler)
- - print gem versions that are regressing during `bundle update` in yellow (#5506, @brchristian)
+ - print gem versions that are regressing during `bundle update` in yellow ([#5506](https://github.com/bundler/bundler/issues/5506), @brchristian)
- avoid printing extraneous dependencies when the resolver encounters a conflict (@segiddins)
- - add the `bundle issue` command that prints instructions for reporting issues (#4871, @jonathanpike)
- - add `--source` and `--group` options to the `bundle inject` command (#5452, @Shekharrajak)
+ - add the `bundle issue` command that prints instructions for reporting issues ([#4871](https://github.com/bundler/bundler/issues/4871), @jonathanpike)
+ - add `--source` and `--group` options to the `bundle inject` command ([#5452](https://github.com/bundler/bundler/issues/5452), @Shekharrajak)
- add the `bundle add` command to add a gem to the gemfile (@denniss)
- - add the `bundle pristine` command to re-install gems from cached `.gem` files (#4509, @denniss)
+ - add the `bundle pristine` command to re-install gems from cached `.gem` files ([#4509](https://github.com/bundler/bundler/issues/4509), @denniss)
- add a `--parseable` option for `bundle config` (@JuanitoFatas, @colby-swandale)
Performance:
@@ -441,95 +456,95 @@ Performance:
Bugfixes:
- - fix cases where `bundle update` would print a resolver conflict instead of updating the selected gems (#5031, #5095, @segiddins)
+ - fix cases where `bundle update` would print a resolver conflict instead of updating the selected gems ([#5031](https://github.com/bundler/bundler/issues/5031), [#5095](https://github.com/bundler/bundler/issues/5095), @segiddins)
- print out a stack trace after an interrupt when running in debug mode (@segiddins)
- print out when bundler starts fetching a gem from a remote server (@segiddins)
- - fix `bundle gem` failing when `git` is unavailable (#5458, @Shekharrajak, @colby-swandale)
- - suggest the appropriate command to unfreeze a bundle (#5009, @denniss)
- - ensure nested calls to `bundle exec` resolve default gems correctly (#5500, @segiddins)
+ - fix `bundle gem` failing when `git` is unavailable ([#5458](https://github.com/bundler/bundler/issues/5458), @Shekharrajak, @colby-swandale)
+ - suggest the appropriate command to unfreeze a bundle ([#5009](https://github.com/bundler/bundler/issues/5009), @denniss)
+ - ensure nested calls to `bundle exec` resolve default gems correctly ([#5500](https://github.com/bundler/bundler/issues/5500), @segiddins)
- ensure that a plugin failing to install doesn't uninstall other plugins (@kerrizor, @roseaboveit)
- - ensure `socket` is required before being referenced (#5533, @rafaelfranca)
- - allow running `bundle outdated` when gems aren't installed locally (#5553, @segiddins)
- - print a helpful error when `bundle exec`ing to a gem that isn't included in the bundle (#5487, @segiddins)
- - print an error message when a non-git gem is given a `branch` option (#5530, @colby-swandale)
+ - ensure `socket` is required before being referenced ([#5533](https://github.com/bundler/bundler/issues/5533), @rafaelfranca)
+ - allow running `bundle outdated` when gems aren't installed locally ([#5553](https://github.com/bundler/bundler/issues/5553), @segiddins)
+ - print a helpful error when `bundle exec`ing to a gem that isn't included in the bundle ([#5487](https://github.com/bundler/bundler/issues/5487), @segiddins)
+ - print an error message when a non-git gem is given a `branch` option ([#5530](https://github.com/bundler/bundler/issues/5530), @colby-swandale)
- allow interrupts to exit the process after gems have been installed (@segiddins)
- - print the underlying error when downloading gem metadata fails (#5579, @segiddins)
- - avoid deadlocking when installing with a lockfile that is missing dependencies (#5378, #5480, #5519, #5526, #5529, #5549, #5572, @segiddins)
+ - print the underlying error when downloading gem metadata fails ([#5579](https://github.com/bundler/bundler/issues/5579), @segiddins)
+ - avoid deadlocking when installing with a lockfile that is missing dependencies ([#5378](https://github.com/bundler/bundler/issues/5378), [#5480](https://github.com/bundler/bundler/issues/5480), [#5519](https://github.com/bundler/bundler/issues/5519), [#5526](https://github.com/bundler/bundler/issues/5526), [#5529](https://github.com/bundler/bundler/issues/5529), [#5549](https://github.com/bundler/bundler/issues/5549), [#5572](https://github.com/bundler/bundler/issues/5572), @segiddins)
## 1.14.6 (2017-03-03)
Bugfixes:
- - avoid undefined constant `Bundler::Plugin::API::Source` exception (#5409, @segiddins)
+ - avoid undefined constant `Bundler::Plugin::API::Source` exception ([#5409](https://github.com/bundler/bundler/issues/5409), @segiddins)
- avoid incorrect warnings about needing to enable `specific_platform` (@segiddins)
- - fail gracefully when the compact index does not send an ETag (#5463, @olleolleolle)
- - ensure `bundle outdated --local` shows all outdated gems (#5430, @denniss)
- - fix a case where ruby version requirements could lead to incorrect resolver conflicts (#5425, @segiddins)
+ - fail gracefully when the compact index does not send an ETag ([#5463](https://github.com/bundler/bundler/issues/5463), @olleolleolle)
+ - ensure `bundle outdated --local` shows all outdated gems ([#5430](https://github.com/bundler/bundler/issues/5430), @denniss)
+ - fix a case where ruby version requirements could lead to incorrect resolver conflicts ([#5425](https://github.com/bundler/bundler/issues/5425), @segiddins)
## 1.14.5 (2017-02-22)
Bugfixes:
- avoid loading all unused gemspecs during `bundle exec` on RubyGems 2.3+ (@segiddins)
- - improve resolver performance when dependencies have zero or one total possibilities ignoring requirements (#5444, #5457, @segiddins)
- - enable compact index when OpenSSL FIPS mode is enabled but not active (#5433, @wjordan)
- - use github username instead of git name for the github url in `bundle gem` (#5438, @danielpclark)
+ - improve resolver performance when dependencies have zero or one total possibilities ignoring requirements ([#5444](https://github.com/bundler/bundler/issues/5444), [#5457](https://github.com/bundler/bundler/issues/5457), @segiddins)
+ - enable compact index when OpenSSL FIPS mode is enabled but not active ([#5433](https://github.com/bundler/bundler/issues/5433), @wjordan)
+ - use github username instead of git name for the github url in `bundle gem` ([#5438](https://github.com/bundler/bundler/issues/5438), @danielpclark)
- avoid a TypeError on RubyGems 2.6.8 when no build settings are set for native extensions (@okkez)
- fail gracefully when the dependency api is missing runtime dependencies for a gem (@segiddins)
- - handle when a platform-specific gem has more dependencies than the ruby platform version (#5339, #5426, @segiddins)
- - allow running bundler on a machine with no home directory where the temporary directory is not writable (#5371, @segiddins)
- - avoid gem version conflicts on openssl using Ruby 2.5 (#5235, @rhenium)
- - fail when installing in frozen mode and the dependencies for `gemspec` gems have changed without the lockfile being updated (#5264, @segiddins)
+ - handle when a platform-specific gem has more dependencies than the ruby platform version ([#5339](https://github.com/bundler/bundler/issues/5339), [#5426](https://github.com/bundler/bundler/issues/5426), @segiddins)
+ - allow running bundler on a machine with no home directory where the temporary directory is not writable ([#5371](https://github.com/bundler/bundler/issues/5371), @segiddins)
+ - avoid gem version conflicts on openssl using Ruby 2.5 ([#5235](https://github.com/bundler/bundler/issues/5235), @rhenium)
+ - fail when installing in frozen mode and the dependencies for `gemspec` gems have changed without the lockfile being updated ([#5264](https://github.com/bundler/bundler/issues/5264), @segiddins)
## 1.14.4 (2017-02-12)
Bugfixes:
- - fail gracefully when attempting to overwrite an existing directory with `bundle gem` (#5358, @nodo)
- - fix a resolver bug that would cause bundler to report conflicts that it could resolve (#5359, #5362, @segiddins)
- - set native extension build arguments for git gems (#5401, @segiddins)
+ - fail gracefully when attempting to overwrite an existing directory with `bundle gem` ([#5358](https://github.com/bundler/bundler/issues/5358), @nodo)
+ - fix a resolver bug that would cause bundler to report conflicts that it could resolve ([#5359](https://github.com/bundler/bundler/issues/5359), [#5362](https://github.com/bundler/bundler/issues/5362), @segiddins)
+ - set native extension build arguments for git gems ([#5401](https://github.com/bundler/bundler/issues/5401), @segiddins)
- fix the suggested `bundle lock` command printed when a dependency is unused on any platform (@5t111111)
- - ensure the version passed to `ruby` in the Gemfile is valid during Gemfile parsing (#5380, @segiddins)
- - show `bundle inject` usage when too many arguments are passed (#5384, @Shekharrajak)
- - stop `bundle show --outdated` from implicitly running `bundle update` (#5375, @colby-swandale)
+ - ensure the version passed to `ruby` in the Gemfile is valid during Gemfile parsing ([#5380](https://github.com/bundler/bundler/issues/5380), @segiddins)
+ - show `bundle inject` usage when too many arguments are passed ([#5384](https://github.com/bundler/bundler/issues/5384), @Shekharrajak)
+ - stop `bundle show --outdated` from implicitly running `bundle update` ([#5375](https://github.com/bundler/bundler/issues/5375), @colby-swandale)
- allow the temporary home directory fallback to work for multiple users (@svoop)
## 1.14.3 (2017-01-24)
Bugfixes:
- - fix the resolver attempting to activate ruby-platform gems when the bundle is only for other platforms (#5349, #5356, @segiddins)
- - avoid re-resolving a locked gemfile that uses `gemspec` and includes development dependencies (#5349, @segiddins)
+ - fix the resolver attempting to activate ruby-platform gems when the bundle is only for other platforms ([#5349](https://github.com/bundler/bundler/issues/5349), [#5356](https://github.com/bundler/bundler/issues/5356), @segiddins)
+ - avoid re-resolving a locked gemfile that uses `gemspec` and includes development dependencies ([#5349](https://github.com/bundler/bundler/issues/5349), @segiddins)
## 1.14.2 (2017-01-22)
Bugfixes:
- - fix using `force_ruby_platform` on windows (#5344, @segiddins)
- - fix an incorrect version conflict error when using `gemspec` on multiple platforms (#5340, @segiddins)
+ - fix using `force_ruby_platform` on windows ([#5344](https://github.com/bundler/bundler/issues/5344), @segiddins)
+ - fix an incorrect version conflict error when using `gemspec` on multiple platforms ([#5340](https://github.com/bundler/bundler/issues/5340), @segiddins)
## 1.14.1 (2017-01-21)
Bugfixes:
- - work around a ruby 2.2.2 bug that caused a stack consistency error during installation (#5342, @segiddins)
+ - work around a ruby 2.2.2 bug that caused a stack consistency error during installation ([#5342](https://github.com/bundler/bundler/issues/5342), @segiddins)
## 1.14.0 (2017-01-20)
Bugfixes:
- ensure `Settings::Mirror` is autoloaded under the `Settings` namespace
- (#5238, @segiddins)
- - fix `bundler/inline` when `BUNDLE_GEMFILE=""` (#5079, @segiddins)
+ ([#5238](https://github.com/bundler/bundler/issues/5238), @segiddins)
+ - fix `bundler/inline` when `BUNDLE_GEMFILE=""` ([#5079](https://github.com/bundler/bundler/issues/5079), @segiddins)
## 1.14.0.pre.2 (2017-01-11)
Bugfixes:
- - allow not selecting a gem when running `bundle open` (#5301, @segiddins)
- - support installing gems from git branches that contain shell metacharacters (#5295, @segiddins)
- - fix a resolver error that could leave dependencies unresolved (#5294, @segiddins)
- - fix a stack overflow error when invoking commands (#5296, @segiddins)
+ - allow not selecting a gem when running `bundle open` ([#5301](https://github.com/bundler/bundler/issues/5301), @segiddins)
+ - support installing gems from git branches that contain shell metacharacters ([#5295](https://github.com/bundler/bundler/issues/5295), @segiddins)
+ - fix a resolver error that could leave dependencies unresolved ([#5294](https://github.com/bundler/bundler/issues/5294), @segiddins)
+ - fix a stack overflow error when invoking commands ([#5296](https://github.com/bundler/bundler/issues/5296), @segiddins)
## 1.14.0.pre.1 (2016-12-29)
@@ -537,17 +552,17 @@ Features:
- `bundle doctor` first runs `bundle check` (@segiddins)
- the bundler trampoline is automatically enabled when the target version is greater than bundler 2 (@segiddins)
- - gem checksums returned by rubygems.org are validated when installing gems (#4464, @segiddins)
+ - gem checksums returned by rubygems.org are validated when installing gems ([#4464](https://github.com/bundler/bundler/issues/4464), @segiddins)
- use the git username as a github username when running `bundle gem` (@JuanitoFatas)
- show more context when the resolver conflicts on required ruby and rubygems versions (@segiddins)
- - improve platform support by allowing bundler to pick the best platform match during dependency resolution, enabled with the `specific_platform` setting (#4295, #4896, @segiddins)
- - always prompt the user for a password when using `sudo` (#3006, @segiddins)
- - support running without a home directory (#4778, @segiddins)
+ - improve platform support by allowing bundler to pick the best platform match during dependency resolution, enabled with the `specific_platform` setting ([#4295](https://github.com/bundler/bundler/issues/4295), [#4896](https://github.com/bundler/bundler/issues/4896), @segiddins)
+ - always prompt the user for a password when using `sudo` ([#3006](https://github.com/bundler/bundler/issues/3006), @segiddins)
+ - support running without a home directory ([#4778](https://github.com/bundler/bundler/issues/4778), @segiddins)
- print a warning when the gemfile uses a platform conditional that will exclude the gem from all lockfile platforms (@segiddins)
- - add the `force_ruby_platform` setting to force bundler to install ruby-platform gems, even on other platforms (#4813, @segiddins)
- - add conservative update options to `bundle lock` (#4912, @chrismo)
+ - add the `force_ruby_platform` setting to force bundler to install ruby-platform gems, even on other platforms ([#4813](https://github.com/bundler/bundler/issues/4813), @segiddins)
+ - add conservative update options to `bundle lock` ([#4912](https://github.com/bundler/bundler/issues/4912), @chrismo)
- improve `bundle outdated` output to group gems by group (@ryanfox1985)
- - add conservative update options to `bundle update` (#5065, #5076, @chrismo)
+ - add conservative update options to `bundle update` ([#5065](https://github.com/bundler/bundler/issues/5065), [#5076](https://github.com/bundler/bundler/issues/5076), @chrismo)
- print the output of `bundle env` as github-flavored markdown, making it easier to preserve formatting when copy-pasting into a new issue (@segiddins)
- configure the persistence file when using `bundle gem` with `rspec` (@segiddins)
- add support for the `ruby_25` gemfile filter (@amatsuda)
@@ -560,31 +575,31 @@ Performance:
Bugfixes:
- - config files with CRLF line endings can be read (#4435, @segiddins)
- - `bundle lock` activates gems for the current platform even if they were activated under a different platform for a separate dependency (#4896, @segiddins)
+ - config files with CRLF line endings can be read ([#4435](https://github.com/bundler/bundler/issues/4435), @segiddins)
+ - `bundle lock` activates gems for the current platform even if they were activated under a different platform for a separate dependency ([#4896](https://github.com/bundler/bundler/issues/4896), @segiddins)
- running `bundle env` in a directory without a gemfile no longer crashes (@segiddins)
- - fail gracefully when attempting to use a source with an unknown URI scheme (#4953, @segiddins)
- - store paths in the lockfile relative to the root gemfile directory when using `eval_gemfile` (#4966, @segiddins)
- - `bundle lock` will not update without the `--update` flag (#4957, @segiddins)
+ - fail gracefully when attempting to use a source with an unknown URI scheme ([#4953](https://github.com/bundler/bundler/issues/4953), @segiddins)
+ - store paths in the lockfile relative to the root gemfile directory when using `eval_gemfile` ([#4966](https://github.com/bundler/bundler/issues/4966), @segiddins)
+ - `bundle lock` will not update without the `--update` flag ([#4957](https://github.com/bundler/bundler/issues/4957), @segiddins)
- the `console` binstub generated by `bundle gem` will load `.irbrc` files (@mattbrictson)
- print friendly filesystem access errors in the new index (@segiddins)
- - print a helpful error when running out of memory on jruby (#4673, @segiddins)
- - load all rubygems plugins when installing gems (#2824, @segiddins)
- - `bundle clean --dry-run` prints the list of gems without the `--force` option when no path is set (#5027, @hmistry)
- - local installs no longer print "this gem may have been yanked" (#5022, @hmistry)
+ - print a helpful error when running out of memory on jruby ([#4673](https://github.com/bundler/bundler/issues/4673), @segiddins)
+ - load all rubygems plugins when installing gems ([#2824](https://github.com/bundler/bundler/issues/2824), @segiddins)
+ - `bundle clean --dry-run` prints the list of gems without the `--force` option when no path is set ([#5027](https://github.com/bundler/bundler/issues/5027), @hmistry)
+ - local installs no longer print "this gem may have been yanked" ([#5022](https://github.com/bundler/bundler/issues/5022), @hmistry)
- avoid leaking `which` output when running `bundle doctor` (@colby-swandale)
- - print a warning when attempting to `bundle exec` an empty program (#5084, @bronzdoc)
- - ensure `bundle outdated` lists all outdated gems (#4979, @chrismo)
- - fail gracefully when attempting to `bundle gem` with an invalid constant name (#5185, @segiddins)
- - allow `bundler/inline` to work in a directory that contains a gemfile (#5117, @colby-swandale)
- - ensure that the new index is thread-safe, allowing installation on rbx (#5142, @segiddins)
+ - print a warning when attempting to `bundle exec` an empty program ([#5084](https://github.com/bundler/bundler/issues/5084), @bronzdoc)
+ - ensure `bundle outdated` lists all outdated gems ([#4979](https://github.com/bundler/bundler/issues/4979), @chrismo)
+ - fail gracefully when attempting to `bundle gem` with an invalid constant name ([#5185](https://github.com/bundler/bundler/issues/5185), @segiddins)
+ - allow `bundler/inline` to work in a directory that contains a gemfile ([#5117](https://github.com/bundler/bundler/issues/5117), @colby-swandale)
+ - ensure that the new index is thread-safe, allowing installation on rbx ([#5142](https://github.com/bundler/bundler/issues/5142), @segiddins)
- remove deprecated `rspec` syntax in `bundle gem` output (@gearnode)
- - fail gracefully when any system error is encountered when touching the filesystem (#5134, @segiddins)
- - fix compatibility with a machine running with FIPS mode enabled (#4989, @segiddins)
- - fix `bundle lock --add-platform ruby` (#5230, @segiddins)
+ - fail gracefully when any system error is encountered when touching the filesystem ([#5134](https://github.com/bundler/bundler/issues/5134), @segiddins)
+ - fix compatibility with a machine running with FIPS mode enabled ([#4989](https://github.com/bundler/bundler/issues/4989), @segiddins)
+ - fix `bundle lock --add-platform ruby` ([#5230](https://github.com/bundler/bundler/issues/5230), @segiddins)
- print gem post-install messages when running `bundle update` (@smathy)
- ensure errors due to a retries are all separated by a newline (@segiddins)
- - print out the bundle path in gem not found errors (#4854, @diegosteiner)
+ - print out the bundle path in gem not found errors ([#4854](https://github.com/bundler/bundler/issues/4854), @diegosteiner)
- fail gracefully when creating threads fails (@segiddins)
- avoid downloading metadata for gems that are only development dependencies (@Paxa)
@@ -592,28 +607,28 @@ Bugfixes:
Features:
- - add support for the `ruby_24` gemfile filter (#5281, @amatsuda)
+ - add support for the `ruby_24` gemfile filter ([#5281](https://github.com/bundler/bundler/issues/5281), @amatsuda)
## 1.13.6 (2016-10-22)
Bugfixes:
- - make the `gem` method public again, fixing a regression in 1.13.4 (#5102, @segiddins)
+ - make the `gem` method public again, fixing a regression in 1.13.4 ([#5102](https://github.com/bundler/bundler/issues/5102), @segiddins)
## 1.13.5 (2016-10-15)
Bugfixes:
- - Ensure a locked pre-release spec can always be re-resolved (#5089, @segiddins)
+ - Ensure a locked pre-release spec can always be re-resolved ([#5089](https://github.com/bundler/bundler/issues/5089), @segiddins)
## 1.13.4 (2016-10-11)
Bugfixes:
- - stop printing warning when compact index versions file is rewritten (#5064, @indirect)
- - fix `parent directory is world writable but not sticky` error on install (#5043, @indirect)
- - fix for `uninitialized constant Bundler::Plugin::API::Source` error (#5010, @hsbt, @aycabta)
- - make `update` options for major, minor, and patch updates consistent (#4934, @chrismo)
+ - stop printing warning when compact index versions file is rewritten ([#5064](https://github.com/bundler/bundler/issues/5064), @indirect)
+ - fix `parent directory is world writable but not sticky` error on install ([#5043](https://github.com/bundler/bundler/issues/5043), @indirect)
+ - fix for `uninitialized constant Bundler::Plugin::API::Source` error ([#5010](https://github.com/bundler/bundler/issues/5010), @hsbt, @aycabta)
+ - make `update` options for major, minor, and patch updates consistent ([#4934](https://github.com/bundler/bundler/issues/4934), @chrismo)
## 1.13.3 (2016-10-10)
@@ -626,12 +641,12 @@ Bugfixes:
Bugfixes:
- allow `Settings` to be initialized without a root directory (@m1k3)
- - allow specifying ruby engines in the gemfile as a symbol (#4919, @JuanitoFatas)
+ - allow specifying ruby engines in the gemfile as a symbol ([#4919](https://github.com/bundler/bundler/issues/4919), @JuanitoFatas)
- avoid an exception when using `bundler/deployment` with Vlad (@srbaker)
- - ensure redefined methods have the same visibility as the one they're replacing, fixing `Kernel.require` failing on JRuby (#4975, @segiddins)
- - ensure that Bundler won't complain about a corrupt lockfile when no lockfile exists when using `gemspec` in the Gemfile (#5006, @segiddins)
+ - ensure redefined methods have the same visibility as the one they're replacing, fixing `Kernel.require` failing on JRuby ([#4975](https://github.com/bundler/bundler/issues/4975), @segiddins)
+ - ensure that Bundler won't complain about a corrupt lockfile when no lockfile exists when using `gemspec` in the Gemfile ([#5006](https://github.com/bundler/bundler/issues/5006), @segiddins)
- fail gracefully when parsing the metadata for a gemspec from the compact index fails (@segiddins)
- - fix system gems not being copied to --path on bundle install (e.g. --deployment) (#4974, @chrismo)
+ - fix system gems not being copied to --path on bundle install (e.g. --deployment) ([#4974](https://github.com/bundler/bundler/issues/4974), @chrismo)
Performance:
@@ -641,8 +656,8 @@ Performance:
Bugfixes:
- - ensure that `Gem::Source` is available, fixing several exceptions (#4944, @dekellum)
- - ensure that dependency resolution works when multiple gems have the same dependency (#4961, @segiddins)
+ - ensure that `Gem::Source` is available, fixing several exceptions ([#4944](https://github.com/bundler/bundler/issues/4944), @dekellum)
+ - ensure that dependency resolution works when multiple gems have the same dependency ([#4961](https://github.com/bundler/bundler/issues/4961), @segiddins)
## 1.13.0 (2016-09-05)
@@ -653,32 +668,32 @@ This space deliberately left blank.
Features:
- add setting `exec_disable_load` to force `exec` to spawn a new Ruby process (@segiddins)
- - add `doctor` command to help with issues like unlinked compiled gems (#4765, @mistydemeo)
- - rework the `update` command, providing fine-grained control via flags (#4676, @chrismo)
- - add URI to http response output in debug mode (#4808, @NickLaMuro)
- - add manpage for `binstubs` command (#4847, @Zorbash)
+ - add `doctor` command to help with issues like unlinked compiled gems ([#4765](https://github.com/bundler/bundler/issues/4765), @mistydemeo)
+ - rework the `update` command, providing fine-grained control via flags ([#4676](https://github.com/bundler/bundler/issues/4676), @chrismo)
+ - add URI to http response output in debug mode ([#4808](https://github.com/bundler/bundler/issues/4808), @NickLaMuro)
+ - add manpage for `binstubs` command ([#4847](https://github.com/bundler/bundler/issues/4847), @Zorbash)
- support `mirror` settings for sources by hostname, not only full URL (@opiethehokie)
- - print gem installation errors after other install output (#4834, @segiddins)
- - add `lock --remove-platform` flag to remove platforms from the lock (#4877, @segiddins)
+ - print gem installation errors after other install output ([#4834](https://github.com/bundler/bundler/issues/4834), @segiddins)
+ - add `lock --remove-platform` flag to remove platforms from the lock ([#4877](https://github.com/bundler/bundler/issues/4877), @segiddins)
- add `only_update_to_newer_versions` setting to prevent downgrades during `update` (@segiddins)
- expanded experimental plugin support to include hooks and sources (@asutoshpalai)
Bugfixes:
- - retry gem downloads (#4846, @jkeiser)
- - improve the CompactIndex to handle capitalized legacy gems (#4867, @segiddins)
+ - retry gem downloads ([#4846](https://github.com/bundler/bundler/issues/4846), @jkeiser)
+ - improve the CompactIndex to handle capitalized legacy gems ([#4867](https://github.com/bundler/bundler/issues/4867), @segiddins)
- re-use persistent HTTP connections for CompactIndex (@NickLaMuro)
- respect `required_ruby_version` when Gemfile contains `ruby` version (@indirect)
- - allow `rake release` to sign git tags (#4743, @eagletmt)
+ - allow `rake release` to sign git tags ([#4743](https://github.com/bundler/bundler/issues/4743), @eagletmt)
- set process titles when using `#load` during `exec` (@yob)
- recognize JRuby shebangs for using `#load` during `exec` (@ojab)
- - handle world-writable home directories (#4726, @allenzhao)
- - support multi-platform gems via the `gemspec` Gemfile method (#4798, @segiddins)
+ - handle world-writable home directories ([#4726](https://github.com/bundler/bundler/issues/4726), @allenzhao)
+ - support multi-platform gems via the `gemspec` Gemfile method ([#4798](https://github.com/bundler/bundler/issues/4798), @segiddins)
- print dots correctly for CompactIndex fetcher (@NickLaMuro)
- set an `open_timeout` when requesting gem data via HTTP (@NickLaMuro)
- rename the BUNDLE\_ORIG\_ENV variable so it no longer shows up in `config` (@indirect)
- - show help only when `-h` or `--help` is passed to Bundler, not to `exec` (#4801, @segiddins)
- - handle symlinks to binstubs created by `--standalone` (#4782, @terinjokes)
+ - show help only when `-h` or `--help` is passed to Bundler, not to `exec` ([#4801](https://github.com/bundler/bundler/issues/4801), @segiddins)
+ - handle symlinks to binstubs created by `--standalone` ([#4782](https://github.com/bundler/bundler/issues/4782), @terinjokes)
## 1.13.0.rc.1 (2016-06-27)
@@ -689,9 +704,9 @@ Features:
Bugfixes:
- - fix support for running RubyGems 1.x on Ruby 2.3 (#4698, @segiddins)
- - fix bundle exec'ing to a ruby file when gems are installed into a path (#4592, @chrismo)
- - when multiple specs in a bundle have the same executable, prefer activating the one from the requested gem (#4705, @segiddins)
+ - fix support for running RubyGems 1.x on Ruby 2.3 ([#4698](https://github.com/bundler/bundler/issues/4698), @segiddins)
+ - fix bundle exec'ing to a ruby file when gems are installed into a path ([#4592](https://github.com/bundler/bundler/issues/4592), @chrismo)
+ - when multiple specs in a bundle have the same executable, prefer activating the one from the requested gem ([#4705](https://github.com/bundler/bundler/issues/4705), @segiddins)
- stop changing the load path to require the vendored postit when trampolining (@segiddins)
- ensure relative paths are properly printed after completing an installation (@jenseng)
- fix re-resolving when there are multiple unchanged path sources (@segiddins)
@@ -701,9 +716,9 @@ Bugfixes:
Performance:
- - speed up gemfile resolution during `bundle install` by between 4x-100x (#4376, @segiddins)
+ - speed up gemfile resolution during `bundle install` by between 4x-100x ([#4376](https://github.com/bundler/bundler/issues/4376), @segiddins)
- generally reduce object allocations when using bundler (@segiddins)
- - speed up bin generation for path gems with many files (#2846, @segiddins)
+ - speed up bin generation for path gems with many files ([#2846](https://github.com/bundler/bundler/issues/2846), @segiddins)
- fix detecting path spec changes to avoid re-resolving unnecessarily (@jrafanie)
Features:
@@ -711,14 +726,14 @@ Features:
- automatically trampoline to the bundler version locked in the lockfile, only updating to the running version on `bundle update --bundler` (@segiddins)
- laying the groundwork for plugin support, which is currently unsuppported, undocumented, disabled by default, and liable to change without notice (@asutoshpalai)
- allow `bundle viz --without` to accept multiple `:`-delimited groups (@mobilutz)
- - support for RubyGems 2.6.4 (#4368, @segiddins, @RochesterinNYC)
- - colorize updated gem versions (#4334, @bronzdoc)
- - add the `--standalone` flag to `bundle binstubs` (#4594, @b-ggs)
+ - support for RubyGems 2.6.4 ([#4368](https://github.com/bundler/bundler/issues/4368), @segiddins, @RochesterinNYC)
+ - colorize updated gem versions ([#4334](https://github.com/bundler/bundler/issues/4334), @bronzdoc)
+ - add the `--standalone` flag to `bundle binstubs` ([#4594](https://github.com/bundler/bundler/issues/4594), @b-ggs)
- update the `bundle gem` CoC to contributor covenant v1.4 (@cllns)
- use a custom YAML serializer to make config file consistent (@segiddins)
- - filter credentials from error messages (bundler/bundler-features#111, @RochesterinNYC, @sandlerr)
- - support relative paths used inside a nested invocation of `eval_gemfile` (#4584, @RochesterinNYC)
- - fail gracefully when attempting to install a yanked gem (#4344, @allenzhao)
+ - filter credentials from error messages (bundler/bundler-features[#111](https://github.com/bundler/bundler/issues/111), @RochesterinNYC, @sandlerr)
+ - support relative paths used inside a nested invocation of `eval_gemfile` ([#4584](https://github.com/bundler/bundler/issues/4584), @RochesterinNYC)
+ - fail gracefully when attempting to install a yanked gem ([#4344](https://github.com/bundler/bundler/issues/4344), @allenzhao)
- automatically install an inline gemfile when gems are missing locally (@segiddins)
- allow conflicts for gems resolved via `gemspec` (@segiddins)
- add `--add-platform` option to `bundle lock` (@segiddins)
@@ -726,18 +741,18 @@ Features:
Bugfixes:
- - implicitly unlock the resolved ruby version when the declared requirements in the gemfile are incompatible with the locked version (#4595, #4627, @segiddins)
- - add support for quoted paths in `$PATH` (#4323, @segiddins)
- - check out missing git repos that are not being installed (#3981, @asutoshpalai)
+ - implicitly unlock the resolved ruby version when the declared requirements in the gemfile are incompatible with the locked version ([#4595](https://github.com/bundler/bundler/issues/4595), [#4627](https://github.com/bundler/bundler/issues/4627), @segiddins)
+ - add support for quoted paths in `$PATH` ([#4323](https://github.com/bundler/bundler/issues/4323), @segiddins)
+ - check out missing git repos that are not being installed ([#3981](https://github.com/bundler/bundler/issues/3981), @asutoshpalai)
- write `bundler/setup.rb` to a consistent path (@glennpratt)
- open editor in `bundle open` with a clean environment (@sj26)
- - resolve infinitely recursive copy when running `bundle package --all` with a `gemspec` in the gemfile (#4392, #4430, @RochesterinNYC)
- - fail gracefully when encountering an `Errno::ENOTSUP` (#4394, @segiddins)
- - fail gracefully when encountering an `Errno::EHOSTUNREACH` (#4642, @allenzhao)
- - fix loading config files with very long values (#4370, @segiddins)
- - only show potential updates for gemfile platforms in `bundle outdated` (#4450, @RochesterinNYC)
- - allow running `bundle install --deployment` after `bundle package --all` with path gems (#2175, @allenzhao)
- - add support for patchlevels in ruby versions in the gemfile and gemspecs (#4593, @chalkos)
+ - resolve infinitely recursive copy when running `bundle package --all` with a `gemspec` in the gemfile ([#4392](https://github.com/bundler/bundler/issues/4392), [#4430](https://github.com/bundler/bundler/issues/4430), @RochesterinNYC)
+ - fail gracefully when encountering an `Errno::ENOTSUP` ([#4394](https://github.com/bundler/bundler/issues/4394), @segiddins)
+ - fail gracefully when encountering an `Errno::EHOSTUNREACH` ([#4642](https://github.com/bundler/bundler/issues/4642), @allenzhao)
+ - fix loading config files with very long values ([#4370](https://github.com/bundler/bundler/issues/4370), @segiddins)
+ - only show potential updates for gemfile platforms in `bundle outdated` ([#4450](https://github.com/bundler/bundler/issues/4450), @RochesterinNYC)
+ - allow running `bundle install --deployment` after `bundle package --all` with path gems ([#2175](https://github.com/bundler/bundler/issues/2175), @allenzhao)
+ - add support for patchlevels in ruby versions in the gemfile and gemspecs ([#4593](https://github.com/bundler/bundler/issues/4593), @chalkos)
## 1.12.6 (2016-10-10)
@@ -747,17 +762,17 @@ Bugfixes:
## 1.12.5 (2016-05-25)
Bugfixes:
- - only take over `--help` on `bundle exec` when the first two arguments are `exec` and `--help` (#4596, @segiddins)
+ - only take over `--help` on `bundle exec` when the first two arguments are `exec` and `--help` ([#4596](https://github.com/bundler/bundler/issues/4596), @segiddins)
- don't require `require: true` dependencies that are excluded via `env` or `install_if` (@BrianHawley)
- - reduce the number of threads used simultaneously by bundler (#4367, @will-in-wi)
+ - reduce the number of threads used simultaneously by bundler ([#4367](https://github.com/bundler/bundler/issues/4367), @will-in-wi)
## 1.12.4 (2016-05-16)
Bugfixes:
- - ensure concurrent use of the new index can't corrupt the cache (#4519, @domcleal)
- - allow missing rubygems credentials when pushing a gem with a custom host (#4437, @Cohen-Carlisle)
- - fix installing built-in specs with `--standalone` (#4557, @segiddins)
- - fix `bundle show` when a gem has a prerelease version that includes a `-` (#4385, @segiddins)
+ - ensure concurrent use of the new index can't corrupt the cache ([#4519](https://github.com/bundler/bundler/issues/4519), @domcleal)
+ - allow missing rubygems credentials when pushing a gem with a custom host ([#4437](https://github.com/bundler/bundler/issues/4437), @Cohen-Carlisle)
+ - fix installing built-in specs with `--standalone` ([#4557](https://github.com/bundler/bundler/issues/4557), @segiddins)
+ - fix `bundle show` when a gem has a prerelease version that includes a `-` ([#4385](https://github.com/bundler/bundler/issues/4385), @segiddins)
## 1.12.3 (2016-05-06)
@@ -768,16 +783,16 @@ Bugfixes:
## 1.12.2 (2016-05-04)
Bugfixes:
- - fix modifying a frozen string when the resolver conflicts on dependencies with requirements (#4520, @grzuy)
- - fix `bundle exec foo --help` not showing the invoked command's help (#4480, @b-ggs)
+ - fix modifying a frozen string when the resolver conflicts on dependencies with requirements ([#4520](https://github.com/bundler/bundler/issues/4520), @grzuy)
+ - fix `bundle exec foo --help` not showing the invoked command's help ([#4480](https://github.com/bundler/bundler/issues/4480), @b-ggs)
## 1.12.1 (2016-04-30)
Bugfixes:
- automatically fallback when the new index has a checksum mismatch instead of erroring (@segiddins)
- - fix computation of new index file local checksums on Windows (#4472, @mwrock)
- - properly handle certain resolver backtracking cases without erroring (@segiddins, #4484)
- - ensure the `$LOAD_PATH` contains specs' load paths in the correct order (@segiddins, #4482)
+ - fix computation of new index file local checksums on Windows ([#4472](https://github.com/bundler/bundler/issues/4472), @mwrock)
+ - properly handle certain resolver backtracking cases without erroring (@segiddins, [#4484](https://github.com/bundler/bundler/issues/4484))
+ - ensure the `$LOAD_PATH` contains specs' load paths in the correct order (@segiddins, [#4482](https://github.com/bundler/bundler/issues/4482))
## 1.12.0 (2016-04-28)
@@ -787,7 +802,7 @@ This space intentionally left blank.
Bugfixes:
- - don't fail when `bundle outdated` is run with flags and the lockfile contains non-semver versions (#4438, @RochesterinNYC)
+ - don't fail when `bundle outdated` is run with flags and the lockfile contains non-semver versions ([#4438](https://github.com/bundler/bundler/issues/4438), @RochesterinNYC)
## 1.12.0.rc.3 (2016-04-19)
@@ -799,11 +814,11 @@ Bugfixes:
Features:
- - `bundle outdated` handles all combinations of `--major`, `--minor`, and `--patch` (#4396, @RochesterinNYC)
+ - `bundle outdated` handles all combinations of `--major`, `--minor`, and `--patch` ([#4396](https://github.com/bundler/bundler/issues/4396), @RochesterinNYC)
Bugfixes:
- - prevent endless recursive copy for `bundle package --all` (#4392, @RochesterinNYC)
+ - prevent endless recursive copy for `bundle package --all` ([#4392](https://github.com/bundler/bundler/issues/4392), @RochesterinNYC)
- allow executables that are `load`ed to exit non-0 via an `at_exit` hook when invoked by `bundle exec` (@segiddins)
- nested invocations of `bundle exec` properly preserve the `$PATH` and `$GEM_PATH` environment variables (@segiddins)
@@ -811,13 +826,13 @@ Bugfixes:
Performance:
- - Download gem metadata from globally distributed CDN endpoints (#4358, @segiddins)
+ - Download gem metadata from globally distributed CDN endpoints ([#4358](https://github.com/bundler/bundler/issues/4358), @segiddins)
Bugfixes:
- - handle Ruby pre-releases built from source (#4324, @RochesterinNYC)
- - support binstubs from RubyGems 2.6 (#4341, @segiddins)
- - handle quotes present in in PATH (#4326, @segiddins)
+ - handle Ruby pre-releases built from source ([#4324](https://github.com/bundler/bundler/issues/4324), @RochesterinNYC)
+ - support binstubs from RubyGems 2.6 ([#4341](https://github.com/bundler/bundler/issues/4341), @segiddins)
+ - handle quotes present in in PATH ([#4326](https://github.com/bundler/bundler/issues/4326), @segiddins)
## 1.12.0.pre.2 (2016-02-26)
@@ -828,80 +843,80 @@ Performance:
Features:
- add a `--patch` flag for `bundle outdated` (@RochesterinNYC)
- - add `Bundler.clean_env` and `Bundler.original_env` (#4232, @njam)
- - add `--frozen` support to `bundle package` (#3356, @RochesterinNYC)
+ - add `Bundler.clean_env` and `Bundler.original_env` ([#4232](https://github.com/bundler/bundler/issues/4232), @njam)
+ - add `--frozen` support to `bundle package` ([#3356](https://github.com/bundler/bundler/issues/3356), @RochesterinNYC)
Bugfixes:
- place bundler loaded gems after `-I` and `RUBYLIB` (@Elffers)
- - give a better error message when filesystem access raises an `EPROTO` error (#3581, #3932, #4163, @RochesterinNYC)
+ - give a better error message when filesystem access raises an `EPROTO` error ([#3581](https://github.com/bundler/bundler/issues/3581), [#3932](https://github.com/bundler/bundler/issues/3932), [#4163](https://github.com/bundler/bundler/issues/4163), @RochesterinNYC)
- give a better error message when both `--deployment` and `--system` are used together (@RochesterinNYC)
- - fix `$PATH` being preserved for use in `Bundler.with_clean_env` (#4251, @segiddins, @njam)
- - give a better error message when running `bundle outdated` in frozen mode (#4287, @RochesterinNYC)
- - handle when `http_proxy` is set to `:no_proxy` in the rubygems configuration (#4294, @segiddins)
- - give a better error message when authentication details aren't properly escaped (#4288, @RochesterinNYC)
+ - fix `$PATH` being preserved for use in `Bundler.with_clean_env` ([#4251](https://github.com/bundler/bundler/issues/4251), @segiddins, @njam)
+ - give a better error message when running `bundle outdated` in frozen mode ([#4287](https://github.com/bundler/bundler/issues/4287), @RochesterinNYC)
+ - handle when `http_proxy` is set to `:no_proxy` in the rubygems configuration ([#4294](https://github.com/bundler/bundler/issues/4294), @segiddins)
+ - give a better error message when authentication details aren't properly escaped ([#4288](https://github.com/bundler/bundler/issues/4288), @RochesterinNYC)
- fix `bundle outdated --minor` to only report updates that match the current minor version (@RochesterinNYC)
- - fix extra dependencies being resolved unnecessarily (#4276, @segiddins)
- - give a better error message when missing specs due to platform mis-matches (#4259, @RochesterinNYC)
- - skip rebuilding extensions for git gems if they are already built (#4082, @csfrancis, @indirect, @segiddins)
- - fix `bundle install` not installing when the `no_install` setting is set (#3966, @chulkilee, @segiddins)
+ - fix extra dependencies being resolved unnecessarily ([#4276](https://github.com/bundler/bundler/issues/4276), @segiddins)
+ - give a better error message when missing specs due to platform mis-matches ([#4259](https://github.com/bundler/bundler/issues/4259), @RochesterinNYC)
+ - skip rebuilding extensions for git gems if they are already built ([#4082](https://github.com/bundler/bundler/issues/4082), @csfrancis, @indirect, @segiddins)
+ - fix `bundle install` not installing when the `no_install` setting is set ([#3966](https://github.com/bundler/bundler/issues/3966), @chulkilee, @segiddins)
## 1.12.0.pre.1 (2016-02-09)
Performance:
- speed up `bundle install` and `bundle update` by using the new compact gem index (@segiddins, @fotanus, @indirect)
- - speed up `bundle exec` by avoiding loading the gemfile twice (#2951, #2952, @segiddins)
+ - speed up `bundle exec` by avoiding loading the gemfile twice ([#2951](https://github.com/bundler/bundler/issues/2951), [#2952](https://github.com/bundler/bundler/issues/2952), @segiddins)
Features:
- add support for using version operators to specify ruby versions in the Gemfile (@jtarchie)
- redirect `--help` flag for plugins to that plugin's man page (@RochesterinNYC)
- - support probing a mirror with a fallback timeout (#4128, @pcarranza)
+ - support probing a mirror with a fallback timeout ([#4128](https://github.com/bundler/bundler/issues/4128), @pcarranza)
- add `--full-index` option to `bundle lock` (@segiddins)
- support running with frozen string literals (@deepj, @segiddins)
- - add `--major` and `--minor` options to `bundle outdated` (#3805, @cirdes)
+ - add `--major` and `--minor` options to `bundle outdated` ([#3805](https://github.com/bundler/bundler/issues/3805), @cirdes)
- allow passing a custom `ui` to `bundler/inline` (@lamont-granquist)
- - add support for ruby 2.4 (#4266, @segiddins)
+ - add support for ruby 2.4 ([#4266](https://github.com/bundler/bundler/issues/4266), @segiddins)
- add `bundle outdated --parseable` for machine-readable output (@RochesterinNYC)
Bugfixes:
- - fix `bundle package --all` recursing endlessly (#4158, @RochesterinNYC)
- - fail fast on more errors when fetching remote resources (#4154, @RochesterinNYC)
- - give a better error message when a given git commit can't be found (#4140, @doy)
- - give a better error message when `bundle clean` doesn't have sufficient permissions (#4170, @RochesterinNYC)
+ - fix `bundle package --all` recursing endlessly ([#4158](https://github.com/bundler/bundler/issues/4158), @RochesterinNYC)
+ - fail fast on more errors when fetching remote resources ([#4154](https://github.com/bundler/bundler/issues/4154), @RochesterinNYC)
+ - give a better error message when a given git commit can't be found ([#4140](https://github.com/bundler/bundler/issues/4140), @doy)
+ - give a better error message when `bundle clean` doesn't have sufficient permissions ([#4170](https://github.com/bundler/bundler/issues/4170), @RochesterinNYC)
- give a better error message when reading a bundler config file fails (@segiddins)
- - restrict platforms when referencing a `gemspec` in the `Gemfile` to those defined in the gemspec (#4102, #4150, @smellsblue)
+ - restrict platforms when referencing a `gemspec` in the `Gemfile` to those defined in the gemspec ([#4102](https://github.com/bundler/bundler/issues/4102), [#4150](https://github.com/bundler/bundler/issues/4150), @smellsblue)
- fix `bundle gem` with minitest to use the correct rake task (@kotoshenya)
- - give a better error message when ssl isn't available (#4054, @RochesterinNYC)
- - print the original `require` error when `Bundler.require` fails (#4182, @RochesterinNYC)
- - give a better error message when certain resources are temporarily unavailable (#4183, @RochesterinNYC)
+ - give a better error message when ssl isn't available ([#4054](https://github.com/bundler/bundler/issues/4054), @RochesterinNYC)
+ - print the original `require` error when `Bundler.require` fails ([#4182](https://github.com/bundler/bundler/issues/4182), @RochesterinNYC)
+ - give a better error message when certain resources are temporarily unavailable ([#4183](https://github.com/bundler/bundler/issues/4183), @RochesterinNYC)
- fix returning case-sensitive gem mirror URIs on ruby 2.3 (@segiddins)
- - ignore colorized output from `git` when determining the current branch (#4056, @agis-)
+ - ignore colorized output from `git` when determining the current branch ([#4056](https://github.com/bundler/bundler/issues/4056), @agis-)
- fix storing the shared gems config option as a boolean (@vassilevsky)
- add support for running `bundle gem --exe` instead of using the `--bin` option (@christhekeele)
- - fix `exec`-ing with 0 args in a directory with spaces (#4230, @segiddins)
- - avoid installing extraneous gems when resolving to an older version of a spec (#4101, #4198, @segiddins)
- - ensure paths resolved when parsing a gemfile are relative to that file (#3349, @dtognazzini)
- - give a better error message when encountering an invalid gemspec (#4248, #4275, @RochesterinNYC)
- - preserve the original `PATH` in `Bundler.with_clean_env` (#4251, @segiddins)
- - ensure standalone file paths are relative to the project root (#4144, @glennpratt)
+ - fix `exec`-ing with 0 args in a directory with spaces ([#4230](https://github.com/bundler/bundler/issues/4230), @segiddins)
+ - avoid installing extraneous gems when resolving to an older version of a spec ([#4101](https://github.com/bundler/bundler/issues/4101), [#4198](https://github.com/bundler/bundler/issues/4198), @segiddins)
+ - ensure paths resolved when parsing a gemfile are relative to that file ([#3349](https://github.com/bundler/bundler/issues/3349), @dtognazzini)
+ - give a better error message when encountering an invalid gemspec ([#4248](https://github.com/bundler/bundler/issues/4248), [#4275](https://github.com/bundler/bundler/issues/4275), @RochesterinNYC)
+ - preserve the original `PATH` in `Bundler.with_clean_env` ([#4251](https://github.com/bundler/bundler/issues/4251), @segiddins)
+ - ensure standalone file paths are relative to the project root ([#4144](https://github.com/bundler/bundler/issues/4144), @glennpratt)
## 1.11.2 (2015-12-15)
Bugfixes:
- - _really_ stop calling `required_ruby_version` on nil @specifications (#4147, @indirect)
+ - _really_ stop calling `required_ruby_version` on nil @specifications ([#4147](https://github.com/bundler/bundler/issues/4147), @indirect)
## 1.11.1 (2015-12-15)
Bugfixes:
- - lazy-load Psych, again (#4149, @indirect)
- - allow gemspec gems on other platforms (#4150, @indirect)
- - fix --no-coc and --no-mit flags on `gem` (#4148, @RochesterinNYC)
- - stop calling `required_ruby_version` on nil @specifications (#4147, @indirect)
+ - lazy-load Psych, again ([#4149](https://github.com/bundler/bundler/issues/4149), @indirect)
+ - allow gemspec gems on other platforms ([#4150](https://github.com/bundler/bundler/issues/4150), @indirect)
+ - fix --no-coc and --no-mit flags on `gem` ([#4148](https://github.com/bundler/bundler/issues/4148), @RochesterinNYC)
+ - stop calling `required_ruby_version` on nil @specifications ([#4147](https://github.com/bundler/bundler/issues/4147), @indirect)
## 1.11.0 (2015-12-12)
@@ -911,16 +926,16 @@ Bugfixes:
Bugfixes:
- - fail gracefully when trying to execute a non-executable file (#4081, @fotanus)
+ - fail gracefully when trying to execute a non-executable file ([#4081](https://github.com/bundler/bundler/issues/4081), @fotanus)
- fix a crash when pushing a gem via `rake release` (@segiddins)
## 1.11.0.pre.1 (2015-11-29)
Features:
- - actual Gemfile and lockfile filenames are used in messages (#3672, @segiddins)
+ - actual Gemfile and lockfile filenames are used in messages ([#3672](https://github.com/bundler/bundler/issues/3672), @segiddins)
- the git remote for `rake release` is now customizable (@skateman)
- - file access permissions errors are now much more friendly (#3703, #3735, #3858, #3988, #4009 @repinel, @Elffers, @segiddins, @agis-)
+ - file access permissions errors are now much more friendly ([#3703](https://github.com/bundler/bundler/issues/3703), [#3735](https://github.com/bundler/bundler/issues/3735), [#3858](https://github.com/bundler/bundler/issues/3858), [#3988](https://github.com/bundler/bundler/issues/3988), [#4009](https://github.com/bundler/bundler/issues/4009) @repinel, @Elffers, @segiddins, @agis-)
- add support for showing help for plugin commands (@tf)
- send `X-Gemfile-Source` header to source mirrors (@agis-)
- show what version upstream dependencies were resolved to in conflict messages (@segiddins)
@@ -932,12 +947,12 @@ Features:
- update the `bundle gem` code of conduct template to Contributor Covenant v1.3.0 (@CoralineAda)
- add support for specifying gems to update when running `bundle lock` via `--update gem1 gem2` (@JuanitoFatas)
- added support for MRI 2.3 (@amatsuda)
- - show a helpful message when requiring a file in `bundler require` fails (#3960, @agis-)
- - include git revision hash when printing a git source (#3433, @agis-)
+ - show a helpful message when requiring a file in `bundler require` fails ([#3960](https://github.com/bundler/bundler/issues/3960), @agis-)
+ - include git revision hash when printing a git source ([#3433](https://github.com/bundler/bundler/issues/3433), @agis-)
- improve hint when a resolution conflict occurs (@seanlinsley)
- - show a friendly error when a git ref is not found (#3879, @agis-)
- - improve error message when sources are not absolute URIs (#3925, @agis-)
- - add `pkg` to rake's clobber list (#3676, @jasonkarns)
+ - show a friendly error when a git ref is not found ([#3879](https://github.com/bundler/bundler/issues/3879), @agis-)
+ - improve error message when sources are not absolute URIs ([#3925](https://github.com/bundler/bundler/issues/3925), @agis-)
+ - add `pkg` to rake's clobber list ([#3676](https://github.com/bundler/bundler/issues/3676), @jasonkarns)
- retry fetching specs when fetching version metadata fails (@jingweno)
Bugfixes:
@@ -945,36 +960,36 @@ Bugfixes:
- avoid showing bundler version warning messages twice (@fotanus)
- fix running `bundle check` with `--path` when the gems are only installed globally (@akihiro17)
- fix `bin/setup` from `bundle gem` assuming `bash` is in `/bin`
- - fail more gracefully when an HTTP remote is unreachable (#3765, @steverob)
+ - fail more gracefully when an HTTP remote is unreachable ([#3765](https://github.com/bundler/bundler/issues/3765), @steverob)
- fix a warning running `bundle exec` on jruby 9.0.0.0 (@deivid-rodriguez, @mastfish)
- fix the `bundle gem` readme when no tests are generated (@roseweixel)
- - the dependencies on test gems in `bundle gem` are now locked to major versions (#3811, @indirect)
- - fix the paths for native extensions generated by `--standalone` (#3813, @AlexanderPavlenko)
+ - the dependencies on test gems in `bundle gem` are now locked to major versions ([#3811](https://github.com/bundler/bundler/issues/3811), @indirect)
+ - fix the paths for native extensions generated by `--standalone` ([#3813](https://github.com/bundler/bundler/issues/3813), @AlexanderPavlenko)
- fix trying to cache a gem that has no source (@EduardoBautista)
- - fix `--source` option to `bundle update` causing incorrect gem unlocking (#3759, #3761, @neoeno)
- - fix handling an empty `BUNDLE_GEMFILE` environment variables (#3678, @agis-)
+ - fix `--source` option to `bundle update` causing incorrect gem unlocking ([#3759](https://github.com/bundler/bundler/issues/3759), [#3761](https://github.com/bundler/bundler/issues/3761), @neoeno)
+ - fix handling an empty `BUNDLE_GEMFILE` environment variables ([#3678](https://github.com/bundler/bundler/issues/3678), @agis-)
- avoid cleaning up gem extension directory in `bundle clean` (@Sirupsen)
- fix the `ssl_verify_mode` setting not being treated as a number (@goughy000)
- - fix not retrying on zlib errors (#4047, @andremedeiros)
+ - fix not retrying on zlib errors ([#4047](https://github.com/bundler/bundler/issues/4047), @andremedeiros)
- fix a warning being shown for using `URI.encode` (@EduardoBautista)
- - fix handling of fatal HTTP errors (#3830, @indirect)
- - ensure all `sudo` access is done in a thread-safe manner (#3910, @agis-)
+ - fix handling of fatal HTTP errors ([#3830](https://github.com/bundler/bundler/issues/3830), @indirect)
+ - ensure all `sudo` access is done in a thread-safe manner ([#3910](https://github.com/bundler/bundler/issues/3910), @agis-)
- fix caching gems with a path with the same prefix as the bundled application (@indirect)
- - fix showing gemspec validation errors on `bundle exec` (#3895, @agis-)
- - distinguish Gemfile syntax and evaluation errors (#3783, @agis-)
- - fix nested Gemfile sources not restoring the previous source (#3974, @agis-)
- - fix the `RUBYLIB` environment variable not being cleaned (#3982, @agis-)
- - fix handling a dependency missing from `Gemfile.lock` so parallel installation does not deadlock (#4012, @lukaso)
+ - fix showing gemspec validation errors on `bundle exec` ([#3895](https://github.com/bundler/bundler/issues/3895), @agis-)
+ - distinguish Gemfile syntax and evaluation errors ([#3783](https://github.com/bundler/bundler/issues/3783), @agis-)
+ - fix nested Gemfile sources not restoring the previous source ([#3974](https://github.com/bundler/bundler/issues/3974), @agis-)
+ - fix the `RUBYLIB` environment variable not being cleaned ([#3982](https://github.com/bundler/bundler/issues/3982), @agis-)
+ - fix handling a dependency missing from `Gemfile.lock` so parallel installation does not deadlock ([#4012](https://github.com/bundler/bundler/issues/4012), @lukaso)
- also print gemspecs in `bundle env` output (@agis-)
- - fix handling when a `path` source does not have a gemspec but a lockfile says there is (#4004, @segiddins)
- - show a warning when the `RUBYGEMS_GEMDEPS` environment variable is set (#3656, @agis-)
- - fix handling invalid RubyGems configuration files (#4042, @agis-)
+ - fix handling when a `path` source does not have a gemspec but a lockfile says there is ([#4004](https://github.com/bundler/bundler/issues/4004), @segiddins)
+ - show a warning when the `RUBYGEMS_GEMDEPS` environment variable is set ([#3656](https://github.com/bundler/bundler/issues/3656), @agis-)
+ - fix handling invalid RubyGems configuration files ([#4042](https://github.com/bundler/bundler/issues/4042), @agis-)
- fix `bundle console` falling back to `irb` when the preferred console is unavailable (@felixbuenemann)
- - restrict platforms when referencing a `gemspec` in the `Gemfile` to those defined in the gemspec (#4102, @smellsblue)
+ - restrict platforms when referencing a `gemspec` in the `Gemfile` to those defined in the gemspec ([#4102](https://github.com/bundler/bundler/issues/4102), @smellsblue)
Performance:
- - speed up dependency resolution in pathological cases by 25x (#3803, @segiddins)
+ - speed up dependency resolution in pathological cases by 25x ([#3803](https://github.com/bundler/bundler/issues/3803), @segiddins)
- drop string allocations when searching for gems (@jrafanie)
## 1.10.6 (2015-07-22)
@@ -985,8 +1000,8 @@ Workarounds:
Bugfixes:
- - fix installing dependencies in the correct order (#3799, @pducks32)
- - fix sorting of mixed DependencyLists (#3762, @tony-spataro-rs)
+ - fix installing dependencies in the correct order ([#3799](https://github.com/bundler/bundler/issues/3799), @pducks32)
+ - fix sorting of mixed DependencyLists ([#3762](https://github.com/bundler/bundler/issues/3762), @tony-spataro-rs)
- fix `install_if` conditionals when using the block form (@danieltdt)
## 1.10.5 (2015-06-24)
@@ -997,9 +1012,9 @@ Workarounds:
Bugfixes:
- - fix sorting of mixed DependencyLists with RubyGems >= 2.23 (#3762, @tony-spataro-rs)
+ - fix sorting of mixed DependencyLists with RubyGems >= 2.23 ([#3762](https://github.com/bundler/bundler/issues/3762), @tony-spataro-rs)
- speed up resolver for path and git gems (@segiddins)
- - fix `install --force` to not reinstall Bundler (#3743, @karlo57)
+ - fix `install --force` to not reinstall Bundler ([#3743](https://github.com/bundler/bundler/issues/3743), @karlo57)
## 1.10.4 (2015-06-16)
@@ -1016,24 +1031,24 @@ Bugfixes:
Bugfixes:
- - allow missing gemspec files when validating path and git gems (#3686, #3698, @segiddins)
- - fix regression in `rake install` (#3701, #3705, @segiddins)
- - fix regression when calling `gem` with `bundle exec` or `-rbundler/setup` (#3699, @segiddins)
- - fix `bundler/inline` requiring a newly-installed gem (#3693, @indirect, @segiddins)
+ - allow missing gemspec files when validating path and git gems ([#3686](https://github.com/bundler/bundler/issues/3686), [#3698](https://github.com/bundler/bundler/issues/3698), @segiddins)
+ - fix regression in `rake install` ([#3701](https://github.com/bundler/bundler/issues/3701), [#3705](https://github.com/bundler/bundler/issues/3705), @segiddins)
+ - fix regression when calling `gem` with `bundle exec` or `-rbundler/setup` ([#3699](https://github.com/bundler/bundler/issues/3699), @segiddins)
+ - fix `bundler/inline` requiring a newly-installed gem ([#3693](https://github.com/bundler/bundler/issues/3693), @indirect, @segiddins)
## 1.10.2 (2015-05-29)
Bugfixes:
- - fix regression in `bundle update GEM` performance introduced in 1.10.0 (#3687, @segiddins)
+ - fix regression in `bundle update GEM` performance introduced in 1.10.0 ([#3687](https://github.com/bundler/bundler/issues/3687), @segiddins)
## 1.10.1 (2015-05-28)
Bugfixes:
- silence ruby warning when running CLI commands (@segiddins)
- - validate gemspecs in non-packaging mode (#3681, @segiddins)
- - ensure the same chdir mutex as RubyGems is used (#3680, @segiddins)
+ - validate gemspecs in non-packaging mode ([#3681](https://github.com/bundler/bundler/issues/3681), @segiddins)
+ - ensure the same chdir mutex as RubyGems is used ([#3680](https://github.com/bundler/bundler/issues/3680), @segiddins)
## 1.10.0 (2015-05-28)
@@ -1043,54 +1058,54 @@ Bugfixes:
Features:
- - dramatically speed up resolving some slow Gemfiles (#3635, @segiddins)
- - track CI platforms running Bundler (#3646, @fotanus)
+ - dramatically speed up resolving some slow Gemfiles ([#3635](https://github.com/bundler/bundler/issues/3635), @segiddins)
+ - track CI platforms running Bundler ([#3646](https://github.com/bundler/bundler/issues/3646), @fotanus)
Bugfixes:
- - allow `viz` to work with prereleases (#3621, #3217, @aprescott)
- - validate gemspecs used in path and git gems (#3639, @segiddins, @indirect)
- - stop printing config warnings when config is unchanged (#3649, @fotanus, @indirect)
+ - allow `viz` to work with prereleases ([#3621](https://github.com/bundler/bundler/issues/3621), [#3217](https://github.com/bundler/bundler/issues/3217), @aprescott)
+ - validate gemspecs used in path and git gems ([#3639](https://github.com/bundler/bundler/issues/3639), @segiddins, @indirect)
+ - stop printing config warnings when config is unchanged ([#3649](https://github.com/bundler/bundler/issues/3649), @fotanus, @indirect)
- Without groups saved via `config` are no longer ignored when the `--without` flag is used
## 1.10.0.pre.2 (2015-05-07)
Bugfixes:
- - make BUNDLED WITH backwards compatible (#3623, @segiddins)
+ - make BUNDLED WITH backwards compatible ([#3623](https://github.com/bundler/bundler/issues/3623), @segiddins)
## 1.10.0.pre.1 (2015-05-05)
Bugfixes:
- - always clean up tmp dirs (#3277, @hone, @indirect, @segiddins)
+ - always clean up tmp dirs ([#3277](https://github.com/bundler/bundler/issues/3277), @hone, @indirect, @segiddins)
## 1.10.0.pre (2015-05-03)
Features:
- - support gem extensions built into any directory on RubyGems 2.2+ (#3582, @voxik)
- - add 'bundler/inline' which provides a `gemfile` method (#3440, @segiddins)
- - improved error reports for Gemfile errors (#3480, @segiddins)
- - `lock` command (#3437, @segiddins)
- - add `ignore_messages` config to suppress post-install text (#3510, @pducks32)
- - improve `gem` minitest template (#3513, #3515, @arthurnn)
- - add `install --force` to re-install installed gems (#3519, @segiddins)
+ - support gem extensions built into any directory on RubyGems 2.2+ ([#3582](https://github.com/bundler/bundler/issues/3582), @voxik)
+ - add 'bundler/inline' which provides a `gemfile` method ([#3440](https://github.com/bundler/bundler/issues/3440), @segiddins)
+ - improved error reports for Gemfile errors ([#3480](https://github.com/bundler/bundler/issues/3480), @segiddins)
+ - `lock` command ([#3437](https://github.com/bundler/bundler/issues/3437), @segiddins)
+ - add `ignore_messages` config to suppress post-install text ([#3510](https://github.com/bundler/bundler/issues/3510), @pducks32)
+ - improve `gem` minitest template ([#3513](https://github.com/bundler/bundler/issues/3513), [#3515](https://github.com/bundler/bundler/issues/3515), @arthurnn)
+ - add `install --force` to re-install installed gems ([#3519](https://github.com/bundler/bundler/issues/3519), @segiddins)
- show more `outdated` information, including groups (@smlance, @indirect)
- - add optional groups to the Gemfile (#3531, @jhass)
- - accept glob argument to `gemspec` in Gemfile (#3464, @pjump)
- - make timeouts and retries configurable via `config` (#3601, @pducks32)
- - add `install_if` Gemfile method for conditional installs (#3611, @segiddins)
+ - add optional groups to the Gemfile ([#3531](https://github.com/bundler/bundler/issues/3531), @jhass)
+ - accept glob argument to `gemspec` in Gemfile ([#3464](https://github.com/bundler/bundler/issues/3464), @pjump)
+ - make timeouts and retries configurable via `config` ([#3601](https://github.com/bundler/bundler/issues/3601), @pducks32)
+ - add `install_if` Gemfile method for conditional installs ([#3611](https://github.com/bundler/bundler/issues/3611), @segiddins)
Bugfixes:
- - standalone mode now uses builtin gems correctly (#3610, @segiddins)
- - fix `rake spec:deps` on MinGW Ruby 2.0+ (#3487, @marutosi)
- - remember all y/n answers when generating gems (#3579, @pducks32)
+ - standalone mode now uses builtin gems correctly ([#3610](https://github.com/bundler/bundler/issues/3610), @segiddins)
+ - fix `rake spec:deps` on MinGW Ruby 2.0+ ([#3487](https://github.com/bundler/bundler/issues/3487), @marutosi)
+ - remember all y/n answers when generating gems ([#3579](https://github.com/bundler/bundler/issues/3579), @pducks32)
Performance:
- - use RubyGems stub specifications when possible (#3580, @segiddins)
+ - use RubyGems stub specifications when possible ([#3580](https://github.com/bundler/bundler/issues/3580), @segiddins)
Deprecations:
@@ -1106,65 +1121,65 @@ Features:
Bugfixes:
- - read mirror and credential settings from older versions (#3557, @Strech)
+ - read mirror and credential settings from older versions ([#3557](https://github.com/bundler/bundler/issues/3557), @Strech)
## 1.9.8 (2015-05-12)
Bugfixes:
- - fix regression in sudo mode introduced by 1.9.7 (#3642, @segiddins)
+ - fix regression in sudo mode introduced by 1.9.7 ([#3642](https://github.com/bundler/bundler/issues/3642), @segiddins)
## 1.9.7 (2015-05-11)
Bugfixes:
- - always clean up tmp dirs (#3277, @hone, @indirect, @segiddins)
+ - always clean up tmp dirs ([#3277](https://github.com/bundler/bundler/issues/3277), @hone, @indirect, @segiddins)
## 1.9.6 (2015-05-02)
Bugfixes:
- use RubyGems spec stubs if available (@segiddins)
- - allow creating gems with names containing two dashes (#3483, @janlelis)
- - allow creating gems with names extending constants (#3603, @amatsuda)
+ - allow creating gems with names containing two dashes ([#3483](https://github.com/bundler/bundler/issues/3483), @janlelis)
+ - allow creating gems with names extending constants ([#3603](https://github.com/bundler/bundler/issues/3603), @amatsuda)
## 1.9.5 (2015-04-29)
Bugfixes:
- - respect Gemfile sources when installing a gem present in two sources (#3585, @tmoore)
+ - respect Gemfile sources when installing a gem present in two sources ([#3585](https://github.com/bundler/bundler/issues/3585), @tmoore)
## 1.9.4 (2015-04-13)
Bugfixes:
- - fix regression in installing x86 and universal gems (#3565, @jdmundrawala)
- - improve error when gems are missing (#3564, @sealocal)
+ - fix regression in installing x86 and universal gems ([#3565](https://github.com/bundler/bundler/issues/3565), @jdmundrawala)
+ - improve error when gems are missing ([#3564](https://github.com/bundler/bundler/issues/3564), @sealocal)
## 1.9.3 (2015-04-12)
Bugfixes:
- - handle removal of `specs` from rubygems/rubygems@620910 (#3558, @indirect)
- - install 'universal' gems on Windows (#3066, @jdmundrawala)
- - stop passing --local during `rake install` task (#3236, @indirect)
- - guard against all possible accidental public gem pushes (#3533, @indirect)
+ - handle removal of `specs` from rubygems/rubygems@620910 ([#3558](https://github.com/bundler/bundler/issues/3558), @indirect)
+ - install 'universal' gems on Windows ([#3066](https://github.com/bundler/bundler/issues/3066), @jdmundrawala)
+ - stop passing --local during `rake install` task ([#3236](https://github.com/bundler/bundler/issues/3236), @indirect)
+ - guard against all possible accidental public gem pushes ([#3533](https://github.com/bundler/bundler/issues/3533), @indirect)
## 1.9.2 (2015-03-30)
Bugfixes:
- - ensure gem executables are executable (#3517, #3511, @indirect)
- - fix warnings in Molinillo (#3516, @segiddins)
- - ensure duplicate dependencies do not propagate (#3522, @segiddins)
- - keep gems locked when updating another gem from the same source (#3520, @indirect)
- - resolve race that could build gems without saved arguments (#3404, @indirect)
+ - ensure gem executables are executable ([#3517](https://github.com/bundler/bundler/issues/3517), [#3511](https://github.com/bundler/bundler/issues/3511), @indirect)
+ - fix warnings in Molinillo ([#3516](https://github.com/bundler/bundler/issues/3516), @segiddins)
+ - ensure duplicate dependencies do not propagate ([#3522](https://github.com/bundler/bundler/issues/3522), @segiddins)
+ - keep gems locked when updating another gem from the same source ([#3520](https://github.com/bundler/bundler/issues/3520), @indirect)
+ - resolve race that could build gems without saved arguments ([#3404](https://github.com/bundler/bundler/issues/3404), @indirect)
## 1.9.1 (2015-03-21)
Bugfixes:
- - avoid exception in 'bundler/gem_tasks' (#3492, @segiddins)
+ - avoid exception in 'bundler/gem_tasks' ([#3492](https://github.com/bundler/bundler/issues/3492), @segiddins)
## 1.9.0 (2015-03-20)
@@ -1173,7 +1188,7 @@ Bugfixes:
Bugfixes:
- make Bundler.which stop finding directories (@nohoho)
- - handle Bundler prereleases correctly (#3470, @segiddins)
+ - handle Bundler prereleases correctly ([#3470](https://github.com/bundler/bundler/issues/3470), @segiddins)
- add before_install to .travis.yml template for new gems (@kodnin)
## 1.9.0.pre.1 (2015-03-11)
@@ -1186,8 +1201,8 @@ Bugfixes:
Features:
- - prefer gemspecs closest to the directory root (#3428, @segiddins)
- - debug log for API request limits (#3452, @neerfri)
+ - prefer gemspecs closest to the directory root ([#3428](https://github.com/bundler/bundler/issues/3428), @segiddins)
+ - debug log for API request limits ([#3452](https://github.com/bundler/bundler/issues/3452), @neerfri)
"Features":
@@ -1204,20 +1219,20 @@ Bugfixes:
Bugfixes:
- - Respect Gemfile sources when installing a gem present in two sources (#3585, @tmoore)
+ - Respect Gemfile sources when installing a gem present in two sources ([#3585](https://github.com/bundler/bundler/issues/3585), @tmoore)
## 1.8.7 (2015-04-07)
Bugfixes:
- - stop suppressing errors inside gems that get required (#3549, @indirect)
+ - stop suppressing errors inside gems that get required ([#3549](https://github.com/bundler/bundler/issues/3549), @indirect)
## 1.8.6 (2015-03-30)
Bugfixes:
- - keep gems locked when updating another gem from the same source (#3250, @indirect)
- - resolve race that could build gems without saved arguments (#3404, @indirect)
+ - keep gems locked when updating another gem from the same source ([#3250](https://github.com/bundler/bundler/issues/3250), @indirect)
+ - resolve race that could build gems without saved arguments ([#3404](https://github.com/bundler/bundler/issues/3404), @indirect)
## 1.8.5 (2015-03-11)
@@ -1230,44 +1245,44 @@ Bugfixes:
Bugfixes:
- - document --all-platforms option (#3449, @moeffju)
- - find gems from all sources on exec after install (#3450, @TimMoore)
+ - document --all-platforms option ([#3449](https://github.com/bundler/bundler/issues/3449), @moeffju)
+ - find gems from all sources on exec after install ([#3450](https://github.com/bundler/bundler/issues/3450), @TimMoore)
## 1.8.3 (2015-02-24)
Bugfixes:
- handle boolean values for gem settings (@EduardoBautista)
- - stop always looking for updated `path` gems (#3414, #3417, #3429, @TimMoore)
+ - stop always looking for updated `path` gems ([#3414](https://github.com/bundler/bundler/issues/3414), [#3417](https://github.com/bundler/bundler/issues/3417), [#3429](https://github.com/bundler/bundler/issues/3429), @TimMoore)
## 1.8.2 (2015-02-14)
Bugfixes:
- - allow config settings for gems with 'http' in the name again (#3398, @TimMoore)
+ - allow config settings for gems with 'http' in the name again ([#3398](https://github.com/bundler/bundler/issues/3398), @TimMoore)
## 1.8.1 (2015-02-13)
Bugfixes:
- - synchronize building git gem native extensions (#3385, @antifuchs & @indirect)
- - set gemspec bindir correctly (#3392, @TimMoore)
- - request lockfile deletion when it is malformed (#3396, @indirect)
- - explain problem when mirror config is missing (#3386, @indirect)
- - explain problem when caching causes permission error (#3390, @indirect)
- - normalize URLs in config keys (#3391, @indirect)
+ - synchronize building git gem native extensions ([#3385](https://github.com/bundler/bundler/issues/3385), @antifuchs & @indirect)
+ - set gemspec bindir correctly ([#3392](https://github.com/bundler/bundler/issues/3392), @TimMoore)
+ - request lockfile deletion when it is malformed ([#3396](https://github.com/bundler/bundler/issues/3396), @indirect)
+ - explain problem when mirror config is missing ([#3386](https://github.com/bundler/bundler/issues/3386), @indirect)
+ - explain problem when caching causes permission error ([#3390](https://github.com/bundler/bundler/issues/3390), @indirect)
+ - normalize URLs in config keys ([#3391](https://github.com/bundler/bundler/issues/3391), @indirect)
## 1.8.0 (2015-02-10)
Bugfixes:
- - gemfile `github` blocks now work (#3379, @indirect)
+ - gemfile `github` blocks now work ([#3379](https://github.com/bundler/bundler/issues/3379), @indirect)
Bugfixes from v1.7.13:
- - look up installed gems in remote sources (#3300, #3368, #3377, #3380, #3381, @indirect)
- - look up gems across all sources to satisfy dependencies (#3365, @keiths-osc)
- - request dependencies for no more than 100 gems at a time (#3367, @segiddins)
+ - look up installed gems in remote sources ([#3300](https://github.com/bundler/bundler/issues/3300), [#3368](https://github.com/bundler/bundler/issues/3368), [#3377](https://github.com/bundler/bundler/issues/3377), [#3380](https://github.com/bundler/bundler/issues/3380), [#3381](https://github.com/bundler/bundler/issues/3381), @indirect)
+ - look up gems across all sources to satisfy dependencies ([#3365](https://github.com/bundler/bundler/issues/3365), @keiths-osc)
+ - request dependencies for no more than 100 gems at a time ([#3367](https://github.com/bundler/bundler/issues/3367), @segiddins)
## 1.8.0.rc (2015-01-26)
@@ -1277,7 +1292,7 @@ Features:
Bugfixes:
- - don't add extra quotes around long, quoted config values (@aroben, #3338)
+ - don't add extra quotes around long, quoted config values (@aroben, [#3338](https://github.com/bundler/bundler/issues/3338))
Security:
@@ -1287,7 +1302,7 @@ Security:
Features:
- - add metadata allowed_push_host to new gem template (#3002, @juanitofatas)
+ - add metadata allowed_push_host to new gem template ([#3002](https://github.com/bundler/bundler/issues/3002), @juanitofatas)
- adds a `--no-install` flag to `bundle package` (@d-reinhold)
- add `bundle config auto_install true` to install automatically (@smashwilson)
- add `bundle viz --without` to exclude gem groups from resulting graph (@fnichol)
@@ -1322,66 +1337,66 @@ Documentation:
Bugfixes:
- - Respect Gemfile sources when installing a gem present in two sources (#3585, @tmoore)
+ - Respect Gemfile sources when installing a gem present in two sources ([#3585](https://github.com/bundler/bundler/issues/3585), @tmoore)
## 1.7.14 (2015-03-30)
Bugfixes:
- - Keep gems locked when updating another gem from the same source (#3250, @indirect)
- - Don't add extra quotes around long, quoted config values (@aroben, #3338)
+ - Keep gems locked when updating another gem from the same source ([#3250](https://github.com/bundler/bundler/issues/3250), @indirect)
+ - Don't add extra quotes around long, quoted config values (@aroben, [#3338](https://github.com/bundler/bundler/issues/3338))
## 1.7.13 (2015-02-07)
Bugfixes:
- - Look up installed gems in remote sources (#3300, #3368, #3377, #3380, #3381, @indirect)
- - Look up gems across all sources to satisfy dependencies (#3365, @keiths-osc)
- - Request dependencies for no more than 100 gems at a time (#3367, @segiddins)
+ - Look up installed gems in remote sources ([#3300](https://github.com/bundler/bundler/issues/3300), [#3368](https://github.com/bundler/bundler/issues/3368), [#3377](https://github.com/bundler/bundler/issues/3377), [#3380](https://github.com/bundler/bundler/issues/3380), [#3381](https://github.com/bundler/bundler/issues/3381), @indirect)
+ - Look up gems across all sources to satisfy dependencies ([#3365](https://github.com/bundler/bundler/issues/3365), @keiths-osc)
+ - Request dependencies for no more than 100 gems at a time ([#3367](https://github.com/bundler/bundler/issues/3367), @segiddins)
## 1.7.12 (2015-01-08)
Bugfixes:
- - Always send credentials for sources, fixing private Gemfury gems (#3342, @TimMoore)
+ - Always send credentials for sources, fixing private Gemfury gems ([#3342](https://github.com/bundler/bundler/issues/3342), @TimMoore)
## 1.7.11 (2015-01-04)
Bugfixes:
- - Recognize `:mri_22` and `:mingw_22`, rather than just `:ruby_22` (#3328, @myabc)
+ - Recognize `:mri_22` and `:mingw_22`, rather than just `:ruby_22` ([#3328](https://github.com/bundler/bundler/issues/3328), @myabc)
## 1.7.10 (2014-12-29)
Bugfixes:
- - Fix source blocks sometimes causing deployment mode to fail wrongly (#3298, @TimMoore)
+ - Fix source blocks sometimes causing deployment mode to fail wrongly ([#3298](https://github.com/bundler/bundler/issues/3298), @TimMoore)
Features(?):
- - Support `platform :mri_22` and related version bits (#3309, @thomasfedb)
+ - Support `platform :mri_22` and related version bits ([#3309](https://github.com/bundler/bundler/issues/3309), @thomasfedb)
## 1.7.9 (2014-12-09)
Bugfixes:
- - Fix an issue where bundler sometime spams one gem in Gemfile.lock (#3216, @Who828)
- - Ensure bundle update installs the newer version of the gem (#3089, @Who828)
- - Fix an regression which stopped Bundler from resolving some Gemfiles (#3059, #3248, @Who828)
+ - Fix an issue where bundler sometime spams one gem in Gemfile.lock ([#3216](https://github.com/bundler/bundler/issues/3216), @Who828)
+ - Ensure bundle update installs the newer version of the gem ([#3089](https://github.com/bundler/bundler/issues/3089), @Who828)
+ - Fix an regression which stopped Bundler from resolving some Gemfiles ([#3059](https://github.com/bundler/bundler/issues/3059), [#3248](https://github.com/bundler/bundler/issues/3248), @Who828)
## 1.7.8 (2014-12-06)
Bugfixes:
- - Hide credentials while warning about gems with ambiguous sources (#3256, @TimMoore)
+ - Hide credentials while warning about gems with ambiguous sources ([#3256](https://github.com/bundler/bundler/issues/3256), @TimMoore)
## 1.7.7 (2014-11-19)
Bugfixes:
- - Ensure server credentials stored in config or ENV will be used (#3180, @arronmabrey)
- - Fix race condition causing errors while installing git-based gems (#3174, @Who828)
- - Use single quotes in config so YAML won't add more quotes (#3261, @indirect)
+ - Ensure server credentials stored in config or ENV will be used ([#3180](https://github.com/bundler/bundler/issues/3180), @arronmabrey)
+ - Fix race condition causing errors while installing git-based gems ([#3174](https://github.com/bundler/bundler/issues/3174), @Who828)
+ - Use single quotes in config so YAML won't add more quotes ([#3261](https://github.com/bundler/bundler/issues/3261), @indirect)
## 1.7.6 (2014-11-11)
@@ -1393,17 +1408,17 @@ Bugfixes:
Bugfixes:
- - Fix --deployment with source blocks and non-alphabetical gems (#3224, @TimMoore)
+ - Fix --deployment with source blocks and non-alphabetical gems ([#3224](https://github.com/bundler/bundler/issues/3224), @TimMoore)
- Vendor CA chain to validate new rubygems.org HTTPS certificate (@indirect)
## 1.7.4 (2014-10-19)
Bugfixes:
- - Allow --deployment after `pack` while using source blocks (#3167, @TimMoore)
- - Use dependency API even when HTTP credentials are in ENV (#3191, @fvaleur)
- - Silence warnings (including root warning) in --quiet mode (#3186, @indirect)
- - Stop asking gem servers for gems already found locally (#2909, @dubek)
+ - Allow --deployment after `pack` while using source blocks ([#3167](https://github.com/bundler/bundler/issues/3167), @TimMoore)
+ - Use dependency API even when HTTP credentials are in ENV ([#3191](https://github.com/bundler/bundler/issues/3191), @fvaleur)
+ - Silence warnings (including root warning) in --quiet mode ([#3186](https://github.com/bundler/bundler/issues/3186), @indirect)
+ - Stop asking gem servers for gems already found locally ([#2909](https://github.com/bundler/bundler/issues/2909), @dubek)
## 1.7.3 (2014-09-14)
@@ -1461,15 +1476,15 @@ Bugfixes:
Bugfixes:
- - require openssl explicitly to fix rare HTTPS request failures (@indirect, #3107)
+ - require openssl explicitly to fix rare HTTPS request failures (@indirect, [#3107](https://github.com/bundler/bundler/issues/3107))
## 1.6.4 (2014-07-17)
Bugfixes:
- - fix undefined constant error when can't find gem during binstubs (#3095, @jetaggart)
- - work when installed git gems are not writable (#3092, @pmahoney)
- - don't store configured source credentials in Gemfile.lock (#3045, @lhz)
+ - fix undefined constant error when can't find gem during binstubs ([#3095](https://github.com/bundler/bundler/issues/3095), @jetaggart)
+ - work when installed git gems are not writable ([#3092](https://github.com/bundler/bundler/issues/3092), @pmahoney)
+ - don't store configured source credentials in Gemfile.lock ([#3045](https://github.com/bundler/bundler/issues/3045), @lhz)
- don't include config source credentials in the lockfile (Lars Haugseth)
- use threads for jobs on Rubinius (@YorickPeterse)
- skip dependencies from other platforms (@mvz)
@@ -1479,30 +1494,30 @@ Bugfixes:
Bugfixes:
- - fix regression when resolving many conflicts (#2994, @Who828)
- - use local gemspec for builtin gems during install --local (#3041, @Who828)
- - don't warn about sudo when installing on Windows (#2984, @indirect)
+ - fix regression when resolving many conflicts ([#2994](https://github.com/bundler/bundler/issues/2994), @Who828)
+ - use local gemspec for builtin gems during install --local ([#3041](https://github.com/bundler/bundler/issues/3041), @Who828)
+ - don't warn about sudo when installing on Windows ([#2984](https://github.com/bundler/bundler/issues/2984), @indirect)
- shell escape `bundle open` arguments (@indirect)
## 1.6.2 (2014-04-13)
Bugfixes:
- - fix an exception when using builtin gems (#2915, #2963, @gnufied)
- - cache gems that are built in to the running ruby (#2975, @indirect)
- - re-allow deploying cached git gems without git installed (#2968, @aughr)
+ - fix an exception when using builtin gems ([#2915](https://github.com/bundler/bundler/issues/2915), [#2963](https://github.com/bundler/bundler/issues/2963), @gnufied)
+ - cache gems that are built in to the running ruby ([#2975](https://github.com/bundler/bundler/issues/2975), @indirect)
+ - re-allow deploying cached git gems without git installed ([#2968](https://github.com/bundler/bundler/issues/2968), @aughr)
- keep standalone working even with builtin gems (@indirect)
- - don't update vendor/cache in deployment mode (#2921, @indirect)
+ - don't update vendor/cache in deployment mode ([#2921](https://github.com/bundler/bundler/issues/2921), @indirect)
Features:
- - warn informatively when `bundle install` is run as root (#2936, @1337807)
+ - warn informatively when `bundle install` is run as root ([#2936](https://github.com/bundler/bundler/issues/2936), @1337807)
## 1.6.1 (2014-04-02)
Bugfixes:
- - update C extensions when git gem versions change (#2948, @dylanahsmith)
+ - update C extensions when git gem versions change ([#2948](https://github.com/bundler/bundler/issues/2948), @dylanahsmith)
Features:
@@ -1513,15 +1528,15 @@ Features:
Bugfixes:
- many Gemfiles that caused incorrect errors now resolve correctly (@Who828)
- - redirects across hosts now work on rubies without OpenSSL (#2686, @grddev)
- - gemspecs now handle filenames with newlines (#2634, @jasonmp85)
+ - redirects across hosts now work on rubies without OpenSSL ([#2686](https://github.com/bundler/bundler/issues/2686), @grddev)
+ - gemspecs now handle filenames with newlines ([#2634](https://github.com/bundler/bundler/issues/2634), @jasonmp85)
- support escaped characters in usernames and passwords (@punkie)
- no more exception on `update GEM` without lock file (@simi)
- - allow long config values (#2823, @kgrz)
- - cache successfully even locked to gems shipped with Ruby (#2869, @aughr)
- - respect NO_PROXY even if a proxy is configured (#2878, @stlay)
- - only retry git commands that hit the network (#2899, @timmoore)
- - fix NameError regression when OpenSSL is not available (#2898, @timmoore)
+ - allow long config values ([#2823](https://github.com/bundler/bundler/issues/2823), @kgrz)
+ - cache successfully even locked to gems shipped with Ruby ([#2869](https://github.com/bundler/bundler/issues/2869), @aughr)
+ - respect NO_PROXY even if a proxy is configured ([#2878](https://github.com/bundler/bundler/issues/2878), @stlay)
+ - only retry git commands that hit the network ([#2899](https://github.com/bundler/bundler/issues/2899), @timmoore)
+ - fix NameError regression when OpenSSL is not available ([#2898](https://github.com/bundler/bundler/issues/2898), @timmoore)
- handle exception installing when build_info owned by root (@Who828)
- skip HTTP redirects from rubygems.org, huge speed boost (@Who828)
@@ -1532,13 +1547,13 @@ Features:
- HTTP auth may now be stored in `bundle config` (@smashwilson)
- some complex Gemfiles are resolved up to 10x faster (@Who828)
- add support for IRB alternatives such as Pry and Ripl (@joallard, @postmodern)
- - highlight installed or updated gems (#2722, #2741, @yaotti, @simi)
+ - highlight installed or updated gems ([#2722](https://github.com/bundler/bundler/issues/2722), [#2741](https://github.com/bundler/bundler/issues/2741), @yaotti, @simi)
- display the `post_install_message` for gems installed via :git (@phallstrom)
- `bundle outdated --strict` now only reports allowed updates (@davidblondeau)
- `bundle show --verbose` Add gem summary to the output (@lardcanoe)
- `bundle gem GEM --ext` now generates a skeleton for a C extension (@superdealloc)
- Avoid using threequals operator where possible (@as-cii)
- - Add `bundle update --group` to update specific group (#2731 @banyan)
+ - Add `bundle update --group` to update specific group ([#2731](https://github.com/bundler/bundler/issues/2731) @banyan)
Documentation:
@@ -1548,7 +1563,7 @@ Documentation:
Bugfixes:
- - find "missing" gems that are actually present (#2780, #2818, #2854)
+ - find "missing" gems that are actually present ([#2780](https://github.com/bundler/bundler/issues/2780), [#2818](https://github.com/bundler/bundler/issues/2818), [#2854](https://github.com/bundler/bundler/issues/2854))
- use n-1 cores when given n jobs for parallel install (@jdickey)
## 1.5.2 (2014-01-10)
@@ -1593,19 +1608,19 @@ Bugfixes:
Features:
- - bundle update also accepts --jobs (#2692, @mrkn)
- - add fork URL to README for new `bundle gem` (#2665, @zzak)
- - add `bundle outdated --strict` (#2685, @davidblondeau)
- - warn if same gem/version is added twice (#2679, @jendiamond)
- - don't redownload installed specs for `bundle install` (#2680, @cainlevy)
- - override gem sources with mirrors (#2650, @danielsdeleo, @mkristian)
+ - bundle update also accepts --jobs ([#2692](https://github.com/bundler/bundler/issues/2692), @mrkn)
+ - add fork URL to README for new `bundle gem` ([#2665](https://github.com/bundler/bundler/issues/2665), @zzak)
+ - add `bundle outdated --strict` ([#2685](https://github.com/bundler/bundler/issues/2685), @davidblondeau)
+ - warn if same gem/version is added twice ([#2679](https://github.com/bundler/bundler/issues/2679), @jendiamond)
+ - don't redownload installed specs for `bundle install` ([#2680](https://github.com/bundler/bundler/issues/2680), @cainlevy)
+ - override gem sources with mirrors ([#2650](https://github.com/bundler/bundler/issues/2650), @danielsdeleo, @mkristian)
Bugfixes:
- - fix sharing same SSL socket when forking workers for parallel install (#2632)
- - fix msg typo in GitNotAllowedError (#2654, @joyicecloud)
- - fix Bundler.which for directories (#2697, @rhysd)
- - properly require `Capistrano::Version` (#2690, @steveklabnik)
+ - fix sharing same SSL socket when forking workers for parallel install ([#2632](https://github.com/bundler/bundler/issues/2632))
+ - fix msg typo in GitNotAllowedError ([#2654](https://github.com/bundler/bundler/issues/2654), @joyicecloud)
+ - fix Bundler.which for directories ([#2697](https://github.com/bundler/bundler/issues/2697), @rhysd)
+ - properly require `Capistrano::Version` ([#2690](https://github.com/bundler/bundler/issues/2690), @steveklabnik)
- search for git.exe and git
- fix the bug that downloads every spec when API fetcher encouters an error
- only retry network requests
@@ -1614,10 +1629,10 @@ Bugfixes:
Features:
- - add support for the x64-mingw32 platform (#2356, #2590, @larskanis)
+ - add support for the x64-mingw32 platform ([#2356](https://github.com/bundler/bundler/issues/2356), [#2590](https://github.com/bundler/bundler/issues/2590), @larskanis)
- add :patchlevel option to ruby DSL
- - add `bundler` bin (#2598, @kirs)
- - friendly ambiguous error messages (#2581, #2550, @jlsuttles, @jendiamond, @joyicecloud)
+ - add `bundler` bin ([#2598](https://github.com/bundler/bundler/issues/2598), @kirs)
+ - friendly ambiguous error messages ([#2581](https://github.com/bundler/bundler/issues/2581), [#2550](https://github.com/bundler/bundler/issues/2550), @jlsuttles, @jendiamond, @joyicecloud)
- add `:jruby_18` and `:jruby_19` platform options (@mcfiredrill)
- add X.509 client certificates for auth without passwords (@snackbandit)
- add `exec --keep-file-descriptors` for Ruby 1.9-like behavior on 2.0 (@steved555)
@@ -1629,56 +1644,56 @@ Features:
Bugfixes:
- - allow passwordless Basic Auth (#2606, @rykov)
+ - allow passwordless Basic Auth ([#2606](https://github.com/bundler/bundler/issues/2606), @rykov)
- don't suggest `gem install foo` when `foo` is a git gem that fails (@kirs)
- - revert #2569, staying compatible with git: instead of https: for :github gems
+ - revert [#2569](https://github.com/bundler/bundler/issues/2569), staying compatible with git: instead of https: for :github gems
- handle exceptions while installing gems in parallel (@gnufied)
## 1.4.0.pre.1 (2013-08-04)
Features:
- - retry network requests while installing gems (#2561, @ascherger)
- - faster installs using gemspecs from the local system cache (#2497, @mipearson)
- - add `bundle install -jN` for N parallel gem installations (#2481, @eagletmt)
+ - retry network requests while installing gems ([#2561](https://github.com/bundler/bundler/issues/2561), @ascherger)
+ - faster installs using gemspecs from the local system cache ([#2497](https://github.com/bundler/bundler/issues/2497), @mipearson)
+ - add `bundle install -jN` for N parallel gem installations ([#2481](https://github.com/bundler/bundler/issues/2481), @eagletmt)
- add `ENV['DEBUG_RESOLVER_TREE']` outputs resolver tree (@dblock)
- - set $MANPATH so `bundle exec man name` works (#1624, @sunaku)
- - use `man` instead of `groff` (#2579, @ixti, @simi)
- - add Gemfile dependency info to bundle outdated output (#2487, @rahearn)
- - allow `require: true` as an alias for `require: <name>` (#2538, @ndbroadbent)
- - rescue and report Thor errors (#2478, @pjvds)
- - detect cyclic dependencies (#2564, @gnufied)
- - support multiple gems in `binstubs` (#2576, @lucasmazza)
- - use https instead of git for :github gems (#2569, @fuadsaud)
- - add quiet option to `bundle package` (#2573, @shtirlic)
- - use RUBYLIB instead of RUBYOPT for better Windows support (#2536, @equinux)
+ - set $MANPATH so `bundle exec man name` works ([#1624](https://github.com/bundler/bundler/issues/1624), @sunaku)
+ - use `man` instead of `groff` ([#2579](https://github.com/bundler/bundler/issues/2579), @ixti, @simi)
+ - add Gemfile dependency info to bundle outdated output ([#2487](https://github.com/bundler/bundler/issues/2487), @rahearn)
+ - allow `require: true` as an alias for `require: <name>` ([#2538](https://github.com/bundler/bundler/issues/2538), @ndbroadbent)
+ - rescue and report Thor errors ([#2478](https://github.com/bundler/bundler/issues/2478), @pjvds)
+ - detect cyclic dependencies ([#2564](https://github.com/bundler/bundler/issues/2564), @gnufied)
+ - support multiple gems in `binstubs` ([#2576](https://github.com/bundler/bundler/issues/2576), @lucasmazza)
+ - use https instead of git for :github gems ([#2569](https://github.com/bundler/bundler/issues/2569), @fuadsaud)
+ - add quiet option to `bundle package` ([#2573](https://github.com/bundler/bundler/issues/2573), @shtirlic)
+ - use RUBYLIB instead of RUBYOPT for better Windows support ([#2536](https://github.com/bundler/bundler/issues/2536), @equinux)
Bugfixes:
- - reduce stack size while resolving to fix JRuby overflow (#2510, @headius)
- - display GitErrors while loading specs in --verbose mode (#2461)
- - allow the same options hash to be passed to multiple gems (#2447)
- - handle missing binaries without an exception (#2019, @luismreis)
+ - reduce stack size while resolving to fix JRuby overflow ([#2510](https://github.com/bundler/bundler/issues/2510), @headius)
+ - display GitErrors while loading specs in --verbose mode ([#2461](https://github.com/bundler/bundler/issues/2461))
+ - allow the same options hash to be passed to multiple gems ([#2447](https://github.com/bundler/bundler/issues/2447))
+ - handle missing binaries without an exception ([#2019](https://github.com/bundler/bundler/issues/2019), @luismreis)
## 1.3.6 (8 January 2014)
Bugfixes:
- make gemspec path option preserve relative paths in lock file (@bwillis)
- - use umask when creating binstubs (#1618, @v-yarotsky)
- - warn if graphviz is not installed (#2435, @Agis-)
+ - use umask when creating binstubs ([#1618](https://github.com/bundler/bundler/issues/1618), @v-yarotsky)
+ - warn if graphviz is not installed ([#2435](https://github.com/bundler/bundler/issues/2435), @Agis-)
- show git errors while loading gemspecs
- - don't mutate gem method options hash (#2447)
- - print Thor errors (#2478, @pjvds)
+ - don't mutate gem method options hash ([#2447](https://github.com/bundler/bundler/issues/2447))
+ - print Thor errors ([#2478](https://github.com/bundler/bundler/issues/2478), @pjvds)
- print Rubygems system exit errors (James Cook)
- more Pathnames into Strings for MacRuby (@kml)
- preserve original gemspec path (@bwillis)
- - remove warning about deps with :git (#1651, @ixti)
- - split git files on null (#2634, @jasonmp85)
- - handle cross-host redirects without SSL (#2686, @grddev)
+ - remove warning about deps with :git ([#1651](https://github.com/bundler/bundler/issues/1651), @ixti)
+ - split git files on null ([#2634](https://github.com/bundler/bundler/issues/2634), @jasonmp85)
+ - handle cross-host redirects without SSL ([#2686](https://github.com/bundler/bundler/issues/2686), @grddev)
- handle Rubygems 2 security exception (@zzak)
- reinstall gems if they are missing with spec present
- - set binstub permissions using umask (#1618, @v-yarotsky)
+ - set binstub permissions using umask ([#1618](https://github.com/bundler/bundler/issues/1618), @v-yarotsky)
## 1.3.5 (3 April 2013)
@@ -1754,28 +1769,28 @@ Security:
- validate SSL certificate chain during HTTPS network requests
- don't send HTTP Basic Auth creds when redirected to other hosts (@perplexes)
- - add `--trust-policy` to `install`, like `gem install -P` (@CosmicCat, #2293)
+ - add `--trust-policy` to `install`, like `gem install -P` (@CosmicCat, [#2293](https://github.com/bundler/bundler/issues/2293))
Features:
- - optimize resolver when too new of a gem is already activated (@rykov, #2248)
+ - optimize resolver when too new of a gem is already activated (@rykov, [#2248](https://github.com/bundler/bundler/issues/2248))
- update Net::HTTP::Persistent for SSL cert validation and no_proxy ENV
- explain SSL cert validation failures
- generate gemspecs when installing git repos, removing shellouts
- add pager selection (@csgui)
- - add `licenses` command (@bryanwoods, #1898)
- - sort output from `outdated` (@richardkmichael, #1896)
- - add a .travis.yml to `gem -t` (@ndbroadbent, #2143)
+ - add `licenses` command (@bryanwoods, [#1898](https://github.com/bundler/bundler/issues/1898))
+ - sort output from `outdated` (@richardkmichael, [#1896](https://github.com/bundler/bundler/issues/1896))
+ - add a .travis.yml to `gem -t` (@ndbroadbent, [#2143](https://github.com/bundler/bundler/issues/2143))
- inform users when the resolver starts
- disable reverse DNS to speed up API requests (@raggi)
Bugfixes:
- - raise errors while requiring dashed gems (#1807)
- - quote the Bundler path on Windows (@jgeiger, #1862, #1856)
- - load gemspecs containing unicode (@gaffneyc, #2301)
+ - raise errors while requiring dashed gems ([#1807](https://github.com/bundler/bundler/issues/1807))
+ - quote the Bundler path on Windows (@jgeiger, [#1862](https://github.com/bundler/bundler/issues/1862), [#1856](https://github.com/bundler/bundler/issues/1856))
+ - load gemspecs containing unicode (@gaffneyc, [#2301](https://github.com/bundler/bundler/issues/2301))
- support any ruby version in --standalone
- - resolve some ruby -w warnings (@chastell, #2193)
+ - resolve some ruby -w warnings (@chastell, [#2193](https://github.com/bundler/bundler/issues/2193))
- don't scare users with an error message during API fallback
- `install --binstubs` is back to overwriting. thanks, SemVer.
@@ -1783,7 +1798,7 @@ Bugfixes:
Bugfixes:
- - stubs for gems with dev deps no longer cause exceptions (#2272)
+ - stubs for gems with dev deps no longer cause exceptions ([#2272](https://github.com/bundler/bundler/issues/2272))
- don't suggest binstubs to --binstubs users
## 1.3.0.pre.6 (22 January 2013)
@@ -1807,7 +1822,7 @@ Bugfixes:
Features:
- make `--standalone` require lines ruby engine/version agnostic
- - add `--dry-run` to `bundle clean` (@wfarr, #2237)
+ - add `--dry-run` to `bundle clean` (@wfarr, [#2237](https://github.com/bundler/bundler/issues/2237))
Bugfixes:
@@ -1840,7 +1855,7 @@ Bugfixes:
- :git gems with extensions now work with Rubygems >= 2.0 (@jeremy)
- revert SemVer breaking change to :github
- - `outdated` exits non-zero if outdated gems found (@rohit, #2021)
+ - `outdated` exits non-zero if outdated gems found (@rohit, [#2021](https://github.com/bundler/bundler/issues/2021))
- https Gist URLs for compatibility with Gist 2.0 (@NARKOZ)
- namespaced gems no longer generate a superfluous directory (@banyan)
@@ -1848,15 +1863,15 @@ Bugfixes:
Features:
- - `config` expands local overrides like `local.rack .` (@gkop, #2205)
- - `gem` generates files correctly for names like `jquery-rails` (@banyan, #2201)
+ - `config` expands local overrides like `local.rack .` (@gkop, [#2205](https://github.com/bundler/bundler/issues/2205))
+ - `gem` generates files correctly for names like `jquery-rails` (@banyan, [#2201](https://github.com/bundler/bundler/issues/2201))
- use gems from gists with the :gist option in the Gemfile (@jgaskins)
Bugfixes:
- Gemfile sources other than rubygems.org work even when .gemrc contains sources
- - caching git gems now caches specs, fixing e.g. git ls-files (@bison, #2039)
- - `show GEM` now warns if the directory has been deleted (@rohit, #2070)
+ - caching git gems now caches specs, fixing e.g. git ls-files (@bison, [#2039](https://github.com/bundler/bundler/issues/2039))
+ - `show GEM` now warns if the directory has been deleted (@rohit, [#2070](https://github.com/bundler/bundler/issues/2070))
- git output hidden when running in --quiet mode (@rohit)
## 1.3.0.pre (Nov 29, 2012)
@@ -1867,7 +1882,7 @@ Features:
- compatible with Rubygems 2.0.0.preview2 (@drbrain, @evanphx)
- ruby 2.0 added to the `:ruby19` ABI-compatible platform
- lazy load YAML, allowing Psych to be specified in the Gemfile
- - significant performance improvements (@cheald, #2181)
+ - significant performance improvements (@cheald, [#2181](https://github.com/bundler/bundler/issues/2181))
- `inject` command for scripted Gemfile additions (Engine Yard)
- :github option uses slashless arguments as repo owner (@rking)
- `open` suggests gem names for typos (@jdelStrother)
@@ -1880,12 +1895,12 @@ Features:
Bugfixes:
- JRuby new works with HTTPS gem sources (@davidcelis)
- - `install` installs both rake rake-built gems at once (@crowbot, #2107)
+ - `install` installs both rake rake-built gems at once (@crowbot, [#2107](https://github.com/bundler/bundler/issues/2107))
- handle Errno::ETIMEDOUT errors (@jmoses)
- handle Errno::EAGAIN errors on JRuby
- disable ANSI coloring when output is redirected (@tomykaira)
- raise LoadErrors correctly during Bundler.require (@Empact)
- - do not swallow --verbose on `bundle exec` (@sol, #2102)
+ - do not swallow --verbose on `bundle exec` (@sol, [#2102](https://github.com/bundler/bundler/issues/2102))
- `gem` generates gemspecs that block double-requires
- `gem` generates gemspecs that admit they depend on rake
@@ -1907,9 +1922,9 @@ Features:
Bugfixes:
- don't send user/pass when redirected to another host (@perplexes)
- - load gemspecs containing unicode (@gaffneyc, #2301)
+ - load gemspecs containing unicode (@gaffneyc, [#2301](https://github.com/bundler/bundler/issues/2301))
- support any ruby version in --standalone
- - resolve some ruby -w warnings (@chastell, #2193)
+ - resolve some ruby -w warnings (@chastell, [#2193](https://github.com/bundler/bundler/issues/2193))
- don't scare users with an error message during API fallback
## 1.2.3 (Nov 29, 2012)
@@ -1953,41 +1968,41 @@ Bugfixes:
Features:
- - `check` now has a `--dry-run` option (@svenfuchs, #1811)
+ - `check` now has a `--dry-run` option (@svenfuchs, [#1811](https://github.com/bundler/bundler/issues/1811))
- loosen ruby directive for engines
- - prune git/path directories inside vendor/cache (@josevalim, #1988)
+ - prune git/path directories inside vendor/cache (@josevalim, [#1988](https://github.com/bundler/bundler/issues/1988))
- update vendored thor to 0.15.2 (@sferik)
- - add .txt to LICENSE (@postmodern, #2001)
- - add `config disable_local_branch_check` (@josevalim, #1985)
- - fall back on the full index when experiencing syck errors (#1419)
- - handle syntax errors in Ruby gemspecs (#1974)
+ - add .txt to LICENSE (@postmodern, [#2001](https://github.com/bundler/bundler/issues/2001))
+ - add `config disable_local_branch_check` (@josevalim, [#1985](https://github.com/bundler/bundler/issues/1985))
+ - fall back on the full index when experiencing syck errors ([#1419](https://github.com/bundler/bundler/issues/1419))
+ - handle syntax errors in Ruby gemspecs ([#1974](https://github.com/bundler/bundler/issues/1974))
Bugfixes:
- - fix `pack`/`cache` with `--all` (@josevalim, #1989)
+ - fix `pack`/`cache` with `--all` (@josevalim, [#1989](https://github.com/bundler/bundler/issues/1989))
- don't display warning message when `cache_all` is set
- - check for `nil` PATH (#2006)
- - Always try to keep original GEM_PATH (@drogus, #1920)
+ - check for `nil` PATH ([#2006](https://github.com/bundler/bundler/issues/2006))
+ - Always try to keep original GEM_PATH (@drogus, [#1920](https://github.com/bundler/bundler/issues/1920))
## 1.2.0.pre.1 (May 27, 2012)
Features:
- - Git gems import submodules of submodules recursively (@nwwatson, #1935)
+ - Git gems import submodules of submodules recursively (@nwwatson, [#1935](https://github.com/bundler/bundler/issues/1935))
Bugfixes:
- Exit from `check` with a non-zero status when frozen with no lock
- - Use `latest_release` in Capistrano and Vlad integration (#1264)
+ - Use `latest_release` in Capistrano and Vlad integration ([#1264](https://github.com/bundler/bundler/issues/1264))
- Work around a Ruby 1.9.3p194 bug in Psych when config files are empty
Documentation:
- Add instructions for local git repos to the `config` manpage
- Update the `Gemfile` manpage to include ruby versions (@stevenh512)
- - When OpenSSL is missing, provide instructions for fixing (#1776 etc.)
+ - When OpenSSL is missing, provide instructions for fixing ([#1776](https://github.com/bundler/bundler/issues/1776) etc.)
- Unknown exceptions now link to ISSUES for help instead of a new ticket
- - Correct inline help for `clean --force` (@dougbarth, #1911)
+ - Correct inline help for `clean --force` (@dougbarth, [#1911](https://github.com/bundler/bundler/issues/1911))
## 1.2.0.pre (May 4, 2012)
@@ -1998,28 +2013,28 @@ Features:
- It is possible to override a git repository via configuration.
For instance, if you have a git dependency on rack, you can force
it to use a local repo with `bundle config local.rack ~/path/to/rack`
- - Cache gemspec loads for performance (@dekellum, #1635)
- - add --full-index flag to `bundle update` (@fluxx, #1829)
- - add --quiet flag to `bundle update` (@nashby, #1654)
- - Add Bundler::GemHelper.gemspec (@knu, #1637)
- - Graceful handling of Gemfile syntax errors (@koraktor, #1661)
+ - Cache gemspec loads for performance (@dekellum, [#1635](https://github.com/bundler/bundler/issues/1635))
+ - add --full-index flag to `bundle update` (@fluxx, [#1829](https://github.com/bundler/bundler/issues/1829))
+ - add --quiet flag to `bundle update` (@nashby, [#1654](https://github.com/bundler/bundler/issues/1654))
+ - Add Bundler::GemHelper.gemspec (@knu, [#1637](https://github.com/bundler/bundler/issues/1637))
+ - Graceful handling of Gemfile syntax errors (@koraktor, [#1661](https://github.com/bundler/bundler/issues/1661))
- `bundle platform` command
- add ruby to DSL, to specify version of ruby
- error out if the ruby version doesn't match
Performance:
- - bundle exec shouldn't run Bundler.setup just setting the right rubyopts options is enough (@spastorino, #1598)
+ - bundle exec shouldn't run Bundler.setup just setting the right rubyopts options is enough (@spastorino, [#1598](https://github.com/bundler/bundler/issues/1598))
Bugfixes:
- - Avoid passing RUBYOPT changes in with_clean_env block (@eric1234, #1604)
+ - Avoid passing RUBYOPT changes in with_clean_env block (@eric1234, [#1604](https://github.com/bundler/bundler/issues/1604))
- Use the same ruby to run subprocesses as is running rake (@brixen)
Documentation:
- - Add :github documentation in DSL (@zofrex, #1848, #1851, #1852)
- - Add docs for the --no-cache option (@fluxx, #1796)
+ - Add :github documentation in DSL (@zofrex, [#1848](https://github.com/bundler/bundler/issues/1848), [#1851](https://github.com/bundler/bundler/issues/1851), [#1852](https://github.com/bundler/bundler/issues/1852))
+ - Add docs for the --no-cache option (@fluxx, [#1796](https://github.com/bundler/bundler/issues/1796))
- Add basic documentation for bin_path and bundle_path (@radar)
- Add documentation for the run method in Bundler::Installer
@@ -2033,23 +2048,23 @@ Features:
Bugfixes:
- - Use `latest_release` in Capistrano and Vlad integration (#1264)
+ - Use `latest_release` in Capistrano and Vlad integration ([#1264](https://github.com/bundler/bundler/issues/1264))
- Unknown exceptions now link to ISSUES for help instead of a new ticket
- - When OpenSSL is missing, provide instructions for fixing (#1776 etc.)
- - Correct inline help for `clean --force` (@dougbarth, #1911)
+ - When OpenSSL is missing, provide instructions for fixing ([#1776](https://github.com/bundler/bundler/issues/1776) etc.)
+ - Correct inline help for `clean --force` (@dougbarth, [#1911](https://github.com/bundler/bundler/issues/1911))
- Work around a Ruby 1.9.3p194 bug in Psych when config files are empty
## 1.1.3 (March 23, 2012)
Bugfixes:
- - escape the bundler root path (@tenderlove, #1789)
+ - escape the bundler root path (@tenderlove, [#1789](https://github.com/bundler/bundler/issues/1789))
## 1.1.2 (March 20, 2012)
Bugfixes:
- - Fix --deployment for multiple PATH sections of the same source (#1782)
+ - Fix --deployment for multiple PATH sections of the same source ([#1782](https://github.com/bundler/bundler/issues/1782))
## 1.1.1 (March 14, 2012)
@@ -2059,8 +2074,8 @@ Bugfixes:
- Stop asking users to report gem installation errors
- Clarify "no sources" message
- Use $\ so `bundle gem` gemspecs work on Windows (@postmodern)
- - URI-encode gem names for dependency API (@rohit, #1672)
- - Fix `cache` edge case in rubygems 1.3.7 (#1202)
+ - URI-encode gem names for dependency API (@rohit, [#1672](https://github.com/bundler/bundler/issues/1672))
+ - Fix `cache` edge case in rubygems 1.3.7 ([#1202](https://github.com/bundler/bundler/issues/1202))
Performance:
@@ -2082,10 +2097,10 @@ Performance:
Bugfixes:
- - Load gemspecs from git even when a released gem has the same version (#1609)
- - Declare an accurate Ruby version requirement of 1.8.7 or newer (#1619)
- - handle gemspec development dependencies correctly (@raggi, #1639)
- - Avoid passing RUBYOPT changes in with_clean_env block. (eric1234, #1604)
+ - Load gemspecs from git even when a released gem has the same version ([#1609](https://github.com/bundler/bundler/issues/1609))
+ - Declare an accurate Ruby version requirement of 1.8.7 or newer ([#1619](https://github.com/bundler/bundler/issues/1619))
+ - handle gemspec development dependencies correctly (@raggi, [#1639](https://github.com/bundler/bundler/issues/1639))
+ - Avoid passing RUBYOPT changes in with_clean_env block. (eric1234, [#1604](https://github.com/bundler/bundler/issues/1604))
## 1.1.rc.7 (Dec 29, 2011)
@@ -2097,7 +2112,7 @@ Bugfixes:
Bugfixes:
- - Fix performance regression from 1.0 (@spastorino, #1511, #1591, #1592)
+ - Fix performance regression from 1.0 (@spastorino, [#1511](https://github.com/bundler/bundler/issues/1511), [#1591](https://github.com/bundler/bundler/issues/1591), [#1592](https://github.com/bundler/bundler/issues/1592))
- Load gems correctly when GEM_HOME is blank
- Refresh gems so Bundler works from inside a bundle
- Handle empty .bundle/config files without an error
@@ -2112,64 +2127,64 @@ Bugfixes:
Features:
- - `bundle viz` has the option to output a DOT file instead of a PNG (@hirochachacha, #683)
+ - `bundle viz` has the option to output a DOT file instead of a PNG (@hirochachacha, [#683](https://github.com/bundler/bundler/issues/683))
Bugfixes:
- - Ensure binstubs generated when using --standalone point to the standalonde bundle (@cowboyd, #1588)
- - fix `bundle viz` (@hirochachacha, #1586)
+ - Ensure binstubs generated when using --standalone point to the standalonde bundle (@cowboyd, [#1588](https://github.com/bundler/bundler/issues/1588))
+ - fix `bundle viz` (@hirochachacha, [#1586](https://github.com/bundler/bundler/issues/1586))
## 1.1.rc.3 (Dec 8, 2011)
Bugfixes:
- - fix relative_path so it checks Bundler.root is actually in the beginning of the path (#1582)
- - fix bundle outdated doesn't list all gems (@joelmoss, #1521)
+ - fix relative_path so it checks Bundler.root is actually in the beginning of the path ([#1582](https://github.com/bundler/bundler/issues/1582))
+ - fix bundle outdated doesn't list all gems (@joelmoss, [#1521](https://github.com/bundler/bundler/issues/1521))
## 1.1.rc.2 (Dec 6, 2011)
Features:
- - Added README.md to `newgem` (@ognevsky, #1574)
- - Added LICENSE (MIT) to newgem (@ognevsky, #1571)
+ - Added README.md to `newgem` (@ognevsky, [#1574](https://github.com/bundler/bundler/issues/1574))
+ - Added LICENSE (MIT) to newgem (@ognevsky, [#1571](https://github.com/bundler/bundler/issues/1571))
Bugfixes:
- - only auto-namespace requires for implied requires (#1531)
- - fix bundle clean output for git repos (#1473)
- - use Gem.bindir for bundle clean (#1544, #1532)
- - use `Gem.load_env_plugins` instead of `Gem.load_env_plugins` (#1500, #1543)
- - differentiate Ruby 2.0 (trunk) from Ruby 1.9 (@tenderlove, #1539)
- - `bundle clean` handles 7 length git hash for bundle clean (#1490, #1491)
+ - only auto-namespace requires for implied requires ([#1531](https://github.com/bundler/bundler/issues/1531))
+ - fix bundle clean output for git repos ([#1473](https://github.com/bundler/bundler/issues/1473))
+ - use Gem.bindir for bundle clean ([#1544](https://github.com/bundler/bundler/issues/1544), [#1532](https://github.com/bundler/bundler/issues/1532))
+ - use `Gem.load_env_plugins` instead of `Gem.load_env_plugins` ([#1500](https://github.com/bundler/bundler/issues/1500), [#1543](https://github.com/bundler/bundler/issues/1543))
+ - differentiate Ruby 2.0 (trunk) from Ruby 1.9 (@tenderlove, [#1539](https://github.com/bundler/bundler/issues/1539))
+ - `bundle clean` handles 7 length git hash for bundle clean ([#1490](https://github.com/bundler/bundler/issues/1490), [#1491](https://github.com/bundler/bundler/issues/1491))
- fix Psych loading issues
- - Search $PATH for a binary rather than shelling out to `which` (@tenderlove, #1573)
- - do not clear RG cache unless we actually modify GEM_PATH and GEM_HOME- use `Gem.load_env_plugins` instead of `Gem.load_env_plugins` (#1500, #1543)
- - `newgem` now uses https://rubygems.org (#1562)
- - `bundle init` now uses https://rubygems.org (@jjb, #1522)
+ - Search $PATH for a binary rather than shelling out to `which` (@tenderlove, [#1573](https://github.com/bundler/bundler/issues/1573))
+ - do not clear RG cache unless we actually modify GEM_PATH and GEM_HOME- use `Gem.load_env_plugins` instead of `Gem.load_env_plugins` ([#1500](https://github.com/bundler/bundler/issues/1500), [#1543](https://github.com/bundler/bundler/issues/1543))
+ - `newgem` now uses https://rubygems.org ([#1562](https://github.com/bundler/bundler/issues/1562))
+ - `bundle init` now uses https://rubygems.org (@jjb, [#1522](https://github.com/bundler/bundler/issues/1522))
- `bundle install/update` does not autoclean when using --path for semver
Documentation:
- - added documentation for --shebang option for `bundle install` (@lunks, #1475, #1558)
+ - added documentation for --shebang option for `bundle install` (@lunks, [#1475](https://github.com/bundler/bundler/issues/1475), [#1558](https://github.com/bundler/bundler/issues/1558))
## 1.1.rc (Oct 3, 2011)
Features:
- - add `--shebang` option to bundle install (@bensie, #1467)
- - build passes on ruby 1.9.3rc1 (#1458, #1469)
- - hide basic auth credentials for custom sources (#1440, #1463)
+ - add `--shebang` option to bundle install (@bensie, [#1467](https://github.com/bundler/bundler/issues/1467))
+ - build passes on ruby 1.9.3rc1 ([#1458](https://github.com/bundler/bundler/issues/1458), [#1469](https://github.com/bundler/bundler/issues/1469))
+ - hide basic auth credentials for custom sources ([#1440](https://github.com/bundler/bundler/issues/1440), [#1463](https://github.com/bundler/bundler/issues/1463))
Bugfixes:
- - fix index search result caching (#1446, #1466)
- - fix fetcher prints multiple times during install (#1445, #1462)
+ - fix index search result caching ([#1446](https://github.com/bundler/bundler/issues/1446), [#1466](https://github.com/bundler/bundler/issues/1466))
+ - fix fetcher prints multiple times during install ([#1445](https://github.com/bundler/bundler/issues/1445), [#1462](https://github.com/bundler/bundler/issues/1462))
- don't mention API errors from non-rubygems.org sources
- - fix autoclean so it doesn't remove bins that are used (#1459, #1460)
+ - fix autoclean so it doesn't remove bins that are used ([#1459](https://github.com/bundler/bundler/issues/1459), [#1460](https://github.com/bundler/bundler/issues/1460))
Documentation:
- - add :require => [...] to the gemfile(5) manpage (@nono, #1468)
+ - add :require => [...] to the gemfile(5) manpage (@nono, [#1468](https://github.com/bundler/bundler/issues/1468))
## 1.1.pre.10 (Sep 27, 2011)
@@ -2182,75 +2197,75 @@ Features:
Features:
- `clean` will now clean up all old .gem and .gemspec files, cleaning up older pres
- - `clean` will be automatically run after bundle install and update when using `--path` (#1420, #1425)
- - `clean` now takes a `--force` option (#1247, #1426)
- - `clean` will clean up cached git dirs in bundle clean (#1390)
- - remove deprecations from DSL (#1119)
- - autorequire tries directories for gems with dashed names (#1205)
- - adds a `--paths` flag to `bundle show` to list all the paths of bundled gems (@tiegz, #1360)
- - load rubygems plugins in the bundle binary (@tpope, #1364)
- - make `--standalone` respect `--path` (@cowboyd, #1361)
-
-Bugfixes:
-
- - Fix `clean` to handle nested gems in a git repo (#1329)
- - Fix conflict from revert of benchmark tool (@boffbowsh, #1355)
- - Fix fatal error when unable to connect to gem source (#1269)
- - Fix `outdated` to find pre-release gems that are installed. (#1359)
- - Fix color for ui. (#1374)
+ - `clean` will be automatically run after bundle install and update when using `--path` ([#1420](https://github.com/bundler/bundler/issues/1420), [#1425](https://github.com/bundler/bundler/issues/1425))
+ - `clean` now takes a `--force` option ([#1247](https://github.com/bundler/bundler/issues/1247), [#1426](https://github.com/bundler/bundler/issues/1426))
+ - `clean` will clean up cached git dirs in bundle clean ([#1390](https://github.com/bundler/bundler/issues/1390))
+ - remove deprecations from DSL ([#1119](https://github.com/bundler/bundler/issues/1119))
+ - autorequire tries directories for gems with dashed names ([#1205](https://github.com/bundler/bundler/issues/1205))
+ - adds a `--paths` flag to `bundle show` to list all the paths of bundled gems (@tiegz, [#1360](https://github.com/bundler/bundler/issues/1360))
+ - load rubygems plugins in the bundle binary (@tpope, [#1364](https://github.com/bundler/bundler/issues/1364))
+ - make `--standalone` respect `--path` (@cowboyd, [#1361](https://github.com/bundler/bundler/issues/1361))
+
+Bugfixes:
+
+ - Fix `clean` to handle nested gems in a git repo ([#1329](https://github.com/bundler/bundler/issues/1329))
+ - Fix conflict from revert of benchmark tool (@boffbowsh, [#1355](https://github.com/bundler/bundler/issues/1355))
+ - Fix fatal error when unable to connect to gem source ([#1269](https://github.com/bundler/bundler/issues/1269))
+ - Fix `outdated` to find pre-release gems that are installed. ([#1359](https://github.com/bundler/bundler/issues/1359))
+ - Fix color for ui. ([#1374](https://github.com/bundler/bundler/issues/1374))
- Fix installing to user-owned system gems on OS X
- - Fix caching issue in the resolver (#1353, #1421)
+ - Fix caching issue in the resolver ([#1353](https://github.com/bundler/bundler/issues/1353), [#1421](https://github.com/bundler/bundler/issues/1421))
- Fix :github DSL option
## 1.1.pre.8 (Aug 13, 2011)
Bugfixes:
- - Fix `bundle check` to not print fatal error message (@cldwalker, #1347)
- - Fix require_sudo when Gem.bindir isn't writeable (#1352)
- - Fix not asking Gemcutter API for dependency chain of git gems in --deployment (#1254)
- - Fix `install --binstubs` when using --path (#1332)
+ - Fix `bundle check` to not print fatal error message (@cldwalker, [#1347](https://github.com/bundler/bundler/issues/1347))
+ - Fix require_sudo when Gem.bindir isn't writeable ([#1352](https://github.com/bundler/bundler/issues/1352))
+ - Fix not asking Gemcutter API for dependency chain of git gems in --deployment ([#1254](https://github.com/bundler/bundler/issues/1254))
+ - Fix `install --binstubs` when using --path ([#1332](https://github.com/bundler/bundler/issues/1332))
## 1.1.pre.7 (Aug 8, 2011)
Bugfixes:
- - Fixed invalid byte sequence error while installing gem on Ruby 1.9 (#1341)
+ - Fixed invalid byte sequence error while installing gem on Ruby 1.9 ([#1341](https://github.com/bundler/bundler/issues/1341))
- Fixed exception when sudo was needed to install gems (@spastorino)
## 1.1.pre.6 (Aug 8, 2011)
Bugfixes:
- - Fix cross repository dependencies (#1138)
- - Fix git dependency fetching from API endpoint (#1254)
- - Fixes for bundle outdated (@joelmoss, #1238)
- - Fix bundle standalone when using the endpoint (#1240)
+ - Fix cross repository dependencies ([#1138](https://github.com/bundler/bundler/issues/1138))
+ - Fix git dependency fetching from API endpoint ([#1254](https://github.com/bundler/bundler/issues/1254))
+ - Fixes for bundle outdated (@joelmoss, [#1238](https://github.com/bundler/bundler/issues/1238))
+ - Fix bundle standalone when using the endpoint ([#1240](https://github.com/bundler/bundler/issues/1240))
Features:
- - Implement `to_ary` to avoid calls to method_missing (@tenderlove, #1274)
- - bundle clean removes old .gem files (@cldwalker, #1293)
+ - Implement `to_ary` to avoid calls to method_missing (@tenderlove, [#1274](https://github.com/bundler/bundler/issues/1274))
+ - bundle clean removes old .gem files (@cldwalker, [#1293](https://github.com/bundler/bundler/issues/1293))
- Correcly identify missing child dependency in error message
- - Run pre-install, post-build, and post-install gem hooks for git gems (@warhammerkid, #1120)
- - create Gemfile.lock for empty Gemfile (#1218)
+ - Run pre-install, post-build, and post-install gem hooks for git gems (@warhammerkid, [#1120](https://github.com/bundler/bundler/issues/1120))
+ - create Gemfile.lock for empty Gemfile ([#1218](https://github.com/bundler/bundler/issues/1218))
## 1.1.pre.5 (June 11, 2011)
Bugfixes:
- - Fix LazySpecification on Ruby 1.9 (@dpiddy, #1232)
- - Fix HTTP proxy support (@leobessa, #878)
+ - Fix LazySpecification on Ruby 1.9 (@dpiddy, [#1232](https://github.com/bundler/bundler/issues/1232))
+ - Fix HTTP proxy support (@leobessa, [#878](https://github.com/bundler/bundler/issues/878))
Features:
- Speed up `install --deployment` by using the API endpoint
- - Support Basic HTTP Auth for the API endpoint (@dpiddy, #1229)
+ - Support Basic HTTP Auth for the API endpoint (@dpiddy, [#1229](https://github.com/bundler/bundler/issues/1229))
- Add `install --full-index` to disable the API endpoint, just in case
- Significantly speed up install by removing unneeded gemspec fetches
- - `outdated` command shows outdated gems (@joelmoss, #1130)
- - Print gem post install messages (@csquared, #1155)
- - Reduce memory use by removing Specification.new inside method_missing (@tenderlove, #1222)
+ - `outdated` command shows outdated gems (@joelmoss, [#1130](https://github.com/bundler/bundler/issues/1130))
+ - Print gem post install messages (@csquared, [#1155](https://github.com/bundler/bundler/issues/1155))
+ - Reduce memory use by removing Specification.new inside method_missing (@tenderlove, [#1222](https://github.com/bundler/bundler/issues/1222))
- Allow `check --path`
## 1.1.pre.4 (May 5, 2011)
@@ -2318,7 +2333,7 @@ Bugfixes:
Features:
- - Add platform :maglev (@timfel, #1444)
+ - Add platform :maglev (@timfel, [#1444](https://github.com/bundler/bundler/issues/1444))
Bugfixes:
@@ -2329,73 +2344,73 @@ Bugfixes:
Features:
- - Rescue interrupts to `bundle` while loading bundler.rb (#1395)
- - Allow clearing without groups by passing `--without ''` (#1259)
+ - Rescue interrupts to `bundle` while loading bundler.rb ([#1395](https://github.com/bundler/bundler/issues/1395))
+ - Allow clearing without groups by passing `--without ''` ([#1259](https://github.com/bundler/bundler/issues/1259))
Bugfixes:
- - Manually sort requirements in the lockfile (#1375)
+ - Manually sort requirements in the lockfile ([#1375](https://github.com/bundler/bundler/issues/1375))
- Remove several warnings generated by ruby -w (@stephencelis)
- - Handle trailing slashes on names passed to `gem` (#1372)
- - Name modules for gems like 'test-foo_bar' correctly (#1303)
- - Don't require Psych if Syck is already loaded (#1239)
+ - Handle trailing slashes on names passed to `gem` ([#1372](https://github.com/bundler/bundler/issues/1372))
+ - Name modules for gems like 'test-foo_bar' correctly ([#1303](https://github.com/bundler/bundler/issues/1303))
+ - Don't require Psych if Syck is already loaded ([#1239](https://github.com/bundler/bundler/issues/1239))
## 1.0.19.rc (September 13, 2011)
Features:
- Compatibility with Rubygems 1.8.10 installer changes
- - Report gem installation failures clearly (@rwilcox, #1380)
+ - Report gem installation failures clearly (@rwilcox, [#1380](https://github.com/bundler/bundler/issues/1380))
- Useful error for cap and vlad on first deploy (@nexmat, @kirs)
Bugfixes:
- `exec` now works when the command contains 'exec'
- - Only touch lock after changes on Windows (@robertwahler, #1358)
- - Keep load paths when #setup is called multiple times (@radsaq, #1379)
+ - Only touch lock after changes on Windows (@robertwahler, [#1358](https://github.com/bundler/bundler/issues/1358))
+ - Keep load paths when #setup is called multiple times (@radsaq, [#1379](https://github.com/bundler/bundler/issues/1379))
## 1.0.18 (August 16, 2011)
Bugfixes:
- Fix typo in DEBUG_RESOLVER (@geemus)
- - Fixes rake 0.9.x warning (@mtylty, #1333)
+ - Fixes rake 0.9.x warning (@mtylty, [#1333](https://github.com/bundler/bundler/issues/1333))
- Fix `bundle cache` again for rubygems 1.3.x
Features:
- - Run the bundle install earlier in a Capistrano deployment (@cgriego, #1300)
- - Support hidden gemspec (@trans, @cldwalker, #827)
- - Make fetch_specs faster (@zeha, #1294)
- - Allow overriding development deps loaded by #gemspec (@lgierth, #1245)
+ - Run the bundle install earlier in a Capistrano deployment (@cgriego, [#1300](https://github.com/bundler/bundler/issues/1300))
+ - Support hidden gemspec (@trans, @cldwalker, [#827](https://github.com/bundler/bundler/issues/827))
+ - Make fetch_specs faster (@zeha, [#1294](https://github.com/bundler/bundler/issues/1294))
+ - Allow overriding development deps loaded by #gemspec (@lgierth, [#1245](https://github.com/bundler/bundler/issues/1245))
## 1.0.17 (August 8, 2011)
Bugfixes:
- - Fix rake issues with rubygems 1.3.x (#1342)
- - Fixed invalid byte sequence error while installing gem on Ruby 1.9 (#1341)
+ - Fix rake issues with rubygems 1.3.x ([#1342](https://github.com/bundler/bundler/issues/1342))
+ - Fixed invalid byte sequence error while installing gem on Ruby 1.9 ([#1341](https://github.com/bundler/bundler/issues/1341))
## 1.0.16 (August 8, 2011)
Features:
- - Performance fix for MRI 1.9 (@efficientcloud, #1288)
+ - Performance fix for MRI 1.9 (@efficientcloud, [#1288](https://github.com/bundler/bundler/issues/1288))
- Shortcuts (like `bundle i`) for all commands (@amatsuda)
- Correcly identify missing child dependency in error message
Bugfixes:
- - Allow Windows network share paths with forward slashes (@mtscout6, #1253)
- - Check for rubygems.org credentials so `rake release` doesn't hang (#980)
- - Find cached prerelease gems on rubygems 1.3.x (@dburt, #1202)
- - Fix `bundle install --without` on kiji (@tmm1, #1287)
- - Get rid of warning in ruby 1.9.3 (@smartinez87, #1231)
+ - Allow Windows network share paths with forward slashes (@mtscout6, [#1253](https://github.com/bundler/bundler/issues/1253))
+ - Check for rubygems.org credentials so `rake release` doesn't hang ([#980](https://github.com/bundler/bundler/issues/980))
+ - Find cached prerelease gems on rubygems 1.3.x (@dburt, [#1202](https://github.com/bundler/bundler/issues/1202))
+ - Fix `bundle install --without` on kiji (@tmm1, [#1287](https://github.com/bundler/bundler/issues/1287))
+ - Get rid of warning in ruby 1.9.3 (@smartinez87, [#1231](https://github.com/bundler/bundler/issues/1231))
Documentation:
- - Documentation for `gem ..., :require => false` (@kmayer, #1292)
- - Gems provide "executables", they are rarely also binaries (@fxn, #1242)
+ - Documentation for `gem ..., :require => false` (@kmayer, [#1292](https://github.com/bundler/bundler/issues/1292))
+ - Gems provide "executables", they are rarely also binaries (@fxn, [#1242](https://github.com/bundler/bundler/issues/1242))
## 1.0.15 (June 9, 2011)
@@ -2523,7 +2538,7 @@ Bugfixes:
Bugfixes:
- Fix regression in `update` that caused long/wrong results
- - Allow git gems on other platforms while installing (#579)
+ - Allow git gems on other platforms while installing ([#579](https://github.com/bundler/bundler/issues/579))
Features:
@@ -2855,18 +2870,18 @@ Features:
- cache command now prunes stale .gem files from vendor/cache
- init --gemspec command now generates development dependencies
- - handle Polyglot's changes to Kernel#require with Bundler::ENV_LOADED (#287)
- - remove .gem files generated after installing a gem from a :path (#286)
- - improve install/lock messaging (#284)
+ - handle Polyglot's changes to Kernel#require with Bundler::ENV_LOADED ([#287](https://github.com/bundler/bundler/issues/287))
+ - remove .gem files generated after installing a gem from a :path ([#286](https://github.com/bundler/bundler/issues/286))
+ - improve install/lock messaging ([#284](https://github.com/bundler/bundler/issues/284))
Bugfixes:
- - ignore cached gems that are for another platform (#288)
- - install Windows gems that have no architecture set, like rcov (#277)
- - exec command while locked now includes the bundler lib in $LOAD_PATH (#293)
+ - ignore cached gems that are for another platform ([#288](https://github.com/bundler/bundler/issues/288))
+ - install Windows gems that have no architecture set, like rcov ([#277](https://github.com/bundler/bundler/issues/277))
+ - exec command while locked now includes the bundler lib in $LOAD_PATH ([#293](https://github.com/bundler/bundler/issues/293))
- fix the `rake install` task
- - add GemspecError so it can be raised without (further) error (#292)
- - create a parent directory before cloning for git 1.5 compatibility (#285)
+ - add GemspecError so it can be raised without (further) error ([#292](https://github.com/bundler/bundler/issues/292))
+ - create a parent directory before cloning for git 1.5 compatibility ([#285](https://github.com/bundler/bundler/issues/285))
## 0.9.21 (April 16, 2010)
@@ -2891,14 +2906,14 @@ Bugfixes:
Features:
- - suggest `bundle install --relock` when the Gemfile has changed (#272)
- - source support for Rubygems servers without prerelease gem indexes (#262)
+ - suggest `bundle install --relock` when the Gemfile has changed ([#272](https://github.com/bundler/bundler/issues/272))
+ - source support for Rubygems servers without prerelease gem indexes ([#262](https://github.com/bundler/bundler/issues/262))
Bugfixes:
- - don't set up all groups every time Bundler.setup is called while locked (#263)
- - fix #full_gem_path for git gems while locked (#268)
- - eval gemspecs at the top level, not inside the Bundler class (#269)
+ - don't set up all groups every time Bundler.setup is called while locked ([#263](https://github.com/bundler/bundler/issues/263))
+ - fix #full_gem_path for git gems while locked ([#268](https://github.com/bundler/bundler/issues/268))
+ - eval gemspecs at the top level, not inside the Bundler class ([#269](https://github.com/bundler/bundler/issues/269))
## 0.9.18 (April 8, 2010)
@@ -2909,7 +2924,7 @@ Features:
Bugfixes:
- - Bundler.setup now fully disables system gems, even when unlocked (#266, #246)
+ - Bundler.setup now fully disables system gems, even when unlocked ([#266](https://github.com/bundler/bundler/issues/266), [#246](https://github.com/bundler/bundler/issues/246))
- fixes Yard, which found plugins in Gem.source_index that it could not load
- makes behaviour of `Bundler.require` consistent between locked and unlocked loads
@@ -2931,7 +2946,7 @@ Features:
- exit gracefully on INT signal
- resolver output now indicates whether remote sources were checked
- - print error instead of backtrace when exec cannot find a binary (#241)
+ - print error instead of backtrace when exec cannot find a binary ([#241](https://github.com/bundler/bundler/issues/241))
Bugfixes:
@@ -2940,9 +2955,9 @@ Bugfixes:
- outputs branch names other than master
- gets the correct sha from the checkout
- doesn't print sha twice if :ref is set
- - report errors from bundler/setup.rb without backtraces (#243)
+ - report errors from bundler/setup.rb without backtraces ([#243](https://github.com/bundler/bundler/issues/243))
- fix Gem::Spec#git_version to not error on unloaded specs
- - improve deprecation, Gemfile, and command error messages (#242)
+ - improve deprecation, Gemfile, and command error messages ([#242](https://github.com/bundler/bundler/issues/242))
## 0.9.15 (April 1, 2010)
@@ -2957,7 +2972,7 @@ Features:
Bugfixes:
- prep for Rubygems 1.3.7 changes
- - install command now pulls git branches correctly (#211)
+ - install command now pulls git branches correctly ([#211](https://github.com/bundler/bundler/issues/211))
- raise errors on invalid options in the Gemfile
## 0.9.14 (March 30, 2010)
@@ -2999,12 +3014,12 @@ Features:
Bugfixes:
- - perform a topological sort on resolved gems (#191)
- - gems from git work even when paths or repos have spaces (#196)
- - Specification#loaded_from returns a String, like Gem::Specification (#197)
+ - perform a topological sort on resolved gems ([#191](https://github.com/bundler/bundler/issues/191))
+ - gems from git work even when paths or repos have spaces ([#196](https://github.com/bundler/bundler/issues/196))
+ - Specification#loaded_from returns a String, like Gem::Specification ([#197](https://github.com/bundler/bundler/issues/197))
- specs eval from inside the gem directory, even when locked
- virtual gemspecs are now saved in environment.rb for use when loading
- - unify the Installer's local index and the runtime index (#204)
+ - unify the Installer's local index and the runtime index ([#204](https://github.com/bundler/bundler/issues/204))
## 0.9.11 (March 9, 2010)
@@ -3012,23 +3027,23 @@ Bugfixes:
Features:
- - install command can take the path to the gemfile with --gemfile (#125)
- - unknown command line options are now rejected (#163)
- - exec command hugely sped up while locked (#177)
- - show command prints the install path if you pass it a gem name (#148)
- - open command edits an installed gem with $EDITOR (#148)
- - Gemfile allows assigning an array of groups to a gem (#114)
+ - install command can take the path to the gemfile with --gemfile ([#125](https://github.com/bundler/bundler/issues/125))
+ - unknown command line options are now rejected ([#163](https://github.com/bundler/bundler/issues/163))
+ - exec command hugely sped up while locked ([#177](https://github.com/bundler/bundler/issues/177))
+ - show command prints the install path if you pass it a gem name ([#148](https://github.com/bundler/bundler/issues/148))
+ - open command edits an installed gem with $EDITOR ([#148](https://github.com/bundler/bundler/issues/148))
+ - Gemfile allows assigning an array of groups to a gem ([#114](https://github.com/bundler/bundler/issues/114))
- Gemfile allows :tag option on :git sources
- improve backtraces when a gemspec is invalid
- improve performance by installing gems from the cache if present
Bugfixes:
- - normalize parameters to Bundler.require (#153)
- - check now checks installed gems rather than cached gems (#162)
- - don't update the gem index when installing after locking (#169)
- - bundle parenthesises arguments for 1.8.6 (#179)
- - gems can now be assigned to multiple groups without problems (#135)
+ - normalize parameters to Bundler.require ([#153](https://github.com/bundler/bundler/issues/153))
+ - check now checks installed gems rather than cached gems ([#162](https://github.com/bundler/bundler/issues/162))
+ - don't update the gem index when installing after locking ([#169](https://github.com/bundler/bundler/issues/169))
+ - bundle parenthesises arguments for 1.8.6 ([#179](https://github.com/bundler/bundler/issues/179))
+ - gems can now be assigned to multiple groups without problems ([#135](https://github.com/bundler/bundler/issues/135))
- fix the warning when building extensions for a gem from git with Rubygems 1.3.6
- fix a Dependency.to_yaml error due to accidentally including sources and groups
- don't reinstall packed gems
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
deleted file mode 100644
index 3693e4e3b8..0000000000
--- a/CONTRIBUTING.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# Contributing to Bundler
-
-Welcome to Bundler! We are so happy that you're here. We know joining a new open source project can be daunting, so here's a quick overview of what you can expect from this documentation.
-
-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.
-
-## Quick start
-
-Some guides you might find useful:
-
-* [Submitting pull requests](doc/development/PULL_REQUESTS.md)
-* [Filing an issue](doc/contributing/ISSUES.md)
-* [Bug triage](doc/contributing/BUG_TRIAGE.md)
-
-## Comprehensive guides
-
-Not finding what you're looking for? More comprehensive guides are [available here](doc/README.md).
diff --git a/LICENSE.md b/LICENSE.md
index e356f59f94..52b5c2132f 100644
--- a/LICENSE.md
+++ b/LICENSE.md
@@ -1,23 +1,22 @@
-Portions copyright (c) 2010 Andre Arko
-Portions copyright (c) 2009 Engine Yard
+The MIT License
-MIT License
+Portions copyright (c) 2010-2019 André Arko
+Portions copyright (c) 2009 Engine Yard
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject to
-the following conditions:
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
-The above copyright notice and this permission notice shall be
-included in all copies or substantial portions of the Software.
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/README.md b/README.md
index 3a117a9be8..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/github/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)
@@ -45,7 +44,9 @@ To get in touch with the Bundler core team and other Bundler users, please see [
### Contributing
-If you'd like to contribute to Bundler, that's awesome, and we <3 you. There's a guide to contributing to Bundler (both code and general help) over in [our documentation section](doc/README.md).
+If you'd like to contribute to Bundler, that's awesome, and we <3 you. We've put together [the Bundler contributor guide](https://github.com/bundler/bundler/blob/master/doc/contributing/README.md) with all of the information you need to get started.
+
+If you'd like to request a substantial change to Bundler or to the Bundler documentation, refer to the [Bundler RFC process](https://github.com/bundler/rfcs) for more information.
While some Bundler contributors are compensated by Ruby Together, the project maintainers make decisions independent of Ruby Together. As a project, we welcome contributions regardless of the author’s affiliation with Ruby Together.
@@ -60,4 +61,4 @@ Everyone interacting in the Bundler project’s codebases, issue trackers, chat
### License
-[MIT License](https://github.com/bundler/bundler/blob/master/LICENSE.md)
+Bundler is available under an [MIT License](https://github.com/bundler/bundler/blob/master/LICENSE.md).
diff --git a/Rakefile b/Rakefile
index 20eb75516e..00b64638a9 100644
--- a/Rakefile
+++ b/Rakefile
@@ -1,23 +1,16 @@
-# -*- encoding: utf-8 -*-
# frozen_string_literal: true
$:.unshift File.expand_path("../lib", __FILE__)
-require "shellwords"
require "benchmark"
-RUBYGEMS_REPO = if `cd .. && git remote --verbose 2>/dev/null` =~ /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
-BUNDLER_SPEC = Gem::Specification.load("bundler.gemspec")
-
-def safe_task(&block)
- yield
- true
-rescue
- false
+def development_dependencies
+ @development_dependencies ||= Gem::Specification.load("bundler.gemspec").development_dependencies
end
# Benchmark task execution
@@ -34,28 +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]
- # 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
@@ -64,260 +61,227 @@ 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.12"
-
- # Fix incorrect default gem specifications on ruby 2.6.1. Can be removed
- # when 2.6.2 is released and we start testing against it
- if RUBY_VERSION == "2.6.1"
- sh "gem install etc:1.0.1 --default"
- sh "gem install bundler:1.17.2 --default"
- end
-
- $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"
+ task :clean do
+ rm_rf "tmp"
+ end
- desc "Run specs"
- RSpec::Core::RakeTask.new
- task :spec => "man:build"
+ desc "Run the real-world spec suite"
+ task :realworld => %w[set_realworld spec]
- require "rubocop/rake_task"
- rubocop = RuboCop::RakeTask.new
- rubocop.options = ["--parallel"]
+ namespace :realworld do
+ desc "Re-record cassettes for the realworld specs"
+ task :record => %w[set_record realworld]
- namespace :spec do
- task :clean do
- rm_rf "tmp"
+ 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 real-world spec suite"
- task :realworld => %w[set_realworld spec]
+ desc "Run the spec suite with the sudo tests"
+ task :sudo => %w[set_sudo spec]
- namespace :realworld do
- desc "Re-record cassettes for the realworld specs"
- task :record => %w[set_record realworld]
+ task :set_sudo do
+ ENV["BUNDLER_SUDO_TESTS"] = "1"
+ end
- task :set_record do
- ENV["BUNDLER_SPEC_FORCE_RECORD"] = "TRUE"
+ # 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
- 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]
+ task :realworld => ["set_realworld", rg]
+ end
- desc "Run the spec suite with the sudo tests"
- task :sudo => %w[set_sudo spec clean_sudo]
+ task "set_#{rg}" do
+ ENV["RGV"] = rg
+ end
- task :set_sudo do
- ENV["BUNDLER_SUDO_TESTS"] = "1"
+ task rg => ["set_#{rg}"]
+ task "rubygems:all" => rg
end
- task :clean_sudo do
- puts "Cleaning up sudo test files..."
- system "sudo rm -rf #{File.expand_path("../tmp/sudo_gem_home", __FILE__)}"
+ desc "Run specs under a RubyGems checkout (set RGV=path)"
+ task "co" do
+ sh("bin/rspec --format progress")
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.3]
- (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
-
- # 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 "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
-
- puts "Checked out rubygems '#{rg}' at #{hash}"
- ENV["RUBYOPT"] = "-I#{File.join(RUBYGEMS_REPO, "lib")} #{rubyopt}"
- puts "RUBYOPT=#{ENV["RUBYOPT"]}"
- end
-
- task rg => ["man:build", "clone_rubygems_#{rg}"]
- task "rubygems:all" => rg
- 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]
- end
-
- task "setup_co" do
- rg = File.expand_path ENV["RG"]
- puts "Running specs against RubyGems in #{rg}..."
- ENV["RUBYOPT"] = "-I#{rg} #{rubyopt}"
- end
+ namespace "co" do
+ task :sudo => ["set_sudo", "co"]
+ task :realworld => ["set_realworld", "co"]
+ end
- task "co" => "setup_co"
- task "rubygems:all" => "co"
+ task "setup_co" do
+ ENV["RGV"] = RUBYGEMS_REPO
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!")
+ task "co" => "setup_co"
+ task "rubygems:all" => "co"
+ end
- # disallow making network requests on CI
- ENV["BUNDLER_SPEC_PRE_RECORDED"] = "TRUE"
+ 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!")
- if RUBY_VERSION >= "2.0.0"
- puts "\n\e[1;33m[Travis CI] Running bundler linter\e[m\n\n"
- Rake::Task["rubocop"].invoke
- end
+ rg = "co" if File.directory?(File.expand_path(ENV["RGV"]))
- 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 }
+ # disallow making network requests on CI
+ ENV["BUNDLER_SPEC_PRE_RECORDED"] = "TRUE"
- Rake::Task["spec:rubygems:#{rg}"].reenable
+ 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 }
- 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
- 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")}")
- 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 }
+ Rake::Task["spec:rubygems:#{rg}"].reenable
- { "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 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"
+ unless specs && sudos && realworld
+ raise "Spec run failed, please review the log for more information"
+ end
end
+end
- task :rubocop do
- abort "Run `rake spec:deps` to be able to run rubocop"
- end
+desc "Run RuboCop"
+task :rubocop do
+ sh("bin/rubocop --parallel")
end
-begin
- require "ronn"
+namespace :man do
+ if RUBY_ENGINE == "jruby"
+ task(:build) {}
+ else
+ ronn_dep = development_dependencies.find do |dep|
+ dep.name == "ronn"
+ end
- namespace :man do
- directory "man"
+ ronn_requirement = ronn_dep.requirement.to_s
- 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}"
+ begin
+ gem "ronn", ronn_requirement
- index << [ronn, File.basename(roff)]
+ 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 => ["man", ronn] do
- sh "#{Gem.ruby} -S ronn --roff --pipe #{ronn} > #{roff}"
- 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}"
- file "#{roff}.txt" => roff do
- sh "groff -Wall -mtty-char -mandoc -Tascii #{roff} | col -b > #{roff}.txt"
- end
+ index << [ronn, File.basename(roff)]
- task :build_all_pages => "#{roff}.txt"
- end
+ file roff => ["man", ronn] do
+ sh "#{Gem.ruby} -S ronn --roff --pipe #{ronn} > #{roff}"
+ end
- 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"
+ 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
- end
- task :build_all_pages => "index.txt"
- task :clean do
- leftovers = Dir["man/*"].reject do |f|
- File.extname(f) == ".ronn"
+ 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
- rm leftovers if leftovers.any?
- end
+ task :build_all_pages => "index.txt"
- desc "Build the man pages"
- task :build => ["man:clean", "man:build_all_pages"]
+ desc "Remove all built man pages"
+ task :clean do
+ leftovers = Dir["man/*"].reject do |f|
+ File.extname(f) == ".ronn"
+ end
+ rm leftovers if leftovers.any?
+ end
- desc "Remove all built man pages"
- task :clobber do
- rm_rf "lib/bundler/man"
+ desc "Build the man pages"
+ task :build => ["man:clean", "man:build_all_pages"]
end
-
- task(:require) {}
end
+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
+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"
@@ -325,6 +289,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"
@@ -332,6 +297,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"
@@ -339,6 +305,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"
@@ -355,13 +322,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
@@ -374,14 +334,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..d8bb61e6f3
--- /dev/null
+++ b/azure-pipelines.yml
@@ -0,0 +1,7 @@
+jobs:
+- job: Windows
+ pool:
+ vmImage: 'vs2017-win2016'
+ steps:
+ - template: .azure-pipelines/steps.yml
+ timeoutInMinutes: 0
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 bf0d532c01..6ce881e51a 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("../version", __FILE__)
+ require_relative "version"
end
Gem::Specification.new do |s|
@@ -32,24 +31,17 @@ 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.50.0"
+ s.add_development_dependency "rubocop", "= 0.68.1"
+ s.add_development_dependency "rubocop-performance", "~> 1.1"
- 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/POLICIES.md b/doc/POLICIES.md
new file mode 100644
index 0000000000..008883ab80
--- /dev/null
+++ b/doc/POLICIES.md
@@ -0,0 +1,77 @@
+# Bundler Policies
+
+This document is an attempt to record the policies and processes that are used to govern the Bundler project--it’s not fixed or permanent, and will likely evolve as events warrant.
+
+### Our Goals
+
+0. Treat everyone like a valuable human being, worthy of respect and empathy. No exceptions.
+1. Strive to empower users, the Ruby developers who use Bundler. For example, there is no such thing as user error, only insufficient UX design.
+2. Strive to empower Bundler contributors, as long as it does not harm users. For example, potential contributors should be able to set up a complete development and testing environment with a single command.
+3. Strive to empower maintainers, as long as it does not harm contributors or users. For example, automating issue triage to reduce repetitive work for maintainers, as long as users with problems are not worse off.
+
+These policies are intended to be examples of how to apply these goals, and we realize that we can’t possibly cover every edge case or loophole. In any case where policies turn out to conflict with these goals, the goals should win.
+
+### Compatibility guidelines
+
+Bundler tries for perfect backwards compatibility. That means that if something worked in version 1.x, it should continue to work in 1.y and 1.z. That thing may or may not continue to work in 2.x. We may not always get it right, and there may be extenuating circumstances that force us into choosing between different kinds of breakage, but compatibility is very important to us. Infrastructure should be as unsurprising as possible.
+
+Bundler will provide features and bugfixes to older versions on a schedule similar to Ruby itself. For example, when Bundler 4.x is the current version, Bundler 4 will be eligible for new features and bugfixes. Bundler 3 will be eligible for bugfixes only. Bundler 2 will be eligible for security bugfixes only. Bundler 1 will be unsupported.
+
+Bundler 2 and above will support Ruby and RubyGems versions for the same amount of time as the Ruby core team supports them. As of February 2018, that means no support for Bundler running on Ruby 2.2, security fixes only for Bundler running on Ruby 2.3, and full support (including new features and bugfixes) for Bundler running on Ruby 2.4 and 2.5. Unsupported Ruby versions will be dropped in the first Bundler minor release after support ends.
+
+These policies are not a guarantee that any particular fix will be backported. Instead, this is a way for us to set an upper limit on the versions of Ruby, RubyGems, and Bundler that we have to consider while making changes. Without the limit, the number of versions grows exponentially over time and quickly becomes overwhelming, which leads to maintainer burnout. We want to avoid that.
+
+### User experience guidelines
+
+The experience of using Bundler should not include surprises. If users are surprised, we did something wrong, and we should fix it. There are no user errors, only UX design failures. Warnings should always include actionable instructions to resolve them. Errors should include instructions, helpful references, or other information to help users attempt to debug.
+
+Changing existing behavior is also surprising. If reducing user surprise will result in a backwards-incompatible change, that change should include at least one major version of deprecation warning before the breaking change is made.
+
+### Issue guidelines
+
+Anyone is welcome to open an issue, or comment on an issue. Issue comments without useful content (like “me too”) may be removed.
+
+Opening an issue to ask for help may eventually get you help, but chances are help will arrive faster if you post on [Stack Overflow](https://stackoverflow.com) or ask in [the Bundler Slack](https://slack.bundler.io).
+
+Issues will be handled as soon as possible, which may take some time. Including a script that can be used to reproduce your issue is a great way to help maintainers help you. If you can, writing a failing test for your issue is even more helpful.
+
+### Contribution and pull request guidelines
+
+Anyone is welcome to [contribute to Bundler](README.md). Contributed code will be released under the same license as the existing codebase.
+
+Pull requests must have passing tests to be merged. Code changes must also include tests for the new behavior. Squashing commits is not required.
+
+Every pull request should explain:
+
+1. The problem being solved
+2. Why that problem is happening
+3. What changes to fix that problem are included in the PR, and
+4. Why that implementation was chosen out of the possible options.
+
+### RFC guidelines
+
+Large changes often benefit from being written out more completely, read by others, and discussed. The [Bundler RFC repo](https://github.com/bundler/rfcs) is the preferred place for that to happen.
+
+### Maintainer team guidelines
+
+Always create pull requests rather than pushing directly to the primary branch. Try to get code review and merge approval from someone other than yourself whenever possible. Always merge using `@bundlerbot` to guarantee the primary branch stays green.
+
+Contributors who have contributed regularly for more than six months (or implemented a completely new feature for a minor release) are eligible to join the maintainer team. Unless vetoed by an existing maintainer, these contributors will be asked to join the maintainer team. If they accept, new maintainers will be given permissions to view maintainer playbooks, accept pull requests, and release new versions.
+
+### Release guidelines
+
+Bugfix releases should generally be cut as soon as possible. Multiple bugfix releases are preferable to waiting for a specific fix to land.
+
+Minor/feature releases can be cut anytime at least one new feature is ready, but don’t have to be. Minor version releases should include an update to the documentation website, allowing users to view the documentation for whatever minor version they happen to be using.
+
+Major version releases should be cut no more than once per year, ideally between Ruby's release on December 25 and February 15 of the next year. Releasing soon after Ruby helps us stay in sync with deprecated Ruby versions. Breaking changes other than dropping support for old Ruby versions should be avoided whenever possible, but may be included in major releases. In general, breaking changes should include at least one major version with a deprecation warning before the breaking change takes effect.
+
+### Enforcement guidelines
+
+First off, Bundler’s policies and enforcement of those policies are subsidiary to [Bundler’s code of conduct](https://github.com/bundler/bundler/blob/master/CODE_OF_CONDUCT.md) in any case where they conflict. The first priority is treating human beings with respect and empathy, and figuring out project guidelines and sticking to them will always come after that.
+
+When it comes to carrying out our own policies, we’re all regular humans trying to do the best we can. There will probably be times when we don’t stick to our policies or goals. If you notice a discrepancy between real-life actions and these policies and goals, please bring it up! We want to make sure that our actions and our policies line up, and that our policies exemplify our goals.
+
+Policies are not set in stone, and may be revised if policy violations are found to be in the spirit of the project goals. Likewise, actions that violate the spirit of the project goals will be considered policy violations, and enforcement action will be taken. We’re not interested in rules-lawyering, and we will take action when needed to ensure that everyone feels safe and included.
+
+If you are comfortable reporting issues to the entire Bundler team, please send an email to team@bundler.io. If you are not comfortable reporting to the entire team, for any reason, please check the [maintainers team list](https://bundler.io/team) and use email, Twitter, or Slack to report to a single maintainer of your choice. Anyone violating a policy or goal is expected to cooperate with the team (and the reporter, if they request it) to resolve the issue in a way that follows the project goals.
diff --git a/doc/TROUBLESHOOTING.md b/doc/TROUBLESHOOTING.md
index 7c48813f5e..d5ef596d34 100644
--- a/doc/TROUBLESHOOTING.md
+++ b/doc/TROUBLESHOOTING.md
@@ -42,7 +42,7 @@ list](https://bundler.io/compatibility.html), and make sure that the version of
If these instructions don't work, or you can't find any appropriate instructions, you can try these troubleshooting steps:
# Update to the latest version of bundler
- `gem install bundler`
+ gem install bundler
# Remove user-specific gems and git repos
rm -rf ~/.bundle/ ~/.gem/bundler/ ~/.gems/cache/bundler/
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/HOW_YOU_CAN_HELP.md b/doc/contributing/HOW_YOU_CAN_HELP.md
index 00653e2e0a..46cf33e65c 100644
--- a/doc/contributing/HOW_YOU_CAN_HELP.md
+++ b/doc/contributing/HOW_YOU_CAN_HELP.md
@@ -6,7 +6,7 @@ If at any point you get stuck, here's how to [get in touch with the Bundler team
## First contribution suggestions
-We track [small bugs and features](https://github.com/bundler/bundler/labels/contribution%3A%20small) so that anyone who wants to help can start with something that's not too overwhelming.
+We track [small bugs and features](https://github.com/bundler/bundler/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) so that anyone who wants to help can start with something that's not too overwhelming.
Generally, great ways to get started helping out with Bundler are:
@@ -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](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/README.md b/doc/contributing/README.md
index fcfcd2ca7e..a068ee5cb9 100644
--- a/doc/contributing/README.md
+++ b/doc/contributing/README.md
@@ -1,38 +1,29 @@
-# Contributing to Bundler
+# 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](https://slack.bundler.io/) to connect with the Bundler core team and other contributors like you.
-*Something missing?* Send us a [pull request](../development/PULL_REQUESTS.md)!
+Before submitting a contribution, read through the following guidelines:
-**Recommended first steps**
+* [Bundler Code of Conduct](https://github.com/bundler/bundler/blob/master/CODE_OF_CONDUCT.md) (By participating in Bundler, you agree to abide by the terms laid out in the CoC.)
+* [Issue Reporting Guidelines](https://github.com/bundler/bundler/blob/master/doc/contributing/ISSUES.md)
+* [Pull Request Guidelines](https://github.com/bundler/bundler/blob/master/doc/development/PULL_REQUESTS.md)
-- Join us in the Bundler slack! Generate an invite [here](http://slack.bundler.io/)
-- *If you're interested in helping with code:*
- - Get a quick overview of our [development process](../development/README.md)
- - [Setup your machine for development](../development/SETUP.md)
- - Checkout [How you can help: your first contributions!](HOW_YOU_CAN_HELP.md) for a list of suggestions to get started
-- *If you're interested in helping with documentation:*
- - Read up on [how documentation works for Bundler](../documentation/README.md)
- - Learn about our [documentation vision](../documentation/VISION.md)
+And be sure to [set up your development environment](https://github.com/bundler/bundler/blob/master/doc/development/SETUP.md).
-You can start learning about Bundler by reading [the documentation](http://bundler.io). If you want, you can also read a (lengthy) explanation of [why Bundler exists and what it does](http://bundler.io/rationale.html).
+## Feature Requests
-## [How you can help: your first contributions!](HOW_YOU_CAN_HELP.md)
+To request substantial changes to Bundler and/or Bundler documentation, please refer to the [README](https://github.com/bundler/rfcs/blob/master/README.md) in the [RFC repository](https://github.com/bundler/rfcs) for instructions.
-A detailed overview of how to get started contributing to Bundler, including a long list of suggestions for your first project.
+## Contributing to Bundler
-## [Bug triage](BUG_TRIAGE.md)
+Here are the different ways you can start contributing to the Bundler project:
-Want to take a stab at processing issues? Start here.
+* [First contribution suggestions](https://github.com/bundler/bundler/blob/master/doc/contributing/HOW_YOU_CAN_HELP.md)
+* [Adding new features](https://github.com/bundler/bundler/blob/master/doc/development/NEW_FEATURES.md)
+* [Triaging bugs](https://github.com/bundler/bundler/blob/master/doc/contributing/BUG_TRIAGE.md)
+* [Writing documentation](https://github.com/bundler/bundler/blob/master/doc/documentation/WRITING.md)
+* [Community engagement](https://github.com/bundler/bundler/blob/master/doc/contributing/COMMUNITY.md)
-## [Getting help](GETTING_HELP.md)
+## Supporting Bundler
-How to get in touch with folks who can help when you're stuck. Don't worry! This happens to all of us. We're really nice, we promise.
-
-## [Filing issues](ISSUES.md)
-
-We see a lot of issues in the Bundler repo! Use this guide to file informative, actionable issues.
-
-## [Community](COMMUNITY.md)
-
-Learn more about our goals for the Bundler community and the ways you can help us build better together.
+[Ruby Together](https://rubytogether.org/) pays some Bundler maintainers for their work, funded directly by the Ruby community. If you’d like to support Bundler with a financial contribution, [become an individual sponsor](https://rubytogether.org/developers#plans). We also welcome financial [contributions from companies](https://rubytogether.org/companies#plans), too! (You can also support us through [Open Collective](https://opencollective.com/rubytogether).)
diff --git a/doc/development/PULL_REQUESTS.md b/doc/development/PULL_REQUESTS.md
index 292aacc529..497febfe71 100644
--- a/doc/development/PULL_REQUESTS.md
+++ b/doc/development/PULL_REQUESTS.md
@@ -34,7 +34,3 @@ Please ensure that the commit messages included in the pull request __do not__ h
If you want to use these mechanisms, please instead include them in the pull request description. This prevents multiple notifications or references being created on commit rebases or pull request/branch force pushes.
Additionally, do not use `[ci skip]` or `[skip ci]` mechanisms in your pull request titles/descriptions or commit messages. Every potential commit and pull request should run through Bundler's CI system. This applies to all changes/commits (ex. even a change to just documentation or the removal of a comment).
-
-## CHANGELOG.md
-
-Don't forget to add your changes into the CHANGELOG! If you're submitting documentation, note the changes under the "Documentation" heading.
diff --git a/doc/development/RELEASING.md b/doc/development/RELEASING.md
deleted file mode 100644
index eb496470dc..0000000000
--- a/doc/development/RELEASING.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# Releasing
-
-_Release process documentation is in progress, see [PR 5252](https://github.com/bundler/bundler/pull/5252)._
-
-## Beta testing
-
-Early releases require heavy testing, especially across various system setups. We :heart: testers, and are big fans of anyone who can run `gem install bundler --pre` and try out upcoming releases in their development and staging environments.
-
-There may not always be prereleases or beta versions of Bundler. The Bundler team will tweet from the [@bundlerio account](http://twitter.com/bundlerio) when a prerelease or beta version becomes available. You are also always welcome to try checking out master and building a gem yourself if you want to try out the latest changes.
diff --git a/doc/development/SETUP.md b/doc/development/SETUP.md
index cebe925c1b..80abe4cc6b 100644
--- a/doc/development/SETUP.md
+++ b/doc/development/SETUP.md
@@ -4,25 +4,29 @@ Bundler doesn't use a Gemfile to list development dependencies, because when we
1. [Fork the Bundler repo](https://github.com/bundler/bundler), and clone the fork onto your machine. ([Follow this tutorial](https://help.github.com/articles/fork-a-repo/) for instructions on forking a repo.)
-2. Install `groff-base` and `graphviz` packages using your package manager, e.g for Ubuntu:
+2. Install `groff-base` and `graphviz` packages using your package manager:
- `$ sudo apt-get install graphviz groff-base -y`
+ $ sudo apt-get install graphviz groff-base -y
- and for OS X (with brew installed):
+ And for OS X (with brew installed):
- `$ brew install graphviz homebrew/dupes/groff`
+ $ brew install graphviz groff
-3. Install Bundler's development dependencies:
+3. You may also have to install the `bsdmainutils` package on linux if your distribution does not include the `col` command.
- `$ bin/rake spec:deps`
+ $ sudo apt-get install bsdmainutils -y
-4. Run the test suite, to make sure things are working:
+4. Install Bundler's development dependencies:
- `$ bin/rake spec`
+ $ bin/rake spec:deps
-5. Set up a shell alias to run Bundler from your clone, e.g. a Bash alias ([follow these instructions](https://www.moncefbelyamani.com/create-aliases-in-bash-profile-to-assign-shortcuts-for-common-terminal-commands/) for adding aliases to your `~/.bashrc` profile):
+5. Run the test suite, to make sure things are working:
- `$ alias dbundle='/path/to/bundler/repo/bin/bundle'`
+ $ bin/rake spec
+
+6. Set up a shell alias to run Bundler from your clone, e.g. a Bash alias ([follow these instructions](https://www.moncefbelyamani.com/create-aliases-in-bash-profile-to-assign-shortcuts-for-common-terminal-commands/) for adding aliases to your `~/.bashrc` profile):
+
+ $ alias dbundle='/path/to/bundler/repo/bin/bundle'
## Debugging with `pry`
diff --git a/doc/playbooks/RELEASING.md b/doc/playbooks/RELEASING.md
new file mode 100644
index 0000000000..58a6196fef
--- /dev/null
+++ b/doc/playbooks/RELEASING.md
@@ -0,0 +1,147 @@
+# Releasing
+
+Bundler uses [Semantic Versioning](https://semver.org/).
+
+_Note: In the documentation listed below, the *current* minor version number is
+1.11 and the *next* minor version number is 1.12_
+
+Regardless of the version, *all releases* must update the `CHANGELOG.md` and `lib/bundler/version.rb`
+files. The changelog for the first stable minor release (`1.12.0`) is a sum of all
+the preceding pre-release versions (`1.12.pre.1`, `1.12.pre.2`, etc) for that
+minor version. The changelog for the first stable minor release is left blank
+unless there are fixes included since the last pre/rc release.
+
+## Workflow
+
+In general, `master` will accept PRs for:
+
+* feature merges for the next minor version (1.12)
+* regression fix merges for a patch release on the current minor version (1.11)
+* feature-flagged development for the next major version (2.0)
+
+### Breaking releases
+
+Bundler cares a lot about preserving compatibility. As a result, changes that
+break backwards compatibility should (whenever this is possible) include a feature
+release that is backwards compatible, and issue warnings for all options and
+behaviors that will change.
+
+We try very hard to only release breaking changes when incrementing the _major_
+version of Bundler.
+
+### Cherry picking
+
+Patch releases are made by cherry-picking bug fixes from `master`.
+
+When we cherry-pick, we cherry-pick the merge commits using the following command:
+
+```bash
+$ git cherry-pick -m 1 MERGE_COMMIT_SHAS
+```
+
+For example, for PR [#5029](https://github.com/bundler/bundler/pull/5029), we
+cherry picked commit [dd6aef9](https://github.com/bundler/bundler/commit/dd6aef97a5f2e7173f406267256a8c319d6134ab),
+not [4fe9291](https://github.com/bundler/bundler/commit/4fe92919f51e3463f0aad6fa833ab68044311f03)
+using:
+
+```bash
+$ git cherry-pick -m 1 dd6aef9
+```
+
+The `rake release:patch` command will automatically handle cherry-picking, and is further detailed below.
+
+## Changelog
+
+Bundler maintains a list of changes present in each version in the `CHANGELOG.md` file.
+Entries should not be added in pull requests, but are rather written by the Bundler
+maintainers in the [bundler-changelog repo](https://github.com/bundler/bundler-changelog).
+That repository tracks changes by pull requests, with each entry having an associated version,
+PR, section, author(s), issue(s) closed, and message.
+
+Ensure that repo has been updated with all new PRs before releasing a new version,
+and copy over the new sections to the `CHANGELOG.md` in the Bundler repo.
+
+## Releases
+
+### Minor releases
+
+While pushing a gem version to RubyGems.org is as simple as `rake release`,
+releasing a new version of Bundler includes a lot of communication: team consensus,
+git branching, changelog writing, documentation site updates, and a blog post.
+
+Dizzy yet? Us too.
+
+Here's the checklist for releasing new minor versions:
+
+* [ ] Check with the core team to ensure that there is consensus around shipping a
+ feature release. As a general rule, this should always be okay, since features
+ should _never break backwards compatibility_
+* [ ] Create a new stable branch from master (see **Branching** below)
+* [ ] Update `version.rb` to a prerelease number, e.g. `1.12.pre.1`
+* [ ] Update `CHANGELOG.md` to include all of the features, bugfixes, etc for that
+ version, from the [bundler-changelog](https://github.com/bundler/bundler-changelog)
+ repo.
+* [ ] Run `rake release`, tweet, blog, let people know about the prerelease!
+* [ ] Wait a **minimum of 7 days**
+* [ ] If significant problems are found, increment the prerelease (i.e. 1.12.pre.2)
+ and repeat, but treating `.pre.2` as a _patch release_. In general, once a stable
+ branch has been cut from master, it should _not_ have master merged back into it.
+
+Wait! You're not done yet! After your prelease looks good:
+
+* [ ] Update `version.rb` to a final version (i.e. 1.12.0)
+* [ ] In the [bundler/bundler-site](https://github.com/bundler/bundler-site) repo,
+ copy the previous version's docs to create a new version (e.g. `cp -r v1.11 v1.12`)
+* [ ] Update the new docs as needed, paying special attention to the "What's new"
+ page for this version
+* [ ] Write a blog post announcing the new version, highlighting new features and
+ notable bugfixes
+* [ ] Run `rake release` in the bundler repo, tweet, link to the blog post, etc.
+
+At this point, you're a release manager! Pour yourself several tasty drinks and
+think about taking a vacation in the tropics.
+
+Beware, the first couple of days after the first non-prerelease version in a minor version
+series can often yield a lot of bug reports. This is normal, and doesn't mean you've done
+_anything_ wrong as the release manager.
+
+#### Branching
+
+Minor releases of the next version start with a new release branch from the
+current state of master: `1-12-stable`, and are immediately followed by a `.pre.0` release.
+
+Once that `-stable` branch has been cut from `master`, changes for that minor
+release series (1.12) will only be made _intentionally_, via patch releases.
+That is to say, changes to `master` by default _won't_ make their way into any
+`1.12` version, and development on `master` will be targeting the next minor
+or major release.
+
+### Patch releases (bug fixes!)
+
+Releasing new bugfix versions is really straightforward. Increment the tiny version
+number in `lib/bundler/version.rb`, and in `CHANGELOG.md` add one bullet point
+per bug fixed. Then run `rake release` from the `-stable` branch,
+and pour yourself a tasty drink!
+
+PRs containing regression fixes for a patch release of the current minor version
+are merged to master. These commits are then cherry-picked from master onto the
+minor branch (`1-12-stable`).
+
+There is a `rake release:patch` rake task that automates creating a patch release.
+It takes a single argument, the _exact_ patch release being made (e.g. `1.12.3`),
+and checks out the appropriate stable branch (`1-12-stable`), grabs the `1.12.3`
+milestone from GitHub, ensures all PRs are closed, and then cherry-picks those changes
+(and only those changes) to the stable branch. The task then bumps the version in the
+version file, prompts you to update the `CHANGELOG.md`, then will commit those changes
+and run `rake release`!
+
+## Beta testing
+
+Early releases require heavy testing, especially across various system setups.
+We :heart: testers, and are big fans of anyone who can run `gem install bundler --pre`
+and try out upcoming releases in their development and staging environments.
+
+There may not always be prereleases or beta versions of Bundler.
+The Bundler team will tweet from the [@bundlerio account](http://twitter.com/bundlerio)
+when a prerelease or beta version becomes available. You are also always welcome to try
+checking out master and building a gem yourself if you want to try out the latest changes.
diff --git a/doc/playbooks/TEAM_CHANGES.md b/doc/playbooks/TEAM_CHANGES.md
new file mode 100644
index 0000000000..f6a1e26bff
--- /dev/null
+++ b/doc/playbooks/TEAM_CHANGES.md
@@ -0,0 +1,43 @@
+# Team changes
+
+This file documents how to add and remove team members. For the rules governing adding and removing team members, see [POLICIES][policies].
+
+## Adding a new team member
+
+Interested in adding someone to the team? Here's the process.
+
+1. An existing team member nominates a potential team member to the rest of the team.
+2. The existing team reaches consensus about whether to invite the potential member.
+3. The nominator asks the potential member if they would like to join the team.
+4. The nominator also sends the candidate a link to [POLICIES][policies] as an orientation for being on the team.
+5. If the potential member accepts:
+ - Invite them to the maintainers Slack channel
+ - Add them to the [maintainers team][org_team] on GitHub
+ - Add them to the [Team page][team] on bundler.io, in the [maintainers list][maintainers]
+ - Add them to the [list of team members][list] in `contributors.rake`
+ - Add them to the authors list in `bundler.gemspec`
+ - Add them to the reviewer list in bundlerbot
+ - Add them to the owners list on RubyGems.org by running
+ ```
+ $ gem owner -a EMAIL bundler
+ ```
+
+
+## Removing a team member
+
+When the conditions in [POLICIES](https://github.com/bundler/bundler/blob/master/doc/POLICIES.md#maintainer-team-guidelines) are met, or when team members choose to retire, here's how to remove someone from the team.
+
+- Remove them from the owners list on RubyGems.org by running
+ ```
+ $ gem owner -r EMAIL bundler
+ ```
+- Remove their entry on the [Team page][team] on bundler.io, in the [maintainers list][maintainers]
+- Remove them from the [list of team members][list] in `contributors.rake`
+- Remove them from the [maintainers team][org_team] on GitHub
+- Remove them from the maintainers Slack channel
+
+[policies]: https://github.com/bundler/bundler/blob/master/doc/POLICIES.md#bundler-policies
+[org_team]: https://github.com/orgs/bundler/teams/maintainers/members
+[team]: https://bundler.io/contributors.html
+[maintainers]: https://github.com/bundler/bundler-site/blob/02483d3f79f243774722b3fc18a471ca77b1c424/source/contributors.html.haml#L25
+[list]: https://github.com/bundler/bundler-site/blob/02483d3f79f243774722b3fc18a471ca77b1c424/lib/tasks/contributors.rake#L8
diff --git a/exe/bundle b/exe/bundle
index aaf773745d..fccece038b 100755
--- a/exe/bundle
+++ b/exe/bundle
@@ -7,7 +7,7 @@ Signal.trap("INT") do
exit 1
end
-require "bundler"
+require_relative "../lib/bundler"
# Check if an older version of bundler is installed
$LOAD_PATH.each do |path|
next unless path =~ %r{/bundler-0\.(\d+)} && $1.to_i < 9
@@ -18,9 +18,9 @@ $LOAD_PATH.each do |path|
abort(err)
end
-require "bundler/friendly_errors"
+require_relative "../lib/bundler/friendly_errors"
Bundler.with_friendly_errors do
- require "bundler/cli"
+ require_relative "../lib/bundler/cli"
# Allow any command to use --help flag to show help for that command
help_flags = %w[--help -h]
diff --git a/exe/bundle_ruby b/exe/bundle_ruby
deleted file mode 100755
index 2209c6195f..0000000000
--- a/exe/bundle_ruby
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/usr/bin/env ruby
-# frozen_string_literal: true
-
-require "bundler/shared_helpers"
-
-Bundler::SharedHelpers.major_deprecation(3, "the bundle_ruby executable has been removed in favor of `bundle platform --ruby`")
-
-Signal.trap("INT") { exit 1 }
-
-require "bundler/errors"
-require "bundler/ruby_version"
-require "bundler/ruby_dsl"
-
-module Bundler
- class Dsl
- include RubyDsl
-
- attr_accessor :ruby_version
-
- def initialize
- @ruby_version = nil
- end
-
- def eval_gemfile(gemfile, contents = nil)
- contents ||= File.open(gemfile, "rb", &:read)
- instance_eval(contents, gemfile.to_s, 1)
- rescue SyntaxError => e
- bt = e.message.split("\n")[1..-1]
- raise GemfileError, ["Gemfile syntax error:", *bt].join("\n")
- rescue ScriptError, RegexpError, NameError, ArgumentError => e
- e.backtrace[0] = "#{e.backtrace[0]}: #{e.message} (#{e.class})"
- STDERR.puts e.backtrace.join("\n ")
- raise GemfileError, "There was an error in your Gemfile," \
- " and Bundler cannot continue."
- end
-
- def source(source, options = {})
- end
-
- def gem(name, *args)
- end
-
- def group(*args)
- end
- end
-end
-
-dsl = Bundler::Dsl.new
-begin
- dsl.eval_gemfile(Bundler::SharedHelpers.default_gemfile)
- ruby_version = dsl.ruby_version
- if ruby_version
- puts ruby_version
- else
- puts "No ruby version specified"
- end
-rescue Bundler::GemfileError => e
- puts e.message
- exit(-1)
-end
diff --git a/lib/bundler.rb b/lib/bundler.rb
index cf3a289df2..735750f59d 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)
@@ -23,43 +22,43 @@ module Bundler
ENV.replace(environment_preserver.backup)
SUDO_MUTEX = Mutex.new
- autoload :Definition, "bundler/definition"
- autoload :Dependency, "bundler/dependency"
- autoload :DepProxy, "bundler/dep_proxy"
- autoload :Deprecate, "bundler/deprecate"
- autoload :Dsl, "bundler/dsl"
- autoload :EndpointSpecification, "bundler/endpoint_specification"
- autoload :Env, "bundler/env"
- autoload :Fetcher, "bundler/fetcher"
- autoload :FeatureFlag, "bundler/feature_flag"
- autoload :GemHelper, "bundler/gem_helper"
- autoload :GemHelpers, "bundler/gem_helpers"
- autoload :GemRemoteFetcher, "bundler/gem_remote_fetcher"
- autoload :GemVersionPromoter, "bundler/gem_version_promoter"
- autoload :Graph, "bundler/graph"
- autoload :Index, "bundler/index"
- autoload :Injector, "bundler/injector"
- autoload :Installer, "bundler/installer"
- autoload :LazySpecification, "bundler/lazy_specification"
- autoload :LockfileParser, "bundler/lockfile_parser"
- autoload :MatchPlatform, "bundler/match_platform"
- autoload :ProcessLock, "bundler/process_lock"
- autoload :RemoteSpecification, "bundler/remote_specification"
- autoload :Resolver, "bundler/resolver"
- autoload :Retry, "bundler/retry"
- autoload :RubyDsl, "bundler/ruby_dsl"
- autoload :RubyGemsGemInstaller, "bundler/rubygems_gem_installer"
- autoload :RubyVersion, "bundler/ruby_version"
- autoload :Runtime, "bundler/runtime"
- autoload :Settings, "bundler/settings"
- autoload :SharedHelpers, "bundler/shared_helpers"
- autoload :Source, "bundler/source"
- autoload :SourceList, "bundler/source_list"
- autoload :SpecSet, "bundler/spec_set"
- autoload :StubSpecification, "bundler/stub_specification"
- autoload :UI, "bundler/ui"
- autoload :URICredentialsFilter, "bundler/uri_credentials_filter"
- autoload :VersionRanges, "bundler/version_ranges"
+ autoload :Definition, File.expand_path("bundler/definition", __dir__)
+ autoload :Dependency, File.expand_path("bundler/dependency", __dir__)
+ autoload :DepProxy, File.expand_path("bundler/dep_proxy", __dir__)
+ autoload :Deprecate, File.expand_path("bundler/deprecate", __dir__)
+ autoload :Dsl, File.expand_path("bundler/dsl", __dir__)
+ autoload :EndpointSpecification, File.expand_path("bundler/endpoint_specification", __dir__)
+ autoload :Env, File.expand_path("bundler/env", __dir__)
+ autoload :Fetcher, File.expand_path("bundler/fetcher", __dir__)
+ autoload :FeatureFlag, File.expand_path("bundler/feature_flag", __dir__)
+ autoload :GemHelper, File.expand_path("bundler/gem_helper", __dir__)
+ autoload :GemHelpers, File.expand_path("bundler/gem_helpers", __dir__)
+ autoload :GemRemoteFetcher, File.expand_path("bundler/gem_remote_fetcher", __dir__)
+ autoload :GemVersionPromoter, File.expand_path("bundler/gem_version_promoter", __dir__)
+ autoload :Graph, File.expand_path("bundler/graph", __dir__)
+ autoload :Index, File.expand_path("bundler/index", __dir__)
+ autoload :Injector, File.expand_path("bundler/injector", __dir__)
+ autoload :Installer, File.expand_path("bundler/installer", __dir__)
+ autoload :LazySpecification, File.expand_path("bundler/lazy_specification", __dir__)
+ autoload :LockfileParser, File.expand_path("bundler/lockfile_parser", __dir__)
+ autoload :MatchPlatform, File.expand_path("bundler/match_platform", __dir__)
+ autoload :ProcessLock, File.expand_path("bundler/process_lock", __dir__)
+ autoload :RemoteSpecification, File.expand_path("bundler/remote_specification", __dir__)
+ autoload :Resolver, File.expand_path("bundler/resolver", __dir__)
+ autoload :Retry, File.expand_path("bundler/retry", __dir__)
+ autoload :RubyDsl, File.expand_path("bundler/ruby_dsl", __dir__)
+ autoload :RubyGemsGemInstaller, File.expand_path("bundler/rubygems_gem_installer", __dir__)
+ autoload :RubyVersion, File.expand_path("bundler/ruby_version", __dir__)
+ autoload :Runtime, File.expand_path("bundler/runtime", __dir__)
+ autoload :Settings, File.expand_path("bundler/settings", __dir__)
+ autoload :SharedHelpers, File.expand_path("bundler/shared_helpers", __dir__)
+ autoload :Source, File.expand_path("bundler/source", __dir__)
+ autoload :SourceList, File.expand_path("bundler/source_list", __dir__)
+ autoload :SpecSet, File.expand_path("bundler/spec_set", __dir__)
+ autoload :StubSpecification, File.expand_path("bundler/stub_specification", __dir__)
+ autoload :UI, File.expand_path("bundler/ui", __dir__)
+ autoload :URICredentialsFilter, File.expand_path("bundler/uri_credentials_filter", __dir__)
+ autoload :VersionRanges, File.expand_path("bundler/version_ranges", __dir__)
class << self
def configure
@@ -119,7 +118,7 @@ module Bundler
end
def environment
- SharedHelpers.major_deprecation 3, "Bundler.environment has been removed in favor of Bundler.load"
+ SharedHelpers.major_deprecation 2, "Bundler.environment has been removed in favor of Bundler.load"
load
end
@@ -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
@@ -280,10 +279,19 @@ EOF
ORIGINAL_ENV.clone
end
- # @deprecated Use `original_env` instead
- # @return [Hash] Environment with all bundler-related variables removed
+ # @deprecated Use `unbundled_env` instead
def clean_env
- Bundler::SharedHelpers.major_deprecation(3, "`Bundler.clean_env` has weird edge cases, use `.original_env` instead")
+ Bundler::SharedHelpers.major_deprecation(
+ 2,
+ "`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`"
+ )
+
+ unbundled_env
+ end
+
+ # @return [Hash] Environment with all bundler-related variables removed
+ def unbundled_env
env = original_env
if env.key?("BUNDLER_ORIG_MANPATH")
@@ -305,20 +313,67 @@ EOF
env
end
+ # Run block with environment present before Bundler was activated
def with_original_env
with_env(original_env) { yield }
end
+ # @deprecated Use `with_unbundled_env` instead
def with_clean_env
- with_env(clean_env) { yield }
+ Bundler::SharedHelpers.major_deprecation(
+ 2,
+ "`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`"
+ )
+
+ with_env(unbundled_env) { yield }
end
+ # Run block with all bundler-related variables removed
+ def with_unbundled_env
+ 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
@@ -343,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
@@ -509,7 +564,7 @@ EOF
private
def eval_yaml_gemspec(path, contents)
- Kernel.send(:require, "bundler/psyched_yaml")
+ require_relative "bundler/psyched_yaml"
# If the YAML is invalid, Syck raises an ArgumentError, and Psych
# raises a Psych::SyntaxError. See psyched_yaml.rb for more info.
@@ -523,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 40e2e5dbe8..573df95043 100644
--- a/lib/bundler/capistrano.rb
+++ b/lib/bundler/capistrano.rb
@@ -1,14 +1,14 @@
# frozen_string_literal: true
-require "bundler/shared_helpers"
-Bundler::SharedHelpers.major_deprecation 3,
+require_relative "shared_helpers"
+Bundler::SharedHelpers.major_deprecation 2,
"The Bundler task for Capistrano. Please use http://github.com/capistrano/bundler"
# Capistrano task for Bundler.
#
# 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 988c3168a6..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(3, "The `--force` option has been renamed to `--redownload`") if ARGV.include?("--force")
- require "bundler/cli/install"
+ SharedHelpers.major_deprecation(2, "The `--force` option has been renamed to `--redownload`") if ARGV.include?("--force")
+
+ %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
@@ -275,63 +274,64 @@ module Bundler
method_option "all", :type => :boolean, :banner =>
"Update everything."
def update(*gems)
- SharedHelpers.major_deprecation(3, "The `--force` option has been renamed to `--redownload`") if ARGV.include?("--force")
- require "bundler/cli/update"
+ SharedHelpers.major_deprecation(2, "The `--force` option has been renamed to `--redownload`") if ARGV.include?("--force")
+ 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(3, "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
@@ -352,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
@@ -363,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
@@ -388,9 +390,10 @@ module Bundler
"Do not attempt to fetch gems remotely and use the gem cache instead"
method_option "pre", :type => :boolean, :banner => "Check for newer pre-release gems"
method_option "source", :type => :array, :banner => "Check against a specific source"
- method_option "strict", :type => :boolean, :banner =>
+ strict_is_update = Bundler.feature_flag.forget_cli_options?
+ method_option "filter-strict", :type => :boolean, :aliases => strict_is_update ? [] : %w[--strict], :banner =>
"Only list newer versions allowed by your Gemfile requirements"
- method_option "update-strict", :type => :boolean, :banner =>
+ method_option "update-strict", :type => :boolean, :aliases => strict_is_update ? %w[--strict] : [], :banner =>
"Strict conservative resolution, do not allow any gem to be updated past latest --patch | --minor | --major"
method_option "minor", :type => :boolean, :banner => "Prefer updating only to next minor version"
method_option "major", :type => :boolean, :banner => "Prefer updating to next major version (default)"
@@ -403,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
@@ -418,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
@@ -446,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
@@ -461,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
@@ -477,22 +480,19 @@ module Bundler
will show the current value, as well as any superceded values and
where they were specified.
D
- method_option "parseable", :type => :boolean, :banner => "Use minimal formatting for more parseable output"
- def config(*args)
- require "bundler/cli/config"
- Config.new(options, args, self).run
- end
+ 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
@@ -526,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.
@@ -539,8 +539,8 @@ module Bundler
method_option :version, :type => :boolean, :default => false, :aliases => "-v", :desc => "Set to show each gem version."
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 3, "The `viz` command has been moved to the `bundle-viz` gem, see https://github.com/bundler/bundler-viz"
- require "bundler/cli/viz"
+ SharedHelpers.major_deprecation 2, "The `viz` command has been moved to the `bundle-viz` gem, see https://github.com/bundler/bundler-viz"
+ require_relative "cli/viz"
Viz.new(options.dup).run
end
end
@@ -549,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
@@ -564,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)
@@ -592,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
@@ -600,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
@@ -610,8 +610,8 @@ module Bundler
method_option "group", :type => :string, :banner =>
"Install gem into a bundler group"
def inject(name, version)
- SharedHelpers.major_deprecation 3, "The `inject` command has been replaced by the `add` command"
- require "bundler/cli/inject"
+ SharedHelpers.major_deprecation 2, "The `inject` command has been replaced by the `add` command"
+ require_relative "cli/inject"
Inject.new(options.dup, name, version).run
end
@@ -622,6 +622,8 @@ module Bundler
"do not attempt to fetch remote gemspecs and use the local gem cache only"
method_option "print", :type => :boolean, :default => false, :banner =>
"print the lockfile to STDOUT instead of writing to the file system"
+ method_option "gemfile", :type => :string, :banner =>
+ "Use the specified gemfile instead of Gemfile"
method_option "lockfile", :type => :string, :default => nil, :banner =>
"the path the lockfile should be written to"
method_option "full-index", :type => :boolean, :default => false, :banner =>
@@ -641,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
@@ -661,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
@@ -678,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
@@ -716,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
@@ -788,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/add.rb b/lib/bundler/cli/add.rb
index 9709e71be0..7c6235f17c 100644
--- a/lib/bundler/cli/add.rb
+++ b/lib/bundler/cli/add.rb
@@ -2,34 +2,45 @@
module Bundler
class CLI::Add
+ attr_reader :gems, :options, :version
+
def initialize(options, gems)
@gems = gems
@options = options
- @options[:group] = @options[:group].split(",").map(&:strip) if !@options[:group].nil? && !@options[:group].empty?
+ @options[:group] = options[:group].split(",").map(&:strip) unless options[:group].nil?
+ @version = options[:version].split(",").map(&:strip) unless options[:version].nil?
end
def run
- raise InvalidOption, "You can not specify `--strict` and `--optimistic` at the same time." if @options[:strict] && @options[:optimistic]
-
- # raise error when no gems are specified
- raise InvalidOption, "Please specify gems to add." if @gems.empty?
+ validate_options!
+ inject_dependencies
+ perform_bundle_install unless options["skip-install"]
+ end
- version = @options[:version].nil? ? nil : @options[:version].split(",").map(&:strip)
+ private
- unless version.nil?
- version.each do |v|
- raise InvalidOption, "Invalid gem requirement pattern '#{v}'" unless Gem::Requirement::PATTERN =~ v.to_s
- end
- end
+ def perform_bundle_install
+ Installer.install(Bundler.root, Bundler.definition)
+ end
- dependencies = @gems.map {|g| Bundler::Dependency.new(g, version, @options) }
+ def inject_dependencies
+ dependencies = gems.map {|g| Bundler::Dependency.new(g, version, options) }
Injector.inject(dependencies,
- :conservative_versioning => @options[:version].nil?, # Perform conservative versioning only when version is not specified
- :optimistic => @options[:optimistic],
- :strict => @options[:strict])
+ :conservative_versioning => options[:version].nil?, # Perform conservative versioning only when version is not specified
+ :optimistic => options[:optimistic],
+ :strict => options[:strict])
+ end
+
+ def validate_options!
+ raise InvalidOption, "You can not specify `--strict` and `--optimistic` at the same time." if options[:strict] && options[:optimistic]
- Installer.install(Bundler.root, Bundler.definition) unless @options["skip-install"]
+ # raise error when no gems are specified
+ raise InvalidOption, "Please specify gems to add." if gems.empty?
+
+ version.to_a.each do |v|
+ raise InvalidOption, "Invalid gem requirement pattern '#{v}'" unless Gem::Requirement::PATTERN =~ v.to_s
+ end
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 0490453538..cec7bcadb4 100644
--- a/lib/bundler/cli/common.rb
+++ b/lib/bundler/cli/common.rb
@@ -14,17 +14,18 @@ module Bundler
Bundler.ui.info msg
end
- def self.output_without_groups_message
+ def self.output_without_groups_message(command)
return if Bundler.settings[:without].empty?
- Bundler.ui.confirm without_groups_message
+ Bundler.ui.confirm without_groups_message(command)
end
- def self.without_groups_message
+ def self.without_groups_message(command)
+ command_in_past_tense = command == :install ? "installed" : "updated"
groups = Bundler.settings[:without]
group_list = [groups[0...-1].join(", "), groups[-1..-1]].
reject {|s| s.to_s.empty? }.join(" and ")
- group_str = (groups.size == 1) ? "group" : "groups"
- "Gems in the #{group_str} #{group_list} were not installed."
+ group_str = groups.size == 1 ? "group" : "groups"
+ "Gems in the #{group_str} #{group_list} were not #{command_in_past_tense}."
end
def self.select_spec(name, regex_match = nil)
@@ -49,10 +50,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 +60,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,10 +77,12 @@ 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"]
+ gvp.strict = options[:strict] || options["update-strict"] || options["filter-strict"]
end
end
diff --git a/lib/bundler/cli/config.rb b/lib/bundler/cli/config.rb
index 12f71ea8fe..1df2a55d9a 100644
--- a/lib/bundler/cli/config.rb
+++ b/lib/bundler/cli/config.rb
@@ -1,119 +1,194 @@
# frozen_string_literal: true
module Bundler
- class CLI::Config
- attr_reader :name, :options, :scope, :thor
- attr_accessor :args
-
- def initialize(options, args, thor)
- @options = options
- @args = args
- @thor = thor
- @name = peek = args.shift
- @scope = "global"
- return unless peek && peek.start_with?("--")
- @name = args.shift
- @scope = peek[2..-1]
+ class CLI::Config < Thor
+ class_option :parseable, :type => :boolean, :banner => "Use minimal formatting for more parseable output"
+
+ def self.scope_options
+ method_option :global, :type => :boolean, :banner => "Only change the global config"
+ method_option :local, :type => :boolean, :banner => "Only change the local config"
end
+ private_class_method :scope_options
- def run
- unless name
- confirm_all
- return
- end
+ desc "base NAME [VALUE]", "The Bundler 1 config interface", :hide => true
+ scope_options
+ method_option :delete, :type => :boolean, :banner => "delete"
+ def base(name = nil, *value)
+ 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
- unless valid_scope?(scope)
- Bundler.ui.error "Invalid scope --#{scope} given. Please use --local or --global."
- exit 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
+
+ desc "list", "List out all configured settings"
+ def list
+ Base.new(options, nil, nil, self).run
+ end
+
+ desc "get NAME", "Returns the value for the given key"
+ def get(name)
+ Base.new(options, name, nil, self).run
+ end
+
+ desc "set NAME VALUE", "Sets the given value for the given key"
+ scope_options
+ def set(name, value, *value_)
+ Base.new(options, name, value_.unshift(value), self).run
+ end
- if scope == "delete"
- Bundler.settings.set_local(name, nil)
- Bundler.settings.set_global(name, nil)
- return
+ desc "unset NAME", "Unsets the value for the given key"
+ scope_options
+ def unset(name)
+ options[:delete] = true
+ Base.new(options, name, nil, self).run
+ end
+
+ default_task :base
+
+ class Base
+ attr_reader :name, :value, :options, :scope, :thor
+
+ def initialize(options, name, value, thor)
+ @options = options
+ @name = name
+ value = Array(value)
+ @value = value.empty? ? nil : value.join(" ")
+ @thor = thor
+ validate_scope!
end
- if args.empty?
- if options[:parseable]
- if value = Bundler.settings[name]
- Bundler.ui.info("#{name}=#{value}")
+ def run
+ unless name
+ warn_unused_scope "Ignoring --#{scope}"
+ confirm_all
+ return
+ end
+
+ if options[:delete]
+ if !explicit_scope? || scope != "global"
+ Bundler.settings.set_local(name, nil)
+ end
+ if !explicit_scope? || scope != "local"
+ Bundler.settings.set_global(name, nil)
end
return
end
- confirm(name)
- return
- end
+ if value.nil?
+ warn_unused_scope "Ignoring --#{scope} since no value to set was given"
- Bundler.ui.info(message) if message
- Bundler.settings.send("set_#{scope}", name, new_value)
- end
+ if options[:parseable]
+ if value = Bundler.settings[name]
+ Bundler.ui.info("#{name}=#{value}")
+ end
+ return
+ end
- private
+ confirm(name)
+ return
+ end
- def confirm_all
- if @options[:parseable]
- thor.with_padding do
+ Bundler.ui.info(message) if message
+ Bundler.settings.send("set_#{scope}", name, new_value)
+ end
+
+ def confirm_all
+ if @options[:parseable]
+ thor.with_padding do
+ Bundler.settings.all.each do |setting|
+ val = Bundler.settings[setting]
+ Bundler.ui.info "#{setting}=#{val}"
+ end
+ end
+ else
+ Bundler.ui.confirm "Settings are listed in order of priority. The top value will be used.\n"
Bundler.settings.all.each do |setting|
- val = Bundler.settings[setting]
- Bundler.ui.info "#{setting}=#{val}"
+ Bundler.ui.confirm "#{setting}"
+ show_pretty_values_for(setting)
+ Bundler.ui.confirm ""
end
end
- else
- Bundler.ui.confirm "Settings are listed in order of priority. The top value will be used.\n"
- Bundler.settings.all.each do |setting|
- Bundler.ui.confirm "#{setting}"
- show_pretty_values_for(setting)
- Bundler.ui.confirm ""
- end
end
- end
- def confirm(name)
- Bundler.ui.confirm "Settings for `#{name}` in order of priority. The top value will be used"
- show_pretty_values_for(name)
- end
+ def confirm(name)
+ Bundler.ui.confirm "Settings for `#{name}` in order of priority. The top value will be used"
+ show_pretty_values_for(name)
+ end
- def new_value
- pathname = Pathname.new(args.join(" "))
- if name.start_with?("local.") && pathname.directory?
- pathname.expand_path.to_s
- else
- args.join(" ")
+ def new_value
+ pathname = Pathname.new(value)
+ if name.start_with?("local.") && pathname.directory?
+ pathname.expand_path.to_s
+ else
+ value
+ end
end
- end
- def message
- locations = Bundler.settings.locations(name)
- if @options[:parseable]
- "#{name}=#{new_value}" if new_value
- elsif scope == "global"
- if locations[:local]
- "Your application has set #{name} to #{locations[:local].inspect}. " \
- "This will override the global value you are currently setting"
- elsif locations[:env]
- "You have a bundler environment variable for #{name} set to " \
- "#{locations[:env].inspect}. This will take precedence over the global value you are setting"
- elsif locations[:global] && locations[:global] != args.join(" ")
- "You are replacing the current global value of #{name}, which is currently " \
- "#{locations[:global].inspect}"
+ def message
+ locations = Bundler.settings.locations(name)
+ if @options[:parseable]
+ "#{name}=#{new_value}" if new_value
+ elsif scope == "global"
+ if !locations[:local].nil?
+ "Your application has set #{name} to #{locations[:local].inspect}. " \
+ "This will override the global value you are currently setting"
+ elsif locations[:env]
+ "You have a bundler environment variable for #{name} set to " \
+ "#{locations[:env].inspect}. This will take precedence over the global value you are setting"
+ elsif !locations[:global].nil? && locations[:global] != value
+ "You are replacing the current global value of #{name}, which is currently " \
+ "#{locations[:global].inspect}"
+ end
+ elsif scope == "local" && !locations[:local].nil? && locations[:local] != value
+ "You are replacing the current local value of #{name}, which is currently " \
+ "#{locations[:local].inspect}"
end
- elsif scope == "local" && locations[:local] != args.join(" ")
- "You are replacing the current local value of #{name}, which is currently " \
- "#{locations[:local].inspect}"
end
- end
- def show_pretty_values_for(setting)
- thor.with_padding do
- Bundler.settings.pretty_values_for(setting).each do |line|
- Bundler.ui.info line
+ def show_pretty_values_for(setting)
+ thor.with_padding do
+ Bundler.settings.pretty_values_for(setting).each do |line|
+ Bundler.ui.info line
+ end
end
end
- end
- def valid_scope?(scope)
- %w[delete local global].include?(scope)
+ def explicit_scope?
+ @explicit_scope
+ end
+
+ def warn_unused_scope(msg)
+ return unless explicit_scope?
+ return if options[:parseable]
+
+ Bundler.ui.warn(msg)
+ end
+
+ def validate_scope!
+ @explicit_scope = true
+ scopes = %w[global local].select {|s| options[s] }
+ case scopes.size
+ when 0
+ @scope = "global"
+ @explicit_scope = false
+ when 1
+ @scope = scopes.first
+ else
+ raise InvalidOption,
+ "The options #{scopes.join " and "} were specified. Please only use one of the switches at a time."
+ end
+ end
end
end
end
diff --git a/lib/bundler/cli/console.rb b/lib/bundler/cli/console.rb
index d45f30cdcf..6e0dfe28af 100644
--- a/lib/bundler/cli/console.rb
+++ b/lib/bundler/cli/console.rb
@@ -9,10 +9,10 @@ module Bundler
end
def run
- Bundler::SharedHelpers.major_deprecation 3, "bundle console will be replaced " \
+ Bundler::SharedHelpers.major_deprecation 2, "bundle console will be replaced " \
"by `bin/console` generated by `bundle gem <name>`"
- group ? Bundler.require(:default, *(group.split.map!(&:to_sym))) : Bundler.require
+ group ? Bundler.require(:default, *group.split.map!(&:to_sym)) : Bundler.require
ARGV.clear
console = get_console(Bundler.settings[:console] || "irb")
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..5dcf4a01ef 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
@@ -27,12 +27,7 @@ module Bundler
if !Bundler.settings[:disable_exec_load] && ruby_shebang?(bin_path)
return kernel_load(bin_path, *args)
end
- # First, try to exec directly to something in PATH
- if Bundler.current_ruby.jruby_18?
- kernel_exec(bin_path, *args)
- else
- kernel_exec([bin_path, cmd], *args)
- end
+ kernel_exec(bin_path, *args)
else
# exec using the given command
kernel_exec(cmd, *args)
@@ -69,7 +64,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 2e6a777409..d823fb632f 100644
--- a/lib/bundler/cli/install.rb
+++ b/lib/bundler/cli/install.rb
@@ -53,7 +53,7 @@ module Bundler
Bundler::Fetcher.disable_endpoint = options["full-index"]
if options["binstubs"]
- Bundler::SharedHelpers.major_deprecation 3,
+ Bundler::SharedHelpers.major_deprecation 2,
"The --binstubs option will be removed in favor of `bundle binstubs`"
end
@@ -66,7 +66,7 @@ module Bundler
Bundler.load.cache if Bundler.app_cache.exist? && !options["no-cache"] && !Bundler.frozen_bundle?
Bundler.ui.confirm "Bundle complete! #{dependencies_count_for(definition)}, #{gems_installed_for(definition)}."
- Bundler::CLI::Common.output_without_groups_message
+ Bundler::CLI::Common.output_without_groups_message(:install)
if Bundler.use_system_gems?
Bundler.ui.confirm "Use `bundle info [gemname]` to see where a bundled gem is installed."
@@ -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 bba1619340..054ce76315 100644
--- a/lib/bundler/cli/issue.rb
+++ b/lib/bundler/cli/issue.rb
@@ -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 2ca90293db..857caf0a03 100644
--- a/lib/bundler/cli/outdated.rb
+++ b/lib/bundler/cli/outdated.rb
@@ -41,7 +41,7 @@ module Bundler
# the patch level options imply strict is also true. It wouldn't make
# sense otherwise.
- strict = options[:strict] ||
+ strict = options["filter-strict"] ||
Bundler::CLI::Common.patch_level_options(options).any?
filter_options_patch = options.keys &
@@ -124,7 +124,7 @@ module Bundler
[nil, ordered_groups].flatten.each do |groups|
gems = outdated_gems_by_groups[groups]
contains_group = if groups
- groups.split(",").include?(options[:group])
+ groups.split(", ").include?(options[:group])
else
options[:group] == "group"
end
@@ -133,7 +133,7 @@ module Bundler
unless options[:parseable]
if groups
- Bundler.ui.info "===== Group #{groups} ====="
+ Bundler.ui.info "===== #{groups_text("Group", groups)} ====="
else
Bundler.ui.info "===== Without group ====="
end
@@ -167,6 +167,10 @@ module Bundler
private
+ def groups_text(group_text, groups)
+ "#{group_text}#{groups.split(",").size > 1 ? "s" : ""} \"#{groups}\""
+ end
+
def retrieve_active_spec(strict, definition, current_spec)
if strict
active_spec = definition.find_resolved_spec(current_spec)
@@ -212,7 +216,7 @@ module Bundler
elsif options_include_groups || !groups
" * #{spec_outdated_info}"
else
- " * #{spec_outdated_info} in groups \"#{groups}\""
+ " * #{spec_outdated_info} in #{groups_text("group", groups)}"
end
Bundler.ui.info output_message.rstrip
@@ -221,9 +225,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 5488a9f28d..1155c4ec9b 100644
--- a/lib/bundler/cli/plugin.rb
+++ b/lib/bundler/cli/plugin.rb
@@ -1,11 +1,11 @@
# 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"
long_desc <<-D
- Install plugins either from the rubygems source provided (with --source option) or from a git source provided with (--git option). If no sources are provided, it uses Gem.sources
+ Install plugins either from the rubygems source provided (with --source option) or from a git source provided with --git (for remote repos) or --local_git (for local repos). If no sources are provided, it uses Gem.sources
D
method_option "source", :type => :string, :default => nil, :banner =>
"URL of the RubyGems source to fetch the plugin from"
@@ -13,6 +13,8 @@ module Bundler
"The version of the plugin to fetch"
method_option "git", :type => :string, :default => nil, :banner =>
"URL of the git repo to fetch from"
+ method_option "local_git", :type => :string, :default => nil, :banner =>
+ "Path of the local git repo to fetch from"
method_option "branch", :type => :string, :default => nil, :banner =>
"The git branch to checkout"
method_option "ref", :type => :string, :default => nil, :banner =>
@@ -20,5 +22,10 @@ module Bundler
def install(*plugins)
Bundler::Plugin.install(plugins, options)
end
+
+ desc "list", "List the installed plugins and available commands"
+ def list
+ Bundler::Plugin.list
+ end
end
end
diff --git a/lib/bundler/cli/pristine.rb b/lib/bundler/cli/pristine.rb
index 4a411a83fc..532b3e0b5b 100644
--- a/lib/bundler/cli/pristine.rb
+++ b/lib/bundler/cli/pristine.rb
@@ -33,7 +33,7 @@ module Bundler
if extension_cache_path = source.extension_cache_path(spec)
FileUtils.rm_rf extension_cache_path
end
- FileUtils.rm_rf spec.extension_dir if spec.respond_to?(:extension_dir)
+ FileUtils.rm_rf spec.extension_dir
FileUtils.rm_rf spec.full_gem_path
else
Bundler.ui.warn("Cannot pristine #{gem_name}. Gem is sourced from local path.")
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 bf300a8437..afd386bd54 100644
--- a/lib/bundler/cli/update.rb
+++ b/lib/bundler/cli/update.rb
@@ -22,7 +22,7 @@ module Bundler
if Bundler.feature_flag.update_requires_all_flag?
raise InvalidOption, "To update everything, pass the `--all` flag."
end
- SharedHelpers.major_deprecation 3, "Pass --all to `bundle update` to update everything"
+ SharedHelpers.major_deprecation 2, "Pass --all to `bundle update` to update everything"
elsif !full_update && options[:all]
raise InvalidOption, "Cannot specify --all along with specific options."
end
@@ -58,24 +58,44 @@ 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_info = locked_gems.specs.reduce({}) do |h, s|
+ h[s.name] = { :spec => s, :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
- if !new_version
- Bundler.ui.warn "Bundler attempted to update #{name} but it was removed from the bundle"
- elsif new_version < locked_version
+ locked_info = previous_locked_info[name]
+ next unless locked_info
+
+ locked_spec = locked_info[:spec]
+ new_spec = Bundler.definition.specs[name].first
+ unless new_spec
+ if Bundler.rubygems.platforms.none? {|p| locked_spec.match_platform(p) }
+ Bundler.ui.warn "Bundler attempted to update #{name} but it was not considered because it is for a different platform from the current one"
+ end
+
+ next
+ end
+
+ locked_source = locked_info[:source]
+ new_source = new_spec.source.to_s
+ next if locked_source != new_source
+
+ new_version = new_spec.version
+ locked_version = locked_info[:version]
+ if new_version < locked_version
Bundler.ui.warn "Note: #{name} version regressed from #{locked_version} to #{new_version}"
elsif new_version == locked_version
Bundler.ui.warn "Bundler attempted to update #{name} but its version stayed the same"
@@ -84,7 +104,7 @@ module Bundler
end
Bundler.ui.confirm "Bundle updated!"
- Bundler::CLI::Common.output_without_groups_message
+ Bundler::CLI::Common.output_without_groups_message(:update)
Bundler::CLI::Common.output_post_install_messages installer.post_install_messages
end
end
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 e2f8745b80..eaff1a10d4 100644
--- a/lib/bundler/compatibility_guard.rb
+++ b/lib/bundler/compatibility_guard.rb
@@ -1,13 +1,9 @@
# frozen_string_literal: false
-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 8ef9381ce7..76950ff96a 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
@@ -331,7 +331,7 @@ module Bundler
# i.e., Windows with `git config core.autocrlf=true`
contents.gsub!(/\n/, "\r\n") if @lockfile_contents.match("\r\n")
- if @locked_bundler_version && Bundler.feature_flag.lockfile_upgrade_warning?
+ if @locked_bundler_version
locked_major = @locked_bundler_version.segments.first
current_major = Gem::Version.create(Bundler::VERSION).segments.first
@@ -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
@@ -782,7 +782,7 @@ module Bundler
# Path sources have special logic
if s.source.instance_of?(Source::Path) || s.source.instance_of?(Source::Gemspec)
- other_sources_specs = begin
+ new_specs = begin
s.source.specs
rescue PathError, GitError
# if we won't need the source (according to the lockfile),
@@ -794,16 +794,18 @@ module Bundler
raise
end
- other = other_sources_specs[s].first
+ new_spec = new_specs[s].first
# If the spec is no longer in the path source, unlock it. This
# commonly happens if the version changed in the gemspec
- next unless other
+ next unless new_spec
- deps2 = other.dependencies.select {|d| d.type != :development }
- runtime_dependencies = s.dependencies.select {|d| d.type != :development }
- # If the dependencies of the path source have changed, unlock it
- next unless runtime_dependencies.sort == deps2.sort
+ new_runtime_deps = new_spec.dependencies.select {|d| d.type != :development }
+ old_runtime_deps = s.dependencies.select {|d| d.type != :development }
+ # If the dependencies of the path source have changed and locked spec can't satisfy new dependencies, unlock it
+ next unless new_runtime_deps.sort == old_runtime_deps.sort || new_runtime_deps.all? {|d| satisfies_locked_spec?(d) }
+
+ s.dependencies.replace(new_spec.dependencies)
end
converged << s
@@ -855,8 +857,8 @@ module Bundler
concat_ruby_version_requirements(locked_ruby_version_object) unless @unlock[:ruby]
end
[
- Dependency.new("ruby\0", ruby_versions),
- Dependency.new("rubygems\0", Gem::VERSION),
+ Dependency.new("Ruby\0", ruby_versions),
+ Dependency.new("RubyGems\0", Gem::VERSION),
]
end
end
@@ -915,7 +917,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 +931,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..55ffea02b6 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,
@@ -19,6 +19,7 @@ module Bundler
:ruby_23 => Gem::Platform::RUBY,
:ruby_24 => Gem::Platform::RUBY,
:ruby_25 => Gem::Platform::RUBY,
+ :ruby_26 => Gem::Platform::RUBY,
:mri => Gem::Platform::RUBY,
:mri_18 => Gem::Platform::RUBY,
:mri_19 => Gem::Platform::RUBY,
@@ -28,6 +29,7 @@ module Bundler
:mri_23 => Gem::Platform::RUBY,
:mri_24 => Gem::Platform::RUBY,
:mri_25 => Gem::Platform::RUBY,
+ :mri_26 => Gem::Platform::RUBY,
:rbx => Gem::Platform::RUBY,
:truffleruby => Gem::Platform::RUBY,
:jruby => Gem::Platform::JAVA,
@@ -42,6 +44,7 @@ module Bundler
:mswin_23 => Gem::Platform::MSWIN,
:mswin_24 => Gem::Platform::MSWIN,
:mswin_25 => Gem::Platform::MSWIN,
+ :mswin_26 => Gem::Platform::MSWIN,
:mswin64 => Gem::Platform::MSWIN64,
:mswin64_19 => Gem::Platform::MSWIN64,
:mswin64_20 => Gem::Platform::MSWIN64,
@@ -50,6 +53,7 @@ module Bundler
:mswin64_23 => Gem::Platform::MSWIN64,
:mswin64_24 => Gem::Platform::MSWIN64,
:mswin64_25 => Gem::Platform::MSWIN64,
+ :mswin64_26 => Gem::Platform::MSWIN64,
:mingw => Gem::Platform::MINGW,
:mingw_18 => Gem::Platform::MINGW,
:mingw_19 => Gem::Platform::MINGW,
@@ -59,6 +63,7 @@ module Bundler
:mingw_23 => Gem::Platform::MINGW,
:mingw_24 => Gem::Platform::MINGW,
:mingw_25 => Gem::Platform::MINGW,
+ :mingw_26 => Gem::Platform::MINGW,
:x64_mingw => Gem::Platform::X64_MINGW,
:x64_mingw_20 => Gem::Platform::X64_MINGW,
:x64_mingw_21 => Gem::Platform::X64_MINGW,
@@ -66,6 +71,7 @@ module Bundler
:x64_mingw_23 => Gem::Platform::X64_MINGW,
:x64_mingw_24 => Gem::Platform::X64_MINGW,
:x64_mingw_25 => Gem::Platform::X64_MINGW,
+ :x64_mingw_26 => Gem::Platform::X64_MINGW,
}.freeze
REVERSE_PLATFORM_MAP = {}.tap do |reverse_platform_map|
@@ -84,6 +90,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 4c8f48d405..b432ae6ae1 100644
--- a/lib/bundler/deployment.rb
+++ b/lib/bundler/deployment.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
-require "bundler/shared_helpers"
-Bundler::SharedHelpers.major_deprecation 3, "Bundler no longer integrates with " \
+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 285b155197..534c9b5537 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}"
@@ -194,7 +194,7 @@ module Bundler
" end\n\n"
raise DeprecatedError, msg if Bundler.feature_flag.disable_multisource?
- SharedHelpers.major_deprecation(3, msg.strip)
+ SharedHelpers.major_deprecation(2, msg.strip)
end
source_options = normalize_hash(options).merge(
@@ -290,37 +290,16 @@ 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 3, "The `github.https` setting will be removed"
- "https://github.com/#{repo_name}.git"
- else
- "git://github.com/#{repo_name}.git"
- end
+ "https://github.com/#{repo_name}.git"
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("/")
@@ -363,9 +342,7 @@ repo_name ||= user_name
if name =~ /\s/
raise GemfileError, %('#{name}' is not a valid gem name because it contains whitespace)
end
- if name.empty?
- raise GemfileError, %(an empty gem name is not valid)
- end
+ raise GemfileError, %(an empty gem name is not valid) if name.empty?
normalize_hash(opts)
@@ -443,10 +420,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."
@@ -456,7 +433,7 @@ repo_name ||= user_name
def normalize_source(source)
case source
when :gemcutter, :rubygems, :rubyforge
- Bundler::SharedHelpers.major_deprecation 3, "The source :#{source} is deprecated because HTTP " \
+ Bundler::SharedHelpers.major_deprecation 2, "The source :#{source} is deprecated because HTTP " \
"requests are insecure.\nPlease change your source to 'https://" \
"rubygems.org' if possible, or 'http://rubygems.org' if not."
"http://rubygems.org"
@@ -474,23 +451,22 @@ repo_name ||= user_name
msg = "This Gemfile contains multiple primary sources. " \
"Each source after the first must include a block to indicate which gems " \
"should come from that source"
- unless Bundler.feature_flag.bundler_3_mode?
+ 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
- Bundler::SharedHelpers.major_deprecation 3, "Your Gemfile contains multiple primary sources. " \
+ Bundler::SharedHelpers.major_deprecation 2, "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 " \
+ "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} }"
@@ -499,7 +475,7 @@ repo_name ||= user_name
end
Bundler::SharedHelpers.major_deprecation 3, <<-EOS
-The :#{name} git source is deprecated, and will be removed in Bundler 3.0.#{additional_message} Add this code to the top of your Gemfile to ensure it continues to work:
+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}
@@ -601,7 +577,7 @@ The :#{name} git source is deprecated, and will be removed in Bundler 3.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 7ee1e0d431..a45694dd8e 100644
--- a/lib/bundler/feature_flag.rb
+++ b/lib/bundler/feature_flag.rb
@@ -33,22 +33,14 @@ module Bundler
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(:console_command) { !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(:error_on_stderr) { bundler_2_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(:init_gems_rb) { bundler_3_mode? }
- settings_flag(:list_command) { bundler_3_mode? }
- settings_flag(:lockfile_uses_separate_rubygems_sources) { bundler_3_mode? }
- settings_flag(:lockfile_upgrade_warning) { 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_3_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_3_mode? }
@@ -57,12 +49,9 @@ module Bundler
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_flag(:viz_command) { !bundler_3_mode? }
settings_option(:default_cli_command) { bundler_3_mode? ? :cli_help : :install }
- settings_method(:github_https?, "github.https") { bundler_2_mode? }
-
def initialize(bundler_version)
@bundler_version = Gem::Version.create(bundler_version)
end
diff --git a/lib/bundler/fetcher.rb b/lib/bundler/fetcher.rb
index 4dd42e42ff..d21baf659d 100644
--- a/lib/bundler/fetcher.rb
+++ b/lib/bundler/fetcher.rb
@@ -1,20 +1,23 @@
# 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
class Fetcher
- autoload :CompactIndex, "bundler/fetcher/compact_index"
- autoload :Downloader, "bundler/fetcher/downloader"
- autoload :Dependency, "bundler/fetcher/dependency"
- autoload :Index, "bundler/fetcher/index"
+ autoload :CompactIndex, File.expand_path("fetcher/compact_index", __dir__)
+ autoload :Downloader, File.expand_path("fetcher/downloader", __dir__)
+ autoload :Dependency, File.expand_path("fetcher/dependency", __dir__)
+ autoload :Index, File.expand_path("fetcher/index", __dir__)
# 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..f36d76d4ae 100644
--- a/lib/bundler/fetcher/compact_index.rb
+++ b/lib/bundler/fetcher/compact_index.rb
@@ -1,10 +1,10 @@
# 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"
+ autoload :CompactIndexClient, File.expand_path("../compact_index_client", __dir__)
class Fetcher
class CompactIndex < Base
@@ -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 87ad4140fd..73f125af91 100644
--- a/lib/bundler/fetcher/downloader.rb
+++ b/lib/bundler/fetcher/downloader.rb
@@ -34,7 +34,10 @@ 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
when Net::HTTPNotFound
raise FallbackError, "Net::HTTPNotFound: #{URICredentialsFilter.credential_filtered_uri(uri)}"
diff --git a/lib/bundler/fetcher/index.rb b/lib/bundler/fetcher/index.rb
index 1a8064624d..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
@@ -13,6 +13,7 @@ module Bundler
when /certificate verify failed/
raise CertificateFailureError.new(display_uri)
when /401/
+ raise BadAuthenticationError, remote_uri if remote_uri.userinfo
raise AuthenticationRequiredError, remote_uri
when /403/
raise BadAuthenticationError, remote_uri if remote_uri.userinfo
diff --git a/lib/bundler/friendly_errors.rb b/lib/bundler/friendly_errors.rb
index ae3299a7c8..b93ae68012 100644
--- a/lib/bundler/friendly_errors.rb
+++ b/lib/bundler/friendly_errors.rb
@@ -1,12 +1,11 @@
-# encoding: utf-8
# frozen_string_literal: true
require "cgi"
-require "bundler/vendored_thor"
+require_relative "vendored_thor"
module Bundler
module FriendlyErrors
- module_function
+ module_function # rubocop:disable Layout/AccessModifierIndentation
def log_error(error)
case error
@@ -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 c923a0ad37..68f5e636ff 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
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/gem_version_promoter.rb b/lib/bundler/gem_version_promoter.rb
index adb951a7a0..311b0cbbf3 100644
--- a/lib/bundler/gem_version_promoter.rb
+++ b/lib/bundler/gem_version_promoter.rb
@@ -81,8 +81,8 @@ module Bundler
sort_dep_specs(spec_groups, locked_spec)
end.tap do |specs|
if DEBUG
- STDERR.puts before_result
- STDERR.puts " after sort_versions: #{debug_format_result(dep, specs).inspect}"
+ warn before_result
+ warn " after sort_versions: #{debug_format_result(dep, specs).inspect}"
end
end
end
@@ -109,7 +109,7 @@ module Bundler
must_match = minor? ? [0] : [0, 1]
matches = must_match.map {|idx| gsv.segments[idx] == lsv.segments[idx] }
- (matches.uniq == [true]) ? (gsv >= lsv) : false
+ matches.uniq == [true] ? (gsv >= lsv) : false
else
true
end
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 9d25f3261a..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,10 +32,11 @@ 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 }
+ ui.level = "silent" if opts.delete(:quiet)
raise ArgumentError, "Unknown options: #{opts.keys.join(", ")}" unless opts.empty?
old_root = Bundler.method(:root)
@@ -48,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 b49cfb6703..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
@@ -221,7 +221,7 @@ module Bundler
def processor_count
require "etc"
Etc.nprocessors
- rescue
+ rescue StandardError
1
end
@@ -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 6f9f177fba..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
@@ -111,7 +111,7 @@ module Bundler
s,
s.missing_lockfile_dependencies(@specs.map(&:name)),
]
- end.reject { |a| a.last.empty? }
+ end.reject {|a| a.last.empty? }
return if missing_dependencies.empty?
warning = []
@@ -146,7 +146,7 @@ module Bundler
end
def worker_pool
- @worker_pool ||= Bundler::Worker.new @size, "Parallel Installer", lambda { |spec_install, worker_num|
+ @worker_pool ||= Bundler::Worker.new @size, "Parallel Installer", lambda {|spec_install, worker_num|
do_install(spec_install, worker_num)
}
end
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 ff706fca1d..5658ec1205 100644
--- a/lib/bundler/lockfile_parser.rb
+++ b/lib/bundler/lockfile_parser.rb
@@ -23,16 +23,14 @@ 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 = {
- # The strings have to be dup'ed for old RG on Ruby 2.3+
- # TODO: remove dup in Bundler 2.0
- Gem::Version.create("1.0".dup) => [DEPENDENCIES, PLATFORMS, GIT, GEM, PATH].freeze,
- Gem::Version.create("1.10".dup) => [BUNDLED].freeze,
- Gem::Version.create("1.12".dup) => [RUBY].freeze,
- Gem::Version.create("1.13".dup) => [PLUGIN].freeze,
+ Gem::Version.create("1.0") => [DEPENDENCIES, PLATFORMS, GIT, GEM, PATH].freeze,
+ Gem::Version.create("1.10") => [BUNDLED].freeze,
+ Gem::Version.create("1.12") => [RUBY].freeze,
+ Gem::Version.create("1.13") => [PLUGIN].freeze,
}.freeze
KNOWN_SECTIONS = SECTIONS_BY_VERSION_INTRODUCED.values.flatten.freeze
@@ -90,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
@@ -103,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
@@ -141,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
@@ -185,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 2b783e16f6..ffb3ee9883 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
@@ -47,6 +47,26 @@ module Bundler
Bundler.ui.error "Failed to install plugin #{name}: #{e.message}\n #{e.backtrace.join("\n ")}"
end
+ # List installed plugins and commands
+ #
+ def list
+ installed_plugins = index.installed_plugins
+ if installed_plugins.any?
+ output = String.new
+ installed_plugins.each do |plugin|
+ output << "#{plugin}\n"
+ output << "-----\n"
+ index.plugin_commands(plugin).each do |command|
+ output << " #{command}\n"
+ end
+ output << "\n"
+ end
+ else
+ output = "No plugins installed"
+ end
+ Bundler.ui.info output
+ end
+
# Evaluates the Gemfile with a limited DSL and installs the plugins
# specified by plugin method
#
@@ -236,7 +256,7 @@ module Bundler
@hooks_by_event = Hash.new {|h, k| h[k] = [] }
load_paths = spec.load_paths
- add_to_load_path(load_paths)
+ Bundler.rubygems.add_to_load_path(load_paths)
path = Pathname.new spec.full_gem_path
begin
@@ -268,7 +288,7 @@ module Bundler
# done to avoid conflicts
path = index.plugin_path(name)
- add_to_load_path(index.load_paths(name))
+ Bundler.rubygems.add_to_load_path(index.load_paths(name))
load path.join(PLUGIN_FILE_NAME)
@@ -278,17 +298,8 @@ module Bundler
raise
end
- def add_to_load_path(load_paths)
- if insert_index = Bundler.rubygems.load_path_insert_index
- $LOAD_PATH.insert(insert_index, *load_paths)
- else
- $LOAD_PATH.unshift(*load_paths)
- end
- end
-
class << self
- private :load_plugin, :register_plugin, :save_plugins, :validate_plugin!,
- :add_to_load_path
+ private :load_plugin, :register_plugin, :save_plugins, :validate_plugin!
end
end
end
diff --git a/lib/bundler/plugin/api.rb b/lib/bundler/plugin/api.rb
index a2d5cbb4ac..ee2bffe3ab 100644
--- a/lib/bundler/plugin/api.rb
+++ b/lib/bundler/plugin/api.rb
@@ -23,7 +23,7 @@ module Bundler
# and hooks).
module Plugin
class API
- autoload :Source, "bundler/plugin/api/source"
+ autoload :Source, File.expand_path("api/source", __dir__)
# The plugins should declare that they handle a command through this helper.
#
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 cac3b81d51..2d70a046bb 100644
--- a/lib/bundler/plugin/index.rb
+++ b/lib/bundler/plugin/index.rb
@@ -103,6 +103,14 @@ module Bundler
@plugin_paths[name]
end
+ def installed_plugins
+ @plugin_paths.keys
+ end
+
+ def plugin_commands(plugin)
+ @commands.find_all {|_, n| n == plugin }.map(&:first)
+ end
+
def source?(source)
@sources.key? source
end
@@ -131,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"])
@@ -154,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 5379c38979..bcea3f0e45 100644
--- a/lib/bundler/plugin/installer.rb
+++ b/lib/bundler/plugin/installer.rb
@@ -8,14 +8,19 @@ module Bundler
# are heavily dependent on the Gemfile.
module Plugin
class Installer
- autoload :Rubygems, "bundler/plugin/installer/rubygems"
- autoload :Git, "bundler/plugin/installer/git"
+ autoload :Rubygems, File.expand_path("installer/rubygems", __dir__)
+ autoload :Git, File.expand_path("installer/git", __dir__)
def install(names, options)
+ check_sources_consistency!(options)
+
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]
+ install_local_git(names, version, options)
else
sources = options[:source] || Bundler.rubygems.sources
install_rubygems(names, version, sources)
@@ -38,22 +43,24 @@ module Bundler
private
+ 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
+
def install_git(names, version, options)
uri = options.delete(:git)
options["uri"] = uri
- source_list = SourceList.new
- source_list.add_git_source(options)
-
- # To support both sources
- if options[:source]
- source_list.add_rubygems_source("remotes" => options[:source])
- end
+ install_all_sources(names, version, options, options[:source])
+ end
- deps = names.map {|name| Dependency.new name, version }
+ def install_local_git(names, version, options)
+ uri = options.delete(:local_git)
+ options["uri"] = uri
- definition = Definition.new(nil, deps, source_list, true)
- install_definition(definition)
+ install_all_sources(names, version, options, options[:source])
end
# Installs the plugin from rubygems source and returns the path where the
@@ -65,10 +72,16 @@ module Bundler
#
# @return [Hash] map of names to the specs of plugins installed
def install_rubygems(names, version, sources)
- deps = names.map {|name| Dependency.new name, version }
+ install_all_sources(names, version, nil, sources)
+ end
+ def install_all_sources(names, version, git_source_options, rubygems_source)
source_list = SourceList.new
- source_list.add_rubygems_source("remotes" => sources)
+
+ source_list.add_git_source(git_source_options) if git_source_options
+ source_list.add_rubygems_source("remotes" => rubygems_source) if rubygems_source
+
+ deps = names.map {|name| Dependency.new name, version }
definition = Definition.new(nil, deps, source_list, true)
install_definition(definition)
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 545b4cc88a..c7caf01c7d 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
@@ -38,8 +38,8 @@ module Bundler
@platforms = platforms
@gem_version_promoter = gem_version_promoter
@allow_bundler_dependency_conflicts = Bundler.feature_flag.allow_bundler_dependency_conflicts?
- @lockfile_uses_separate_rubygems_sources = Bundler.feature_flag.lockfile_uses_separate_rubygems_sources?
@use_gvp = Bundler.feature_flag.use_gem_version_promoter_for_major_updates? || !@gem_version_promoter.major?
+ @lockfile_uses_separate_rubygems_sources = Bundler.feature_flag.disable_multisource?
end
def start(requirements)
@@ -48,9 +48,12 @@ module Bundler
verify_gemfile_dependencies_are_found!(requirements)
dg = @resolver.resolve(requirements, @base_dg)
- dg.map(&:payload).
+ dg.
+ tap {|resolved| validate_resolved_specs!(resolved) }.
+ map(&:payload).
reject {|sg| sg.name.end_with?("\0") }.
- map(&:to_specs).flatten
+ map(&:to_specs).
+ flatten
rescue Molinillo::VersionConflict => e
message = version_conflict_message(e)
raise VersionConflict.new(e.conflicts.keys.uniq, message)
@@ -72,7 +75,7 @@ module Bundler
return unless debug?
debug_info = yield
debug_info = debug_info.inspect unless debug_info.is_a?(String)
- STDERR.puts debug_info.split("\n").map {|s| " " * depth + s }
+ warn debug_info.split("\n").map {|s| " " * depth + s }
end
def debug?
@@ -169,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
@@ -276,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}."
@@ -300,9 +303,19 @@ module Bundler
end
def version_conflict_message(e)
+ # only show essential conflicts, if possible
+ conflicts = e.conflicts.dup
+ conflicts.delete_if do |_name, conflict|
+ deps = conflict.requirement_trees.map(&:last).flatten(1)
+ !Bundler::VersionRanges.empty?(*Bundler::VersionRanges.for_many(deps.map(&:requirement)))
+ end
+ e = Molinillo::VersionConflict.new(conflicts, e.specification_provider) unless conflicts.empty?
+
+ solver_name = "Bundler"
+ possibility_type = "gem"
e.message_with_trees(
- :solver_name => "Bundler",
- :possibility_type => "gem",
+ :solver_name => solver_name,
+ :possibility_type => possibility_type,
:reduce_trees => lambda do |trees|
# called first, because we want to reduce the amount of work required to find maximal empty sets
trees = trees.uniq {|t| t.flatten.map {|dep| [dep.name, dep.requirement] } }
@@ -314,10 +327,8 @@ module Bundler
end.flatten(1).select do |deps|
Bundler::VersionRanges.empty?(*Bundler::VersionRanges.for_many(deps.map(&:requirement)))
end.min_by(&:size)
- trees.reject! {|t| !maximal.include?(t.last) } if maximal
- trees = trees.sort_by {|t| t.flatten.map(&:to_s) }
- trees.uniq! {|t| t.flatten.map {|dep| [dep.name, dep.requirement] } }
+ trees.reject! {|t| !maximal.include?(t.last) } if maximal
trees.sort_by {|t| t.reverse.map(&:name) }
end,
@@ -325,7 +336,7 @@ module Bundler
:additional_message_for_conflict => lambda do |o, name, conflict|
if name == "bundler"
o << %(\n Current Bundler version:\n bundler (#{Bundler::VERSION}))
- other_bundler_required = !conflict.requirement.requirement.satisfied_by?(Gem::Version.new Bundler::VERSION)
+ other_bundler_required = !conflict.requirement.requirement.satisfied_by?(Gem::Version.new(Bundler::VERSION))
end
if name == "bundler" && other_bundler_required
@@ -352,7 +363,11 @@ module Bundler
[]
end.compact.map(&:to_s).uniq.sort
- o << "Could not find gem '#{SharedHelpers.pretty_dependency(conflict.requirement)}'"
+ metadata_requirement = name.end_with?("\0")
+
+ o << "Could not find gem '" unless metadata_requirement
+ o << SharedHelpers.pretty_dependency(conflict.requirement)
+ o << "'" unless metadata_requirement
if conflict.requirement_trees.first.size > 1
o << ", which is required by "
o << "gem '#{SharedHelpers.pretty_dependency(conflict.requirement_trees.first[-2])}',"
@@ -360,14 +375,47 @@ module Bundler
o << " "
o << if relevant_sources.empty?
- "in any of the sources.\n"
- 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 }
+ :version_for_spec => lambda {|spec| spec.version },
+ :incompatible_version_message_for_conflict => lambda do |name, _conflict|
+ if name.end_with?("\0")
+ %(#{solver_name} found conflicting requirements for the #{name} version:)
+ else
+ %(#{solver_name} could not find compatible versions for #{possibility_type} "#{name}":)
+ end
+ end
)
end
+
+ def validate_resolved_specs!(resolved_specs)
+ resolved_specs.each do |v|
+ name = v.name
+ next unless sources = relevant_sources_for_vertex(v)
+ sources.compact!
+ if default_index = sources.index(@source_requirements[:default])
+ sources.delete_at(default_index)
+ end
+ sources.reject! {|s| s.specs[name].empty? }
+ sources.uniq!
+ next if sources.size <= 1
+
+ multisource_disabled = Bundler.feature_flag.disable_multisource?
+
+ msg = ["The gem '#{name}' was found in multiple relevant sources."]
+ msg.concat sources.map {|s| " * #{s}" }.sort
+ msg << "You #{multisource_disabled ? :must : :should} add this gem to the source block for the source you wish it to be installed from."
+ msg = msg.join("\n")
+
+ raise SecurityError, msg if multisource_disabled
+ Bundler.ui.warn "Warning: #{msg}"
+ end
+ end
end
end
diff --git a/lib/bundler/resolver/spec_group.rb b/lib/bundler/resolver/spec_group.rb
index 34d043aed7..119f63b5c8 100644
--- a/lib/bundler/resolver/spec_group.rb
+++ b/lib/bundler/resolver/spec_group.rb
@@ -94,10 +94,10 @@ module Bundler
return [] if !spec.is_a?(EndpointSpecification) && !spec.is_a?(Gem::Specification)
dependencies = []
if !spec.required_ruby_version.nil? && !spec.required_ruby_version.none?
- dependencies << DepProxy.new(Gem::Dependency.new("ruby\0", spec.required_ruby_version), platform)
+ dependencies << DepProxy.new(Gem::Dependency.new("Ruby\0", spec.required_ruby_version), platform)
end
if !spec.required_rubygems_version.nil? && !spec.required_rubygems_version.none?
- dependencies << DepProxy.new(Gem::Dependency.new("rubygems\0", spec.required_rubygems_version), platform)
+ dependencies << DepProxy.new(Gem::Dependency.new("RubyGems\0", spec.required_rubygems_version), platform)
end
dependencies
end
diff --git a/lib/bundler/retry.rb b/lib/bundler/retry.rb
index 244606dcc9..d64958ba70 100644
--- a/lib/bundler/retry.rb
+++ b/lib/bundler/retry.rb
@@ -35,10 +35,10 @@ module Bundler
private
def run(&block)
- @failed = false
+ @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 faec14fec6..96b93836c7 100644
--- a/lib/bundler/rubygems_ext.rb
+++ b/lib/bundler/rubygems_ext.rb
@@ -2,45 +2,27 @@
require "pathname"
-if defined?(Gem::QuickLoader)
- # Gem Prelude makes me a sad panda :'(
- Gem::QuickLoader.load_full_rubygems_library
-end
-
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
- attr_accessor :source
+ 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
@@ -62,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)
@@ -84,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
@@ -157,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 4100f637f8..9df0897ca2 100644
--- a/lib/bundler/rubygems_integration.rb
+++ b/lib/bundler/rubygems_integration.rb
@@ -1,12 +1,12 @@
# frozen_string_literal: true
-require "monitor"
-
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
@@ -20,6 +20,7 @@ module Bundler
def initialize
@replaced_methods = {}
+ backport_ext_builder_monitor
end
def version
@@ -38,14 +39,22 @@ module Bundler
Gem::Command.build_args = args
end
- def load_path_insert_index
- Gem.load_path_insert_index
- end
-
def loaded_specs(name)
Gem.loaded_specs[name]
end
+ def add_to_load_path(paths)
+ return Gem.add_to_load_path(*paths) if Gem.respond_to?(:add_to_load_path)
+
+ if insert_index = Gem.load_path_insert_index
+ # Gem directories must come after -I and ENV['RUBYLIB']
+ $LOAD_PATH.insert(insert_index, *paths)
+ else
+ # We are probably testing in core, -I and RUBYLIB don't apply
+ $LOAD_PATH.unshift(*paths)
+ end
+ end
+
def mark_loaded(spec)
if spec.respond_to?(:activated=)
current = Gem.loaded_specs[spec.name]
@@ -110,7 +119,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}"
@@ -198,10 +207,6 @@ module Bundler
Gem::ConfigMap
end
- def repository_subdirectories
- %w[cache doc gems specifications]
- end
-
def clear_paths
Gem.clear_paths
end
@@ -210,26 +215,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
@@ -248,36 +241,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
@@ -290,22 +259,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
@@ -317,23 +277,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
@@ -357,12 +304,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)
@@ -411,63 +363,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 3,
+ 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
@@ -523,31 +457,12 @@ module Bundler
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
@@ -620,296 +535,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
- end
-
- redefine_method((class << Gem; self; end), :finish_resolve) do |*|
- []
+ 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
- end
+ RB
- def all_specs
- Gem::Specification.to_a
- end
-
- def find_name(name)
- Gem::Specification.find_all_by_name name
- end
+ require "rubygems/ext/builder"
- 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
-
- 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
-
- 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
- end
+ def find_name(name)
+ Gem::Specification.stubs_for(name).map(&:to_spec)
+ end
- if Gem::Specification.respond_to?(:default_stubs)
- def default_stubs
- Gem::Specification.default_stubs("*.gemspec")
- end
- else
- def default_stubs
- Gem::Specification.send(:default_stubs, "*.gemspec")
- 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..93a801eb6c 100644
--- a/lib/bundler/runtime.rb
+++ b/lib/bundler/runtime.rb
@@ -34,14 +34,7 @@ module Bundler
spec.load_paths.reject {|path| $LOAD_PATH.include?(path) }
end.reverse.flatten
- # See Gem::Specification#add_self_to_load_path (since RubyGems 1.8)
- if insert_index = Bundler.rubygems.load_path_insert_index
- # Gem directories must come after -I and ENV['RUBYLIB']
- $LOAD_PATH.insert(insert_index, *load_paths)
- else
- # We are probably testing in core, -I and RUBYLIB don't apply
- $LOAD_PATH.unshift(*load_paths)
- end
+ Bundler.rubygems.add_to_load_path(load_paths)
setup_manpath
@@ -163,7 +156,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 66af31dab2..3888ac51d3 100644
--- a/lib/bundler/settings.rb
+++ b/lib/bundler/settings.rb
@@ -4,9 +4,9 @@ require "uri"
module Bundler
class Settings
- autoload :Mirror, "bundler/mirror"
- autoload :Mirrors, "bundler/mirror"
- autoload :Validator, "bundler/settings/validator"
+ autoload :Mirror, File.expand_path("mirror", __dir__)
+ autoload :Mirrors, File.expand_path("mirror", __dir__)
+ autoload :Validator, File.expand_path("settings/validator", __dir__)
BOOL_KEYS = %w[
allow_bundler_dependency_conflicts
@@ -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,29 +28,24 @@ 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
- global_path_appends_ruby_scope
global_gem_cache
ignore_messages
init_gems_rb
- list_command
- lockfile_upgrade_warning
- 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
@@ -59,7 +53,6 @@ module Bundler
unlock_source_unlocks_spec
update_requires_all_flag
use_gem_version_promoter_for_major_updates
- viz_command
].freeze
NUMBER_KEYS = %w[
@@ -76,7 +69,9 @@ module Bundler
].freeze
DEFAULT_CONFIG = {
+ :silence_deprecations => false,
:disable_version_check => true,
+ :prefer_patch => false,
:redirect => 5,
:retry => 3,
:timeout => 10,
@@ -107,18 +102,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 3,\
- "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
@@ -221,23 +204,22 @@ module Bundler
locations
end
- # for legacy reasons, in Bundler 1, the ruby scope isnt appended when the setting comes from ENV or the global config,
- # nor do we respect :disable_shared_gems
+ # for legacy reasons, in Bundler 2, we do not respect :disable_shared_gems
def path
key = key_for(:path)
path = ENV[key] || @global_config[key]
if path && !@temporary.key?(key) && !@local_config.key?(key)
- return Path.new(path, Bundler.feature_flag.global_path_appends_ruby_scope?, false, false)
+ return Path.new(path, false, false)
end
system_path = self["path.system"] || (self[:disable_shared_gems] == false)
- Path.new(self[:path], true, system_path, Bundler.feature_flag.default_install_uses_path?)
+ Path.new(self[:path], system_path, Bundler.feature_flag.default_install_uses_path?)
end
- Path = Struct.new(:explicit_path, :append_ruby_scope, :system_path, :default_install_uses_path) do
+ Path = Struct.new(:explicit_path, :system_path, :default_install_uses_path) do
def path
path = base_path
- path = File.join(path, Bundler.ruby_scope) if append_ruby_scope && !use_system_gems?
+ path = File.join(path, Bundler.ruby_scope) unless use_system_gems?
path
end
@@ -372,7 +354,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
@@ -407,26 +389,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
@@ -442,7 +410,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 ac29179d4d..d259f20e6b 100644
--- a/lib/bundler/shared_helpers.rb
+++ b/lib/bundler/shared_helpers.rb
@@ -1,26 +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
@@ -114,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
@@ -143,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 == 2
- Bundler::SharedHelpers.major_deprecation 3, \
- "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)
@@ -248,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)
@@ -308,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
@@ -335,8 +304,9 @@ module Bundler
def set_rubyopt
rubyopt = [ENV["RUBYOPT"]].compact
- return if !rubyopt.empty? && rubyopt.first =~ %r{-rbundler/setup}
- rubyopt.unshift %(-rbundler/setup)
+ setup_require = "-r#{File.expand_path("setup", __dir__)}"
+ return if !rubyopt.empty? && rubyopt.first =~ /#{setup_require}/
+ rubyopt.unshift %(#{setup_require})
Bundler::SharedHelpers.set_env "RUBYOPT", rubyopt.join(" ")
end
@@ -351,9 +321,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
@@ -373,10 +340,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.rb b/lib/bundler/source.rb
index 26a3625bb1..4b2e305bda 100644
--- a/lib/bundler/source.rb
+++ b/lib/bundler/source.rb
@@ -2,11 +2,11 @@
module Bundler
class Source
- autoload :Gemspec, "bundler/source/gemspec"
- autoload :Git, "bundler/source/git"
- autoload :Metadata, "bundler/source/metadata"
- autoload :Path, "bundler/source/path"
- autoload :Rubygems, "bundler/source/rubygems"
+ autoload :Gemspec, File.expand_path("source/gemspec", __dir__)
+ autoload :Git, File.expand_path("source/git", __dir__)
+ autoload :Metadata, File.expand_path("source/metadata", __dir__)
+ autoload :Path, File.expand_path("source/path", __dir__)
+ autoload :Rubygems, File.expand_path("source/rubygems", __dir__)
attr_accessor :dependency_names
diff --git a/lib/bundler/source/git.rb b/lib/bundler/source/git.rb
index 0b00608bdd..ed16f4a4e0 100644
--- a/lib/bundler/source/git.rb
+++ b/lib/bundler/source/git.rb
@@ -1,12 +1,12 @@
# frozen_string_literal: true
-require "bundler/vendored_fileutils"
+require_relative "../vendored_fileutils"
require "uri"
module Bundler
class Source
class Git < Path
- autoload :GitProxy, "bundler/source/git/git_proxy"
+ autoload :GitProxy, File.expand_path("git/git_proxy", __dir__)
attr_reader :uri, :ref, :branch, :options, :submodules
@@ -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)
@@ -260,7 +261,11 @@ module Bundler
end
def requires_checkout?
- allow_git_ops? && !local?
+ allow_git_ops? && !local? && !cached_revision_checked_out?
+ end
+
+ def cached_revision_checked_out?
+ cached_revision && cached_revision == revision && install_path.exist?
end
def base_name
@@ -324,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..f5af10f206 100644
--- a/lib/bundler/source/git/git_proxy.rb
+++ b/lib/bundler/source/git/git_proxy.rb
@@ -1,5 +1,6 @@
# frozen_string_literal: true
+require "open3"
require "shellwords"
require "tempfile"
module Bundler
@@ -77,8 +78,8 @@ module Bundler
def contains?(commit)
allowed_in_path do
- result = git_null("branch --contains #{commit}")
- $? == 0 && result =~ /^\* (.*)$/
+ result, status = git_null("branch --contains #{commit}")
+ status.success? && result =~ /^\* (.*)$/
end
end
@@ -148,13 +149,15 @@ module Bundler
private
- # TODO: Do not rely on /dev/null.
- # Given that open3 is not cross platform until Ruby 1.9.3,
- # the best solution is to pipe to /dev/null if it exists.
- # If it doesn't, everything will work fine, but the user
- # will get the $stderr messages as well.
def git_null(command)
- git("#{command} 2>#{Bundler::NULL}", false)
+ command_with_no_credentials = URICredentialsFilter.credential_filtered_string(command, uri)
+ raise GitNotAllowedError.new(command_with_no_credentials) unless allow?
+
+ out, status = SharedHelpers.with_clean_git_env do
+ capture_and_ignore_stderr("git #{command}")
+ end
+
+ [URICredentialsFilter.credential_filtered_string(out, uri), status]
end
def git_retry(command)
@@ -167,12 +170,12 @@ module Bundler
command_with_no_credentials = URICredentialsFilter.credential_filtered_string(command, uri)
raise GitNotAllowedError.new(command_with_no_credentials) unless allow?
- out = SharedHelpers.with_clean_git_env do
- capture_and_filter_stderr(uri) { `git #{command}` }
+ out, status = SharedHelpers.with_clean_git_env do
+ capture_and_filter_stderr(uri, "git #{command}")
end
stdout_with_no_credentials = URICredentialsFilter.credential_filtered_string(out, uri)
- raise GitCommandError.new(command_with_no_credentials, path, error_msg) if check_errors && !$?.success?
+ raise GitCommandError.new(command_with_no_credentials, path, error_msg) if check_errors && !status.success?
stdout_with_no_credentials
end
@@ -235,26 +238,15 @@ module Bundler
raise GitError, "The git source #{uri} is not yet checked out. Please run `bundle install` before trying to start your application"
end
- # TODO: Replace this with Open3 when upgrading to bundler 2
- # Similar to #git_null, as Open3 is not cross-platform,
- # a temporary way is to use Tempfile to capture the stderr.
- # When replacing this using Open3, make sure git_null is
- # also replaced by Open3, so stdout and stderr all got handled properly.
- def capture_and_filter_stderr(uri)
- return_value, captured_err = ""
- backup_stderr = STDERR.dup
- begin
- Tempfile.open("captured_stderr") do |f|
- STDERR.reopen(f)
- return_value = yield
- f.rewind
- captured_err = f.read
- end
- ensure
- STDERR.reopen backup_stderr
- end
- $stderr.puts URICredentialsFilter.credential_filtered_string(captured_err, uri) if uri && !captured_err.empty?
- return_value
+ def capture_and_filter_stderr(uri, cmd)
+ return_value, captured_err, status = Open3.capture3(cmd)
+ Bundler.ui.warn URICredentialsFilter.credential_filtered_string(captured_err, uri) if uri && !captured_err.empty?
+ [return_value, status]
+ end
+
+ def capture_and_ignore_stderr(cmd)
+ return_value, _, status = Open3.capture3(cmd)
+ [return_value, status]
end
end
end
diff --git a/lib/bundler/source/metadata.rb b/lib/bundler/source/metadata.rb
index d9c93bfb67..0867879861 100644
--- a/lib/bundler/source/metadata.rb
+++ b/lib/bundler/source/metadata.rb
@@ -5,16 +5,21 @@ module Bundler
class Metadata < Source
def specs
@specs ||= Index.build do |idx|
- idx << Gem::Specification.new("ruby\0", RubyVersion.system.to_gem_version_with_patchlevel)
- idx << Gem::Specification.new("rubygems\0", Gem::VERSION)
+ idx << Gem::Specification.new("Ruby\0", RubyVersion.system.to_gem_version_with_patchlevel)
+ idx << Gem::Specification.new("RubyGems\0", Gem::VERSION) do |s|
+ s.required_rubygems_version = Gem::Requirement.default
+ end
idx << Gem::Specification.new do |s|
s.name = "bundler"
s.version = VERSION
+ s.license = "MIT"
s.platform = Gem::Platform::RUBY
s.source = self
s.authors = ["bundler team"]
s.bindir = "exe"
+ s.homepage = "https://bundler.io"
+ s.summary = "The best way to manage your application's dependencies"
s.executables = %w[bundle]
# can't point to the actual gemspec or else the require paths will be wrong
s.loaded_from = File.expand_path("..", __FILE__)
diff --git a/lib/bundler/source/path.rb b/lib/bundler/source/path.rb
index ed734bf549..c1d25fc4da 100644
--- a/lib/bundler/source/path.rb
+++ b/lib/bundler/source/path.rb
@@ -3,7 +3,7 @@
module Bundler
class Source
class Path < Source
- autoload :Installer, "bundler/source/path/installer"
+ autoload :Installer, File.expand_path("path/installer", __dir__)
attr_reader :path, :options, :root_path, :original_path
attr_writer :name
@@ -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 485b388a32..103faa6b80 100644
--- a/lib/bundler/source/rubygems.rb
+++ b/lib/bundler/source/rubygems.rb
@@ -6,7 +6,7 @@ require "rubygems/user_interaction"
module Bundler
class Source
class Rubygems < Source
- autoload :Remote, "bundler/source/rubygems/remote"
+ autoload :Remote, File.expand_path("rubygems/remote", __dir__)
# Use the API when installing less than X gems
API_REQUEST_LIMIT = 500
@@ -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
@@ -120,8 +120,14 @@ module Bundler
uris.uniq!
Installer.ambiguous_gems << [spec.name, *uris] if uris.length > 1
- s = Bundler.rubygems.spec_from_gem(fetch_gem(spec), Bundler.settings["trust-policy"])
- spec.__swap__(s)
+ path = fetch_gem(spec)
+ begin
+ s = Bundler.rubygems.spec_from_gem(path, Bundler.settings["trust-policy"])
+ spec.__swap__(s)
+ rescue StandardError
+ Bundler.rm_rf(path)
+ raise
+ end
end
unless Bundler.settings[:no_install]
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/spec_set.rb b/lib/bundler/spec_set.rb
index bbdf04a7d6..2c5d9e6580 100644
--- a/lib/bundler/spec_set.rb
+++ b/lib/bundler/spec_set.rb
@@ -60,7 +60,6 @@ module Bundler
@specs << value
@lookup = nil
@sorted = nil
- value
end
def sort!
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/README.md.tt b/lib/bundler/templates/newgem/README.md.tt
index 868a0afe67..22ddeaa91a 100644
--- a/lib/bundler/templates/newgem/README.md.tt
+++ b/lib/bundler/templates/newgem/README.md.tt
@@ -14,7 +14,7 @@ gem '<%= config[:name] %>'
And then execute:
- $ bundle
+ $ bundle install
Or install it yourself as:
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.rb b/lib/bundler/ui.rb
index 8138b30d38..7a4fa03669 100644
--- a/lib/bundler/ui.rb
+++ b/lib/bundler/ui.rb
@@ -2,8 +2,8 @@
module Bundler
module UI
- autoload :RGProxy, "bundler/ui/rg_proxy"
- autoload :Shell, "bundler/ui/shell"
- autoload :Silent, "bundler/ui/silent"
+ autoload :RGProxy, File.expand_path("ui/rg_proxy", __dir__)
+ autoload :Shell, File.expand_path("ui/shell", __dir__)
+ autoload :Silent, File.expand_path("ui/silent", __dir__)
end
end
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/uri_credentials_filter.rb b/lib/bundler/uri_credentials_filter.rb
index ee3692268c..0f6ea4cefa 100644
--- a/lib/bundler/uri_credentials_filter.rb
+++ b/lib/bundler/uri_credentials_filter.rb
@@ -2,7 +2,7 @@
module Bundler
module URICredentialsFilter
- module_function
+ module_function # rubocop:disable Layout/AccessModifierIndentation
def credential_filtered_uri(uri_to_anonymize)
return uri_to_anonymize if uri_to_anonymize.nil?
diff --git a/lib/bundler/vendor/fileutils/lib/fileutils.rb b/lib/bundler/vendor/fileutils/lib/fileutils.rb
index fb7777eb49..6fbe741498 100644
--- a/lib/bundler/vendor/fileutils/lib/fileutils.rb
+++ b/lib/bundler/vendor/fileutils/lib/fileutils.rb
@@ -6,7 +6,7 @@ rescue LoadError
# for make mjit-headers
end
-require "bundler/vendor/fileutils/lib/fileutils/version"
+require_relative "fileutils/version"
#
# = fileutils.rb
diff --git a/lib/bundler/vendor/molinillo/lib/molinillo.rb b/lib/bundler/vendor/molinillo/lib/molinillo.rb
index 9e2867144f..baedefe98b 100644
--- a/lib/bundler/vendor/molinillo/lib/molinillo.rb
+++ b/lib/bundler/vendor/molinillo/lib/molinillo.rb
@@ -1,11 +1,11 @@
# frozen_string_literal: true
-require 'bundler/vendor/molinillo/lib/molinillo/compatibility'
-require 'bundler/vendor/molinillo/lib/molinillo/gem_metadata'
-require 'bundler/vendor/molinillo/lib/molinillo/errors'
-require 'bundler/vendor/molinillo/lib/molinillo/resolver'
-require 'bundler/vendor/molinillo/lib/molinillo/modules/ui'
-require 'bundler/vendor/molinillo/lib/molinillo/modules/specification_provider'
+require_relative 'molinillo/compatibility'
+require_relative 'molinillo/gem_metadata'
+require_relative 'molinillo/errors'
+require_relative 'molinillo/resolver'
+require_relative 'molinillo/modules/ui'
+require_relative 'molinillo/modules/specification_provider'
# Bundler::Molinillo is a generic dependency resolution algorithm.
module Bundler::Molinillo
diff --git a/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb b/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb
index 677a8bd916..31578bb5bf 100644
--- a/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb
+++ b/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb
@@ -3,8 +3,8 @@
require 'set'
require 'tsort'
-require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph/log'
-require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex'
+require_relative 'dependency_graph/log'
+require_relative 'dependency_graph/vertex'
module Bundler::Molinillo
# A directed acyclic graph that is tuned to hold named dependencies
diff --git a/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb b/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb
index 9849aea2fe..946a08236e 100644
--- a/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb
+++ b/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph/action'
+require_relative 'action'
module Bundler::Molinillo
class DependencyGraph
# @!visibility private
diff --git a/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb b/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb
index 0a1e08255b..483527daf8 100644
--- a/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb
+++ b/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph/action'
+require_relative 'action'
module Bundler::Molinillo
class DependencyGraph
# @!visibility private
diff --git a/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb b/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb
index 1d9f4b327d..d81940585a 100644
--- a/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb
+++ b/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph/action'
+require_relative 'action'
module Bundler::Molinillo
class DependencyGraph
# @!visibility private
diff --git a/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb b/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb
index 385dcbdd06..36fce7c526 100644
--- a/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb
+++ b/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph/action'
+require_relative 'action'
module Bundler::Molinillo
class DependencyGraph
# @!visibility private
diff --git a/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb b/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb
index 8582dd19c1..6f0de19886 100644
--- a/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb
+++ b/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb
@@ -1,11 +1,11 @@
# frozen_string_literal: true
-require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular'
-require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex'
-require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge'
-require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named'
-require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload'
-require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag'
+require_relative 'add_edge_no_circular'
+require_relative 'add_vertex'
+require_relative 'delete_edge'
+require_relative 'detach_vertex_named'
+require_relative 'set_payload'
+require_relative 'tag'
module Bundler::Molinillo
class DependencyGraph
diff --git a/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb b/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb
index 37286d104a..2e9b90e6cd 100644
--- a/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb
+++ b/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph/action'
+require_relative 'action'
module Bundler::Molinillo
class DependencyGraph
# @!visibility private
diff --git a/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb b/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb
index d6ad16e07a..fccfc78cc7 100644
--- a/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb
+++ b/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph/action'
+require_relative 'action'
module Bundler::Molinillo
class DependencyGraph
# @!visibility private
diff --git a/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb b/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb
index 7ecdc4b65a..41bc013143 100644
--- a/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb
+++ b/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb
@@ -50,14 +50,25 @@ module Bundler::Molinillo
incoming_edges.map(&:origin)
end
- # @return [Array<Vertex>] the vertices of {#graph} where `self` is a
+ # @return [Set<Vertex>] the vertices of {#graph} where `self` is a
# {#descendent?}
def recursive_predecessors
- vertices = predecessors
- vertices += Compatibility.flat_map(vertices, &:recursive_predecessors)
- vertices.uniq!
+ _recursive_predecessors
+ end
+
+ # @param [Set<Vertex>] vertices the set to add the predecessors to
+ # @return [Set<Vertex>] the vertices of {#graph} where `self` is a
+ # {#descendent?}
+ def _recursive_predecessors(vertices = Set.new)
+ incoming_edges.each do |edge|
+ vertex = edge.origin
+ next unless vertices.add?(vertex)
+ vertex._recursive_predecessors(vertices)
+ end
+
vertices
end
+ protected :_recursive_predecessors
# @return [Array<Vertex>] the vertices of {#graph} that have an edge with
# `self` as their {Edge#origin}
@@ -65,14 +76,25 @@ module Bundler::Molinillo
outgoing_edges.map(&:destination)
end
- # @return [Array<Vertex>] the vertices of {#graph} where `self` is an
+ # @return [Set<Vertex>] the vertices of {#graph} where `self` is an
# {#ancestor?}
def recursive_successors
- vertices = successors
- vertices += Compatibility.flat_map(vertices, &:recursive_successors)
- vertices.uniq!
+ _recursive_successors
+ end
+
+ # @param [Set<Vertex>] vertices the set to add the successors to
+ # @return [Set<Vertex>] the vertices of {#graph} where `self` is an
+ # {#ancestor?}
+ def _recursive_successors(vertices = Set.new)
+ outgoing_edges.each do |edge|
+ vertex = edge.destination
+ next unless vertices.add?(vertex)
+ vertex._recursive_successors(vertices)
+ end
+
vertices
end
+ protected :_recursive_successors
# @return [String] a string suitable for debugging
def inspect
diff --git a/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb b/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb
index ce0931f103..89c7c324d5 100644
--- a/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb
+++ b/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb
@@ -80,7 +80,7 @@ module Bundler::Molinillo
@specification_provider = specification_provider
end
- require 'bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider'
+ require_relative 'delegates/specification_provider'
include Delegates::SpecificationProvider
# @return [String] An error message that includes requirement trees,
diff --git a/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb b/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb
index 0eb665d17a..acf7777414 100644
--- a/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb
+++ b/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb
@@ -238,11 +238,11 @@ module Bundler::Molinillo
debug { 'Activated: ' + Hash[activated.vertices.select { |_n, v| v.payload }].keys.join(', ') } if state
end
- require 'bundler/vendor/molinillo/lib/molinillo/state'
- require 'bundler/vendor/molinillo/lib/molinillo/modules/specification_provider'
+ require_relative 'state'
+ require_relative 'modules/specification_provider'
- require 'bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state'
- require 'bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider'
+ require_relative 'delegates/resolution_state'
+ require_relative 'delegates/specification_provider'
include Bundler::Molinillo::Delegates::ResolutionState
include Bundler::Molinillo::Delegates::SpecificationProvider
diff --git a/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb b/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb
index 7d36858778..95eaab5991 100644
--- a/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb
+++ b/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-require 'bundler/vendor/molinillo/lib/molinillo/dependency_graph'
+require_relative 'dependency_graph'
module Bundler::Molinillo
# This class encapsulates a dependency resolver.
@@ -9,7 +9,7 @@ module Bundler::Molinillo
#
#
class Resolver
- require 'bundler/vendor/molinillo/lib/molinillo/resolution'
+ require_relative 'resolution'
# @return [SpecificationProvider] the specification provider used
# in the resolution process
diff --git a/lib/bundler/vendor/thor/lib/thor.rb b/lib/bundler/vendor/thor/lib/thor.rb
index 999e8b7e61..6017ee9ad8 100644
--- a/lib/bundler/vendor/thor/lib/thor.rb
+++ b/lib/bundler/vendor/thor/lib/thor.rb
@@ -1,5 +1,5 @@
require "set"
-require "bundler/vendor/thor/lib/thor/base"
+require_relative "thor/base"
class Bundler::Thor
class << self
diff --git a/lib/bundler/vendor/thor/lib/thor/actions.rb b/lib/bundler/vendor/thor/lib/thor/actions.rb
index b06feac2a0..5681d5a7c6 100644
--- a/lib/bundler/vendor/thor/lib/thor/actions.rb
+++ b/lib/bundler/vendor/thor/lib/thor/actions.rb
@@ -1,11 +1,11 @@
require "uri"
-require "bundler/vendor/thor/lib/thor/core_ext/io_binary_read"
-require "bundler/vendor/thor/lib/thor/actions/create_file"
-require "bundler/vendor/thor/lib/thor/actions/create_link"
-require "bundler/vendor/thor/lib/thor/actions/directory"
-require "bundler/vendor/thor/lib/thor/actions/empty_directory"
-require "bundler/vendor/thor/lib/thor/actions/file_manipulation"
-require "bundler/vendor/thor/lib/thor/actions/inject_into_file"
+require_relative "core_ext/io_binary_read"
+require_relative "actions/create_file"
+require_relative "actions/create_link"
+require_relative "actions/directory"
+require_relative "actions/empty_directory"
+require_relative "actions/file_manipulation"
+require_relative "actions/inject_into_file"
class Bundler::Thor
module Actions
diff --git a/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb b/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb
index 97d22d9bbd..330fc08cae 100644
--- a/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb
+++ b/lib/bundler/vendor/thor/lib/thor/actions/create_file.rb
@@ -1,4 +1,4 @@
-require "bundler/vendor/thor/lib/thor/actions/empty_directory"
+require_relative "empty_directory"
class Bundler::Thor
module Actions
diff --git a/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb b/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb
index 3a664401b4..70504a2c1f 100644
--- a/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb
+++ b/lib/bundler/vendor/thor/lib/thor/actions/create_link.rb
@@ -1,4 +1,4 @@
-require "bundler/vendor/thor/lib/thor/actions/create_file"
+require_relative "create_file"
class Bundler::Thor
module Actions
diff --git a/lib/bundler/vendor/thor/lib/thor/actions/directory.rb b/lib/bundler/vendor/thor/lib/thor/actions/directory.rb
index f555f7b7e0..03c97bf630 100644
--- a/lib/bundler/vendor/thor/lib/thor/actions/directory.rb
+++ b/lib/bundler/vendor/thor/lib/thor/actions/directory.rb
@@ -1,4 +1,4 @@
-require "bundler/vendor/thor/lib/thor/actions/empty_directory"
+require_relative "empty_directory"
class Bundler::Thor
module Actions
diff --git a/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb b/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb
index 349b26ff65..cf651a4e78 100644
--- a/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb
+++ b/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb
@@ -1,4 +1,4 @@
-require "bundler/vendor/thor/lib/thor/actions/empty_directory"
+require_relative "empty_directory"
class Bundler::Thor
module Actions
diff --git a/lib/bundler/vendor/thor/lib/thor/base.rb b/lib/bundler/vendor/thor/lib/thor/base.rb
index 6d3f273ab1..7d7cd3b5fe 100644
--- a/lib/bundler/vendor/thor/lib/thor/base.rb
+++ b/lib/bundler/vendor/thor/lib/thor/base.rb
@@ -1,17 +1,17 @@
-require "bundler/vendor/thor/lib/thor/command"
-require "bundler/vendor/thor/lib/thor/core_ext/hash_with_indifferent_access"
-require "bundler/vendor/thor/lib/thor/core_ext/ordered_hash"
-require "bundler/vendor/thor/lib/thor/error"
-require "bundler/vendor/thor/lib/thor/invocation"
-require "bundler/vendor/thor/lib/thor/parser"
-require "bundler/vendor/thor/lib/thor/shell"
-require "bundler/vendor/thor/lib/thor/line_editor"
-require "bundler/vendor/thor/lib/thor/util"
+require_relative "command"
+require_relative "core_ext/hash_with_indifferent_access"
+require_relative "core_ext/ordered_hash"
+require_relative "error"
+require_relative "invocation"
+require_relative "parser"
+require_relative "shell"
+require_relative "line_editor"
+require_relative "util"
class Bundler::Thor
- autoload :Actions, "bundler/vendor/thor/lib/thor/actions"
- autoload :RakeCompat, "bundler/vendor/thor/lib/thor/rake_compat"
- autoload :Group, "bundler/vendor/thor/lib/thor/group"
+ autoload :Actions, File.expand_path("actions", __dir__)
+ autoload :RakeCompat, File.expand_path("rake_compat", __dir__)
+ autoload :Group, File.expand_path("group", __dir__)
# Shortcuts for help.
HELP_MAPPINGS = %w(-h -? --help -D)
@@ -113,7 +113,7 @@ class Bundler::Thor
end
# Whenever a class inherits from Bundler::Thor or Bundler::Thor::Group, we should track the
- # class and the file on Bundler::Thor::Base. This is the method responsable for it.
+ # class and the file on Bundler::Thor::Base. This is the method responsible for it.
#
def register_klass_file(klass) #:nodoc:
file = caller[1].match(/(.*):\d+/)[1]
diff --git a/lib/bundler/vendor/thor/lib/thor/group.rb b/lib/bundler/vendor/thor/lib/thor/group.rb
index 30db46529e..7861d05345 100644
--- a/lib/bundler/vendor/thor/lib/thor/group.rb
+++ b/lib/bundler/vendor/thor/lib/thor/group.rb
@@ -1,4 +1,4 @@
-require "bundler/vendor/thor/lib/thor/base"
+require_relative "base"
# Bundler::Thor has a special class called Bundler::Thor::Group. The main difference to Bundler::Thor class
# is that it invokes all commands at once. It also include some methods that allows
diff --git a/lib/bundler/vendor/thor/lib/thor/line_editor.rb b/lib/bundler/vendor/thor/lib/thor/line_editor.rb
index ce81a17484..5c0c336e7a 100644
--- a/lib/bundler/vendor/thor/lib/thor/line_editor.rb
+++ b/lib/bundler/vendor/thor/lib/thor/line_editor.rb
@@ -1,5 +1,5 @@
-require "bundler/vendor/thor/lib/thor/line_editor/basic"
-require "bundler/vendor/thor/lib/thor/line_editor/readline"
+require_relative "line_editor/basic"
+require_relative "line_editor/readline"
class Bundler::Thor
module LineEditor
diff --git a/lib/bundler/vendor/thor/lib/thor/parser.rb b/lib/bundler/vendor/thor/lib/thor/parser.rb
index 08f80e565d..45394732ca 100644
--- a/lib/bundler/vendor/thor/lib/thor/parser.rb
+++ b/lib/bundler/vendor/thor/lib/thor/parser.rb
@@ -1,4 +1,4 @@
-require "bundler/vendor/thor/lib/thor/parser/argument"
-require "bundler/vendor/thor/lib/thor/parser/arguments"
-require "bundler/vendor/thor/lib/thor/parser/option"
-require "bundler/vendor/thor/lib/thor/parser/options"
+require_relative "parser/argument"
+require_relative "parser/arguments"
+require_relative "parser/option"
+require_relative "parser/options"
diff --git a/lib/bundler/vendor/thor/lib/thor/runner.rb b/lib/bundler/vendor/thor/lib/thor/runner.rb
index 65ae422d7f..ed44853a00 100644
--- a/lib/bundler/vendor/thor/lib/thor/runner.rb
+++ b/lib/bundler/vendor/thor/lib/thor/runner.rb
@@ -1,6 +1,6 @@
-require "bundler/vendor/thor/lib/thor"
-require "bundler/vendor/thor/lib/thor/group"
-require "bundler/vendor/thor/lib/thor/core_ext/io_binary_read"
+require_relative "../thor"
+require_relative "group"
+require_relative "core_ext/io_binary_read"
require "yaml"
require "digest/md5"
@@ -111,7 +111,7 @@ class Bundler::Thor::Runner < Bundler::Thor #:nodoc: # rubocop:disable ClassLeng
desc "version", "Show Bundler::Thor version"
def version
- require "bundler/vendor/thor/lib/thor/version"
+ require_relative "version"
say "Bundler::Thor #{Bundler::Thor::VERSION}"
end
diff --git a/lib/bundler/vendor/thor/lib/thor/shell.rb b/lib/bundler/vendor/thor/lib/thor/shell.rb
index a68cdf8a98..e36fa472d6 100644
--- a/lib/bundler/vendor/thor/lib/thor/shell.rb
+++ b/lib/bundler/vendor/thor/lib/thor/shell.rb
@@ -24,9 +24,9 @@ class Bundler::Thor
SHELL_DELEGATED_METHODS = [:ask, :error, :set_color, :yes?, :no?, :say, :say_status, :print_in_columns, :print_table, :print_wrapped, :file_collision, :terminal_width]
attr_writer :shell
- autoload :Basic, "bundler/vendor/thor/lib/thor/shell/basic"
- autoload :Color, "bundler/vendor/thor/lib/thor/shell/color"
- autoload :HTML, "bundler/vendor/thor/lib/thor/shell/html"
+ autoload :Basic, File.expand_path("shell/basic", __dir__)
+ autoload :Color, File.expand_path("shell/color", __dir__)
+ autoload :HTML, File.expand_path("shell/html", __dir__)
# Add shell to initialize config values.
#
diff --git a/lib/bundler/vendor/thor/lib/thor/shell/color.rb b/lib/bundler/vendor/thor/lib/thor/shell/color.rb
index da289cb50c..6c821d4a09 100644
--- a/lib/bundler/vendor/thor/lib/thor/shell/color.rb
+++ b/lib/bundler/vendor/thor/lib/thor/shell/color.rb
@@ -1,4 +1,4 @@
-require "bundler/vendor/thor/lib/thor/shell/basic"
+require_relative "basic"
class Bundler::Thor
module Shell
diff --git a/lib/bundler/vendor/thor/lib/thor/shell/html.rb b/lib/bundler/vendor/thor/lib/thor/shell/html.rb
index 83d2054988..55262f19cc 100644
--- a/lib/bundler/vendor/thor/lib/thor/shell/html.rb
+++ b/lib/bundler/vendor/thor/lib/thor/shell/html.rb
@@ -1,4 +1,4 @@
-require "bundler/vendor/thor/lib/thor/shell/basic"
+require_relative "basic"
class Bundler::Thor
module Shell
diff --git a/lib/bundler/vendor/thor/lib/thor/util.rb b/lib/bundler/vendor/thor/lib/thor/util.rb
index 5d03177a28..0fe7d4d859 100644
--- a/lib/bundler/vendor/thor/lib/thor/util.rb
+++ b/lib/bundler/vendor/thor/lib/thor/util.rb
@@ -27,7 +27,7 @@ class Bundler::Thor
end
# Receives a constant and converts it to a Bundler::Thor namespace. Since Bundler::Thor
- # commands can be added to a sandbox, this method is also responsable for
+ # commands can be added to a sandbox, this method is also responsible for
# removing the sandbox namespace.
#
# This method should not be used in general because it's used to deal with
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..0666cfc9b9 100644
--- a/lib/bundler/vendored_thor.rb
+++ b/lib/bundler/vendored_thor.rb
@@ -2,7 +2,7 @@
module Bundler
def self.require_thor_actions
- Kernel.send(:require, "bundler/vendor/thor/lib/thor/actions")
+ require_relative "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 129e524d47..21eeeb0fd4 100644
--- a/lib/bundler/version.rb
+++ b/lib/bundler/version.rb
@@ -1,26 +1,7 @@
# 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.2" unless defined?(::Bundler::VERSION)
-
- def self.overwrite_loaded_gem_version
- begin
- require "rubygems"
- rescue LoadError
- return
- end
- return unless bundler_spec = Gem.loaded_specs["bundler"]
- return if bundler_spec.version == VERSION
- bundler_spec.version = Bundler::VERSION
- end
- private_class_method :overwrite_loaded_gem_version
- overwrite_loaded_gem_version
+ VERSION = "2.1.0.pre.1".freeze
def self.bundler_major_version
@bundler_major_version ||= VERSION.split(".").first.to_i
diff --git a/lib/bundler/version_ranges.rb b/lib/bundler/version_ranges.rb
index ec25716cde..12a956d6a0 100644
--- a/lib/bundler/version_ranges.rb
+++ b/lib/bundler/version_ranges.rb
@@ -5,11 +5,42 @@ module Bundler
NEq = Struct.new(:version)
ReqR = Struct.new(:left, :right)
class ReqR
- Endpoint = Struct.new(:version, :inclusive)
+ Endpoint = Struct.new(:version, :inclusive) do
+ def <=>(other)
+ if version.equal?(INFINITY)
+ return 0 if other.version.equal?(INFINITY)
+ return 1
+ elsif other.version.equal?(INFINITY)
+ return -1
+ end
+
+ comp = version <=> other.version
+ return comp unless comp.zero?
+
+ if inclusive && !other.inclusive
+ 1
+ elsif !inclusive && other.inclusive
+ -1
+ else
+ 0
+ end
+ end
+ end
+
def to_s
"#{left.inclusive ? "[" : "("}#{left.version}, #{right.version}#{right.inclusive ? "]" : ")"}"
end
- INFINITY = Object.new.freeze
+ INFINITY = begin
+ inf = Object.new
+ def inf.to_s
+ "∞"
+ end
+ def inf.<=>(other)
+ return 0 if other.equal?(self)
+ 1
+ end
+ inf.freeze
+ end
ZERO = Gem::Version.new("0.a")
def cover?(v)
@@ -32,6 +63,15 @@ module Bundler
left.version == right.version
end
+ def <=>(other)
+ return -1 if other.equal?(INFINITY)
+
+ comp = left <=> other.left
+ return comp unless comp.zero?
+
+ right <=> other.right
+ end
+
UNIVERSAL = ReqR.new(ReqR::Endpoint.new(Gem::Version.new("0.a"), true), ReqR::Endpoint.new(ReqR::INFINITY, false)).freeze
end
@@ -57,7 +97,7 @@ module Bundler
end.uniq
ranges, neqs = ranges.partition {|r| !r.is_a?(NEq) }
- [ranges.sort_by {|range| [range.left.version, range.left.inclusive ? 0 : 1] }, neqs.map(&:version)]
+ [ranges.sort, neqs.map(&:version)]
end
def self.empty?(ranges, neqs)
@@ -66,8 +106,14 @@ module Bundler
next false if curr_range.single? && neqs.include?(curr_range.left.version)
next curr_range if last_range.right.version == ReqR::INFINITY
case last_range.right.version <=> curr_range.left.version
- when 1 then next curr_range
- when 0 then next(last_range.right.inclusive && curr_range.left.inclusive && !neqs.include?(curr_range.left.version) && curr_range)
+ # higher
+ when 1 then next ReqR.new(curr_range.left, last_range.right)
+ # equal
+ when 0
+ if last_range.right.inclusive && curr_range.left.inclusive && !neqs.include?(curr_range.left.version)
+ ReqR.new(curr_range.left, [curr_range.right, last_range.right].max)
+ end
+ # lower
when -1 then next false
end
end
diff --git a/lib/bundler/vlad.rb b/lib/bundler/vlad.rb
index a6b13435c9..538e8c3e74 100644
--- a/lib/bundler/vlad.rb
+++ b/lib/bundler/vlad.rb
@@ -1,14 +1,14 @@
# frozen_string_literal: true
-require "bundler/shared_helpers"
-Bundler::SharedHelpers.major_deprecation 3,
+require_relative "shared_helpers"
+Bundler::SharedHelpers.major_deprecation 2,
"The Bundler task for Vlad"
# Vlad task for Bundler.
#
# 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..1965853931 100644
--- a/lib/bundler/yaml_serializer.rb
+++ b/lib/bundler/yaml_serializer.rb
@@ -3,7 +3,7 @@
module Bundler
# A stub yaml serializer that can handle only hashes and strings (as of now).
module YAMLSerializer
- module_function
+ module_function # rubocop:disable Layout/AccessModifierIndentation
def dump(hash)
yaml = String.new("---")
@@ -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..7d3b8dcc8d 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.
@@ -198,9 +202,6 @@ learn more about their operation in [bundle install(1)](bundle-install.1.html).
* `global_gem_cache` (`BUNDLE_GLOBAL_GEM_CACHE`):
Whether Bundler should cache all gems globally, rather than locally to the
installing Ruby installation.
-* `global_path_appends_ruby_scope` (`BUNDLE_GLOBAL_PATH_APPENDS_RUBY_SCOPE`):
- Whether Bundler should append the Ruby scope (e.g. engine and ABI version)
- to a globally-configured path.
* `ignore_messages` (`BUNDLE_IGNORE_MESSAGES`): When set, no post install
messages will be printed. To silence a single gem, use dot notation like
`ignore_messages.httparty true`.
@@ -208,11 +209,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 +227,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 +241,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 +299,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 +333,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 +357,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 +370,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-install.ronn b/man/bundle-install.ronn
index a9e375c87c..2ba82f27a5 100644
--- a/man/bundle-install.ronn
+++ b/man/bundle-install.ronn
@@ -6,7 +6,6 @@ bundle-install(1) -- Install the dependencies specified in your Gemfile
`bundle install` [--binstubs[=DIRECTORY]]
[--clean]
[--deployment]
- [--force]
[--frozen]
[--full-index]
[--gemfile=GEMFILE]
@@ -16,6 +15,7 @@ bundle-install(1) -- Install the dependencies specified in your Gemfile
[--no-prune]
[--path PATH]
[--quiet]
+ [--redownload]
[--retry=NUMBER]
[--shebang]
[--standalone[=GROUP[ GROUP...]]]
@@ -47,7 +47,12 @@ To apply any of `--binstubs`, `--deployment`, `--path`, or `--without` every
time `bundle install` is run, use `bundle config` (see bundle-config(1)).
* `--binstubs[=<directory>]`:
- Creates a directory (defaults to `~/bin`) and place any executables from the
+ Binstubs are scripts that wrap around executables. Bundler creates a small Ruby
+ file (a binstub) that loads Bundler, runs the command, and puts it in `bin/`.
+ This lets you link the binstub inside of an application to the exact gem
+ version the application needs.
+
+ Creates a directory (defaults to `~/bin`) and places any executables from the
gem there. These executables run in Bundler's context. If used, you might add
this directory to your environment's `PATH` variable. For instance, if the
`rails` gem comes with a `rails` executable, this flag will create a
@@ -64,9 +69,9 @@ time `bundle install` is run, use `bundle config` (see bundle-config(1)).
production or CI use. Please check carefully if you want to have this option
enabled in your development environment.
-* `--force`:
+* `--redownload`:
Force download every gem, even if the required versions are already available
- locally. `--redownload` is an alias of this option.
+ locally.
* `--frozen`:
Do not allow the Gemfile.lock to be updated after this install. Exits
diff --git a/man/bundle-update.ronn b/man/bundle-update.ronn
index 481bb5b14e..397fecadcb 100644
--- a/man/bundle-update.ronn
+++ b/man/bundle-update.ronn
@@ -12,8 +12,8 @@ bundle-update(1) -- Update your gems to the latest available versions
[--full-index]
[--jobs=JOBS]
[--quiet]
- [--force]
[--patch|--minor|--major]
+ [--redownload]
[--strict]
[--conservative]
@@ -64,8 +64,8 @@ gem.
* `--quiet`:
Only output warnings and errors.
-* `--force`:
- Force downloading every gem. `--redownload` is an alias of this option.
+* `--redownload`:
+ Force downloading every gem.
* `--patch`:
Prefer updating only to next patch version.
diff --git a/man/bundle.ronn b/man/bundle.ronn
index b8ee4566b4..5b1712394a 100644
--- a/man/bundle.ronn
+++ b/man/bundle.ronn
@@ -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/spec/bundler/bundler_spec.rb b/spec/bundler/bundler_spec.rb
index 194d6752b2..f74c1780bd 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
@@ -372,60 +370,51 @@ EOF
it { should be true }
end
end
- end
- describe "#requires_sudo?" do
- before do
- allow(Bundler).to receive(:which).with("sudo").and_return("/usr/bin/sudo")
- FileUtils.mkdir_p("tmp/vendor/bundle")
- FileUtils.mkdir_p("tmp/vendor/bin_dir")
- end
- 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)
+ context "path writability" do
+ before do
+ FileUtils.mkdir_p("tmp/vendor/bundle")
+ FileUtils.mkdir_p("tmp/vendor/bin_dir")
end
- end
- context "writable paths" do
- it "should return false and display nothing" do
- allow(Bundler).to receive(:bundle_path).and_return(Pathname("tmp/vendor/bundle"))
- expect(Bundler.ui).to_not receive(:warn)
- expect(Bundler.requires_sudo?).to eq(false)
+ after do
+ FileUtils.rm_rf("tmp/vendor/bundle")
+ FileUtils.rm_rf("tmp/vendor/bin_dir")
end
- end
- context "unwritable paths" do
- before do
- FileUtils.touch("tmp/vendor/bundle/unwritable1.txt")
- FileUtils.touch("tmp/vendor/bundle/unwritable2.txt")
- FileUtils.touch("tmp/vendor/bin_dir/unwritable3.txt")
- FileUtils.chmod(0o400, "tmp/vendor/bundle/unwritable1.txt")
- FileUtils.chmod(0o400, "tmp/vendor/bundle/unwritable2.txt")
- FileUtils.chmod(0o400, "tmp/vendor/bin_dir/unwritable3.txt")
+ context "writable paths" do
+ it "should return false and display nothing" do
+ allow(Bundler).to receive(:bundle_path).and_return(Pathname("tmp/vendor/bundle"))
+ expect(Bundler.ui).to_not receive(:warn)
+ expect(Bundler.requires_sudo?).to eq(false)
+ end
end
- it "should return true and display warn message" do
- allow(Bundler).to receive(:bundle_path).and_return(Pathname("tmp/vendor/bundle"))
- bin_dir = Pathname("tmp/vendor/bin_dir/")
+ context "unwritable paths" do
+ before do
+ FileUtils.touch("tmp/vendor/bundle/unwritable1.txt")
+ FileUtils.touch("tmp/vendor/bundle/unwritable2.txt")
+ FileUtils.touch("tmp/vendor/bin_dir/unwritable3.txt")
+ FileUtils.chmod(0o400, "tmp/vendor/bundle/unwritable1.txt")
+ FileUtils.chmod(0o400, "tmp/vendor/bundle/unwritable2.txt")
+ FileUtils.chmod(0o400, "tmp/vendor/bin_dir/unwritable3.txt")
+ end
+ it "should return true and display warn message" do
+ allow(Bundler).to receive(:bundle_path).and_return(Pathname("tmp/vendor/bundle"))
+ bin_dir = Pathname("tmp/vendor/bin_dir/")
- # allow File#writable? to be called with args other than the stubbed on below
- allow(File).to receive(:writable?).and_call_original
+ # allow File#writable? to be called with args other than the stubbed on below
+ allow(File).to receive(:writable?).and_call_original
- # fake make the directory unwritable
- allow(File).to receive(:writable?).with(bin_dir).and_return(false)
- allow(Bundler).to receive(:system_bindir).and_return(Pathname("tmp/vendor/bin_dir/"))
- message = <<-MESSAGE.chomp
+ # fake make the directory unwritable
+ allow(File).to receive(:writable?).with(bin_dir).and_return(false)
+ allow(Bundler).to receive(:system_bindir).and_return(Pathname("tmp/vendor/bin_dir/"))
+ message = <<-MESSAGE.chomp
Following files may not be writable, so sudo is needed:
tmp/vendor/bin_dir/
tmp/vendor/bundle/unwritable1.txt
tmp/vendor/bundle/unwritable2.txt
MESSAGE
- expect(Bundler.ui).to receive(:warn).with(message)
- expect(Bundler.requires_sudo?).to eq(true)
+ expect(Bundler.ui).to receive(:warn).with(message)
+ expect(Bundler.requires_sudo?).to eq(true)
+ end
end
end
end
@@ -465,6 +454,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 9a2591ac96..2e12fbfc6b 100644
--- a/spec/bundler/cli_spec.rb
+++ b/spec/bundler/cli_spec.rb
@@ -30,8 +30,8 @@ RSpec.describe "bundle executable" do
context "with no arguments" 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
diff --git a/spec/bundler/definition_spec.rb b/spec/bundler/definition_spec.rb
index a27c5b0a54..f048728a9f 100644
--- a/spec/bundler/definition_spec.rb
+++ b/spec/bundler/definition_spec.rb
@@ -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 => "< 3" 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 => "3" 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 8aeca6414a..69e4107408 100644
--- a/spec/bundler/dsl_spec.rb
+++ b/spec/bundler/dsl_spec.rb
@@ -25,29 +25,19 @@ RSpec.describe Bundler::Dsl do
expect { subject.git_source(:example) }.to raise_error(Bundler::InvalidOption)
end
- 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"
- end
- end
-
- context "default hosts (git, gist)", :bundler => "< 3" 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"
- expect(subject.dependencies.first.source.uri).to eq(github_uri)
- end
- end
-
- it "converts :github to :git" do
+ context "default hosts", :bundler => "2" do
+ it "converts :github to URI using https" do
subject.gem("sparks", :github => "indirect/sparks")
github_uri = "https://github.com/indirect/sparks.git"
expect(subject.dependencies.first.source.uri).to eq(github_uri)
end
+ it "converts :github shortcut to URI using https" do
+ subject.gem("sparks", :github => "rails")
+ github_uri = "https://github.com/rails/rails.git"
+ expect(subject.dependencies.first.source.uri).to eq(github_uri)
+ end
+
it "converts numeric :gist to :git" do
subject.gem("not-really-a-gem", :gist => 2_859_988)
github_uri = "https://gist.github.com/2859988.git"
@@ -60,12 +50,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 = "https://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"
@@ -114,8 +98,8 @@ RSpec.describe Bundler::Dsl do
end
describe "#gem" do
- [:ruby, :ruby_18, :ruby_19, :ruby_20, :ruby_21, :ruby_22, :ruby_23, :ruby_24, :ruby_25, :mri, :mri_18, :mri_19,
- :mri_20, :mri_21, :mri_22, :mri_23, :mri_24, :mri_25, :jruby, :rbx, :truffleruby].each do |platform|
+ [:ruby, :ruby_18, :ruby_19, :ruby_20, :ruby_21, :ruby_22, :ruby_23, :ruby_24, :ruby_25, :ruby_26, :mri, :mri_18, :mri_19,
+ :mri_20, :mri_21, :mri_22, :mri_23, :mri_24, :mri_25, :mri_26, :jruby, :rbx, :truffleruby].each do |platform|
it "allows #{platform} as a valid platform" do
subject.gem("foo", :platform => platform)
end
@@ -258,6 +242,19 @@ RSpec.describe Bundler::Dsl do
end
end
+ describe "#github", :bundler => "2" 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
expect do
@@ -280,9 +277,9 @@ RSpec.describe Bundler::Dsl do
describe "Runtime errors", :unless => Bundler.current_ruby.on_18? do
it "will raise a Bundler::GemfileError" do
- gemfile "s = 'foo'.freeze; s.strip!"
+ gemfile "raise RuntimeError, 'foo'"
expect { Bundler::Dsl.evaluate(bundled_app("Gemfile"), nil, true) }.
- to raise_error(Bundler::GemfileError, /There was an error parsing `Gemfile`: can't modify frozen String. Bundler cannot continue./i)
+ to raise_error(Bundler::GemfileError, /There was an error parsing `Gemfile`: foo. Bundler cannot continue./i)
end
end
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..2f622f6653 100644
--- a/spec/bundler/fetcher/compact_index_spec.rb
+++ b/spec/bundler/fetcher/compact_index_spec.rb
@@ -11,11 +11,14 @@ RSpec.describe Bundler::Fetcher::CompactIndex do
end
describe "#specs_for_names" do
+ let(:thread_list) { Thread.list.select {|thread| thread.status == "run" } }
+ let(:thread_inspection) { thread_list.map {|th| " * #{th}:\n #{th.backtrace_locations.join("\n ")}" }.join("\n") }
+
it "has only one thread open at the end of the run" do
compact_index.specs_for_names(["lskdjf"])
- thread_count = Thread.list.count {|thread| thread.status == "run" }
- expect(thread_count).to eq 1
+ thread_count = thread_list.count
+ expect(thread_count).to eq(1), "Expected 1 active thread after `#specs_for_names`, but found #{thread_count}. In particular, found:\n#{thread_inspection}"
end
it "calls worker#stop during the run" do
@@ -44,7 +47,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/fetcher/downloader_spec.rb b/spec/bundler/fetcher/downloader_spec.rb
index 07b507266b..f985b88982 100644
--- a/spec/bundler/fetcher/downloader_spec.rb
+++ b/spec/bundler/fetcher/downloader_spec.rb
@@ -82,6 +82,15 @@ RSpec.describe Bundler::Fetcher::Downloader do
expect { subject.fetch(uri, options, counter) }.to raise_error(Bundler::Fetcher::AuthenticationRequiredError,
/Authentication is required for www.uri-to-fetch.com/)
end
+
+ context "when the there are credentials provided in the request" do
+ let(:uri) { URI("http://user:password@www.uri-to-fetch.com") }
+
+ it "should raise a Bundler::Fetcher::BadAuthenticationError that doesn't contain the password" do
+ expect { subject.fetch(uri, options, counter) }.
+ to raise_error(Bundler::Fetcher::BadAuthenticationError, /Bad username or password for www.uri-to-fetch.com/)
+ end
+ end
end
context "when the request response is a Net::HTTPNotFound" do
diff --git a/spec/bundler/fetcher/index_spec.rb b/spec/bundler/fetcher/index_spec.rb
index 0cf0ae764e..d5ededae3e 100644
--- a/spec/bundler/fetcher/index_spec.rb
+++ b/spec/bundler/fetcher/index_spec.rb
@@ -35,9 +35,26 @@ RSpec.describe Bundler::Fetcher::Index do
context "when a 401 response occurs" do
let(:error_message) { "401" }
- it "should raise a Bundler::Fetcher::AuthenticationRequiredError" do
- expect { subject.specs(gem_names) }.to raise_error(Bundler::Fetcher::AuthenticationRequiredError,
- %r{Authentication is required for http://remote-uri.org})
+ before do
+ allow(remote_uri).to receive(:userinfo).and_return(userinfo)
+ end
+
+ context "and there was userinfo" do
+ let(:userinfo) { double(:userinfo) }
+
+ it "should raise a Bundler::Fetcher::BadAuthenticationError" do
+ expect { subject.specs(gem_names) }.to raise_error(Bundler::Fetcher::BadAuthenticationError,
+ %r{Bad username or password for http://remote-uri.org})
+ end
+ end
+
+ context "and there was no userinfo" do
+ let(:userinfo) { nil }
+
+ it "should raise a Bundler::Fetcher::AuthenticationRequiredError" do
+ expect { subject.specs(gem_names) }.to raise_error(Bundler::Fetcher::AuthenticationRequiredError,
+ %r{Authentication is required for http://remote-uri.org})
+ end
end
end
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 4fa4831c59..1ef57c1d00 100644
--- a/spec/bundler/gem_helper_spec.rb
+++ b/spec/bundler/gem_helper_spec.rb
@@ -50,7 +50,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
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/plugin/events_spec.rb b/spec/bundler/plugin/events_spec.rb
index b09e915682..28d70c6fdd 100644
--- a/spec/bundler/plugin/events_spec.rb
+++ b/spec/bundler/plugin/events_spec.rb
@@ -2,10 +2,14 @@
RSpec.describe Bundler::Plugin::Events do
context "plugin events" do
+ before { Bundler::Plugin::Events.send :reset }
+
describe "#define" do
it "raises when redefining a constant" do
+ Bundler::Plugin::Events.send(:define, :TEST_EVENT, "foo")
+
expect do
- Bundler::Plugin::Events.send(:define, :GEM_BEFORE_INSTALL_ALL, "another-value")
+ Bundler::Plugin::Events.send(:define, :TEST_EVENT, "bar")
end.to raise_error(ArgumentError)
end
diff --git a/spec/bundler/plugin/installer_spec.rb b/spec/bundler/plugin/installer_spec.rb
index f8bf8450c9..71fef76042 100644
--- a/spec/bundler/plugin/installer_spec.rb
+++ b/spec/bundler/plugin/installer_spec.rb
@@ -3,10 +3,6 @@
RSpec.describe Bundler::Plugin::Installer do
subject(:installer) { Bundler::Plugin::Installer.new }
- before do
- # allow(Bundler::SharedHelpers).to receive(:find_gemfile).and_return(Pathname.new("/Gemfile"))
- end
-
describe "cli install" do
it "uses Gem.sources when non of the source is provided" do
sources = double(:sources)
@@ -29,6 +25,14 @@ RSpec.describe Bundler::Plugin::Installer do
to eq("new-plugin" => spec)
end
+ it "returns the installed spec after installing local git plugins" do
+ allow(installer).to receive(:install_local_git).
+ and_return("new-plugin" => spec)
+
+ expect(installer.install(["new-plugin"], :local_git => "/phony/path/repo")).
+ to eq("new-plugin" => spec)
+ end
+
it "returns the installed spec after installing rubygems plugins" do
allow(installer).to receive(:install_rubygems).
and_return("new-plugin" => spec)
@@ -69,6 +73,29 @@ RSpec.describe Bundler::Plugin::Installer do
end
end
+ context "local git plugins" do
+ before do
+ build_git "ga-plugin", :path => lib_path("ga-plugin") do |s|
+ s.write "plugins.rb"
+ end
+ end
+
+ let(:result) do
+ installer.install(["ga-plugin"], :local_git => lib_path("ga-plugin").to_s)
+ end
+
+ it "returns the installed spec after installing" do
+ spec = result["ga-plugin"]
+ expect(spec.full_name).to eq "ga-plugin-1.0"
+ end
+
+ it "has expected full gem path" do
+ rev = revision_for(lib_path("ga-plugin"))
+ expect(result["ga-plugin"].full_gem_path).
+ to eq(Bundler::Plugin.root.join("bundler", "gems", "ga-plugin-#{rev[0..11]}").to_s)
+ end
+ end
+
context "rubygems plugins" do
let(:result) do
installer.install(["re-plugin"], :source => "file://#{gem_repo2}")
diff --git a/spec/bundler/plugin_spec.rb b/spec/bundler/plugin_spec.rb
index 9266fad1eb..eaa0b80905 100644
--- a/spec/bundler/plugin_spec.rb
+++ b/spec/bundler/plugin_spec.rb
@@ -32,6 +32,29 @@ RSpec.describe Bundler::Plugin do
allow(index).to receive(:register_plugin)
end
+ describe "list command" do
+ context "when no plugins are installed" do
+ before { allow(index).to receive(:installed_plugins) { [] } }
+ it "outputs no plugins installed" do
+ expect(Bundler.ui).to receive(:info).with("No plugins installed")
+ subject.list
+ end
+ end
+
+ context "with installed plugins" do
+ before do
+ allow(index).to receive(:installed_plugins) { %w[plug1 plug2] }
+ allow(index).to receive(:plugin_commands).with("plug1") { %w[c11 c12] }
+ allow(index).to receive(:plugin_commands).with("plug2") { %w[c21 c22] }
+ end
+ it "list plugins followed by commands" do
+ expected_output = "plug1\n-----\n c11\n c12\n\nplug2\n-----\n c21\n c22\n\n"
+ expect(Bundler.ui).to receive(:info).with(expected_output)
+ subject.list
+ end
+ end
+ end
+
describe "install command" do
let(:opts) { { "version" => "~> 1.0", "source" => "foo" } }
diff --git a/spec/bundler/ruby_version_spec.rb b/spec/bundler/ruby_version_spec.rb
index 46a1b2918b..3ac7d9ef3a 100644
--- a/spec/bundler/ruby_version_spec.rb
+++ b/spec/bundler/ruby_version_spec.rb
@@ -399,8 +399,14 @@ RSpec.describe "Bundler::RubyVersion and its subclasses" do
let(:bundler_system_ruby_version) { subject }
- before do
- Bundler::RubyVersion.instance_variable_set("@ruby_version", nil)
+ around do |example|
+ begin
+ old_ruby_version = Bundler::RubyVersion.instance_variable_get("@ruby_version")
+ Bundler::RubyVersion.instance_variable_set("@ruby_version", nil)
+ example.run
+ ensure
+ Bundler::RubyVersion.instance_variable_set("@ruby_version", old_ruby_version)
+ end
end
it "should return an instance of Bundler::RubyVersion" do
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/settings_spec.rb b/spec/bundler/settings_spec.rb
index 1a31493e20..339428eb48 100644
--- a/spec/bundler/settings_spec.rb
+++ b/spec/bundler/settings_spec.rb
@@ -130,13 +130,15 @@ that would suck --ehhh=oh geez it looks like i might have broken bundler somehow
describe "#temporary" do
it "reset after used" do
- Bundler.settings.set_local :no_install, true
+ Bundler.settings.set_command_option :no_install, true
Bundler.settings.temporary(:no_install => false) do
expect(Bundler.settings[:no_install]).to eq false
end
expect(Bundler.settings[:no_install]).to eq true
+
+ Bundler.settings.set_command_option :no_install, nil
end
it "returns the return value of the block" do
diff --git a/spec/bundler/shared_helpers_spec.rb b/spec/bundler/shared_helpers_spec.rb
index fcac37b398..f24d85c241 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)
@@ -223,6 +223,14 @@ RSpec.describe Bundler::SharedHelpers do
ENV["BUNDLE_GEMFILE"] = "Gemfile"
end
+ let(:setup_path) do
+ if ruby_core?
+ File.expand_path("../../../lib/bundler/setup", __dir__)
+ else
+ File.expand_path("../../lib/bundler/setup", __dir__)
+ end
+ end
+
shared_examples_for "ENV['PATH'] gets set correctly" do
before { Dir.mkdir ".bundle" }
@@ -236,7 +244,7 @@ RSpec.describe Bundler::SharedHelpers do
shared_examples_for "ENV['RUBYOPT'] gets set correctly" do
it "ensures -rbundler/setup is at the beginning of ENV['RUBYOPT']" do
subject.set_bundle_environment
- expect(ENV["RUBYOPT"].split(" ")).to start_with("-rbundler/setup")
+ expect(ENV["RUBYOPT"].split(" ")).to start_with("-r#{setup_path}")
end
end
@@ -288,7 +296,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
@@ -389,11 +397,11 @@ 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
- bundle_exe = ruby_core? ? "../../../../exe/bundle" : "../../../exe/bundle"
+ bundle_exe = ruby_core? ? "../../../../../bin/bundle" : "../../../exe/bundle"
expect(ENV["BUNDLE_BIN_PATH"]).to eq(File.expand_path(bundle_exe, __FILE__))
end
end
@@ -455,7 +463,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/git/git_proxy_spec.rb b/spec/bundler/source/git/git_proxy_spec.rb
index 3a29c97461..016105ccde 100644
--- a/spec/bundler/source/git/git_proxy_spec.rb
+++ b/spec/bundler/source/git/git_proxy_spec.rb
@@ -10,29 +10,33 @@ RSpec.describe Bundler::Source::Git::GitProxy do
context "with configured credentials" do
it "adds username and password to URI" do
- Bundler.settings.temporary(uri => "u:p")
- expect(subject).to receive(:git_retry).with(match("https://u:p@github.com/bundler/bundler.git"))
- subject.checkout
+ Bundler.settings.temporary(uri => "u:p") do
+ expect(subject).to receive(:git_retry).with(match("https://u:p@github.com/bundler/bundler.git"))
+ subject.checkout
+ end
end
it "adds username and password to URI for host" do
- Bundler.settings.temporary("github.com" => "u:p")
- expect(subject).to receive(:git_retry).with(match("https://u:p@github.com/bundler/bundler.git"))
- subject.checkout
+ Bundler.settings.temporary("github.com" => "u:p") do
+ expect(subject).to receive(:git_retry).with(match("https://u:p@github.com/bundler/bundler.git"))
+ subject.checkout
+ end
end
it "does not add username and password to mismatched URI" do
- Bundler.settings.temporary("https://u:p@github.com/bundler/bundler-mismatch.git" => "u:p")
- expect(subject).to receive(:git_retry).with(match(uri))
- subject.checkout
+ Bundler.settings.temporary("https://u:p@github.com/bundler/bundler-mismatch.git" => "u:p") do
+ expect(subject).to receive(:git_retry).with(match(uri))
+ subject.checkout
+ end
end
it "keeps original userinfo" do
- Bundler.settings.temporary("github.com" => "u:p")
- original = "https://orig:info@github.com/bundler/bundler.git"
- subject = described_class.new(Pathname("path"), original, "HEAD")
- expect(subject).to receive(:git_retry).with(match(original))
- subject.checkout
+ Bundler.settings.temporary("github.com" => "u:p") do
+ original = "https://orig:info@github.com/bundler/bundler.git"
+ subject = described_class.new(Pathname("path"), original, "HEAD")
+ expect(subject).to receive(:git_retry).with(match(original))
+ subject.checkout
+ end
end
end
diff --git a/spec/bundler/source/rubygems/remote_spec.rb b/spec/bundler/source/rubygems/remote_spec.rb
index 9a7ab42128..52fb4e7f1c 100644
--- a/spec/bundler/source/rubygems/remote_spec.rb
+++ b/spec/bundler/source/rubygems/remote_spec.rb
@@ -22,8 +22,9 @@ RSpec.describe Bundler::Source::Rubygems::Remote do
end
it "applies configured credentials" do
- Bundler.settings.temporary(uri_no_auth.to_s => credentials)
- expect(remote(uri_no_auth).uri).to eq(uri_with_auth)
+ Bundler.settings.temporary(uri_no_auth.to_s => credentials) do
+ expect(remote(uri_no_auth).uri).to eq(uri_with_auth)
+ end
end
end
@@ -33,8 +34,9 @@ RSpec.describe Bundler::Source::Rubygems::Remote do
end
it "does not apply given credentials" do
- Bundler.settings.temporary(uri_no_auth.to_s => credentials)
- expect(remote(uri_no_auth).anonymized_uri).to eq(uri_no_auth)
+ Bundler.settings.temporary(uri_no_auth.to_s => credentials) do
+ expect(remote(uri_no_auth).anonymized_uri).to eq(uri_no_auth)
+ end
end
end
@@ -44,8 +46,9 @@ RSpec.describe Bundler::Source::Rubygems::Remote do
end
it "only applies the given user" do
- Bundler.settings.temporary(uri_no_auth.to_s => credentials)
- expect(remote(uri_no_auth).cache_slug).to eq("gems.example.com.username.443.MD5HEX(gems.example.com.username.443./)")
+ Bundler.settings.temporary(uri_no_auth.to_s => credentials) do
+ expect(remote(uri_no_auth).cache_slug).to eq("gems.example.com.username.443.MD5HEX(gems.example.com.username.443./)")
+ end
end
end
end
@@ -106,7 +109,9 @@ RSpec.describe Bundler::Source::Rubygems::Remote do
let(:mirror_uri_with_auth) { URI("https://username:password@rubygems-mirror.org/") }
let(:mirror_uri_no_auth) { URI("https://rubygems-mirror.org/") }
- before { Bundler.settings.set_local("mirror.https://rubygems.org/", mirror_uri_with_auth.to_s) }
+ before { Bundler.settings.temporary("mirror.https://rubygems.org/" => mirror_uri_with_auth.to_s) }
+
+ after { Bundler.settings.temporary("mirror.https://rubygems.org/" => nil) }
specify "#uri returns the mirror URI with credentials" do
expect(remote(uri).uri).to eq(mirror_uri_with_auth)
@@ -135,6 +140,11 @@ RSpec.describe Bundler::Source::Rubygems::Remote do
Bundler.settings.temporary(mirror_uri_no_auth.to_s => credentials)
end
+ after do
+ Bundler.settings.temporary("mirror.https://rubygems.org/" => nil)
+ Bundler.settings.temporary(mirror_uri_no_auth.to_s => nil)
+ end
+
specify "#uri returns the mirror URI with credentials" do
expect(remote(uri).uri).to eq(mirror_uri_with_auth)
end
diff --git a/spec/bundler/source_list_spec.rb b/spec/bundler/source_list_spec.rb
index 541a46c6d0..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
@@ -393,19 +393,19 @@ RSpec.describe Bundler::SourceList 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 56606a830f..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 ceriticates
- 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 338431c4a6..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
@@ -13,7 +12,7 @@ RSpec.describe Bundler::PersistentHTTP do
before do
allow(connection).to receive(:use_ssl?).and_return(!tls_version.nil?)
- allow(socket).to receive(:io).and_return(socket_io)
+ allow(socket).to receive(:io).and_return(socket_io) if socket
connection.instance_variable_set(:@socket, socket)
if tls_version
diff --git a/spec/bundler/version_ranges_spec.rb b/spec/bundler/version_ranges_spec.rb
index ccbb9285d5..bca044b0c0 100644
--- a/spec/bundler/version_ranges_spec.rb
+++ b/spec/bundler/version_ranges_spec.rb
@@ -25,9 +25,12 @@ RSpec.describe Bundler::VersionRanges do
include_examples "empty?", false, ">= 1.0.0", "< 2.0.0"
include_examples "empty?", false, "~> 1"
include_examples "empty?", false, "~> 2.0", "~> 2.1"
+ include_examples "empty?", true, ">= 4.1.0", "< 5.0", "= 5.2.1"
+ include_examples "empty?", true, "< 5.0", "< 5.3", "< 6.0", "< 6", "= 5.2.0", "> 2", ">= 3.0", ">= 3.1", ">= 3.2", ">= 4.0.0", ">= 4.1.0", ">= 4.2.0", ">= 4.2", ">= 4"
include_examples "empty?", true, "!= 1", "< 2", "> 2"
include_examples "empty?", true, "!= 1", "<= 1", ">= 1"
include_examples "empty?", true, "< 2", "> 2"
+ include_examples "empty?", true, "< 2", "> 2", "= 2"
include_examples "empty?", true, "= 1", "!= 1"
include_examples "empty?", true, "= 1", "= 2"
include_examples "empty?", true, "= 1", "~> 2"
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 281e030c8f..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
diff --git a/spec/cache/git_spec.rb b/spec/cache/git_spec.rb
index 186b0269ab..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
@@ -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 12be2dbcf8..0d7b154a37 100644
--- a/spec/cache/path_spec.rb
+++ b/spec/cache/path_spec.rb
@@ -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/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 6eedc5b854..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
@@ -124,68 +124,28 @@ RSpec.describe "bundle binstubs <gem>" do
bundle! "binstubs bundler rack prints_loaded_gems"
end
- # When environment has a same version of bundler as default gems.
- # `system_gems "bundler-x.y.z"` will detect system binstub.
- # We need to avoid it by virtual version of bundler.
- let(:system_bundler_version) { Gem::Version.new(Bundler::VERSION).bump.to_s }
+ let(:system_bundler_version) { Bundler::VERSION }
- context "when system bundler was used" do
- # Support master branch of bundler
- if ENV["BUNDLER_SPEC_SUB_VERSION"]
- let(:system_bundler_version) { Bundler::VERSION }
- end
-
- before do
- gemfile <<-G
- source "https://rubygems.org"
- gem "rack"
- gem "prints_loaded_gems"
- G
-
- lockfile <<-G
- GEM
- remote: https://rubygems.org
- specs:
- prints_loaded_gems (1.0)
- rack (1.2)
-
- PLATFORMS
- ruby
-
- DEPENDENCIES
- prints_loaded_gems
- rack
-
- BUNDLED WITH
- #{system_bundler_version}
- G
- end
-
- it "runs bundler" do
- sys_exec! "#{bundled_app("bin/bundle")} install"
- expect(out).to eq %(system bundler #{system_bundler_version}\n["install"])
- end
+ it "runs bundler" do
+ sys_exec! "#{bundled_app("bin/bundle")} install"
+ expect(out).to eq %(system bundler #{system_bundler_version}\n["install"])
end
context "when BUNDLER_VERSION is set" do
- let(:system_bundler_version) { Bundler::VERSION }
-
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
context "when a lockfile exists with a locked bundler version" do
- let(:system_bundler_version) { Bundler::VERSION }
-
it "runs the correct version of bundler when the version is newer" 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
@@ -194,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
@@ -203,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
@@ -213,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
@@ -236,22 +196,16 @@ RSpec.describe "bundle binstubs <gem>" do
let(:system_bundler_version) { :bundler }
it "loads all gems" do
sys_exec! bundled_app("bin/print_loaded_gems").to_s
- # RG < 2.0.14 didn't have a `Gem::Specification#default_gem?`
- # This is dirty detection for old RG versions.
- if File.dirname(Bundler.load.specs["bundler"][0].loaded_from) =~ %r{specifications/default}
- expect(out).to eq %(["prints_loaded_gems-1.0", "rack-1.2"])
- else
- expect(out).to eq %(["bundler-#{Bundler::VERSION}", "prints_loaded_gems-1.0", "rack-1.2"])
- end
+ expect(out).to eq %(["bundler-#{Bundler::VERSION}", "prints_loaded_gems-1.0", "rack-1.2"])
end
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
@@ -324,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
@@ -396,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
@@ -428,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
@@ -439,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
@@ -449,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
@@ -460,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"
@@ -472,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 890f4b1356..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,7 +89,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 "remembers --without option from install", :bundler => "< 3" 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
@@ -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 6addd36c32..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.bundler_major_version < 3 ? 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
@@ -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,8 +329,6 @@ RSpec.describe "bundle clean" do
gem "rack"
G
- bundle! "info thin"
-
install_gemfile! <<-G
source "file://#{gem_repo1}"
@@ -446,7 +442,7 @@ RSpec.describe "bundle clean" do
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
@@ -468,7 +464,7 @@ RSpec.describe "bundle clean" do
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}"
@@ -519,8 +515,8 @@ 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")
gem = ruby_core? ? ENV["BUNDLE_GEM"] : "gem"
sys_exec "#{gem} list"
@@ -560,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
@@ -650,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)")
@@ -671,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}"
@@ -709,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"))
@@ -738,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}"
@@ -772,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 9e49357465..40fab95803 100644
--- a/spec/commands/config_spec.rb
+++ b/spec/commands/config_spec.rb
@@ -1,18 +1,11 @@
# frozen_string_literal: true
RSpec.describe ".bundle/config" do
- before :each do
- gemfile <<-G
- source "file://#{gem_repo1}"
- gem "rack", "1.0.0"
- G
- end
-
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")
@@ -21,28 +14,35 @@ 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
end
end
- describe "BUNDLE_APP_CONFIG" do
+ describe "location" do
+ before :each do
+ gemfile <<-G
+ source "file://#{gem_repo1}"
+ gem "rack", "1.0.0"
+ G
+ end
+
it "can be moved with an environment variable" do
ENV["BUNDLE_APP_CONFIG"] = tmp("foo/bar").to_s
bundle "install", forgotten_command_line_options(:path => "vendor/bundle")
@@ -66,24 +66,29 @@ RSpec.describe ".bundle/config" do
end
describe "global" do
- before(:each) { bundle :install }
+ before(:each) do
+ install_gemfile <<-G
+ source "file://#{gem_repo1}"
+ gem "rack", "1.0.0"
+ G
+ 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]"
@@ -94,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]"
@@ -105,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]"
@@ -122,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]"
@@ -131,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")
@@ -155,10 +160,15 @@ RSpec.describe ".bundle/config" do
end
describe "local" do
- before(:each) { bundle :install }
+ before(:each) do
+ install_gemfile <<-G
+ source "file://#{gem_repo1}"
+ gem "rack", "1.0.0"
+ G
+ 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
@@ -166,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")
@@ -176,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]"
@@ -193,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")
@@ -208,7 +218,12 @@ RSpec.describe ".bundle/config" do
end
describe "env" do
- before(:each) { bundle :install }
+ before(:each) do
+ install_gemfile <<-G
+ source "file://#{gem_repo1}"
+ gem "rack", "1.0.0"
+ G
+ end
it "can set boolean properties via the environment" do
ENV["BUNDLE_FROZEN"] = "true"
@@ -247,39 +262,44 @@ 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
end
describe "gem mirrors" do
- before(:each) { bundle :install }
+ before(:each) do
+ install_gemfile <<-G
+ source "file://#{gem_repo1}"
+ gem "rack", "1.0.0"
+ G
+ 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}"
@@ -297,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
@@ -325,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)
@@ -338,7 +358,12 @@ E
end
describe "very long lines" do
- before(:each) { bundle :install }
+ before(:each) do
+ install_gemfile <<-G
+ source "file://#{gem_repo1}"
+ gem "rack", "1.0.0"
+ G
+ end
let(:long_string) do
"--with-xml2-include=/usr/pkg/include/libxml2 --with-xml2-lib=/usr/pkg/lib " \
@@ -351,17 +376,103 @@ 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", :ruby_repo do
+ bundle! "config list"
+ 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(out).to eq "spec_run=true"
+ end
+
+ it "get" do
+ ENV["BUNDLE_BAR"] = "bar_val"
+
+ bundle! "config get 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(out).to eq "foo=foo_val"
+
+ bundle! "config get foo"
+ 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(out).to eq ""
+
+ bundle! "config set --local foo 2"
+ expect(out).to eq ""
+
+ bundle! "config set --global foo 3"
+ 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(out).to eq "foo=4"
+
+ bundle! "config set --local foo 4.1"
+ 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(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(out).to eq ""
+
+ bundle! "config set foo 1"
+ bundle! "config unset foo --parseable"
+ expect(out).to eq ""
+
+ bundle! "config set --local foo 1"
+ bundle! "config set --global foo 2"
+
+ bundle! "config unset foo"
+ 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(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(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(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(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(err).to eq "The options global and local were specified. Please only use one of the switches at a time."
+ end
+ end
end
RSpec.describe "setting gemfile via config" do
@@ -374,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 05b0a6c1e4..cba618db80 100644
--- a/spec/commands/console_spec.rb
+++ b/spec/commands/console_spec.rb
@@ -31,7 +31,7 @@ RSpec.describe "bundle console", :bundler => "< 3" 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 => "< 3" 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 => "< 3" 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 67bdc97ac3..b3ec2c2cfe 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,10 +51,21 @@ 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
+ it "respects custom process title when loading through ruby" do
+ script_that_changes_its_own_title_and_checks_if_picked_up_by_ps_unix_utility = <<~RUBY
+ Process.setproctitle("1-2-3-4-5-6-7-8-9-10-11-12-13-14-15-16")
+ puts `ps -eo args | grep [1]-2-3-4-5-6-7-8-9-10-11-12-13-14-15-16`
+ RUBY
+ create_file "Gemfile"
+ create_file "a.rb", script_that_changes_its_own_title_and_checks_if_picked_up_by_ps_unix_utility
+ bundle "exec ruby a.rb"
+ expect(out).to eq("1-2-3-4-5-6-7-8-9-10-11-12-13-14-15-16")
+ end
+
it "accepts --verbose" do
install_gemfile 'gem "rack"'
bundle "exec --verbose echo foobar"
@@ -79,30 +90,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
@@ -163,7 +167,7 @@ RSpec.describe "bundle exec" do
bundle! "exec irb --version"
expect(out).to include(default_irb_version)
- expect(last_command.stderr).to be_empty
+ expect(err).to be_empty
end
end
@@ -189,7 +193,7 @@ RSpec.describe "bundle exec" do
bundle! "exec irb --version"
expect(out).to include(specified_irb_version)
- expect(last_command.stderr).to be_empty
+ expect(err).to be_empty
end
end
@@ -219,9 +223,38 @@ RSpec.describe "bundle exec" do
it "uses resolved version" do
expect(out).to include(indirect_irb_version)
- expect(last_command.stderr).to be_empty
+ 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
@@ -246,7 +279,12 @@ RSpec.describe "bundle exec" do
G
rubyopt = ENV["RUBYOPT"]
- rubyopt = "-rbundler/setup #{rubyopt}"
+ setup_path = if ruby_core?
+ File.expand_path("../../../lib/bundler/setup", __dir__)
+ else
+ File.expand_path("../../lib/bundler/setup", __dir__)
+ end
+ rubyopt = "-r#{setup_path} #{rubyopt}"
bundle "exec 'echo $RUBYOPT'"
expect(out).to have_rubyopts(rubyopt)
@@ -278,8 +316,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
@@ -290,7 +328,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
@@ -300,33 +338,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
@@ -427,14 +451,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
@@ -517,13 +541,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
@@ -560,7 +584,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
@@ -593,21 +617,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
@@ -630,15 +654,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) { ENV["TRAVIS"] ? "Terminated" : "" }
+ let(:expected_err) { "" }
let(:exit_code) do
# signal mask 128 + plus signal 15 -> TERM
# this is specified by C99
@@ -689,7 +708,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
@@ -706,7 +726,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
@@ -727,7 +748,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"
@@ -751,21 +772,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
@@ -793,7 +806,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)
@@ -839,9 +852,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)
@@ -886,15 +897,12 @@ __FILE__: #{path.to_s.inspect}
expect(bundle!("exec #{file}", :artifice => nil)).to eq(expected)
expect(bundle!("exec bundle exec #{file}", :artifice => nil)).to eq(expected)
expect(bundle!("exec ruby #{file}", :artifice => nil)).to eq(expected)
- # Ignore expectaion for default bundler gem conflict.
- unless ENV["BUNDLER_SPEC_SUB_VERSION"]
- expect(run!(file.read, :artifice => nil)).to eq(expected)
- end
+ expect(run!(file.read, :artifice => nil)).to eq(expected)
end
# 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 8a8f0effa0..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 => "< 3" 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 => "3" 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 => "< 3" 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 => ">= 3" 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 => "< 3" 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 => ">= 3" 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 => "< 3" 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].to_i < 3
- 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 => "< 3" 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 d091e01380..da31849be7 100644
--- a/spec/commands/inject_spec.rb
+++ b/spec/commands/inject_spec.rb
@@ -37,14 +37,14 @@ RSpec.describe "bundle inject", :bundler => "< 3" 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
@@ -80,9 +80,9 @@ Usage: "bundle inject GEM VERSION"
before do
bundle "install"
if Bundler.feature_flag.bundler_3_mode?
- bundle! "config --local deployment true"
+ 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 326f98161e..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
@@ -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 d61d3492f3..423921e282 100644
--- a/spec/commands/licenses_spec.rb
+++ b/spec/commands/licenses_spec.rb
@@ -12,14 +12,7 @@ RSpec.describe "bundle licenses" do
it "prints license information for all gems in the bundle" do
bundle "licenses"
- loaded_bundler_spec = Bundler.load.specs["bundler"]
- expected = if !loaded_bundler_spec.empty?
- loaded_bundler_spec[0].license
- else
- "Unknown"
- end
-
- expect(out).to include("bundler: #{expected}")
+ expect(out).to include("bundler: MIT")
expect(out).to include("with_license: MIT")
end
@@ -31,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 ba4bb9b040..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 => "3" 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 => "3" 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 => "3" 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 => "3" 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 => "3" 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 => "3" 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 => "3" 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 0b77605f01..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,14 +86,41 @@ 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
+ create_file "CustomGemfile", <<-G
+ source "file://localhost#{repo}"
+ gem "foo"
+ G
+ lockfile = strip_lockfile(normalize_uri_file(<<-L))
+ GEM
+ remote: file://localhost#{repo}/
+ specs:
+ foo (1.0)
+
+ PLATFORMS
+ #{lockfile_platforms}
+
+ DEPENDENCIES
+ foo
+
+ BUNDLED WITH
+ #{Bundler::VERSION}
+ L
+ bundle "lock --gemfile CustomGemfile"
+
+ expect(out).to match(/Writing lockfile to.+CustomGemfile\.lock/)
+ expect(read_lockfile("CustomGemfile.lock")).to eq(lockfile)
+ expect { read_lockfile }.to raise_error(Errno::ENOENT)
end
it "writes to a custom location using --lockfile" do
bundle "lock --lockfile=lock"
expect(out).to match(/Writing lockfile to.+lock/)
- expect(read_lockfile "lock").to eq(@lockfile)
+ expect(read_lockfile("lock")).to eq(@lockfile)
expect { read_lockfile }.to raise_error(Errno::ENOENT)
end
@@ -106,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"
@@ -117,11 +144,24 @@ 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
+ it "can lock without downloading gems" do
+ gemfile <<-G
+ source "file://#{gem_repo1}"
+
+ gem "thin"
+ gem "rack_middleware", :group => "test"
+ G
+ bundle! "config set without test"
+ bundle! "config set path .bundle"
+ bundle! "lock"
+ expect(bundled_app(".bundle")).not_to exist
+ end
+
# see update_spec for more coverage on same options. logic is shared so it's not necessary
# to repeat coverage here.
context "conservative updates" do
@@ -185,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
@@ -202,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 fada9c8bfc..222e6ce2d4 100644
--- a/spec/commands/newgem_spec.rb
+++ b/spec/commands/newgem_spec.rb
@@ -1,11 +1,6 @@
# frozen_string_literal: true
RSpec.describe "bundle gem" do
- def reset!
- super
- global_config "BUNDLE_GEM__MIT" => "false", "BUNDLE_GEM__TEST" => "false", "BUNDLE_GEM__COC" => "false"
- end
-
def execute_bundle_gem(gem_name, flag = "")
bundle! "gem #{gem_name} #{flag}"
# reset gemspec cache for each test because of commit 3d4163a
@@ -22,6 +17,7 @@ RSpec.describe "bundle gem" do
end
before do
+ global_config "BUNDLE_GEM__MIT" => "false", "BUNDLE_GEM__TEST" => "false", "BUNDLE_GEM__COC" => "false"
git_config_content = <<-EOF
[user]
name = "Bundler User"
@@ -136,7 +132,6 @@ RSpec.describe "bundle gem" do
context "git config github.user is absent" do
before do
sys_exec("git config --unset github.user")
- reset!
in_app_root
bundle "gem #{gem_name}"
end
@@ -162,7 +157,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,14 +173,14 @@ 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"
prepare_gemspec(bundled_app("newgem", "newgem.gemspec"))
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
@@ -197,7 +192,6 @@ RSpec.describe "bundle gem" do
context "gem naming with relative paths" do
before do
- reset!
in_app_root
end
@@ -269,7 +263,6 @@ RSpec.describe "bundle gem" do
before do
`git config --unset user.name`
`git config --unset user.email`
- reset!
in_app_root
bundle "gem #{gem_name}"
end
@@ -277,7 +270,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
@@ -291,7 +284,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
@@ -310,7 +303,6 @@ RSpec.describe "bundle gem" do
context "--exe parameter set" do
before do
- reset!
in_app_root
bundle "gem #{gem_name} --exe"
end
@@ -326,7 +318,6 @@ RSpec.describe "bundle gem" do
context "--bin parameter set" do
before do
- reset!
in_app_root
bundle "gem #{gem_name} --bin"
end
@@ -342,7 +333,6 @@ RSpec.describe "bundle gem" do
context "no --test parameter" do
before do
- reset!
in_app_root
bundle "gem #{gem_name}"
end
@@ -358,7 +348,6 @@ RSpec.describe "bundle gem" do
context "--test parameter set to rspec" do
before do
- reset!
in_app_root
bundle "gem #{gem_name} --test=rspec"
end
@@ -369,7 +358,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
@@ -385,9 +374,8 @@ RSpec.describe "bundle gem" do
context "gem.test setting set to rspec" do
before do
- reset!
in_app_root
- bundle "config gem.test rspec"
+ bundle "config set gem.test rspec"
bundle "gem #{gem_name}"
end
@@ -400,9 +388,8 @@ RSpec.describe "bundle gem" do
context "gem.test setting set to rspec and --test is set to minitest" 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
@@ -414,12 +401,11 @@ RSpec.describe "bundle gem" do
context "--test parameter set to minitest" do
before do
- reset!
in_app_root
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
@@ -444,9 +430,8 @@ RSpec.describe "bundle gem" do
context "gem.test setting set to minitest" do
before do
- reset!
in_app_root
- bundle "config gem.test minitest"
+ bundle "config set gem.test minitest"
bundle "gem #{gem_name}"
end
@@ -470,7 +455,6 @@ RSpec.describe "bundle gem" do
context "--test with no arguments" do
before do
- reset!
in_app_root
bundle "gem #{gem_name} --test"
end
@@ -487,7 +471,6 @@ RSpec.describe "bundle gem" do
context "--edit option" do
it "opens the generated gemspec in the user's text editor" do
- reset!
in_app_root
output = bundle "gem #{gem_name} --edit=echo"
gemspec_path = File.join(Dir.pwd, gem_name, "#{gem_name}.gemspec")
@@ -503,7 +486,6 @@ RSpec.describe "bundle gem" do
before do
global_config "BUNDLE_GEM__MIT" => "true", "BUNDLE_GEM__TEST" => "false", "BUNDLE_GEM__COC" => "false"
end
- after { reset! }
it_behaves_like "--mit flag"
it_behaves_like "--no-mit flag"
end
@@ -517,7 +499,6 @@ RSpec.describe "bundle gem" do
before do
global_config "BUNDLE_GEM__MIT" => "false", "BUNDLE_GEM__TEST" => "false", "BUNDLE_GEM__COC" => "true"
end
- after { reset! }
it_behaves_like "--coc flag"
it_behaves_like "--no-coc flag"
end
@@ -560,7 +541,6 @@ RSpec.describe "bundle gem" do
before do
`git config --unset user.name`
`git config --unset user.email`
- reset!
in_app_root
bundle "gem #{gem_name}"
end
@@ -573,7 +553,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
@@ -592,7 +572,6 @@ RSpec.describe "bundle gem" do
context "--bin parameter set" do
before do
- reset!
in_app_root
bundle "gem #{gem_name} --bin"
end
@@ -608,7 +587,6 @@ RSpec.describe "bundle gem" do
context "no --test parameter" do
before do
- reset!
in_app_root
bundle "gem #{gem_name}"
end
@@ -624,7 +602,6 @@ RSpec.describe "bundle gem" do
context "--test parameter set to rspec" do
before do
- reset!
in_app_root
bundle "gem #{gem_name} --test=rspec"
end
@@ -659,7 +636,6 @@ RSpec.describe "bundle gem" do
context "--test parameter set to minitest" do
before do
- reset!
in_app_root
bundle "gem #{gem_name} --test=minitest"
end
@@ -701,7 +677,6 @@ RSpec.describe "bundle gem" do
context "--test with no arguments" do
before do
- reset!
in_app_root
bundle "gem #{gem_name} --test"
end
@@ -714,7 +689,6 @@ RSpec.describe "bundle gem" do
context "--ext parameter set" do
before do
- reset!
in_app_root
bundle "gem test_gem --ext"
end
@@ -758,22 +732,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
@@ -790,22 +764,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
@@ -838,7 +812,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"
@@ -864,7 +838,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
@@ -875,7 +849,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 c9d3ac1de4..f0c2927218 100644
--- a/spec/commands/outdated_spec.rb
+++ b/spec/commands/outdated_spec.rb
@@ -59,15 +59,19 @@ RSpec.describe "bundle outdated" do
install_gemfile <<-G
source "file://#{gem_repo2}"
+ gem "terranova", '8'
+
group :development, :test do
gem 'activesupport', '2.3.5'
end
G
update_repo2 { build_gem "activesupport", "3.0" }
+ update_repo2 { build_gem "terranova", "9" }
bundle "outdated --verbose"
expect(out).to include("activesupport (newest 3.0, installed 2.3.5, requested = 2.3.5) in groups \"development, test\"")
+ expect(out).to include("terranova (newest 9, installed 8, requested = 8) in group \"default\"")
end
end
@@ -117,10 +121,10 @@ RSpec.describe "bundle outdated" do
it "returns a sorted list of outdated gems from one group => 'default'" do
test_group_option("default")
- expect(out).to include("===== Group default =====")
+ expect(out).to include("===== Group \"default\" =====")
expect(out).to include("terranova (")
- expect(out).not_to include("===== Group development, test =====")
+ expect(out).not_to include("===== Groups \"development, test\" =====")
expect(out).not_to include("activesupport")
expect(out).not_to include("duradura")
end
@@ -128,10 +132,21 @@ RSpec.describe "bundle outdated" do
it "returns a sorted list of outdated gems from one group => 'development'" do
test_group_option("development", 2)
- expect(out).not_to include("===== Group default =====")
+ expect(out).not_to include("===== Group \"default\" =====")
+ expect(out).not_to include("terranova (")
+
+ expect(out).to include("===== Groups \"development, test\" =====")
+ expect(out).to include("activesupport")
+ expect(out).to include("duradura")
+ end
+
+ it "returns a sorted list of outdated gems from one group => 'test'" do
+ test_group_option("test", 2)
+
+ expect(out).not_to include("===== Group \"default\" =====")
expect(out).not_to include("terranova (")
- expect(out).to include("===== Group development, test =====")
+ expect(out).to include("===== Groups \"development, test\" =====")
expect(out).to include("activesupport")
expect(out).to include("duradura")
end
@@ -173,9 +188,9 @@ RSpec.describe "bundle outdated" do
end
bundle "outdated --groups"
- expect(out).to include("===== Group default =====")
+ expect(out).to include("===== Group \"default\" =====")
expect(out).to include("terranova (newest 9, installed 8, requested = 8)")
- expect(out).to include("===== Group development, test =====")
+ expect(out).to include("===== Groups \"development, test\" =====")
expect(out).to include("activesupport (newest 3.0, installed 2.3.5, requested = 2.3.5)")
expect(out).to include("duradura (newest 8.0, installed 7.0, requested = 7.0)")
@@ -191,7 +206,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}"
@@ -302,14 +317,15 @@ RSpec.describe "bundle outdated" do
end
end
- describe "with --strict option" do
+ filter_strict_option = Bundler.feature_flag.bundler_2_mode? ? :"filter-strict" : :strict
+ describe "with --#{filter_strict_option} option" do
it "only reports gems that have a newer version that matches the specified dependency version requirements" do
update_repo2 do
build_gem "activesupport", "3.0"
build_gem "weakling", "0.0.5"
end
- bundle "outdated --strict"
+ bundle :outdated, filter_strict_option => true
expect(out).to_not include("activesupport (newest")
expect(out).to include("(newest 0.0.5, installed 0.0.3, requested ~> 0.0.1)")
@@ -321,7 +337,7 @@ RSpec.describe "bundle outdated" do
gem "rack_middleware", "1.0"
G
- bundle "outdated --strict"
+ bundle :outdated, filter_strict_option => true
expect(out).to_not include("rack (1.2")
end
@@ -339,7 +355,7 @@ RSpec.describe "bundle outdated" do
build_gem "weakling", "0.0.5"
end
- bundle "outdated --strict --filter-patch"
+ bundle :outdated, filter_strict_option => true, "filter-patch" => true
expect(out).to_not include("activesupport (newest")
expect(out).to include("(newest 0.0.5, installed 0.0.3")
@@ -357,7 +373,7 @@ RSpec.describe "bundle outdated" do
build_gem "weakling", "0.1.5"
end
- bundle "outdated --strict --filter-minor"
+ bundle :outdated, filter_strict_option => true, "filter-minor" => true
expect(out).to_not include("activesupport (newest")
expect(out).to include("(newest 0.1.5, installed 0.0.3")
@@ -375,7 +391,7 @@ RSpec.describe "bundle outdated" do
build_gem "weakling", "1.1.5"
end
- bundle "outdated --strict --filter-major"
+ bundle :outdated, filter_strict_option => true, "filter-major" => true
expect(out).to_not include("activesupport (newest")
expect(out).to include("(newest 1.1.5, installed 0.0.3")
@@ -386,7 +402,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
@@ -402,7 +418,7 @@ 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
@@ -422,14 +438,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}"
@@ -437,7 +453,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
@@ -445,10 +461,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 0159558975..b9cc079c5c 100644
--- a/spec/commands/package_spec.rb
+++ b/spec/commands/package_spec.rb
@@ -194,7 +194,7 @@ RSpec.describe "bundle package" do
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
@@ -217,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"
@@ -225,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
@@ -278,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/install/post_bundle_message_spec.rb b/spec/commands/post_bundle_message_spec.rb
index 5ab552385e..4d3aa7b450 100644
--- a/spec/install/post_bundle_message_spec.rb
+++ b/spec/commands/post_bundle_message_spec.rb
@@ -107,7 +107,7 @@ RSpec.describe "post bundle message" do
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 => "3" do
@@ -116,7 +116,7 @@ RSpec.describe "post bundle message" do
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
@@ -185,21 +185,21 @@ The source does not contain any versions of 'not-a-gem'
it "with --without one group" do
bundle! :install, forgotten_command_line_options(:without => "emo")
bundle! :update, :all => true
- expect(out).to include("Gems in the group emo were not installed")
+ expect(out).to include("Gems in the group emo were not updated")
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 => true
- expect(out).to include("Gems in the groups emo and test were not installed")
+ expect(out).to include("Gems in the groups emo and test were not updated")
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 => true
- expect(out).to include("Gems in the groups emo, obama and test were not installed")
+ expect(out).to include("Gems in the groups emo, obama and test were not updated")
expect(out).to include(bundle_updated_message)
end
end
diff --git a/spec/commands/pristine_spec.rb b/spec/commands/pristine_spec.rb
index d8761bba26..93eb81f2af 100644
--- a/spec/commands/pristine_spec.rb
+++ b/spec/commands/pristine_spec.rb
@@ -42,7 +42,7 @@ 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"
@@ -95,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
@@ -118,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
@@ -142,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
@@ -152,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
@@ -160,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
@@ -177,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 0eb86f96ff..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,11 +318,7 @@ RSpec.describe "bundle remove" do
bundle "remove rails"
- if Gem::VERSION >= "1.6.0"
- expect(out).to include("Gems could not be removed. rack (>= 0) would also have been removed.")
- else
- expect(out).to include("Gems could not be removed. rack (>= 0, runtime) would also have been removed.")
- end
+ 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"
@@ -440,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
@@ -460,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}"
@@ -485,11 +481,7 @@ RSpec.describe "bundle remove" do
bundle "remove rack"
expect(out).to include("rack was removed.")
- if Gem::VERSION >= "1.6.0"
- expect(out).to include("Gems could not be removed. rails (>= 0) would also have been removed.")
- else
- expect(out).to include("Gems could not be removed. rails (>= 0, runtime) would also have been removed.")
- end
+ expect(err).to include("Gems could not be removed. rails (>= 0) would also have been removed.")
gemfile_should_be <<-G
source "file://#{gem_repo1}"
@@ -513,11 +505,7 @@ RSpec.describe "bundle remove" do
bundle "remove rack"
- if Gem::VERSION >= "1.6.0"
- expect(out).to include("Gems could not be removed. rails (>= 0) would also have been removed.")
- else
- expect(out).to include("Gems could not be removed. rails (>= 0, runtime) would also have been removed.")
- end
+ 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 a5c6beec1a..6a7d5f267e 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", :bundler => "< 3", :ruby => ">= 2.0" do
+RSpec.describe "bundle show", :bundler => "< 3" do
context "with a standard Gemfile" do
before :each do
install_gemfile <<-G
@@ -30,48 +30,6 @@ RSpec.describe "bundle show", :bundler => "< 3", :ruby => ">= 2.0" do
expect(out).to eq(default_bundle_path("gems", "rails-2.3.2").to_s)
end
- context "when show command deprecation is enabled" do
- before { bundle "config major_deprecations yes" }
-
- it "prints path if gem exists in bundle" do
- bundle "show rails"
- expect(out).to eq(
- "[DEPRECATED FOR 3.0] use `bundle info rails` instead of `bundle show rails`\n" +
- default_bundle_path("gems", "rails-2.3.2").to_s
- )
- end
-
- it "prints the path to the running bundler" do
- bundle "show bundler"
- expect(out).to eq(
- "[DEPRECATED FOR 3.0] use `bundle info bundler` instead of `bundle show bundler`\n" +
- root.to_s
- )
- end
-
- it "prints path if gem exists in bundle (with --paths option)" do
- bundle "show rails --paths"
- expect(out).to eq(
- "[DEPRECATED FOR 3.0] use `bundle info rails --path` instead of `bundle show rails --paths`\n" +
- default_bundle_path("gems", "rails-2.3.2").to_s
- )
- end
-
- 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", "rails-2.3.2").to_s)
-
- out_lines = out.split("\n")
- expect(out_lines[0]).to eq("[DEPRECATED FOR 3.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)
- end
- end
-
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)
@@ -82,8 +40,8 @@ RSpec.describe "bundle show", :bundler => "< 3", :ruby => ">= 2.0" 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" do
@@ -93,13 +51,13 @@ RSpec.describe "bundle show", :bundler => "< 3", :ruby => ">= 2.0" do
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" 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.
@@ -110,17 +68,23 @@ RSpec.describe "bundle show", :bundler => "< 3", :ruby => ">= 2.0" do
it "prints summary of gems" do
bundle "show --verbose"
- loaded_bundler_spec = Bundler.load.specs["bundler"]
- expected = if !loaded_bundler_spec.empty?
- loaded_bundler_spec[0].homepage
- else
- "No website available."
- end
+ expect(out).to include <<~MSG
+ * actionmailer (2.3.2)
+ \tSummary: This is just a fake gem for testing
+ \tHomepage: http://example.com
+ \tStatus: Up to date
+ MSG
+ end
+
+ it "includes bundler in the summary of gems" do
+ bundle "show --verbose"
- expect(out).to include("* actionmailer (2.3.2)")
- expect(out).to include("\tSummary: This is just a fake gem for testing")
- expect(out).to include("\tHomepage: #{expected}")
- expect(out).to include("\tStatus: Up to date")
+ expect(out).to include <<~MSG
+ * bundler (#{Bundler::VERSION})
+ \tSummary: The best way to manage your application's dependencies
+ \tHomepage: https://bundler.io
+ \tStatus: Up to date
+ MSG
end
end
@@ -164,7 +128,7 @@ RSpec.describe "bundle show", :bundler => "< 3", :ruby => ">= 2.0" 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")}"
@@ -186,7 +150,7 @@ RSpec.describe "bundle show", :bundler => "< 3", :ruby => ">= 2.0" do
it "does not output git errors" do
bundle :show
- expect(err).to lack_errors
+ expect(err_without_deprecations).to be_empty
end
end
@@ -196,11 +160,24 @@ RSpec.describe "bundle show", :bundler => "< 3", :ruby => ">= 2.0" 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
@@ -211,7 +188,7 @@ RSpec.describe "bundle show", :bundler => "< 3", :ruby => ">= 2.0" 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
@@ -242,3 +219,7 @@ RSpec.describe "bundle show", :bundler => "< 3", :ruby => ">= 2.0" 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 9b8aec9fcb..61a5a1d1f1 100644
--- a/spec/commands/update_spec.rb
+++ b/spec/commands/update_spec.rb
@@ -72,18 +72,18 @@ RSpec.describe "bundle update" do
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
@@ -285,22 +285,22 @@ RSpec.describe "bundle update" do
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 => "< 3" do
- bundle! "config --global frozen 1"
+ bundle! "config set --global frozen 1"
bundle "update", :all => true
- 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)
+ 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 => "3" do
- bundle! "config --global deployment true"
+ 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 --delete deployment`./m)
+ and match(/freeze \nby running `bundle config unset deployment`./m)
end
end
@@ -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
@@ -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}"
@@ -530,6 +563,41 @@ RSpec.describe "bundle update in more complicated situations" do
expect(the_bundle).to include_gem "a 1.1"
end
end
+
+ context "when the dependency is for a different platform" do
+ before do
+ build_repo4 do
+ build_gem("a", "0.9") {|s| s.platform = "java" }
+ build_gem("a", "1.1") {|s| s.platform = "java" }
+ end
+
+ gemfile <<-G
+ source "file://#{gem_repo4}"
+ gem "a", platform: :jruby
+ G
+
+ lockfile <<-L
+ GEM
+ remote: file://#{gem_repo4}
+ specs:
+ a (0.9-java)
+
+ PLATFORMS
+ java
+
+ DEPENDENCIES
+ a
+ L
+
+ simulate_platform linux
+ end
+
+ it "is not updated because it is not actually included in the bundle" do
+ bundle! "update a"
+ expect(last_command.stdboth).to include "Bundler attempted to update a but it was not considered because it is for a different platform from the current one"
+ expect(the_bundle).to_not include_gem "a"
+ end
+ end
end
RSpec.describe "bundle update without a Gemfile.lock" do
@@ -565,13 +633,13 @@ RSpec.describe "bundle update when a gem depends on a newer version of bundler"
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 => "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
@@ -598,7 +666,7 @@ RSpec.describe "bundle update" do
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
@@ -639,7 +707,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 +787,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 +877,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"
@@ -938,7 +1015,7 @@ RSpec.describe "bundle update conservative" do
it "raises if too many flags are provided" do
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/viz_spec.rb b/spec/commands/viz_spec.rb
index 61414956a9..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 => "< 3", :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 f04d3fe654..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 => "< 3" 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 => "< 3" do
end
end
- describe "when multiple gems contain the same exe", :bundler => "< 3" 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 => "< 3" 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..fad6d68010 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,8 @@ 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"
install_gemfile! <<-G
source "file://#{gem_repo2}"
gem "rails", "3.0"
@@ -153,7 +152,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 +166,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 ec72ff69fc..9569b4d54c 100644
--- a/spec/install/deploy_spec.rb
+++ b/spec/install/deploy_spec.rb
@@ -11,26 +11,26 @@ RSpec.describe "install with --deployment or --frozen" 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"
@@ -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,7 +162,7 @@ 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 => "< 3" do
@@ -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.bundler_major_version < 3
- "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 b4cdf13857..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.
@@ -121,5 +121,24 @@ In Gemfile:
activesupport
M
end
+
+ context "because the downloaded .gem was invalid" do
+ before do
+ build_repo4 do
+ build_gem "a"
+ end
+
+ gem_repo4("gems", "a-1.0.gem").open("w") {|f| f << "<html></html>" }
+ end
+
+ it "removes the downloaded .gem" do
+ install_gemfile <<-G
+ source "file:#{gem_repo4}"
+ gem "a"
+ G
+
+ expect(default_bundle_path("cache", "a-1.0.gem")).not_to exist
+ end
+ end
end
end
diff --git a/spec/install/gemfile/gemspec_spec.rb b/spec/install/gemfile/gemspec_spec.rb
index b2503eaba7..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 => "< 3" 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 => "3" 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 a4af90318f..8ca22f1d87 100644
--- a/spec/install/gemfile/git_spec.rb
+++ b/spec/install/gemfile/git_spec.rb
@@ -32,7 +32,7 @@ RSpec.describe "bundle install with git sources" do
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
@@ -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(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(out).to match(/cannot use local override/i)
+
+ 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
@@ -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
@@ -922,12 +938,11 @@ RSpec.describe "bundle install with git sources" do
build_git "foo", :path => lib_path("nested")
build_git "bar", :path => lib_path("nested")
- gemfile <<-G
+ install_gemfile <<-G
gem "foo", :git => "#{lib_path("nested")}"
gem "bar", :git => "#{lib_path("nested")}"
G
- bundle "install"
expect(File.read(bundled_app("Gemfile.lock")).scan("GIT").size).to eq(1)
end
@@ -1010,14 +1025,12 @@ RSpec.describe "bundle install with git sources" do
install_gemfile <<-G
gem "foo", :git => "file://#{lib_path("foo-1.0")}", :ref => "#{revision}"
G
- bundle "install"
expect(out).to_not match(/Revision.*does not exist/)
install_gemfile <<-G
gem "foo", :git => "file://#{lib_path("foo-1.0")}", :ref => "deadbeef"
G
- bundle "install"
- 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
@@ -1054,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
@@ -1074,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
@@ -1094,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
@@ -1150,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")
@@ -1184,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:
@@ -1193,7 +1206,48 @@ 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"
+ s.write "Rakefile", <<-RUBY
+ task :default do
+ path = File.expand_path("../lib", __FILE__)
+ FileUtils.mkdir_p(path)
+ cur_time = Time.now.to_f.to_s
+ File.open("\#{path}/foo.rb", "w") do |f|
+ f.puts "FOO = \#{cur_time}"
+ end
+ end
+ RUBY
+ end
+
+ install_gemfile <<-G
+ source "file://#{gem_repo1}"
+ gem "foo", :git => "#{lib_path("foo-1.0")}"
+ G
+
+ run! <<-R
+ require 'foo'
+ puts FOO
+ R
+
+ installed_time = out
+ expect(installed_time).to match(/\A\d+\.\d+\z/)
+
+ install_gemfile <<-G
+ source "file://#{gem_repo1}"
+ gem "foo", :git => "#{lib_path("foo-1.0")}"
+ G
+
+ run! <<-R
+ require 'foo'
+ puts FOO
+ R
+ expect(out).to eq(installed_time)
+ end
+
+ 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"
@@ -1211,6 +1265,7 @@ In Gemfile:
install_gemfile <<-G
source "file://#{gem_repo1}"
+ gem "rack", "0.9.1"
gem "foo", :git => "#{lib_path("foo-1.0")}"
G
@@ -1224,6 +1279,7 @@ In Gemfile:
install_gemfile <<-G
source "file://#{gem_repo1}"
+ gem "rack", "1.0.0"
gem "foo", :git => "#{lib_path("foo-1.0")}"
G
@@ -1233,6 +1289,60 @@ In Gemfile:
R
expect(out).to eq(installed_time)
end
+
+ it "does reinstall the extension when changing refs", :ruby_repo do
+ build_git "foo" do |s|
+ s.add_dependency "rake"
+ s.extensions << "Rakefile"
+ s.write "Rakefile", <<-RUBY
+ task :default do
+ path = File.expand_path("../lib", __FILE__)
+ FileUtils.mkdir_p(path)
+ cur_time = Time.now.to_f.to_s
+ File.open("\#{path}/foo.rb", "w") do |f|
+ f.puts "FOO = \#{cur_time}"
+ end
+ end
+ RUBY
+ end
+
+ install_gemfile <<-G
+ source "file://#{gem_repo1}"
+ gem "foo", :git => "#{lib_path("foo-1.0")}"
+ G
+
+ run! <<-R
+ require 'foo'
+ puts FOO
+ R
+
+ update_git("foo", :branch => "branch2")
+
+ installed_time = out
+ expect(installed_time).to match(/\A\d+\.\d+\z/)
+
+ install_gemfile <<-G
+ source "file://#{gem_repo1}"
+ gem "foo", :git => "#{lib_path("foo-1.0")}", :branch => "branch2"
+ G
+
+ run! <<-R
+ require 'foo'
+ puts FOO
+ R
+ expect(out).not_to eq(installed_time)
+
+ installed_time = out
+
+ update_git("foo")
+ bundle! "update foo"
+
+ run! <<-R
+ require 'foo'
+ puts FOO
+ R
+ expect(out).not_to eq(installed_time)
+ end
end
it "ignores git environment variables" do
@@ -1270,7 +1380,7 @@ In Gemfile:
with_path_as("") do
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
@@ -1292,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
@@ -1326,9 +1436,8 @@ In Gemfile:
end
G
- bundle :install
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
@@ -1342,9 +1451,8 @@ In Gemfile:
end
G
- bundle :install
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 45395e606f..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
@@ -207,7 +207,7 @@ RSpec.describe "bundle install with groups" 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 449327d344..e80764070c 100644
--- a/spec/install/gemfile/path_spec.rb
+++ b/spec/install/gemfile/path_spec.rb
@@ -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
@@ -484,6 +484,68 @@ RSpec.describe "bundle install with explicit source paths" do
expect(the_bundle).to include_gems "rack 1.0.0"
end
+
+ it "keeps using the same version if it's compatible" do
+ build_lib "foo", "1.0", :path => lib_path("foo") do |s|
+ s.add_dependency "rack", "0.9.1"
+ end
+
+ bundle "install"
+
+ expect(the_bundle).to include_gems "rack 0.9.1"
+
+ lockfile_should_be <<-G
+ PATH
+ remote: #{lib_path("foo")}
+ specs:
+ foo (1.0)
+ rack (= 0.9.1)
+
+ GEM
+ remote: #{URI.parse("file://#{gem_repo1}/")}
+ specs:
+ rack (0.9.1)
+
+ PLATFORMS
+ #{lockfile_platforms}
+
+ DEPENDENCIES
+ foo!
+
+ BUNDLED WITH
+ #{Bundler::VERSION}
+ G
+
+ build_lib "foo", "1.0", :path => lib_path("foo") do |s|
+ s.add_dependency "rack"
+ end
+
+ bundle "install"
+
+ lockfile_should_be <<-G
+ PATH
+ remote: #{lib_path("foo")}
+ specs:
+ foo (1.0)
+ rack
+
+ GEM
+ remote: #{URI.parse("file://#{gem_repo1}/")}
+ specs:
+ rack (0.9.1)
+
+ PLATFORMS
+ #{lockfile_platforms}
+
+ DEPENDENCIES
+ foo!
+
+ BUNDLED WITH
+ #{Bundler::VERSION}
+ G
+
+ expect(the_bundle).to include_gems "rack 0.9.1"
+ end
end
describe "switching sources" do
@@ -575,7 +637,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 +657,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 +677,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 b5dbc41a33..891f766cc0 100644
--- a/spec/install/gemfile/platform_spec.rb
+++ b/spec/install/gemfile/platform_spec.rb
@@ -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 efe6ccce7f..da364a51bb 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 => "< 3" 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 => "< 3" 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 => "< 3" 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 => "< 3" 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,20 +464,20 @@ 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
context "when a single source contains multiple locked gems" do
before do
- # 1. With these gems,
+ # With these gems,
build_repo4 do
build_gem "foo", "0.1"
build_gem "bar", "0.1"
end
- # 2. Installing this gemfile will produce...
+ # Installing this gemfile...
gemfile <<-G
source 'file://#{gem_repo1}'
gem 'rack'
@@ -477,28 +485,9 @@ RSpec.describe "bundle install with gems on multiple sources" do
gem 'bar', '~> 0.1', :source => 'file://#{gem_repo4}'
G
- # 3. this lockfile.
- lockfile <<-L
- GEM
- remote: file:/Users/andre/src/bundler/bundler/tmp/gems/remote1/
- remote: file:/Users/andre/src/bundler/bundler/tmp/gems/remote4/
- specs:
- bar (0.1)
- foo (0.1)
- rack (1.0.0)
-
- PLATFORMS
- ruby
-
- DEPENDENCIES
- bar (~> 0.1)!
- foo (~> 0.1)!
- rack
- L
-
bundle! :install, forgotten_command_line_options(:path => "../gems/system")
- # 4. Then we add some new versions...
+ # And then we add some new versions...
update_repo4 do
build_gem "foo", "0.2"
build_gem "bar", "0.3"
@@ -506,7 +495,7 @@ RSpec.describe "bundle install with gems on multiple sources" do
end
it "allows them to be unlocked separately" do
- # 5. and install this gemfile, updating only foo.
+ # And install this gemfile, updating only foo.
install_gemfile <<-G
source 'file://#{gem_repo1}'
gem 'rack'
@@ -514,7 +503,7 @@ RSpec.describe "bundle install with gems on multiple sources" do
gem 'bar', '~> 0.1', :source => 'file://#{gem_repo4}'
G
- # 6. Which should update foo to 0.2, but not the (locked) bar 0.1
+ # It should update foo to 0.2, but not the (locked) bar 0.1
expect(the_bundle).to include_gems("foo 0.2", "bar 0.1")
end
end
@@ -544,7 +533,7 @@ RSpec.describe "bundle install with gems on multiple sources" do
end
it "does not re-resolve" do
- bundle :install, :verbose => true
+ bundle! :install, :verbose => true
expect(out).to include("using resolution from the lockfile")
expect(out).not_to include("re-resolving dependencies")
end
@@ -570,7 +559,7 @@ RSpec.describe "bundle install with gems on multiple sources" do
end
# When this gemfile is installed...
- gemfile <<-G
+ install_gemfile <<-G
source "#{source_uri}"
source "#{second_uri}" do
@@ -580,26 +569,6 @@ RSpec.describe "bundle install with gems on multiple sources" do
gem "rack-obama"
G
- # It creates this lockfile.
- lockfile <<-L
- GEM
- remote: #{source_uri}/
- remote: #{second_uri}/
- specs:
- rack (2.0.1.1.forked)
- rack-obama (1.0)
- rack
- thor (0.19.1.1.forked)
-
- PLATFORMS
- ruby
-
- DEPENDENCIES
- rack (= 2.0.1.1.forked)!
- rack-obama
- thor!
- L
-
# Then we change the Gemfile by adding a version to thor
gemfile <<-G
source "#{source_uri}"
@@ -616,4 +585,63 @@ RSpec.describe "bundle install with gems on multiple sources" do
end
end
end
+
+ 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|
+ s.add_dependency "rack"
+ end
+ build_gem "rack"
+ end
+
+ install_gemfile <<-G
+ source "file://localhost#{gem_repo4}"
+ source "file://localhost#{gem_repo1}" do
+ gem "thin"
+ end
+ gem "depends_on_rack"
+ G
+ expect(last_command).to be_failure
+ 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
+ You must add this gem to the source block for the source you wish it to be installed from.
+ EOS
+ expect(the_bundle).not_to be_locked
+ end
+ end
end
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 123056fb02..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
@@ -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
@@ -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 86b4f59b7a..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
@@ -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 736f418ec7..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
@@ -264,7 +264,7 @@ RSpec.describe "bundle flex_install" do
rack (1.0.0)
PLATFORMS
- ruby
+ #{lockfile_platforms}
DEPENDENCIES
rack
@@ -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 01c03ac793..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
@@ -142,17 +162,16 @@ RSpec.describe "bundle install with install-time dependencies" do
expect(out).to_not include("Gem::InstallError: require_ruby requires Ruby version > 9000")
nice_error = strip_whitespace(<<-E).strip
- Bundler could not find compatible versions for gem "ruby\0":
+ Bundler found conflicting requirements for the Ruby\0 version:
In Gemfile:
- ruby\0 (#{error_message_requirement})
+ Ruby\0 (#{error_message_requirement})
require_ruby was resolved to 1.0, which depends on
- ruby\0 (> 9000)
+ Ruby\0 (> 9000)
- Could not find gem 'ruby\0 (> 9000)', which is required by gem 'require_ruby', in any of the relevant sources:
- the local ruby installation
+ 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
@@ -188,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 fa7a3bdc27..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,8 +193,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 --path to change the location of the standalone bundle", :bundler => "< 3" do
@@ -210,7 +210,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 --path to change the location of the standalone bundle", :bundler => "3" do
@@ -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
diff --git a/spec/install/gems/sudo_spec.rb b/spec/install/gems/sudo_spec.rb
index 1781451c98..0d2d6b7eb4 100644
--- a/spec/install/gems/sudo_spec.rb
+++ b/spec/install/gems/sudo_spec.rb
@@ -3,13 +3,20 @@
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
+ let(:subdir) do
+ system_gem_path("cache")
+ end
+
before do
- bundle! "config path.system true"
- subdir = system_gem_path("cache")
+ bundle! "config set path.system true"
subdir.mkpath
sudo "chmod u-w #{subdir}"
end
+ after do
+ sudo "chmod u+w #{subdir}"
+ end
+
it "installs" do
install_gemfile <<-G
source "file://#{gem_repo1}"
@@ -25,7 +32,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,8 +59,6 @@ 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_path = tmp("owned_by_root")
FileUtils.mkdir_p bundle_path
sudo "chown -R root #{bundle_path}"
@@ -64,14 +69,12 @@ RSpec.describe "when using sudo", :sudo => true do
gem "rack", '1.0'
G
- expect(bundle_path.join("gems/rack-1.0.0")).to exist
- expect(bundle_path.join("gems/rack-1.0.0").stat.uid).to eq(0)
+ expect(bundle_path.join(Bundler.ruby_scope, "gems/rack-1.0.0")).to exist
+ expect(bundle_path.join(Bundler.ruby_scope, "gems/rack-1.0.0").stat.uid).to eq(0)
expect(the_bundle).to include_gems "rack 1.0"
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
-
root_path = tmp("owned_by_root")
FileUtils.mkdir_p root_path
sudo "chown -R root #{root_path}"
@@ -83,12 +86,12 @@ RSpec.describe "when using sudo", :sudo => true do
gem "rack", '1.0'
G
- expect(bundle_path.join("gems/rack-1.0.0")).to exist
- expect(bundle_path.join("gems/rack-1.0.0").stat.uid).to eq(0)
+ expect(bundle_path.join(Bundler.ruby_scope, "gems/rack-1.0.0")).to exist
+ expect(bundle_path.join(Bundler.ruby_scope, "gems/rack-1.0.0").stat.uid).to eq(0)
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"
@@ -105,6 +108,10 @@ RSpec.describe "when using sudo", :sudo => true do
sudo "chmod ugo-w #{default_bundle_path}"
end
+ after do
+ sudo "chmod ugo+w #{default_bundle_path}"
+ end
+
it "installs" do
install_gemfile <<-G
source "file://#{gem_repo1}"
@@ -133,7 +140,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}"
@@ -146,6 +153,8 @@ RSpec.describe "when using sudo", :sudo => true do
bundle :install, :env => { "GEM_HOME" => gem_home.to_s, "GEM_PATH" => nil }
expect(gem_home.join("bin/rackup")).to exist
expect(the_bundle).to include_gems "rack 1.0", :env => { "GEM_HOME" => gem_home.to_s, "GEM_PATH" => nil }
+
+ sudo "rm -rf #{tmp("sudo_gem_home")}"
end
end
@@ -158,20 +167,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 666707b295..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
@@ -48,11 +47,11 @@ RSpec.describe "bundle install" do
end
it "does not hang when gemspec has incompatible encoding" do
- create_file "foo.gemspec", <<-G
+ create_file("foo.gemspec", <<-G)
Gem::Specification.new do |gem|
gem.name = "pry-byebug"
gem.version = "3.4.2"
- gem.author = "David Rodriguez"
+ gem.author = "David Rodríguez"
gem.summary = "Good stuff"
end
G
@@ -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/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 94f38c9290..b2a3375342 100644
--- a/spec/install/path_spec.rb
+++ b/spec/install/path_spec.rb
@@ -37,7 +37,7 @@ RSpec.describe "bundle install" 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
@@ -51,7 +51,7 @@ 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 => "< 3" do
Dir.chdir(bundled_app.parent) do
@@ -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,71 +113,36 @@ 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 => "3" do
- it "installs gems to ." do
- set_bundle_path(type, ".")
- bundle! "config --global disable_shared_gems true"
+ it "installs gems to ." do
+ set_bundle_path(type, ".")
+ bundle! "config set --global disable_shared_gems true"
- bundle! :install
-
- paths_to_exist = %w[cache/rack-1.0.0.gem gems/rack-1.0.0 specifications/rack-1.0.0.gemspec].map {|path| bundled_app(Bundler.ruby_scope, path) }
- expect(paths_to_exist).to all exist
- expect(the_bundle).to include_gems "rack 1.0.0"
- end
-
- it "installs gems to the path" do
- set_bundle_path(type, bundled_app("vendor").to_s)
-
- bundle! :install
+ bundle! :install
- expect(bundled_app("vendor", Bundler.ruby_scope, "gems/rack-1.0.0")).to be_directory
- expect(the_bundle).to include_gems "rack 1.0.0"
- end
+ paths_to_exist = %w[cache/rack-1.0.0.gem gems/rack-1.0.0 specifications/rack-1.0.0.gemspec].map {|path| bundled_app(Bundler.ruby_scope, path) }
+ expect(paths_to_exist).to all exist
+ expect(the_bundle).to include_gems "rack 1.0.0"
+ end
- it "installs gems to the path relative to root when relative" do
- set_bundle_path(type, "vendor")
+ it "installs gems to the path" do
+ set_bundle_path(type, bundled_app("vendor").to_s)
- FileUtils.mkdir_p bundled_app("lol")
- Dir.chdir(bundled_app("lol")) do
- bundle! :install
- end
+ bundle! :install
- expect(bundled_app("vendor", Bundler.ruby_scope, "gems/rack-1.0.0")).to be_directory
- expect(the_bundle).to include_gems "rack 1.0.0"
- end
+ expect(bundled_app("vendor", Bundler.ruby_scope, "gems/rack-1.0.0")).to be_directory
+ expect(the_bundle).to include_gems "rack 1.0.0"
end
- 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"
+ it "installs gems to the path relative to root when relative" do
+ set_bundle_path(type, "vendor")
+ FileUtils.mkdir_p bundled_app("lol")
+ Dir.chdir(bundled_app("lol")) do
bundle! :install
-
- expect([bundled_app("cache/rack-1.0.0.gem"), bundled_app("gems/rack-1.0.0"), bundled_app("specifications/rack-1.0.0.gemspec")]).to all exist
- expect(the_bundle).to include_gems "rack 1.0.0"
- end
-
- it "installs gems to BUNDLE_PATH with #{type}" do
- set_bundle_path(type, bundled_app("vendor").to_s)
-
- bundle :install
-
- expect(bundled_app("vendor/gems/rack-1.0.0")).to be_directory
- expect(the_bundle).to include_gems "rack 1.0.0"
end
- it "installs gems to BUNDLE_PATH relative to root when relative" do
- set_bundle_path(type, "vendor")
-
- FileUtils.mkdir_p bundled_app("lol")
- Dir.chdir(bundled_app("lol")) do
- bundle :install
- end
-
- expect(bundled_app("vendor/gems/rack-1.0.0")).to be_directory
- expect(the_bundle).to include_gems "rack 1.0.0"
- end
+ expect(bundled_app("vendor", Bundler.ruby_scope, "gems/rack-1.0.0")).to be_directory
+ expect(the_bundle).to include_gems "rack 1.0.0"
end
end
end
@@ -207,7 +172,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 +215,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/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 f9caeed58a..2a0cdc9473 100644
--- a/spec/install/redownload_spec.rb
+++ b/spec/install/redownload_spec.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-RSpec.describe "bundle install", :bundler => "< 3", :ruby => ">= 2.0" do
+RSpec.describe "bundle install" do
before :each do
gemfile <<-G
source "file://#{gem_repo1}"
@@ -8,8 +8,6 @@ RSpec.describe "bundle install", :bundler => "< 3", :ruby => ">= 2.0" do
G
end
- before { bundle "config major_deprecations yes" }
-
shared_examples_for "an option to force redownloading gems" do
it "re-installs installed gems" do
rack_lib = default_bundle_path("gems/rack-1.0.0/lib/rack.rb")
@@ -58,19 +56,19 @@ RSpec.describe "bundle install", :bundler => "< 3", :ruby => ">= 2.0" 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" do
bundle! "install --force"
- expect(out).to include "[DEPRECATED FOR 3.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" do
bundle! "install --no-color --force"
- expect(out).to include "[DEPRECATED FOR 3.0] The `--force` option has been renamed to `--redownload`"
+ expect(err).to include "[DEPRECATED] The `--force` option has been renamed to `--redownload`"
end
end
@@ -81,12 +79,12 @@ RSpec.describe "bundle install", :bundler => "< 3", :ruby => ">= 2.0" 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 e89c5078d9..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 => "< 3" 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 ea454fe912..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 => "3" do
+RSpec.describe "the lockfile format" do
include Bundler::GemHelpers
before { ENV["BUNDLER_SPEC_IGNORE_COMPATIBILITY_GUARD"] = "TRUE" }
@@ -154,7 +154,10 @@ RSpec.describe "the lockfile format", :bundler => "3" 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 => "3" 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 => "3" 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 => "3" do
rack
BUNDLED WITH
- 9999999.0.0
+ #{older_major}
L
install_gemfile <<-G
@@ -223,98 +230,59 @@ RSpec.describe "the lockfile format", :bundler => "3" 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 => "3" 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 => "3" 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
@@ -464,15 +439,15 @@ RSpec.describe "the lockfile format", :bundler => "3" 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 => "3" 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 => "3" 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 => "3" do
specs:
foo (1.0)
+ GEM
+ specs:
+
PLATFORMS
#{lockfile_platforms}
@@ -592,9 +567,6 @@ RSpec.describe "the lockfile format", :bundler => "3" 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 => "3" do
specs:
foo (1.0)
+ GEM
+ specs:
+
PLATFORMS
#{lockfile_platforms}
@@ -621,14 +596,14 @@ RSpec.describe "the lockfile format", :bundler => "3" 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 => "3" 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 => "3" 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 => "3" 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 => "3" 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 => "3" 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 => "3" 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 => "3" 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 => "3" 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 => "3" 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 => "3" 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 => "3" 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 => "3" 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 => "3" 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 => "3" 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 => "3" 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 => "3" 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 => "3" 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 => "3" 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 => "3" 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/bundle_ruby_spec.rb b/spec/other/bundle_ruby_spec.rb
deleted file mode 100644
index fbca31d0a0..0000000000
--- a/spec/other/bundle_ruby_spec.rb
+++ /dev/null
@@ -1,155 +0,0 @@
-# frozen_string_literal: true
-
-RSpec.describe "bundle_ruby", :bundler => "< 3" do
- context "without patchlevel" do
- it "returns the ruby version" do
- gemfile <<-G
- source "file://#{gem_repo1}"
- ruby "1.9.3", :engine => 'ruby', :engine_version => '1.9.3'
-
- gem "foo"
- G
-
- bundle_ruby
-
- expect(out).to include("ruby 1.9.3")
- end
-
- it "engine defaults to MRI" do
- gemfile <<-G
- source "file://#{gem_repo1}"
- ruby "1.9.3"
-
- gem "foo"
- G
-
- bundle_ruby
-
- expect(out).to include("ruby 1.9.3")
- end
-
- it "handles jruby" do
- gemfile <<-G
- source "file://#{gem_repo1}"
- ruby "1.8.7", :engine => 'jruby', :engine_version => '1.6.5'
-
- gem "foo"
- G
-
- bundle_ruby
-
- expect(out).to include("ruby 1.8.7 (jruby 1.6.5)")
- end
-
- it "handles rbx" do
- gemfile <<-G
- source "file://#{gem_repo1}"
- ruby "1.8.7", :engine => 'rbx', :engine_version => '1.2.4'
-
- gem "foo"
- G
-
- bundle_ruby
-
- expect(out).to include("ruby 1.8.7 (rbx 1.2.4)")
- end
-
- it "handles truffleruby", :rubygems => ">= 2.1.0" do
- gemfile <<-G
- source "file://#{gem_repo1}"
- ruby "2.5.1", :engine => 'truffleruby', :engine_version => '1.0.0-rc6'
-
- gem "foo"
- G
-
- bundle_ruby
-
- expect(out).to include("ruby 2.5.1 (truffleruby 1.0.0-rc6)")
- end
-
- it "raises an error if engine is used but engine version is not" do
- gemfile <<-G
- source "file://#{gem_repo1}"
- ruby "1.8.7", :engine => 'rbx'
-
- gem "foo"
- G
-
- bundle_ruby
- expect(exitstatus).not_to eq(0) if exitstatus
-
- bundle_ruby
- expect(out).to include("Please define :engine_version")
- end
-
- it "raises an error if engine_version is used but engine is not" do
- gemfile <<-G
- source "file://#{gem_repo1}"
- ruby "1.8.7", :engine_version => '1.2.4'
-
- gem "foo"
- G
-
- bundle_ruby
- expect(exitstatus).not_to eq(0) if exitstatus
-
- bundle_ruby
- expect(out).to include("Please define :engine")
- end
-
- it "raises an error if engine version doesn't match ruby version for MRI" do
- gemfile <<-G
- source "file://#{gem_repo1}"
- ruby "1.8.7", :engine => 'ruby', :engine_version => '1.2.4'
-
- gem "foo"
- G
-
- bundle_ruby
- expect(exitstatus).not_to eq(0) if exitstatus
-
- bundle_ruby
- expect(out).to include("ruby_version must match the :engine_version for MRI")
- end
-
- it "should print if no ruby version is specified" do
- gemfile <<-G
- source "file://#{gem_repo1}"
-
- gem "foo"
- G
-
- bundle_ruby
-
- expect(out).to include("No ruby version specified")
- end
- end
-
- context "when using patchlevel" do
- it "returns the ruby version" do
- gemfile <<-G
- source "file://#{gem_repo1}"
- ruby "1.9.3", :patchlevel => '429', :engine => 'ruby', :engine_version => '1.9.3'
-
- gem "foo"
- G
-
- bundle_ruby
-
- expect(out).to include("ruby 1.9.3p429")
- end
-
- it "handles an engine" do
- gemfile <<-G
- source "file://#{gem_repo1}"
- ruby "1.9.3", :patchlevel => '392', :engine => 'jruby', :engine_version => '1.7.4'
-
- gem "foo"
- G
-
- bundle_ruby
-
- expect(out).to include("ruby 1.9.3p392 (jruby 1.7.4)")
- end
- 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 0a3c65a1e5..fd12c645a8 100644
--- a/spec/other/major_deprecation_spec.rb
+++ b/spec/other/major_deprecation_spec.rb
@@ -1,126 +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 "bundle_ruby" do
- it "prints a deprecation" do
- bundle_ruby
- warnings.gsub! "\nruby #{RUBY_VERSION}", ""
- expect(warnings).to have_major_deprecation "the bundle_ruby executable has been removed in favor of `bundle platform --ruby`"
+ pending "is removed and shows a helpful error message about it", :bundler => "3"
end
- end
- describe "Bundler" do
- describe ".clean_env" do
- it "is deprecated in favor of .original_env" do
- source = "Bundler.clean_env"
+ 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 weird edge cases, use `.original_env` instead"
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
+
+ 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 "when bundle is run" do
+ 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}"
@@ -128,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}"
@@ -173,22 +338,30 @@ 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
@@ -198,27 +371,27 @@ RSpec.describe "major deprecations", :bundler => "<= 2" do
end
context "with github gems" do
- it "upgrades to https on request" do
- Bundler.settings.temporary "github.https" => true
+ it "warns about removal", :bundler => "2" do
msg = <<-EOS
-The :github git source is deprecated, and will be removed in Bundler 3.0. Change any "reponame" :github sources to "username/reponame". Add this code to the top of your Gemfile to ensure it continues to work:
+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
expect(Bundler::SharedHelpers).to receive(:major_deprecation).with(3, msg)
- expect(Bundler::SharedHelpers).to receive(:major_deprecation).with(3, "The `github.https` setting will be removed")
subject.gem("sparks", :github => "indirect/sparks")
github_uri = "https://github.com/indirect/sparks.git"
expect(subject.dependencies.first.source.uri).to eq(github_uri)
end
+
+ pending "should fail with a helpful error", :bundler => "3"
end
context "with bitbucket gems" do
- it "warns about removal" do
+ it "warns about removal", :bundler => "2" do
allow(Bundler.ui).to receive(:deprecate)
msg = <<-EOS
-The :bitbucket git source is deprecated, and will be removed in Bundler 3.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("/")
@@ -230,42 +403,137 @@ The :bitbucket git source is deprecated, and will be removed in Bundler 3.0. Add
expect(Bundler::SharedHelpers).to receive(:major_deprecation).with(3, msg)
subject.gem("not-really-a-gem", :bitbucket => "mcorp/flatlab-rails")
end
+
+ pending "should fail with a helpful error", :bundler => "3"
end
context "with gist gems" do
- it "warns about removal" do
+ it "warns about removal", :bundler => "2" do
allow(Bundler.ui).to receive(:deprecate)
- msg = "The :gist git source is deprecated, and will be removed " \
- "in Bundler 3.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"
+ 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
+
+ pending "should fail with a helpful error", :bundler => "3"
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
- bundle! :show
+ 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
+
+ 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
+
+ context "with a gem argument" do
+ before do
+ bundle! "show rack"
+ end
+
+ 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
+
+ pending "fails with a helpful message", :bundler => "3"
+ end
+
+ context "with the --paths option" do
+ before do
+ bundle "show --paths"
+ end
+
+ it "prints a deprecation warning recommending `bundle list`", :bundler => "2" do
+ expect(deprecations).to include("use `bundle list` instead of `bundle show --paths`")
+ end
+
+ pending "fails with a helpful message", :bundler => "3"
+ end
- warnings.gsub!(/gems included.*?\[DEPRECATED/im, "[DEPRECATED")
+ context "with a gem argument and the --paths option" do
+ before do
+ bundle "show rack --paths"
+ end
+
+ it "prints deprecation warning recommending `bundle info`", :bundler => "2" do
+ expect(deprecations).to include("use `bundle info rack --path` instead of `bundle show rack --paths`")
+ end
- expect(warnings).to have_major_deprecation a_string_including("use `bundle list` instead of `bundle show`")
+ pending "fails with a helpful message", :bundler => "3"
end
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 2196cd4e18..9c62904286 100644
--- a/spec/other/platform_spec.rb
+++ b/spec/other/platform_spec.rb
@@ -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
@@ -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
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 e70503fb18..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
@@ -122,6 +134,24 @@ RSpec.describe "bundler plugin install" do
expect(out).to include("Installed plugin foo")
plugin_should_be_installed("foo")
end
+
+ it "installs form a local git source" do
+ build_git "foo" do |s|
+ s.write "plugins.rb"
+ end
+
+ bundle "plugin install foo --local_git #{lib_path("foo-1.0")}"
+
+ expect(out).to include("Installed plugin foo")
+ plugin_should_be_installed("foo")
+ end
+
+ it "raises an error when both git and local git sources are specified" 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(err).to eq("Remote and local plugin git sources can't be both specified")
+ end
end
context "Gemfile eval" do
@@ -147,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
new file mode 100644
index 0000000000..7dc9d10c4b
--- /dev/null
+++ b/spec/plugins/list_spec.rb
@@ -0,0 +1,60 @@
+# frozen_string_literal: true
+
+RSpec.describe "bundler plugin list" do
+ before do
+ build_repo2 do
+ build_plugin "foo" do |s|
+ s.write "plugins.rb", <<-RUBY
+ class Foo < Bundler::Plugin::API
+ command "shout"
+
+ def exec(command, args)
+ puts "Foo shout"
+ end
+ end
+ RUBY
+ end
+ build_plugin "bar" do |s|
+ s.write "plugins.rb", <<-RUBY
+ class Bar < Bundler::Plugin::API
+ command "scream"
+
+ def exec(command, args)
+ puts "Bar scream"
+ end
+ end
+ RUBY
+ end
+ end
+ end
+
+ context "no plugins installed" do
+ it "shows proper no plugins installed message" do
+ bundle "plugin list"
+
+ expect(out).to include("No plugins installed")
+ end
+ end
+
+ context "single plugin installed" do
+ it "shows plugin name with commands list" do
+ bundle "plugin install foo --source file://#{gem_repo2}"
+ plugin_should_be_installed("foo")
+ bundle "plugin list"
+
+ expected_output = "foo\n-----\n shout"
+ expect(out).to include(expected_output)
+ end
+ end
+
+ context "multiple plugins installed" do
+ it "shows plugin names with commands list" do
+ bundle "plugin install foo bar --source file://#{gem_repo2}"
+ plugin_should_be_installed("foo", "bar")
+ bundle "plugin list"
+
+ 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 d9a3cd2b92..bc076c06bf 100644
--- a/spec/plugins/source/example_spec.rb
+++ b/spec/plugins/source/example_spec.rb
@@ -96,16 +96,16 @@ RSpec.describe "real source plugins" 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}
@@ -391,10 +391,6 @@ RSpec.describe "real source plugins" do
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
new file mode 100644
index 0000000000..46eed8f18a
--- /dev/null
+++ b/spec/quality_es_spec.rb
@@ -0,0 +1,70 @@
+# frozen_string_literal: true
+
+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")
+end
+
+RSpec.describe "La biblioteca si misma" do
+ def check_for_expendable_words(filename)
+ failing_line_message = []
+ useless_words = %w[
+ básicamente
+ claramente
+ sólo
+ solamente
+ obvio
+ obviamente
+ fácil
+ fácilmente
+ sencillamente
+ simplemente
+ ]
+ pattern = /\b#{Regexp.union(useless_words)}\b/i
+
+ File.readlines(filename).each_with_index do |line, number|
+ next unless word_found = pattern.match(line)
+ failing_line_message << "#{filename}:#{number.succ} contiene '#{word_found}'. Esta palabra tiene un significado subjetivo y es mejor obviarla en textos técnicos."
+ end
+
+ failing_line_message unless failing_line_message.empty?
+ end
+
+ def check_for_specific_pronouns(filename)
+ failing_line_message = []
+ specific_pronouns = /\b(él|ella|ellos|ellas)\b/i
+
+ File.readlines(filename).each_with_index do |line, number|
+ next unless word_found = specific_pronouns.match(line)
+ failing_line_message << "#{filename}:#{number.succ} contiene '#{word_found}'. Use pronombres más genéricos en la documentación."
+ end
+
+ failing_line_message unless failing_line_message.empty?
+ end
+
+ it "mantiene la calidad de lenguaje de la documentación" do
+ included = /ronn/
+ error_messages = []
+ Dir.chdir(root) do
+ `git ls-files -z -- man`.split("\x0").each do |filename|
+ next unless filename =~ included
+ error_messages << check_for_expendable_words(filename)
+ error_messages << check_for_specific_pronouns(filename)
+ end
+ end
+ expect(error_messages.compact).to be_well_formed
+ end
+
+ 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
+ `git ls-files -z -- lib`.split("\x0").each do |filename|
+ next if filename =~ exempt
+ error_messages << check_for_expendable_words(filename)
+ error_messages << check_for_specific_pronouns(filename)
+ end
+ end
+ expect(error_messages.compact).to be_well_formed
+ end
+end
diff --git a/spec/quality_spec.rb b/spec/quality_spec.rb
index b24b42c542..b8f2d6ed1b 100644
--- a/spec/quality_spec.rb
+++ b/spec/quality_spec.rb
@@ -1,7 +1,9 @@
# frozen_string_literal: true
+require "set"
+
if defined?(Encoding) && Encoding.default_external.name != "UTF-8"
- # Poor man's ruby -E UTF-8, since it works on 1.8.7
+ # An approximation of ruby -E UTF-8, since it works on 1.8.7
Encoding.default_external = Encoding.find("UTF-8")
end
@@ -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,16 +169,12 @@ 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
inline
- lockfile_upgrade_warning
- lockfile_uses_separate_rubygems_sources
use_gem_version_promoter_for_major_updates
- viz_command
]
all_settings = Hash.new {|h, k| h[k] = [] }
@@ -235,14 +225,10 @@ RSpec.describe "The library itself" do
gem_command! :build, gemspec
end
- if Bundler.rubygems.provides?(">= 2.4")
- # there's no way aroudn this warning
- last_command.stderr.sub!(/^YAML safe loading.*/, "")
+ # there's no way around this warning
+ err.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}"
- end
+ expect(err).to be_empty, "bundler should build as a gem without warnings, but\n#{err}"
ensure
# clean up the .gem generated
FileUtils.rm("bundler-#{Bundler::VERSION}.gem")
@@ -250,6 +236,18 @@ RSpec.describe "The library itself" do
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[
@@ -276,4 +274,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 1db5c0f9d6..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
@@ -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..382485b8fc 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
@@ -30,7 +28,7 @@ RSpec.describe "fetching dependencies with a mirrored source", :realworld => tru
expect(the_bundle).to include_gems "weakling 0.0.3"
end
- private
+private
def setup_server
require_rack
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 b735cd3f77..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/)
@@ -40,11 +36,7 @@ RSpec.describe "parallel", :realworld => true, :sometimes => true do
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 04298699e6..57897f89b4 100644
--- a/spec/resolver/basic_spec.rb
+++ b/spec/resolver/basic_spec.rb
@@ -35,7 +35,7 @@ RSpec.describe "Resolving" do
should_resolve_as %w[berkshelf-2.0.7 chef-10.26 chef_app-1.0.0 json-1.7.7]
end
- it "prefers expicitly requested dependencies when resolving an index which would otherwise be ambiguous" do
+ it "prefers explicitly requested dependencies when resolving an index which would otherwise be ambiguous" do
@index = an_ambiguous_index
dep "a"
dep "b"
@@ -169,10 +169,10 @@ Bundler could not find compatible versions for gem "a":
s.required_ruby_version = "~> 2.0.0"
end
- gem "ruby\0", "1.8.7"
+ gem "Ruby\0", "1.8.7"
end
dep "foo"
- dep "ruby\0", "1.8.7"
+ dep "Ruby\0", "1.8.7"
deps = []
@deps.each do |d|
diff --git a/spec/runtime/executable_spec.rb b/spec/runtime/executable_spec.rb
index 7ba510a509..b2d5b6c03f 100644
--- a/spec/runtime/executable_spec.rb
+++ b/spec/runtime/executable_spec.rb
@@ -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..eb9db56ead 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
@@ -19,7 +19,7 @@ RSpec.describe "require 'bundler/gem_tasks'", :ruby_repo do
it "includes the relevant tasks" do
with_gem_path_as(Spec::Path.base_system_gems.to_s) do
- sys_exec "#{rake} -T"
+ sys_exec "#{rake} -T", "RUBYOPT" => "-I#{bundler_path}"
end
expect(err).to eq("")
@@ -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 18ca246199..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
@@ -112,6 +112,19 @@ RSpec.describe "bundler/inline#gemfile" do
expect(exitstatus).to be_zero if exitstatus
end
+ it "has an option for quiet installation" do
+ script <<-RUBY, :artifice => "endpoint"
+ require 'bundler'
+
+ gemfile(true, :quiet => true) do
+ source "https://notaserver.com"
+ gem "activesupport", :require => true
+ end
+ RUBY
+
+ expect(out).to be_empty
+ end
+
it "raises an exception if passed unknown arguments" do
script <<-RUBY
gemfile(true, :arglebargle => true) do
@@ -231,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"] = ""
@@ -261,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 f2f750a9ca..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
@@ -159,10 +161,6 @@ RSpec.describe "Bundler.setup" do
load_path = clean_load_path(out.split("\n"))
- unless Bundler.load.specs["bundler"].empty?
- load_path.delete_if {|path| path =~ /bundler/ }
- end
-
expect(load_path).to start_with(
"/gems/rails-2.3.2/lib",
"/gems/activeresource-2.3.2/lib",
@@ -170,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
@@ -366,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
@@ -392,7 +390,7 @@ RSpec.describe "Bundler.setup" do
end
R
- expect(err).to lack_errors
+ expect(err).to be_empty
end
end
@@ -532,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"))
@@ -550,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
@@ -572,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
@@ -599,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
@@ -655,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"
@@ -732,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"
@@ -767,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
@@ -831,7 +773,7 @@ end
it "should clean $LOAD_PATH properly", :ruby_repo do
gem_name = "very_simple_binary"
full_gem_name = gem_name + "-1.0"
- ext_dir = File.join(tmp "extenstions", full_gem_name)
+ ext_dir = File.join(tmp("extensions", full_gem_name))
install_gem full_gem_name
@@ -863,48 +805,41 @@ end
context "with bundler is located in symlinked GEM_HOME" do
let(:gem_home) { Dir.mktmpdir }
- let(:symlinked_gem_home) { Tempfile.new("gem_home") }
+ 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.path)
+ FileUtils.ln_sf(gem_home, symlinked_gem_home)
gems_dir = File.join(gem_home, "gems")
specifications_dir = File.join(gem_home, "specifications")
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/bundler.gemspec" : "#{bundler_dir}/bundler.gemspec"
- gemspec = File.read(gemspec_file).
+ 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 ""
- ENV["GEM_PATH"] = symlinked_gem_home.path
-
- ruby <<-R
- if $LOAD_PATH.include?("#{bundler_lib}")
- # We should use bundler from GEM_PATH for this test, so we should
- # remove path to the bundler source tree
- $LOAD_PATH.delete("#{bundler_lib}")
- else
- raise "We don't have #{bundler_lib} in $LOAD_PATH"
+ 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
@@ -943,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
@@ -968,7 +903,7 @@ end
R
end
- expect(err).to lack_errors
+ expect(err).to be_empty
end
end
@@ -1046,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
@@ -1099,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'"
)
@@ -1118,7 +1053,7 @@ end
Bundler.load
RUBY
- expect(err).to lack_errors
+ expect(err).to be_empty
expect(out).to eq("")
end
end
@@ -1129,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
@@ -1253,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'
@@ -1279,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]
@@ -1310,7 +1245,6 @@ end
end
let(:code) { strip_whitespace(<<-RUBY) }
- require "bundler/setup"
require "pp"
loaded_specs = Gem.loaded_specs.dup
#{exemptions.inspect}.each {|s| loaded_specs.delete(s) }
@@ -1325,27 +1259,23 @@ end
it "activates no gems with -rbundler/setup" do
install_gemfile! ""
- ruby! code, :env => { :RUBYOPT => activation_warning_hack_rubyopt }
- expect(last_command.stdout).to eq("{}")
+ ruby! code, :env => { :RUBYOPT => activation_warning_hack_rubyopt + " -rbundler/setup" }
+ expect(out).to eq("{}")
end
it "activates no gems with bundle exec" do
install_gemfile! ""
- # ensure we clean out the default gems, bceause bundler's allowed to be activated
create_file("script.rb", code)
- bundle! "exec ruby ./script.rb", :env => { :RUBYOPT => activation_warning_hack_rubyopt + " -rbundler/setup" }
- expect(last_command.stdout).to eq("{}")
+ bundle! "exec ruby ./script.rb", :env => { :RUBYOPT => activation_warning_hack_rubyopt }
+ expect(out).to eq("{}")
end
it "activates no gems with bundle exec that is loaded" do
- # TODO: remove once https://github.com/erikhuda/thor/pull/539 is released
- exemptions << "io-console"
-
install_gemfile! ""
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
@@ -1425,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
@@ -1441,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_clean_env_spec.rb b/spec/runtime/with_clean_env_spec.rb
deleted file mode 100644
index da8e37b45d..0000000000
--- a/spec/runtime/with_clean_env_spec.rb
+++ /dev/null
@@ -1,151 +0,0 @@
-# frozen_string_literal: true
-
-RSpec.describe "Bundler.with_env helpers" do
- def bundle_exec_ruby!(code, *args)
- 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
- end
-
- describe "Bundler.original_env" do
- before do
- bundle "config path vendor/bundle"
- gemfile ""
- bundle "install"
- end
-
- it "should return the PATH present before bundle was activated" do
- code = "print Bundler.original_env['PATH']"
- path = `getconf PATH`.strip + "#{File::PATH_SEPARATOR}/foo"
- with_path_as(path) do
- bundle_exec_ruby!(code.dump)
- expect(last_command.stdboth).to eq(path)
- end
- end
-
- it "should return the GEM_PATH present before bundle was activated" do
- code = "print Bundler.original_env['GEM_PATH']"
- gem_path = ENV["GEM_PATH"] + ":/foo"
- with_gem_path_as(gem_path) do
- bundle_exec_ruby!(code.dump)
- expect(last_command.stdboth).to eq(gem_path)
- end
- end
-
- it "works with nested bundle exec invocations", :ruby_repo do
- create_file("exe.rb", <<-'RB')
- count = ARGV.first.to_i
- exit if count < 0
- STDERR.puts "#{count} #{ENV["PATH"].end_with?(":/foo")}"
- if count == 2
- ENV["PATH"] = "#{ENV["PATH"]}:/foo"
- end
- exec(Gem.ruby, __FILE__, (count - 1).to_s)
- RB
- path = `getconf PATH`.strip + File::PATH_SEPARATOR + File.dirname(Gem.ruby)
- with_path_as(path) do
- bundle! "exec '#{Gem.ruby}' #{bundled_app("exe.rb")} 2", :env => { :RUBYOPT => "-r#{spec_dir.join("support/hax")}" }
- end
- expect(err).to eq <<-EOS.strip
-2 false
-1 true
-0 true
- EOS
- 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")}" })
- code = 'puts Bundler.original_env.to_a.map {|e| e.join("=") }.sort.join("\n")'
- bundle! "exec '#{Gem.ruby}' -e #{code.dump}", :env => { :RUBYOPT => "-r#{spec_dir.join("support/hax")}" }
- expect(out).to eq original
- end
- end
-
- describe "Bundler.clean_env", :bundler => "< 3" do
- before do
- bundle "config path vendor/bundle"
- gemfile ""
- bundle "install"
- end
-
- it "should delete BUNDLE_PATH" do
- code = "print Bundler.clean_env.has_key?('BUNDLE_PATH')"
- ENV["BUNDLE_PATH"] = "./foo"
- bundle_exec_ruby! code.dump
- expect(last_command.stdboth).to eq "false"
- end
-
- it "should remove '-rbundler/setup' from RUBYOPT" do
- code = "print Bundler.clean_env['RUBYOPT']"
- ENV["RUBYOPT"] = "-W2 -rbundler/setup"
- bundle_exec_ruby! code.dump
- expect(last_command.stdboth).not_to include("-rbundler/setup")
- end
-
- it "should clean up RUBYLIB", :ruby_repo do
- code = "print Bundler.clean_env['RUBYLIB']"
- ENV["RUBYLIB"] = root.join("lib").to_s + File::PATH_SEPARATOR + "/foo"
- bundle_exec_ruby! code.dump
- expect(last_command.stdboth).to eq("/foo")
- end
-
- it "should restore the original MANPATH" do
- code = "print Bundler.clean_env['MANPATH']"
- ENV["MANPATH"] = "/foo"
- ENV["BUNDLER_ORIG_MANPATH"] = "/foo-original"
- bundle_exec_ruby! code.dump
- expect(last_command.stdboth).to eq("/foo-original")
- end
- end
-
- describe "Bundler.with_original_env" do
- it "should set ENV to original_env in the block" do
- expected = Bundler.original_env
- actual = Bundler.with_original_env { ENV.to_hash }
- expect(actual).to eq(expected)
- end
-
- it "should restore the environment after execution" do
- Bundler.with_original_env do
- ENV["FOO"] = "hello"
- end
-
- expect(ENV).not_to have_key("FOO")
- end
- end
-
- describe "Bundler.with_clean_env", :bundler => "< 3" do
- it "should set ENV to clean_env in the block" do
- expected = Bundler.clean_env
- actual = Bundler.with_clean_env { ENV.to_hash }
- expect(actual).to eq(expected)
- end
-
- it "should restore the environment after execution" do
- Bundler.with_clean_env do
- ENV["FOO"] = "hello"
- end
-
- expect(ENV).not_to have_key("FOO")
- end
- end
-
- describe "Bundler.clean_system", :ruby => ">= 1.9", :bundler => "< 3" do
- it "runs system inside with_clean_env" do
- Bundler.clean_system(%(echo 'if [ "$BUNDLE_PATH" = "" ]; then exit 42; else exit 1; fi' | /bin/sh))
- expect($?.exitstatus).to eq(42)
- end
- end
-
- describe "Bundler.clean_exec", :ruby => ">= 1.9", :bundler => "< 3" 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)
- expect($?.exitstatus).to eq(42)
- end
- end
-end
diff --git a/spec/runtime/with_unbundled_env_spec.rb b/spec/runtime/with_unbundled_env_spec.rb
new file mode 100644
index 0000000000..b901f28c8b
--- /dev/null
+++ b/spec/runtime/with_unbundled_env_spec.rb
@@ -0,0 +1,262 @@
+# frozen_string_literal: true
+
+RSpec.describe "Bundler.with_env helpers" do
+ def bundle_exec_ruby!(code)
+ build_bundler_context
+ bundle! "exec '#{Gem.ruby}' -e #{code}"
+ end
+
+ def build_bundler_context
+ bundle "config set path vendor/bundle"
+ gemfile ""
+ bundle "install"
+ end
+
+ describe "Bundler.original_env" do
+ it "should return the PATH present before bundle was activated" do
+ code = "print Bundler.original_env['PATH']"
+ path = `getconf PATH`.strip + "#{File::PATH_SEPARATOR}/foo"
+ with_path_as(path) do
+ bundle_exec_ruby!(code.dump)
+ expect(last_command.stdboth).to eq(path)
+ end
+ end
+
+ it "should return the GEM_PATH present before bundle was activated" do
+ code = "print Bundler.original_env['GEM_PATH']"
+ gem_path = ENV["GEM_PATH"] + ":/foo"
+ with_gem_path_as(gem_path) do
+ bundle_exec_ruby!(code.dump)
+ expect(last_command.stdboth).to eq(gem_path)
+ end
+ end
+
+ it "works with nested bundle exec invocations", :ruby_repo do
+ create_file("exe.rb", <<-'RB')
+ count = ARGV.first.to_i
+ exit if count < 0
+ STDERR.puts "#{count} #{ENV["PATH"].end_with?(":/foo")}"
+ if count == 2
+ ENV["PATH"] = "#{ENV["PATH"]}:/foo"
+ end
+ exec(Gem.ruby, __FILE__, (count - 1).to_s)
+ RB
+ 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"
+ end
+ expect(err).to eq <<-EOS.strip
+2 false
+1 true
+0 true
+ EOS
+ end
+
+ it "removes variables that bundler added", :ruby_repo do
+ 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
+ end
+ end
+
+ shared_examples_for "an unbundling helper" do
+ it "should delete BUNDLE_PATH" do
+ code = "print #{modified_env}.has_key?('BUNDLE_PATH')"
+ ENV["BUNDLE_PATH"] = "./foo"
+ bundle_exec_ruby! code.dump
+ expect(last_command.stdboth).to include "false"
+ end
+
+ it "should remove '-rbundler/setup' from RUBYOPT" do
+ code = "print #{modified_env}['RUBYOPT']"
+ ENV["RUBYOPT"] = "-W2 -rbundler/setup #{ENV["RUBYOPT"]}"
+ bundle_exec_ruby! code.dump
+ expect(last_command.stdboth).not_to include("-rbundler/setup")
+ end
+
+ it "should clean up RUBYLIB", :ruby_repo do
+ code = "print #{modified_env}['RUBYLIB']"
+ ENV["RUBYLIB"] = root.join("lib").to_s + File::PATH_SEPARATOR + "/foo"
+ bundle_exec_ruby! code.dump
+ expect(last_command.stdboth).to include("/foo")
+ end
+
+ it "should restore the original MANPATH" do
+ code = "print #{modified_env}['MANPATH']"
+ ENV["MANPATH"] = "/foo"
+ ENV["BUNDLER_ORIG_MANPATH"] = "/foo-original"
+ bundle_exec_ruby! code.dump
+ expect(last_command.stdboth).to include("/foo-original")
+ end
+ end
+
+ describe "Bundler.unbundled_env" do
+ let(:modified_env) { "Bundler.unbundled_env" }
+
+ it_behaves_like "an unbundling helper"
+ end
+
+ describe "Bundler.clean_env", :bundler => 2 do
+ let(:modified_env) { "Bundler.clean_env" }
+
+ it_behaves_like "an unbundling helper"
+ end
+
+ describe "Bundler.with_original_env" do
+ it "should set ENV to original_env in the block" do
+ expected = Bundler.original_env
+ actual = Bundler.with_original_env { ENV.to_hash }
+ expect(actual).to eq(expected)
+ end
+
+ it "should restore the environment after execution" do
+ Bundler.with_original_env do
+ ENV["FOO"] = "hello"
+ end
+
+ expect(ENV).not_to have_key("FOO")
+ end
+ end
+
+ 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 }
+ expect(actual).to eq(expected)
+ end
+
+ it "should restore the environment after execution" do
+ Bundler.with_clean_env do
+ ENV["FOO"] = "hello"
+ end
+
+ expect(ENV).not_to have_key("FOO")
+ end
+ end
+
+ describe "Bundler.with_unbundled_env" do
+ it "should set ENV to unbundled_env in the block" do
+ expected = Bundler.unbundled_env
+ actual = Bundler.with_unbundled_env { ENV.to_hash }
+ expect(actual).to eq(expected)
+ end
+
+ it "should restore the environment after execution" do
+ Bundler.with_unbundled_env do
+ ENV["FOO"] = "hello"
+ end
+
+ expect(ENV).not_to have_key("FOO")
+ end
+ end
+
+ 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
+ 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.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 c7614e1c43..d3de1ff784 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -3,48 +3,17 @@
$:.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"
require "digest"
-# Delete the default copy of Bundler that RVM installs for us when running in CI
-require "fileutils"
-if ENV.select {|k, _v| k =~ /TRAVIS/ }.any? && Gem::Version.new(Gem::VERSION) > Gem::Version.new("2.0")
- Dir.glob(File.join(Gem::Specification.default_specifications_dir, "bundler*.gemspec")).each do |file|
- FileUtils.rm_rf(file)
- end
-
- Dir.glob(File.join(RbConfig::CONFIG["sitelibdir"], "bundler*")).each do |file|
- FileUtils.rm_rf(file)
- end
-end
-
if File.expand_path(__FILE__) =~ %r{([^\w/\.:\-])}
abort "The bundler specs cannot be run from a path that contains special characters (particularly #{$1.inspect})"
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__)}/}, "")
@@ -53,16 +22,7 @@ end
$debug = false
-Spec::Manpages.setup
-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
+Spec::Manpages.setup unless Gem.win_platform?
module Gem
def self.ruby=(ruby)
@@ -92,6 +52,8 @@ RSpec.configure do |config|
# forever due to memory constraints
config.fail_fast ||= 25 if ENV["CI"]
+ config.bisect_runner = :shell
+
if ENV["BUNDLER_SUDO_TESTS"] && Spec::Sudo.present?
config.filter_run :sudo => true
else
@@ -106,11 +68,11 @@ RSpec.configure do |config|
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 :git => RequirementChecker.against(git_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"]
@@ -122,6 +84,10 @@ RSpec.configure do |config|
c.syntax = :expect
end
+ config.mock_with :rspec do |mocks|
+ mocks.allow_message_expectations_on_nil = false
+ end
+
config.around :each do |example|
if ENV["BUNDLE_RUBY"]
orig_ruby = Gem.ruby
@@ -132,6 +98,15 @@ RSpec.configure do |config|
end
config.before :suite do
+ Spec::Rubygems.setup
+ ENV["RUBYOPT"] = original_env["RUBYOPT"] = "#{ENV["RUBYOPT"]} -r#{Spec::Path.spec_dir}/support/hax.rb"
+ ENV["BUNDLE_SPEC_RUN"] = original_env["BUNDLE_SPEC_RUN"] = "true"
+
+ # Don't wrap output in tests
+ ENV["THOR_COLUMNS"] = "10000"
+
+ original_env = ENV.to_hash.delete_if {|k, _v| k.start_with?(Bundler::EnvironmentPreserver::BUNDLER_PREFIX) }
+
if ENV["BUNDLE_RUBY"]
FileUtils.cp_r Spec::Path.bindir, File.join(Spec::Path.root, "lib", "exe")
end
@@ -141,14 +116,15 @@ RSpec.configure do |config|
build_repo1
end
- config.before :each do
+ config.around :each do |example|
+ ENV.replace(original_env)
reset!
system_gems []
in_app_root
@command_executions = []
- end
- config.after :each do |example|
+ example.run
+
all_output = @command_executions.map(&:to_s_verbose).join("\n\n")
if example.exception && !all_output.empty?
warn all_output unless config.formatters.grep(RSpec::Core::Formatters::DocumentationFormatter).empty?
@@ -159,7 +135,6 @@ RSpec.configure do |config|
end
Dir.chdir(original_wd)
- ENV.replace(original_env)
end
config.after :suite do
diff --git a/spec/support/artifice/compact_index.rb b/spec/support/artifice/compact_index.rb
index 01e8eb7837..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)
@@ -82,8 +78,8 @@ class CompactIndexAPI < Endpoint
CompactIndex::Dependency.new(d.name, reqs)
end
checksum = begin
- Digest::SHA256.file("#{GEM_REPO}/gems/#{spec.original_name}.gem").base64digest
- rescue
+ Digest(:SHA256).file("#{GEM_REPO}/gems/#{spec.original_name}.gem").base64digest
+ 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 458f6e9e69..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"
@@ -648,7 +648,8 @@ module Spec
`git add *`
`git config user.email "lol@wut.com"`
`git config user.name "lolwut"`
- `git commit -m 'OMG INITIAL COMMIT'`
+ `git config commit.gpgsign false`
+ `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/hax.rb b/spec/support/hax.rb
index b14e4a5943..202e8dcc32 100644
--- a/spec/support/hax.rb
+++ b/spec/support/hax.rb
@@ -21,6 +21,8 @@ module Gem
end
if ENV["BUNDLER_SPEC_VERSION"]
+ require "bundler/version"
+
module Bundler
remove_const(:VERSION) if const_defined?(:VERSION)
VERSION = ENV["BUNDLER_SPEC_VERSION"].dup
diff --git a/spec/support/helpers.rb b/spec/support/helpers.rb
index 1e6b70b471..cf76a84b7c 100644
--- a/spec/support/helpers.rb
+++ b/spec/support/helpers.rb
@@ -41,13 +41,23 @@ module Spec
end
def out
- last_command.stdboth
+ last_command.stdout
end
def err
last_command.stderr
end
+ MAJOR_DEPRECATION = /^\[DEPRECATED\]\s*/.freeze
+
+ def err_without_deprecations
+ err.gsub(/#{MAJOR_DEPRECATION}.+[\n]?/, "")
+ end
+
+ def deprecations
+ err.split("\n").select {|l| l =~ MAJOR_DEPRECATION }.join("\n").split(MAJOR_DEPRECATION)
+ end
+
def exitstatus
last_command.exitstatus
end
@@ -67,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
@@ -127,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
@@ -142,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.bundler_major_version < 3
+ 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?
@@ -157,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
{}
@@ -170,11 +178,6 @@ module Spec
bundle(cmd, options)
end
- def bundle_ruby(options = {})
- options["bundle_bin"] = bindir.join("bundle_ruby")
- bundle("", options)
- end
-
def ruby(ruby, options = {})
env = (options.delete(:env) || {}).map {|k, v| "#{k}='#{v}' " }.join
ruby = ruby.gsub(/["`\$]/) {|m| "\\#{m}" }
@@ -217,16 +220,18 @@ 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
- command_execution.exitstatus = wait_thr && wait_thr.value.exitstatus
command_execution.stdout = Thread.new { stdout.read }.value.strip
command_execution.stderr = Thread.new { stderr.read }.value.strip
+ command_execution.exitstatus = wait_thr && wait_thr.value.exitstatus
end
(@command_executions ||= []) << command_execution
@@ -323,7 +328,7 @@ module Spec
Dir.chdir(root) { gem_command! :build, gemspec.to_s }
end
bundler_path = root + "bundler-#{Bundler::VERSION}.gem"
- elsif g.to_s =~ %r{\A/.*\.gem\z}
+ elsif g.to_s =~ %r{\A(?:[A-Z]:)?/.*\.gem\z}
g
else
"#{gem_repo}/gems/#{g}.gem"
@@ -434,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
@@ -590,7 +595,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
@@ -600,7 +605,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/indexes.rb b/spec/support/indexes.rb
index 69f8d9f679..b76f493d01 100644
--- a/spec/support/indexes.rb
+++ b/spec/support/indexes.rb
@@ -77,7 +77,7 @@ module Spec
gem "rack-mount", %w[0.4 0.5 0.5.1 0.5.2 0.6]
# --- Pre-release support
- gem "rubygems\0", ["1.3.2"]
+ gem "RubyGems\0", ["1.3.2"]
# --- Rails
versions "1.2.3 2.2.3 2.3.5 3.0.0.beta 3.0.0.beta1" do |version|
@@ -414,7 +414,7 @@ module Spec
gem("b", %w[0.9.0 1.5.0 2.0.0.pre])
# --- Pre-release support
- gem "rubygems\0", ["1.3.2"]
+ gem "RubyGems\0", ["1.3.2"]
end
end
end
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 76aeffb288..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
diff --git a/spec/support/path.rb b/spec/support/path.rb
index 69efcba051..dc4b3bb6eb 100644
--- a/spec/support/path.rb
+++ b/spec/support/path.rb
@@ -99,7 +99,7 @@ module Spec
end
def bundler_path
- Pathname.new(File.expand_path(root.join("lib"), __FILE__))
+ root.join("lib")
end
def global_plugin_gem(*args)
diff --git a/spec/support/platforms.rb b/spec/support/platforms.rb
index 950311d20e..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 > 2
+ 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 fb734b3983..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
@@ -33,17 +27,17 @@ module Spec
ENV["BUNDLE_PATH"] = nil
ENV["GEM_HOME"] = ENV["GEM_PATH"] = Path.base_system_gems.to_s
- ENV["PATH"] = [Path.bindir, "#{Path.system_gem_path}/bin", ENV["PATH"]].join(File::PATH_SEPARATOR)
+ ENV["PATH"] = [Path.bindir, Path.system_gem_path.join("bin"), ENV["PATH"]].join(File::PATH_SEPARATOR)
manifest = DEPS.to_a.sort_by(&:first).map {|k, v| "#{k} => #{v}\n" }
- manifest_path = "#{Path.base_system_gems}/manifest.txt"
+ manifest_path = Path.base_system_gems.join("manifest.txt")
# it's OK if there are extra gems
- if !File.exist?(manifest_path) || !(manifest - File.readlines(manifest_path)).empty?
+ if !manifest_path.file? || !(manifest - manifest_path.readlines).empty?
FileUtils.rm_rf(Path.base_system_gems)
FileUtils.mkdir_p(Path.base_system_gems)
puts "installing gems for the tests to use..."
install_gems(DEPS)
- File.open(manifest_path, "w") {|f| f << manifest.join }
+ manifest_path.open("w") {|f| f << manifest.join }
end
ENV["HOME"] = Path.home.to_s
@@ -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 b9f4328684..6c47c254cd 100644
--- a/spec/update/gemfile_spec.rb
+++ b/spec/update/gemfile_spec.rb
@@ -25,7 +25,7 @@ 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
@@ -46,21 +46,4 @@ RSpec.describe "bundle update" do
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 => true
-
- 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 fe411a8a6f..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
diff --git a/spec/update/git_spec.rb b/spec/update/git_spec.rb
index 19abceb08d..bc230a3575 100644
--- a/spec/update/git_spec.rb
+++ b/spec/update/git_spec.rb
@@ -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
@@ -192,7 +192,7 @@ RSpec.describe "bundle update" do
lib_path("foo-1.0").join(".git").rmtree
bundle :update, :all => true
- expect(last_command.bundler_err).to include(lib_path("foo-1.0").to_s).
+ 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
@@ -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 => "> 3" 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 1bbc3a66fc..39edac0902 100644
--- a/spec/update/redownload_spec.rb
+++ b/spec/update/redownload_spec.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-RSpec.describe "bundle update", :bundler => "< 3", :ruby => ">= 2.0" do
+RSpec.describe "bundle update" do
before :each do
install_gemfile <<-G
source "file://#{gem_repo1}"
@@ -8,29 +8,27 @@ RSpec.describe "bundle update", :bundler => "< 3", :ruby => ">= 2.0" do
G
end
- before { bundle "config major_deprecations yes" }
-
describe "with --force" do
- it "shows a deprecation when single flag passed" do
+ it "shows a deprecation when single flag passed", :bundler => 2 do
bundle! "update rack --force"
- expect(out).to include "[DEPRECATED FOR 3.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" do
+ it "shows a deprecation when multiple flags passed", :bundler => 2 do
bundle! "update rack --no-color --force"
- expect(out).to include "[DEPRECATED FOR 3.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 3.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 3.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 e06a795259..55ffaf4ba7 100644
--- a/task/build_metadata.rake
+++ b/task/build_metadata.rake
@@ -1,10 +1,14 @@
# 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"
ivars = build_metadata.sort.map do |k, v|
- " @#{k} = #{BUNDLER_SPEC.send(:ruby_code, v)}"
+ " @#{k} = #{bundler_spec.send(:ruby_code, v)}"
end.join("\n")
contents = File.read(build_metadata_file)
@@ -14,7 +18,7 @@ end
task :build_metadata do
build_metadata = {
- :built_at => BUNDLER_SPEC.date.utc.strftime("%Y-%m-%d"),
+ :built_at => bundler_spec.date.utc.strftime("%Y-%m-%d"),
:git_commit_sha => `git rev-parse --short HEAD`.strip,
:release => Rake::Task["release"].instance_variable_get(:@already_invoked),
}
diff --git a/task/release.rake b/task/release.rake
index f1786e8bc2..29fdc1dcb3 100644
--- a/task/release.rake
+++ b/task/release.rake
@@ -1,16 +1,36 @@
# frozen_string_literal: true
require "bundler/gem_tasks"
-
task :build => ["build_metadata", "man:build", "generate_files"] do
Rake::Task["build_metadata:clean"].tap(&:reenable).real_invoke
end
-
-["man:require", "release:verify_github"].reverse_each do |task|
- Rake::Task["release"].prerequisites.unshift(task)
-end
+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"
@@ -43,12 +63,10 @@ namespace :release do
end}"
end
JSON.parse(response.body)
- rescue => e
- puts "GitHub request error! Make sure your .netrc for api.github.com is valid.\n\n"
- raise e
end
task :verify_github do
+ require "pp"
gh_api_post :path => "/user"
end
@@ -86,12 +104,12 @@ namespace :release do
def release_notes(version)
title_token = "## "
- current_verison_title = "#{title_token}#{version}"
+ current_version_title = "#{title_token}#{version}"
current_minor_title = "#{title_token}#{version.segments[0, 2].join(".")}"
text = File.open("CHANGELOG.md", "r:UTF-8", &:read)
lines = text.split("\n")
- current_version_index = lines.find_index {|line| line.strip =~ /^#{current_verison_title}($|\b)/ }
+ current_version_index = lines.find_index {|line| line.strip =~ /^#{current_version_title}($|\b)/ }
unless current_version_index
raise "Update the changelog for the last version (#{version})"
end
@@ -129,7 +147,7 @@ namespace :release do
version = args.version
version ||= begin
- version = BUNDLER_SPEC.version
+ version = bundler_spec.version
segments = version.segments
if segments.last.is_a?(String)
segments << "1"
@@ -139,7 +157,7 @@ namespace :release do
segments.join(".")
end
- confirm "You are about to release #{version}, currently #{BUNDLER_SPEC.version}"
+ confirm "You are about to release #{version}, currently #{bundler_spec.version}"
milestones = gh_api_request(:path => "repos/bundler/bundler/milestones?state=open")
unless patch_milestone = milestones.find {|m| m["title"] == version }
@@ -153,7 +171,7 @@ namespace :release do
end
prs.compact!
- BUNDLER_SPEC.version = version
+ bundler_spec.version = version
branch = version.split(".", 3)[0, 2].push("stable").join("-")
sh("git", "checkout", branch)
@@ -166,7 +184,7 @@ namespace :release do
File.open(version_file, "w") {|f| f.write(version_contents) }
commits = `git log --oneline origin/master --`.split("\n").map {|l| l.split(/\s/, 2) }.reverse
- commits.select! {|_sha, message| message =~ /(Auto merge of|Merge pull request) ##{Regexp.union(*prs)}/ }
+ commits.select! {|_sha, message| message =~ /(Auto merge of|Merge pull request|Merge) ##{Regexp.union(*prs)}/ }
abort "Could not find commits for all PRs" unless commits.size == prs.size
@@ -193,7 +211,7 @@ namespace :release do
task :open_unreleased_prs do
def prs(on = "master")
commits = `git log --oneline origin/#{on} --`.split("\n")
- commits.reverse_each.map {|c| c =~ /(Auto merge of|Merge pull request) #(\d+)/ && $2 }.compact
+ commits.reverse_each.map {|c| c =~ /(Auto merge of|Merge pull request|Merge) #(\d+)/ && $2 }.compact
end
last_stable = `git ls-remote origin`.split("\n").map {|r| r =~ %r{refs/tags/v([\d.]+)$} && $1 }.compact.map {|v| Gem::Version.create(v) }.max