diff options
78 files changed, 426 insertions, 350 deletions
diff --git a/lib/bundler/cli.rb b/lib/bundler/cli.rb index 2f495d427d..249f5b2027 100644 --- a/lib/bundler/cli.rb +++ b/lib/bundler/cli.rb @@ -122,9 +122,7 @@ module Bundler else command = "bundle-#{cli}" end - man_path = File.expand_path("../../../man", __FILE__) - # man files are located under ruby's mandir with the default gems of bundler - man_path = RbConfig::CONFIG["mandir"] unless File.directory?(man_path) + man_path = File.expand_path("man", __dir__) man_pages = Hash[Dir.glob(File.join(man_path, "**", "*")).grep(/.*\.\d*\Z/).collect do |f| [File.basename(f, ".*"), f] end] @@ -134,8 +132,7 @@ module Bundler if Bundler.which("man") && man_path !~ %r{^file:/.+!/META-INF/jruby.home/.+} Kernel.exec "man #{man_page}" else - fallback_man_path = File.expand_path("../man", __FILE__) - puts File.read("#{fallback_man_path}/#{File.basename(man_page)}.ronn") + puts File.read("#{man_path}/#{File.basename(man_page)}.ronn") end elsif command_path = Bundler.which("bundler-#{cli}") Kernel.exec(command_path, "--help") diff --git a/lib/bundler/cli/gem.rb b/lib/bundler/cli/gem.rb index 8d26e4c1f4..6ef1473b1e 100644 --- a/lib/bundler/cli/gem.rb +++ b/lib/bundler/cli/gem.rb @@ -95,7 +95,7 @@ module Bundler when "minitest" templates.merge!( "test/minitest/test_helper.rb.tt" => "test/test_helper.rb", - "test/minitest/newgem_test.rb.tt" => "test/#{namespaced_path}_test.rb" + "test/minitest/test_newgem.rb.tt" => "test/test_#{namespaced_path}.rb" ) config[:test_task] = :test when "test-unit" diff --git a/lib/bundler/definition.rb b/lib/bundler/definition.rb index b22363d119..349fa632a0 100644 --- a/lib/bundler/definition.rb +++ b/lib/bundler/definition.rb @@ -7,6 +7,11 @@ module Bundler class Definition include GemHelpers + class << self + # Do not create or modify a lockfile (Makes #lock a noop) + attr_accessor :no_lock + end + attr_reader( :dependencies, :locked_deps, @@ -336,6 +341,8 @@ module Bundler end def lock(file, preserve_unknown_sections = false) + return if Definition.no_lock + contents = to_lock # Convert to \r\n if the existing lock has them diff --git a/lib/bundler/fetcher.rb b/lib/bundler/fetcher.rb index 235eb9bbd3..2d9b4c2945 100644 --- a/lib/bundler/fetcher.rb +++ b/lib/bundler/fetcher.rb @@ -69,8 +69,8 @@ module Bundler :HTTPUnsupportedMediaType, :HTTPVersionNotSupported].freeze FAIL_ERRORS = begin fail_errors = [AuthenticationRequiredError, BadAuthenticationError, FallbackError] - fail_errors << Gem::Requirement::BadRequirementError if defined?(Gem::Requirement::BadRequirementError) - fail_errors.concat(NET_ERRORS.map {|e| SharedHelpers.const_get_safely(e, Net) }.compact) + fail_errors << Gem::Requirement::BadRequirementError + fail_errors.concat(NET_ERRORS.map {|e| Net.const_get(e) }) end.freeze class << self diff --git a/lib/bundler/gem_helper.rb b/lib/bundler/gem_helper.rb index 4ada36aef4..0acaa69f25 100644 --- a/lib/bundler/gem_helper.rb +++ b/lib/bundler/gem_helper.rb @@ -117,13 +117,13 @@ module Bundler def git_push(remote = nil) remote ||= default_remote perform_git_push remote - perform_git_push "#{remote} #{version_tag}" + perform_git_push "#{remote} refs/tags/#{version_tag}" Bundler.ui.confirm "Pushed git commits and release tag." end def default_remote - current_branch = sh(%w[git rev-parse --abbrev-ref HEAD]).strip - return "origin" if current_branch.empty? + # We can replace this with `git branch --show-current` once we drop support for git < 2.22.0 + current_branch = sh(%w[git rev-parse --abbrev-ref HEAD]).gsub(%r{\Aheads/}, "").strip remote_for_branch = sh(%W[git config --get branch.#{current_branch}.remote]).strip return "origin" if remote_for_branch.empty? diff --git a/man/bundle-add.1 b/lib/bundler/man/bundle-add.1 index 985d3be8b1..29b2cadf33 100644 --- a/man/bundle-add.1 +++ b/lib/bundler/man/bundle-add.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "BUNDLE\-ADD" "1" "November 2020" "" "" +.TH "BUNDLE\-ADD" "1" "December 2020" "" "" . .SH "NAME" \fBbundle\-add\fR \- Add gem to the Gemfile and run bundle install diff --git a/man/bundle-binstubs.1 b/lib/bundler/man/bundle-binstubs.1 index 75d6b98c96..6ba4ed914d 100644 --- a/man/bundle-binstubs.1 +++ b/lib/bundler/man/bundle-binstubs.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "BUNDLE\-BINSTUBS" "1" "November 2020" "" "" +.TH "BUNDLE\-BINSTUBS" "1" "December 2020" "" "" . .SH "NAME" \fBbundle\-binstubs\fR \- Install the binstubs of the listed gems diff --git a/man/bundle-cache.1 b/lib/bundler/man/bundle-cache.1 index 313359d78f..8aa45ca213 100644 --- a/man/bundle-cache.1 +++ b/lib/bundler/man/bundle-cache.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "BUNDLE\-CACHE" "1" "November 2020" "" "" +.TH "BUNDLE\-CACHE" "1" "December 2020" "" "" . .SH "NAME" \fBbundle\-cache\fR \- Package your needed \fB\.gem\fR files into your application diff --git a/man/bundle-check.1 b/lib/bundler/man/bundle-check.1 index 3f1a4bc329..5013cd8cda 100644 --- a/man/bundle-check.1 +++ b/lib/bundler/man/bundle-check.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "BUNDLE\-CHECK" "1" "November 2020" "" "" +.TH "BUNDLE\-CHECK" "1" "December 2020" "" "" . .SH "NAME" \fBbundle\-check\fR \- Verifies if dependencies are satisfied by installed gems diff --git a/man/bundle-clean.1 b/lib/bundler/man/bundle-clean.1 index 1c111ae906..231ce273a8 100644 --- a/man/bundle-clean.1 +++ b/lib/bundler/man/bundle-clean.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "BUNDLE\-CLEAN" "1" "November 2020" "" "" +.TH "BUNDLE\-CLEAN" "1" "December 2020" "" "" . .SH "NAME" \fBbundle\-clean\fR \- Cleans up unused gems in your bundler directory diff --git a/man/bundle-config.1 b/lib/bundler/man/bundle-config.1 index 39b32e7496..f690b0a8f0 100644 --- a/man/bundle-config.1 +++ b/lib/bundler/man/bundle-config.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "BUNDLE\-CONFIG" "1" "November 2020" "" "" +.TH "BUNDLE\-CONFIG" "1" "December 2020" "" "" . .SH "NAME" \fBbundle\-config\fR \- Set bundler configuration options @@ -211,10 +211,10 @@ The following is a list of all configuration keys and their purpose\. You can le \fBignore_messages\fR (\fBBUNDLE_IGNORE_MESSAGES\fR): When set, no post install messages will be printed\. To silence a single gem, use dot notation like \fBignore_messages\.httparty true\fR\. . .IP "\(bu" 4 -\fBinit_gems_rb\fR (\fBBUNDLE_INIT_GEMS_RB\fR) Generate a \fBgems\.rb\fR instead of a \fBGemfile\fR when running \fBbundle init\fR\. +\fBinit_gems_rb\fR (\fBBUNDLE_INIT_GEMS_RB\fR): Generate a \fBgems\.rb\fR instead of a \fBGemfile\fR when running \fBbundle init\fR\. . .IP "\(bu" 4 -\fBjobs\fR (\fBBUNDLE_JOBS\fR): The number of gems Bundler can install in parallel\. Defaults to 1\. +\fBjobs\fR (\fBBUNDLE_JOBS\fR): The number of gems Bundler can install in parallel\. Defaults to 1 on Windows, and to the the number of processors on other platforms\. . .IP "\(bu" 4 \fBno_install\fR (\fBBUNDLE_NO_INSTALL\fR): Whether \fBbundle package\fR should skip installing gems\. @@ -241,7 +241,7 @@ The following is a list of all configuration keys and their purpose\. You can le \fBprefer_patch\fR (BUNDLE_PREFER_PATCH): Prefer updating only to next patch version during updates\. Makes \fBbundle update\fR calls equivalent to \fBbundler update \-\-patch\fR\. . .IP "\(bu" 4 -\fBprint_only_version_number\fR (\fBBUNDLE_PRINT_ONLY_VERSION_NUMBER\fR) Print only version number from \fBbundler \-\-version\fR\. +\fBprint_only_version_number\fR (\fBBUNDLE_PRINT_ONLY_VERSION_NUMBER\fR): Print only version number from \fBbundler \-\-version\fR\. . .IP "\(bu" 4 \fBredirect\fR (\fBBUNDLE_REDIRECT\fR): The number of redirects allowed for network requests\. Defaults to \fB5\fR\. @@ -283,7 +283,7 @@ The following is a list of all configuration keys and their purpose\. You can le \fBunlock_source_unlocks_spec\fR (\fBBUNDLE_UNLOCK_SOURCE_UNLOCKS_SPEC\fR): Whether running \fBbundle update \-\-source NAME\fR unlocks a gem with the given name\. Defaults to \fBtrue\fR\. . .IP "\(bu" 4 -\fBupdate_requires_all_flag\fR (\fBBUNDLE_UPDATE_REQUIRES_ALL_FLAG\fR) Require passing \fB\-\-all\fR to \fBbundle update\fR when everything should be updated, and disallow passing no options to \fBbundle update\fR\. +\fBupdate_requires_all_flag\fR (\fBBUNDLE_UPDATE_REQUIRES_ALL_FLAG\fR): Require passing \fB\-\-all\fR to \fBbundle update\fR when everything should be updated, and disallow passing no options to \fBbundle update\fR\. . .IP "\(bu" 4 \fBuser_agent\fR (\fBBUNDLE_USER_AGENT\fR): The custom user agent fragment Bundler includes in API requests\. @@ -458,7 +458,7 @@ export BUNDLE_GITHUB__COM=username:password .IP "" 0 . .P -This is especially useful for private repositories on hosts such as Github, where you can use personal OAuth tokens: +This is especially useful for private repositories on hosts such as GitHub, where you can use personal OAuth tokens: . .IP "" 4 . diff --git a/lib/bundler/man/bundle-config.1.ronn b/lib/bundler/man/bundle-config.1.ronn index 462edf7844..7ca5dbed72 100644 --- a/lib/bundler/man/bundle-config.1.ronn +++ b/lib/bundler/man/bundle-config.1.ronn @@ -206,13 +206,14 @@ 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. -* `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`. -* `init_gems_rb` (`BUNDLE_INIT_GEMS_RB`) +* `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`. +* `init_gems_rb` (`BUNDLE_INIT_GEMS_RB`): 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. + The number of gems Bundler can install in parallel. Defaults to 1 on Windows, + and to the the number of processors on other platforms. * `no_install` (`BUNDLE_NO_INSTALL`): Whether `bundle package` should skip installing gems. * `no_prune` (`BUNDLE_NO_PRUNE`): @@ -233,7 +234,7 @@ learn more about their operation in [bundle install(1)](bundle-install.1.html). Enable Bundler's experimental plugin system. * `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` (`BUNDLE_PRINT_ONLY_VERSION_NUMBER`): Print only version number from `bundler --version`. * `redirect` (`BUNDLE_REDIRECT`): The number of redirects allowed for network requests. Defaults to `5`. @@ -269,7 +270,7 @@ learn more about their operation in [bundle install(1)](bundle-install.1.html). * `unlock_source_unlocks_spec` (`BUNDLE_UNLOCK_SOURCE_UNLOCKS_SPEC`): Whether running `bundle update --source NAME` unlocks a gem with the given name. Defaults to `true`. -* `update_requires_all_flag` (`BUNDLE_UPDATE_REQUIRES_ALL_FLAG`) +* `update_requires_all_flag` (`BUNDLE_UPDATE_REQUIRES_ALL_FLAG`): Require passing `--all` to `bundle update` when everything should be updated, and disallow passing no options to `bundle update`. * `user_agent` (`BUNDLE_USER_AGENT`): @@ -369,7 +370,7 @@ Or you can set the credentials as an environment variable like so: export BUNDLE_GITHUB__COM=username:password -This is especially useful for private repositories on hosts such as Github, +This is especially useful for private repositories on hosts such as GitHub, where you can use personal OAuth tokens: export BUNDLE_GITHUB__COM=abcd0123generatedtoken:x-oauth-basic diff --git a/man/bundle-doctor.1 b/lib/bundler/man/bundle-doctor.1 index 39841c8032..dd3471cfa9 100644 --- a/man/bundle-doctor.1 +++ b/lib/bundler/man/bundle-doctor.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "BUNDLE\-DOCTOR" "1" "November 2020" "" "" +.TH "BUNDLE\-DOCTOR" "1" "December 2020" "" "" . .SH "NAME" \fBbundle\-doctor\fR \- Checks the bundle for common problems diff --git a/man/bundle-exec.1 b/lib/bundler/man/bundle-exec.1 index b8c1b308c3..374d2b11ed 100644 --- a/man/bundle-exec.1 +++ b/lib/bundler/man/bundle-exec.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "BUNDLE\-EXEC" "1" "November 2020" "" "" +.TH "BUNDLE\-EXEC" "1" "December 2020" "" "" . .SH "NAME" \fBbundle\-exec\fR \- Execute a command in the context of the bundle diff --git a/man/bundle-gem.1 b/lib/bundler/man/bundle-gem.1 index 65c35615c5..2ec18ecc65 100644 --- a/man/bundle-gem.1 +++ b/lib/bundler/man/bundle-gem.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "BUNDLE\-GEM" "1" "November 2020" "" "" +.TH "BUNDLE\-GEM" "1" "December 2020" "" "" . .SH "NAME" \fBbundle\-gem\fR \- Generate a project skeleton for creating a rubygem diff --git a/man/bundle-info.1 b/lib/bundler/man/bundle-info.1 index b20396d273..e7386e3699 100644 --- a/man/bundle-info.1 +++ b/lib/bundler/man/bundle-info.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "BUNDLE\-INFO" "1" "November 2020" "" "" +.TH "BUNDLE\-INFO" "1" "December 2020" "" "" . .SH "NAME" \fBbundle\-info\fR \- Show information for the given gem in your bundle diff --git a/man/bundle-init.1 b/lib/bundler/man/bundle-init.1 index b6714730c4..756dc2c67c 100644 --- a/man/bundle-init.1 +++ b/lib/bundler/man/bundle-init.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "BUNDLE\-INIT" "1" "November 2020" "" "" +.TH "BUNDLE\-INIT" "1" "December 2020" "" "" . .SH "NAME" \fBbundle\-init\fR \- Generates a Gemfile into the current working directory diff --git a/man/bundle-inject.1 b/lib/bundler/man/bundle-inject.1 index 9704eba89b..4c66eaf78f 100644 --- a/man/bundle-inject.1 +++ b/lib/bundler/man/bundle-inject.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "BUNDLE\-INJECT" "1" "November 2020" "" "" +.TH "BUNDLE\-INJECT" "1" "December 2020" "" "" . .SH "NAME" \fBbundle\-inject\fR \- Add named gem(s) with version requirements to Gemfile diff --git a/man/bundle-install.1 b/lib/bundler/man/bundle-install.1 index 7c34f37cdd..34dca1f0bc 100644 --- a/man/bundle-install.1 +++ b/lib/bundler/man/bundle-install.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "BUNDLE\-INSTALL" "1" "November 2020" "" "" +.TH "BUNDLE\-INSTALL" "1" "December 2020" "" "" . .SH "NAME" \fBbundle\-install\fR \- Install the dependencies specified in your Gemfile diff --git a/man/bundle-list.1 b/lib/bundler/man/bundle-list.1 index d758e61a49..ec507a566b 100644 --- a/man/bundle-list.1 +++ b/lib/bundler/man/bundle-list.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "BUNDLE\-LIST" "1" "November 2020" "" "" +.TH "BUNDLE\-LIST" "1" "December 2020" "" "" . .SH "NAME" \fBbundle\-list\fR \- List all the gems in the bundle diff --git a/man/bundle-lock.1 b/lib/bundler/man/bundle-lock.1 index a70043df00..6f468db581 100644 --- a/man/bundle-lock.1 +++ b/lib/bundler/man/bundle-lock.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "BUNDLE\-LOCK" "1" "November 2020" "" "" +.TH "BUNDLE\-LOCK" "1" "December 2020" "" "" . .SH "NAME" \fBbundle\-lock\fR \- Creates / Updates a lockfile without installing diff --git a/man/bundle-open.1 b/lib/bundler/man/bundle-open.1 index 631280c969..7131bfad9f 100644 --- a/man/bundle-open.1 +++ b/lib/bundler/man/bundle-open.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "BUNDLE\-OPEN" "1" "November 2020" "" "" +.TH "BUNDLE\-OPEN" "1" "December 2020" "" "" . .SH "NAME" \fBbundle\-open\fR \- Opens the source directory for a gem in your bundle diff --git a/man/bundle-outdated.1 b/lib/bundler/man/bundle-outdated.1 index 66cfe1a5f7..8c6ce260c8 100644 --- a/man/bundle-outdated.1 +++ b/lib/bundler/man/bundle-outdated.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "BUNDLE\-OUTDATED" "1" "November 2020" "" "" +.TH "BUNDLE\-OUTDATED" "1" "December 2020" "" "" . .SH "NAME" \fBbundle\-outdated\fR \- List installed gems with newer versions available diff --git a/man/bundle-platform.1 b/lib/bundler/man/bundle-platform.1 index 9fda7cb92c..cd8eeb29c0 100644 --- a/man/bundle-platform.1 +++ b/lib/bundler/man/bundle-platform.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "BUNDLE\-PLATFORM" "1" "November 2020" "" "" +.TH "BUNDLE\-PLATFORM" "1" "December 2020" "" "" . .SH "NAME" \fBbundle\-platform\fR \- Displays platform compatibility information diff --git a/man/bundle-pristine.1 b/lib/bundler/man/bundle-pristine.1 index 4561081746..4fc59626bd 100644 --- a/man/bundle-pristine.1 +++ b/lib/bundler/man/bundle-pristine.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "BUNDLE\-PRISTINE" "1" "November 2020" "" "" +.TH "BUNDLE\-PRISTINE" "1" "December 2020" "" "" . .SH "NAME" \fBbundle\-pristine\fR \- Restores installed gems to their pristine condition diff --git a/man/bundle-remove.1 b/lib/bundler/man/bundle-remove.1 index b649f62673..764b33527a 100644 --- a/man/bundle-remove.1 +++ b/lib/bundler/man/bundle-remove.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "BUNDLE\-REMOVE" "1" "November 2020" "" "" +.TH "BUNDLE\-REMOVE" "1" "December 2020" "" "" . .SH "NAME" \fBbundle\-remove\fR \- Removes gems from the Gemfile diff --git a/man/bundle-show.1 b/lib/bundler/man/bundle-show.1 index 1b0608f75a..25cbddf5fb 100644 --- a/man/bundle-show.1 +++ b/lib/bundler/man/bundle-show.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "BUNDLE\-SHOW" "1" "November 2020" "" "" +.TH "BUNDLE\-SHOW" "1" "December 2020" "" "" . .SH "NAME" \fBbundle\-show\fR \- Shows all the gems in your bundle, or the path to a gem diff --git a/man/bundle-update.1 b/lib/bundler/man/bundle-update.1 index f9922f6618..a97692911c 100644 --- a/man/bundle-update.1 +++ b/lib/bundler/man/bundle-update.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "BUNDLE\-UPDATE" "1" "November 2020" "" "" +.TH "BUNDLE\-UPDATE" "1" "December 2020" "" "" . .SH "NAME" \fBbundle\-update\fR \- Update your gems to the latest available versions diff --git a/man/bundle-viz.1 b/lib/bundler/man/bundle-viz.1 index 2f68f644bf..c84a0bd8b1 100644 --- a/man/bundle-viz.1 +++ b/lib/bundler/man/bundle-viz.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "BUNDLE\-VIZ" "1" "November 2020" "" "" +.TH "BUNDLE\-VIZ" "1" "December 2020" "" "" . .SH "NAME" \fBbundle\-viz\fR \- Generates a visual dependency graph for your Gemfile diff --git a/man/bundle.1 b/lib/bundler/man/bundle.1 index 232752e914..58043ff91d 100644 --- a/man/bundle.1 +++ b/lib/bundler/man/bundle.1 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "BUNDLE" "1" "November 2020" "" "" +.TH "BUNDLE" "1" "December 2020" "" "" . .SH "NAME" \fBbundle\fR \- Ruby Dependency Management diff --git a/man/gemfile.5 b/lib/bundler/man/gemfile.5 index f501db2b66..d6c26d91ef 100644 --- a/man/gemfile.5 +++ b/lib/bundler/man/gemfile.5 @@ -1,7 +1,7 @@ .\" generated with Ronn/v0.7.3 .\" http://github.com/rtomayko/ronn/tree/0.7.3 . -.TH "GEMFILE" "5" "November 2020" "" "" +.TH "GEMFILE" "5" "December 2020" "" "" . .SH "NAME" \fBGemfile\fR \- A format for describing gem dependencies for Ruby programs @@ -507,7 +507,7 @@ gem "rails", :git => "git://github\.com/rails/rails\.git" Since the \fBgithub\fR method is a specialization of \fBgit_source\fR, it accepts a \fB:branch\fR named argument\. . .SS "GIST" -If the git repository you want to use is hosted as a Github Gist and is public, you can use the :gist shorthand to specify the gist identifier (without the trailing "\.git")\. +If the git repository you want to use is hosted as a GitHub Gist and is public, you can use the :gist shorthand to specify the gist identifier (without the trailing "\.git")\. . .IP "" 4 . diff --git a/lib/bundler/man/gemfile.5.ronn b/lib/bundler/man/gemfile.5.ronn index 994f0d66bd..ea7cf40e63 100644 --- a/lib/bundler/man/gemfile.5.ronn +++ b/lib/bundler/man/gemfile.5.ronn @@ -374,7 +374,7 @@ Since the `github` method is a specialization of `git_source`, it accepts a `:br ### GIST -If the git repository you want to use is hosted as a Github Gist and is public, you can use +If the git repository you want to use is hosted as a GitHub Gist and is public, you can use the :gist shorthand to specify the gist identifier (without the trailing ".git"). gem "the_hatch", :gist => "4815162342" diff --git a/lib/bundler/man/index.txt b/lib/bundler/man/index.txt new file mode 100644 index 0000000000..ef2956b2f9 --- /dev/null +++ b/lib/bundler/man/index.txt @@ -0,0 +1,25 @@ +Gemfile(5) gemfile.5 +bundle(1) bundle.1 +bundle-add(1) bundle-add.1 +bundle-binstubs(1) bundle-binstubs.1 +bundle-cache(1) bundle-cache.1 +bundle-check(1) bundle-check.1 +bundle-clean(1) bundle-clean.1 +bundle-config(1) bundle-config.1 +bundle-doctor(1) bundle-doctor.1 +bundle-exec(1) bundle-exec.1 +bundle-gem(1) bundle-gem.1 +bundle-info(1) bundle-info.1 +bundle-init(1) bundle-init.1 +bundle-inject(1) bundle-inject.1 +bundle-install(1) bundle-install.1 +bundle-list(1) bundle-list.1 +bundle-lock(1) bundle-lock.1 +bundle-open(1) bundle-open.1 +bundle-outdated(1) bundle-outdated.1 +bundle-platform(1) bundle-platform.1 +bundle-pristine(1) bundle-pristine.1 +bundle-remove(1) bundle-remove.1 +bundle-show(1) bundle-show.1 +bundle-update(1) bundle-update.1 +bundle-viz(1) bundle-viz.1 diff --git a/lib/bundler/process_lock.rb b/lib/bundler/process_lock.rb index cba4fcdba5..a5cc614e20 100644 --- a/lib/bundler/process_lock.rb +++ b/lib/bundler/process_lock.rb @@ -12,7 +12,7 @@ module Bundler yield f.flock(File::LOCK_UN) end - rescue Errno::EACCES, Errno::ENOLCK, *[SharedHelpers.const_get_safely(:ENOTSUP, Errno)].compact + rescue Errno::EACCES, Errno::ENOLCK, Errno::ENOTSUP # In the case the user does not have access to # create the lock file or is using NFS where # locks are not available we skip locking. diff --git a/lib/bundler/shared_helpers.rb b/lib/bundler/shared_helpers.rb index ca0ab67fb8..a56a3bff4b 100644 --- a/lib/bundler/shared_helpers.rb +++ b/lib/bundler/shared_helpers.rb @@ -109,7 +109,7 @@ module Bundler raise VirtualProtocolError.new rescue Errno::ENOSPC raise NoSpaceOnDeviceError.new(path, action) - rescue *[const_get_safely(:ENOTSUP, Errno)].compact + rescue Errno::ENOTSUP raise OperationNotSupportedError.new(path, action) rescue Errno::EEXIST, Errno::ENOENT raise @@ -117,13 +117,6 @@ module Bundler raise GenericSystemCallError.new(e, "There was an error accessing `#{path}`.") end - def const_get_safely(constant_name, namespace) - const_in_namespace = namespace.constants.include?(constant_name.to_s) || - namespace.constants.include?(constant_name.to_sym) - return nil unless const_in_namespace - namespace.const_get(constant_name) - end - def major_deprecation(major_version, message, print_caller_location: false) if print_caller_location caller_location = caller_locations(2, 2).first diff --git a/lib/bundler/source/git/git_proxy.rb b/lib/bundler/source/git/git_proxy.rb index 7ac47044b3..dd65c674d8 100644 --- a/lib/bundler/source/git/git_proxy.rb +++ b/lib/bundler/source/git/git_proxy.rb @@ -67,13 +67,13 @@ module Bundler def branch @branch ||= allowed_with_path do - git("rev-parse --abbrev-ref HEAD", :dir => path).strip + git("rev-parse", "--abbrev-ref", "HEAD", :dir => path).strip end end def contains?(commit) allowed_with_path do - result, status = git_null("branch --contains #{commit}", :dir => path) + result, status = git_null("branch", "--contains", commit, :dir => path) status.success? && result =~ /^\* (.*)$/ end end @@ -88,20 +88,22 @@ module Bundler def checkout return if path.exist? && has_revision_cached? - extra_ref = "#{Shellwords.shellescape(ref)}:#{Shellwords.shellescape(ref)}" if ref && ref.start_with?("refs/") + extra_ref = "#{ref}:#{ref}" if ref && ref.start_with?("refs/") Bundler.ui.info "Fetching #{URICredentialsFilter.credential_filtered_uri(uri)}" + configured_uri = configured_uri_for(uri).to_s + unless path.exist? SharedHelpers.filesystem_access(path.dirname) do |p| FileUtils.mkdir_p(p) end - git_retry %(clone #{uri_escaped_with_configured_credentials} "#{path}" --bare --no-hardlinks --quiet) + git_retry "clone", configured_uri, path.to_s, "--bare", "--no-hardlinks", "--quiet" return unless extra_ref end with_path do - git_retry %(fetch --force --quiet --tags #{uri_escaped_with_configured_credentials} "refs/heads/*:refs/heads/*" #{extra_ref}), :dir => path + git_retry(*["fetch", "--force", "--quiet", "--tags", configured_uri, "refs/heads/*:refs/heads/*", extra_ref].compact, :dir => path) end end @@ -115,7 +117,7 @@ module Bundler SharedHelpers.filesystem_access(destination) do |p| FileUtils.rm_rf(p) end - git_retry %(clone --no-checkout --quiet "#{path}" "#{destination}") + git_retry "clone", "--no-checkout", "--quiet", path.to_s, destination.to_s File.chmod(((File.stat(destination).mode | 0o777) & ~File.umask), destination) rescue Errno::EEXIST => e file_path = e.message[%r{.*?((?:[a-zA-Z]:)?/.*)}, 1] @@ -125,46 +127,45 @@ module Bundler end end # method 2 - git_retry %(fetch --force --quiet --tags "#{path}"), :dir => destination + git_retry "fetch", "--force", "--quiet", "--tags", path.to_s, :dir => destination begin - git "reset --hard #{@revision}", :dir => destination + git "reset", "--hard", @revision, :dir => destination rescue GitCommandError => e raise MissingGitRevisionError.new(e.command, path, destination, @revision, URICredentialsFilter.credential_filtered_uri(uri)) end if submodules - git_retry "submodule update --init --recursive", :dir => destination + git_retry "submodule", "update", "--init", "--recursive", :dir => destination elsif Gem::Version.create(version) >= Gem::Version.create("2.9.0") inner_command = "git -C $toplevel submodule deinit --force $sm_path" - inner_command = inner_command.gsub("$") { '\$' } unless Bundler::WINDOWS - git_retry "submodule foreach --quiet \"#{inner_command}\"", :dir => destination + git_retry "submodule", "foreach", "--quiet", inner_command, :dir => destination end end private - def git_null(command, dir: SharedHelpers.pwd) + def git_null(*command, dir: SharedHelpers.pwd) check_allowed(command) out, status = SharedHelpers.with_clean_git_env do - capture_and_ignore_stderr("git #{command}", :chdir => dir.to_s) + capture_and_ignore_stderr("git", "-C", dir.to_s, *command) end [URICredentialsFilter.credential_filtered_string(out, uri), status] end - def git_retry(command, dir: SharedHelpers.pwd) - Bundler::Retry.new("`git #{URICredentialsFilter.credential_filtered_string(command, uri)}`", GitNotAllowedError).attempts do - git(command, :dir => dir) + def git_retry(*command, dir: SharedHelpers.pwd) + Bundler::Retry.new("`git -C #{dir} #{URICredentialsFilter.credential_filtered_string(command.shelljoin, uri)}`", GitNotAllowedError).attempts do + git(*command, :dir => dir) end end - def git(command, dir: SharedHelpers.pwd) + def git(*command, dir: SharedHelpers.pwd) command_with_no_credentials = check_allowed(command) out, status = SharedHelpers.with_clean_git_env do - capture_and_filter_stderr(uri, "git #{command}", :chdir => dir.to_s) + capture_and_filter_stderr("git", "-C", dir.to_s, *command) end raise GitCommandError.new(command_with_no_credentials, path, dir) unless status.success? @@ -174,7 +175,7 @@ module Bundler def has_revision_cached? return unless @revision - with_path { git("cat-file -e #{@revision}", :dir => path) } + with_path { git("cat-file", "-e", @revision, :dir => path) } true rescue GitError false @@ -186,26 +187,12 @@ module Bundler def find_local_revision allowed_with_path do - git("rev-parse --verify #{Shellwords.shellescape(ref)}", :dir => path).strip + git("rev-parse", "--verify", ref, :dir => path).strip end rescue GitCommandError => e raise MissingGitRevisionError.new(e.command, path, path, ref, URICredentialsFilter.credential_filtered_uri(uri)) end - # Escape the URI for git commands - def uri_escaped_with_configured_credentials - remote = configured_uri_for(uri) - if Bundler::WINDOWS - # Windows quoting requires double quotes only, with double quotes - # inside the string escaped by being doubled. - '"' + remote.gsub('"') { '""' } + '"' - else - # Bash requires single quoted strings, with the single quotes escaped - # by ending the string, escaping the quote, and restarting the string. - "'" + remote.gsub("'") { "'\\''" } + "'" - end - end - # Adds credentials to the URI as Fetcher#configured_uri_for does def configured_uri_for(uri) if /https?:/ =~ uri @@ -233,21 +220,21 @@ module Bundler end def check_allowed(command) - command_with_no_credentials = URICredentialsFilter.credential_filtered_string(command, uri) + command_with_no_credentials = URICredentialsFilter.credential_filtered_string(command.shelljoin, uri) raise GitNotAllowedError.new(command_with_no_credentials) unless allow? command_with_no_credentials end - def capture_and_filter_stderr(uri, cmd, chdir: SharedHelpers.pwd) + def capture_and_filter_stderr(*cmd) require "open3" - return_value, captured_err, status = Open3.capture3(cmd, :chdir => chdir) - Bundler.ui.warn URICredentialsFilter.credential_filtered_string(captured_err, uri) if uri && !captured_err.empty? + return_value, captured_err, status = Open3.capture3(*cmd) + Bundler.ui.warn URICredentialsFilter.credential_filtered_string(captured_err, uri) unless captured_err.empty? [return_value, status] end - def capture_and_ignore_stderr(cmd, chdir: SharedHelpers.pwd) + def capture_and_ignore_stderr(*cmd) require "open3" - return_value, _, status = Open3.capture3(cmd, :chdir => chdir) + return_value, _, status = Open3.capture3(*cmd) [return_value, status] end end diff --git a/lib/bundler/source/rubygems.rb b/lib/bundler/source/rubygems.rb index 97f9808578..79ad278da3 100644 --- a/lib/bundler/source/rubygems.rb +++ b/lib/bundler/source/rubygems.rb @@ -487,8 +487,15 @@ module Bundler uri = spec.remote.uri Bundler.ui.confirm("Fetching #{version_message(spec)}") rubygems_local_path = Bundler.rubygems.download_gem(spec, uri, download_path) + + # older rubygems return varying file:// variants depending on version + rubygems_local_path = rubygems_local_path.gsub(/\Afile:/, "") unless Bundler.rubygems.provides?(">= 3.2.0.rc.2") + rubygems_local_path = rubygems_local_path.gsub(%r{\A//}, "") if Bundler.rubygems.provides?("< 3.1.0") + if rubygems_local_path != local_path - FileUtils.mv(rubygems_local_path, local_path) + SharedHelpers.filesystem_access(local_path) do + FileUtils.mv(rubygems_local_path, local_path) + end end cache_globally(spec, local_path) end diff --git a/lib/bundler/templates/newgem/Rakefile.tt b/lib/bundler/templates/newgem/Rakefile.tt index 5393eb4e22..0b61f1a47f 100644 --- a/lib/bundler/templates/newgem/Rakefile.tt +++ b/lib/bundler/templates/newgem/Rakefile.tt @@ -3,7 +3,16 @@ require "bundler/gem_tasks" <% default_task_names = [config[:test_task]].compact -%> <% case config[:test] -%> -<% when "minitest", "test-unit" -%> +<% when "minitest" -%> +require "rake/testtask" + +Rake::TestTask.new(:test) do |t| + t.libs << "test" + t.libs << "lib" + t.test_files = FileList["test/**/test_*.rb"] +end + +<% when "test-unit" -%> require "rake/testtask" Rake::TestTask.new(:test) do |t| diff --git a/lib/bundler/templates/newgem/newgem.gemspec.tt b/lib/bundler/templates/newgem/newgem.gemspec.tt index 97c3b6c5ab..4ed00bc749 100644 --- a/lib/bundler/templates/newgem/newgem.gemspec.tt +++ b/lib/bundler/templates/newgem/newgem.gemspec.tt @@ -25,7 +25,9 @@ Gem::Specification.new do |spec| # Specify which files should be added to the gem when it is released. # The `git ls-files -z` loads the files in the RubyGem that have been added into git. spec.files = Dir.chdir(File.expand_path(__dir__)) do - `git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) } + `git ls-files -z`.split("\x0").reject do |f| + f.match(%r{\A(?:(?:test|spec|features)/|\.(?:git|travis|circleci)|appveyor)}) + end end spec.bindir = "exe" spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) } diff --git a/lib/bundler/templates/newgem/test/minitest/newgem_test.rb.tt b/lib/bundler/templates/newgem/test/minitest/test_newgem.rb.tt index 9e005d69a8..5eb8fcbf9d 100644 --- a/lib/bundler/templates/newgem/test/minitest/newgem_test.rb.tt +++ b/lib/bundler/templates/newgem/test/minitest/test_newgem.rb.tt @@ -2,7 +2,7 @@ require "test_helper" -class <%= config[:constant_name] %>Test < Minitest::Test +class Test<%= config[:constant_name] %> < Minitest::Test def test_that_it_has_a_version_number refute_nil ::<%= config[:constant_name] %>::VERSION end diff --git a/lib/bundler/version.rb b/lib/bundler/version.rb index 8db404377c..0c0d9d360d 100644 --- a/lib/bundler/version.rb +++ b/lib/bundler/version.rb @@ -1,7 +1,7 @@ # frozen_string_literal: false module Bundler - VERSION = "2.2.3".freeze + VERSION = "2.3.0.dev".freeze def self.bundler_major_version @bundler_major_version ||= VERSION.split(".").first.to_i diff --git a/spec/bundler/bundler/definition_spec.rb b/spec/bundler/bundler/definition_spec.rb index dcdde75315..5f8b88a101 100644 --- a/spec/bundler/bundler/definition_spec.rb +++ b/spec/bundler/bundler/definition_spec.rb @@ -31,6 +31,16 @@ RSpec.describe Bundler::Definition do to raise_error(Bundler::TemporaryResourceError, /temporarily unavailable/) end end + context "when Bundler::Definition.no_lock is set to true" do + subject { Bundler::Definition.new(nil, [], Bundler::SourceList.new, []) } + before { Bundler::Definition.no_lock = true } + after { Bundler::Definition.no_lock = false } + + it "does not create a lock file" do + subject.lock("Gemfile.lock") + expect(File.file?("Gemfile.lock")).to eq false + end + end end describe "detects changes" do diff --git a/spec/bundler/bundler/env_spec.rb b/spec/bundler/bundler/env_spec.rb index ac65c34b0d..2cdead6eac 100644 --- a/spec/bundler/bundler/env_spec.rb +++ b/spec/bundler/bundler/env_spec.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true require "bundler/settings" +require "openssl" RSpec.describe Bundler::Env do let(:git_proxy_stub) { Bundler::Source::Git::GitProxy.new(nil, nil, nil) } diff --git a/spec/bundler/bundler/gem_helper_spec.rb b/spec/bundler/bundler/gem_helper_spec.rb index 48af7867b4..30befdf40c 100644 --- a/spec/bundler/bundler/gem_helper_spec.rb +++ b/spec/bundler/bundler/gem_helper_spec.rb @@ -256,6 +256,16 @@ RSpec.describe Bundler::GemHelper do Rake.application["release"].invoke end + + it "also works when releasing from an ambiguous reference" do + # Create a branch with the same name as the tag + sys_exec("git checkout -b v#{app_version}", :dir => app_path) + sys_exec("git push -u origin v#{app_version}", :dir => app_path) + + expect(subject).to receive(:rubygem_push).with(app_gem_path.to_s) + + Rake.application["release"].invoke + end end context "on releasing with a custom tag prefix" do diff --git a/spec/bundler/bundler/plugin_spec.rb b/spec/bundler/bundler/plugin_spec.rb index 8c95723bcc..c1c88ce480 100644 --- a/spec/bundler/bundler/plugin_spec.rb +++ b/spec/bundler/bundler/plugin_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require_relative "../support/streams" - RSpec.describe Bundler::Plugin do Plugin = Bundler::Plugin @@ -296,11 +294,9 @@ RSpec.describe Bundler::Plugin do end it "executes the hook" do - out = capture(:stdout) do + expect do Plugin.hook(Bundler::Plugin::Events::EVENT_1) - end.strip - - expect(out).to eq("hook for event 1") + end.to output("hook for event 1\n").to_stdout end context "single plugin declaring more than one hook" do @@ -311,12 +307,10 @@ RSpec.describe Bundler::Plugin do RUBY it "evals plugins.rb once" do - out = capture(:stdout) do + expect do Plugin.hook(Bundler::Plugin::Events::EVENT_1) Plugin.hook(Bundler::Plugin::Events::EVENT_2) - end.strip - - expect(out).to eq("loaded") + end.to output("loaded\n").to_stdout end end @@ -326,11 +320,9 @@ RSpec.describe Bundler::Plugin do RUBY it "is passed to the hook" do - out = capture(:stdout) do + expect do Plugin.hook(Bundler::Plugin::Events::EVENT_1) { puts "win" } - end.strip - - expect(out).to eq("win") + end.to output("win\n").to_stdout end end end diff --git a/spec/bundler/bundler/shared_helpers_spec.rb b/spec/bundler/bundler/shared_helpers_spec.rb index 97647dc6eb..68a24be31c 100644 --- a/spec/bundler/bundler/shared_helpers_spec.rb +++ b/spec/bundler/bundler/shared_helpers_spec.rb @@ -494,28 +494,4 @@ RSpec.describe Bundler::SharedHelpers do end end end - - describe "#const_get_safely" do - module TargetNamespace - VALID_CONSTANT = 1 - end - - context "when the namespace does have the requested constant" do - it "returns the value of the requested constant" do - expect(subject.const_get_safely(:VALID_CONSTANT, TargetNamespace)).to eq(1) - end - end - - context "when the requested constant is passed as a string" do - it "returns the value of the requested constant" do - expect(subject.const_get_safely("VALID_CONSTANT", TargetNamespace)).to eq(1) - end - end - - context "when the namespace does not have the requested constant" do - it "returns nil" do - expect(subject.const_get_safely("INVALID_CONSTANT", TargetNamespace)).to be_nil - end - end - end end diff --git a/spec/bundler/bundler/source/git/git_proxy_spec.rb b/spec/bundler/bundler/source/git/git_proxy_spec.rb index 4744e0cd4c..35702d7763 100644 --- a/spec/bundler/bundler/source/git/git_proxy_spec.rb +++ b/spec/bundler/bundler/source/git/git_proxy_spec.rb @@ -11,21 +11,21 @@ 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") do - expect(subject).to receive(:git_retry).with(match("https://u:[email protected]/rubygems/rubygems.git")) + expect(subject).to receive(:git_retry).with("clone", "https://u:[email protected]/rubygems/rubygems.git", any_args) subject.checkout end end it "adds username and password to URI for host" do Bundler.settings.temporary("github.com" => "u:p") do - expect(subject).to receive(:git_retry).with(match("https://u:[email protected]/rubygems/rubygems.git")) + expect(subject).to receive(:git_retry).with("clone", "https://u:[email protected]/rubygems/rubygems.git", any_args) subject.checkout end end it "does not add username and password to mismatched URI" do Bundler.settings.temporary("https://u:[email protected]/rubygems/rubygems-mismatch.git" => "u:p") do - expect(subject).to receive(:git_retry).with(match(uri)) + expect(subject).to receive(:git_retry).with("clone", uri, any_args) subject.checkout end end @@ -34,7 +34,7 @@ RSpec.describe Bundler::Source::Git::GitProxy do Bundler.settings.temporary("github.com" => "u:p") do original = "https://orig:[email protected]/rubygems/rubygems.git" subject = described_class.new(Pathname("path"), original, "HEAD") - expect(subject).to receive(:git_retry).with(match(original)) + expect(subject).to receive(:git_retry).with("clone", original, any_args) subject.checkout end end @@ -129,12 +129,12 @@ RSpec.describe Bundler::Source::Git::GitProxy do context "when given a SHA as a revision" do let(:revision) { "abcd" * 10 } - let(:command) { "reset --hard #{revision}" } + let(:command) { ["reset", "--hard", revision] } it "fails gracefully when resetting to the revision fails" do - expect(subject).to receive(:git_retry).with(start_with("clone ")) { destination.mkpath } - expect(subject).to receive(:git_retry).with(start_with("fetch "), :dir => destination) - expect(subject).to receive(:git).with(command, :dir => destination).and_raise(Bundler::Source::Git::GitCommandError.new(command, cache, destination)) + expect(subject).to receive(:git_retry).with("clone", any_args) { destination.mkpath } + expect(subject).to receive(:git_retry).with("fetch", any_args, :dir => destination) + expect(subject).to receive(:git).with(*command, :dir => destination).and_raise(Bundler::Source::Git::GitCommandError.new(command, cache, destination)) expect(subject).not_to receive(:git) expect { subject.copy_to(destination, submodules) }. diff --git a/spec/bundler/bundler/ui/shell_spec.rb b/spec/bundler/bundler/ui/shell_spec.rb index 536014c6aa..15120a8a41 100644 --- a/spec/bundler/bundler/ui/shell_spec.rb +++ b/spec/bundler/bundler/ui/shell_spec.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require_relative "../../support/streams" - RSpec.describe Bundler::UI::Shell do subject { described_class.new } @@ -43,10 +41,19 @@ RSpec.describe Bundler::UI::Shell do 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") + output = begin + result = StringIO.new + result.close + + $stderr = result + + subject.error("Something went wrong") + + result.string + ensure + $stderr = STDERR + end + expect(output).to_not eq("Something went wrong") end end end diff --git a/spec/bundler/commands/cache_spec.rb b/spec/bundler/commands/cache_spec.rb index 173389c068..f4a57039ad 100644 --- a/spec/bundler/commands/cache_spec.rb +++ b/spec/bundler/commands/cache_spec.rb @@ -221,7 +221,7 @@ RSpec.describe "bundle cache" do end end - bundle "config --local without wo" + bundle "config set --local without wo" install_gemfile <<-G source "file:#{gem_repo1}" gem "rack" @@ -237,7 +237,7 @@ RSpec.describe "bundle cache" do expect(the_bundle).to include_gem "rack 1.0" expect(the_bundle).not_to include_gems "weakling", "uninstallable" - bundle "config --local without wo" + bundle "config set --local without wo" bundle :install expect(the_bundle).to include_gem "rack 1.0" expect(the_bundle).not_to include_gems "weakling", "uninstallable" @@ -254,7 +254,7 @@ RSpec.describe "bundle cache" do end subject do - bundle "config --local frozen true" + bundle "config set --local frozen true" bundle :cache, :raise_on_error => false end @@ -304,8 +304,8 @@ RSpec.describe "bundle install with gem sources" do simulate_new_machine FileUtils.rm_rf gem_repo2 - bundle "config --local deployment true" - bundle "config --local path vendor/bundle" + bundle "config set --local deployment true" + bundle "config set --local path vendor/bundle" bundle :install expect(the_bundle).to include_gems "rack 1.0.0" end diff --git a/spec/bundler/commands/check_spec.rb b/spec/bundler/commands/check_spec.rb index fdf3bc7d51..2fb03186be 100644 --- a/spec/bundler/commands/check_spec.rb +++ b/spec/bundler/commands/check_spec.rb @@ -124,7 +124,7 @@ RSpec.describe "bundle check" do gem "rack", :group => :foo G - bundle "config --local without foo" + bundle "config set --local without foo" bundle :install gemfile <<-G @@ -217,7 +217,7 @@ RSpec.describe "bundle check" do gem "foo" G - bundle "config --local deployment true" + bundle "config set --local deployment true" bundle "install" FileUtils.rm(bundled_app_lock) diff --git a/spec/bundler/commands/config_spec.rb b/spec/bundler/commands/config_spec.rb index 70e3feff00..a7c0813210 100644 --- a/spec/bundler/commands/config_spec.rb +++ b/spec/bundler/commands/config_spec.rb @@ -45,7 +45,7 @@ RSpec.describe ".bundle/config" do it "can be moved with an environment variable" do ENV["BUNDLE_APP_CONFIG"] = tmp("foo/bar").to_s - bundle "config --local path vendor/bundle" + bundle "config set --local path vendor/bundle" bundle "install" expect(bundled_app(".bundle")).not_to exist @@ -57,7 +57,7 @@ RSpec.describe ".bundle/config" do FileUtils.mkdir_p bundled_app("omg") ENV["BUNDLE_APP_CONFIG"] = "../foo" - bundle "config --local path vendor/bundle" + bundle "config set --local path vendor/bundle" bundle "install", :dir => bundled_app("omg") expect(bundled_app(".bundle")).not_to exist diff --git a/spec/bundler/commands/exec_spec.rb b/spec/bundler/commands/exec_spec.rb index 1449bb642e..6485eb6a5a 100644 --- a/spec/bundler/commands/exec_spec.rb +++ b/spec/bundler/commands/exec_spec.rb @@ -295,7 +295,7 @@ RSpec.describe "bundle exec" do end it "handles gems installed with --without" do - bundle "config --local without middleware" + bundle "config set --local without middleware" install_gemfile <<-G source "#{file_uri_for(gem_repo1)}" gem "rack" # rack 0.9.1 and 1.0 exist @@ -448,35 +448,35 @@ RSpec.describe "bundle exec" do with_fake_man do bundle "#{exec} --help cat" end - expect(out).to include(%(["#{root}/man/bundle-exec.1"])) + expect(out).to include(%(["#{man_dir}/bundle-exec.1"])) end it "shows bundle-exec's man page when --help is before exec" do with_fake_man do bundle "--help #{exec}" end - expect(out).to include(%(["#{root}/man/bundle-exec.1"])) + expect(out).to include(%(["#{man_dir}/bundle-exec.1"])) end it "shows bundle-exec's man page when -h is before exec" do with_fake_man do bundle "-h #{exec}" end - expect(out).to include(%(["#{root}/man/bundle-exec.1"])) + expect(out).to include(%(["#{man_dir}/bundle-exec.1"])) end it "shows bundle-exec's man page when --help is after exec" do with_fake_man do bundle "#{exec} --help" end - expect(out).to include(%(["#{root}/man/bundle-exec.1"])) + expect(out).to include(%(["#{man_dir}/bundle-exec.1"])) end it "shows bundle-exec's man page when -h is after exec" do with_fake_man do bundle "#{exec} -h" end - expect(out).to include(%(["#{root}/man/bundle-exec.1"])) + expect(out).to include(%(["#{man_dir}/bundle-exec.1"])) end end end diff --git a/spec/bundler/commands/help_spec.rb b/spec/bundler/commands/help_spec.rb index 03d34ef692..f72763900e 100644 --- a/spec/bundler/commands/help_spec.rb +++ b/spec/bundler/commands/help_spec.rb @@ -5,14 +5,14 @@ RSpec.describe "bundle help" do with_fake_man do bundle "help gemfile" end - expect(out).to eq(%(["#{root}/man/gemfile.5"])) + expect(out).to eq(%(["#{man_dir}/gemfile.5"])) end it "prefixes bundle commands with bundle- when finding the man files" do with_fake_man do bundle "help install" end - expect(out).to eq(%(["#{root}/man/bundle-install.1"])) + expect(out).to eq(%(["#{man_dir}/bundle-install.1"])) end it "simply outputs the human readable file when there is no man on the path" do @@ -45,28 +45,28 @@ RSpec.describe "bundle help" do with_fake_man do bundle "install --help" end - expect(out).to eq(%(["#{root}/man/bundle-install.1"])) + expect(out).to eq(%(["#{man_dir}/bundle-install.1"])) end it "is called when the --help flag is used before the command" do with_fake_man do bundle "--help install" end - expect(out).to eq(%(["#{root}/man/bundle-install.1"])) + expect(out).to eq(%(["#{man_dir}/bundle-install.1"])) end it "is called when the -h flag is used before the command" do with_fake_man do bundle "-h install" end - expect(out).to eq(%(["#{root}/man/bundle-install.1"])) + expect(out).to eq(%(["#{man_dir}/bundle-install.1"])) end it "is called when the -h flag is used after the command" do with_fake_man do bundle "install -h" end - expect(out).to eq(%(["#{root}/man/bundle-install.1"])) + expect(out).to eq(%(["#{man_dir}/bundle-install.1"])) end it "has helpful output when using --help flag for a non-existent command" do @@ -80,11 +80,11 @@ RSpec.describe "bundle help" do with_fake_man do bundle "--help" end - expect(out).to eq(%(["#{root}/man/bundle.1"])) + expect(out).to eq(%(["#{man_dir}/bundle.1"])) with_fake_man do bundle "-h" end - expect(out).to eq(%(["#{root}/man/bundle.1"])) + expect(out).to eq(%(["#{man_dir}/bundle.1"])) end end diff --git a/spec/bundler/commands/install_spec.rb b/spec/bundler/commands/install_spec.rb index 043805df79..c91864dbb8 100644 --- a/spec/bundler/commands/install_spec.rb +++ b/spec/bundler/commands/install_spec.rb @@ -291,7 +291,7 @@ RSpec.describe "bundle install with gem sources" do end it "works" do - bundle "config --local path vendor" + bundle "config set --local path vendor" bundle "install" expect(the_bundle).to include_gems "rack 1.0" end @@ -580,8 +580,31 @@ RSpec.describe "bundle install with gem sources" do end describe "when bundle path does not have write access", :permissions do + let(:bundle_path) { bundled_app("vendor") } + + before do + FileUtils.mkdir_p(bundle_path) + gemfile <<-G + source "#{file_uri_for(gem_repo1)}" + gem 'rack' + G + end + + it "should display a proper message to explain the problem" do + FileUtils.chmod(0o500, bundle_path) + + bundle "config set --local path vendor" + bundle :install, :raise_on_error => false + expect(err).to include(bundle_path.to_s) + expect(err).to include("grant write permissions") + end + end + + describe "when bundle cache path does not have write access", :permissions do + let(:cache_path) { bundled_app("vendor/#{Bundler.ruby_scope}/cache") } + before do - FileUtils.mkdir_p(bundled_app("vendor")) + FileUtils.mkdir_p(cache_path) gemfile <<-G source "#{file_uri_for(gem_repo1)}" gem 'rack' @@ -589,11 +612,11 @@ RSpec.describe "bundle install with gem sources" do end it "should display a proper message to explain the problem" do - FileUtils.chmod(0o500, bundled_app("vendor")) + FileUtils.chmod(0o500, cache_path) - bundle "config --local path vendor" + bundle "config set --local path vendor" bundle :install, :raise_on_error => false - expect(err).to include(bundled_app("vendor").to_s) + expect(err).to include(cache_path.to_s) expect(err).to include("grant write permissions") end end @@ -604,7 +627,7 @@ RSpec.describe "bundle install with gem sources" do source "#{file_uri_for(gem_repo1)}" gem "rack" G - bundle "config --local path bundle" + bundle "config set --local path bundle" bundle "install", :standalone => true end diff --git a/spec/bundler/commands/newgem_spec.rb b/spec/bundler/commands/newgem_spec.rb index 421ffa80c6..8aca745bef 100644 --- a/spec/bundler/commands/newgem_spec.rb +++ b/spec/bundler/commands/newgem_spec.rb @@ -536,7 +536,7 @@ RSpec.describe "bundle gem" do end it "builds spec skeleton" do - expect(bundled_app("#{gem_name}/test/#{require_path}_test.rb")).to exist + expect(bundled_app("#{gem_name}/test/test_#{require_path}.rb")).to exist expect(bundled_app("#{gem_name}/test/test_helper.rb")).to exist end end @@ -556,7 +556,7 @@ RSpec.describe "bundle gem" do end it "builds spec skeleton" do - expect(bundled_app("#{gem_name}/test/#{require_path}_test.rb")).to exist + expect(bundled_app("#{gem_name}/test/test_#{require_path}.rb")).to exist expect(bundled_app("#{gem_name}/test/test_helper.rb")).to exist end @@ -565,11 +565,11 @@ RSpec.describe "bundle gem" do end it "requires 'test_helper'" do - expect(bundled_app("#{gem_name}/test/#{require_path}_test.rb").read).to include(%(require "test_helper")) + expect(bundled_app("#{gem_name}/test/test_#{require_path}.rb").read).to include(%(require "test_helper")) end it "creates a default test which fails" do - expect(bundled_app("#{gem_name}/test/#{require_path}_test.rb").read).to include("assert false") + expect(bundled_app("#{gem_name}/test/test_#{require_path}.rb").read).to include("assert false") end end @@ -589,7 +589,7 @@ RSpec.describe "bundle gem" do Rake::TestTask.new(:test) do |t| t.libs << "test" t.libs << "lib" - t.test_files = FileList["test/**/*_test.rb"] + t.test_files = FileList["test/**/test_*.rb"] end task default: :test diff --git a/spec/bundler/commands/post_bundle_message_spec.rb b/spec/bundler/commands/post_bundle_message_spec.rb index 2c965f0ddd..710152e59f 100644 --- a/spec/bundler/commands/post_bundle_message_spec.rb +++ b/spec/bundler/commands/post_bundle_message_spec.rb @@ -29,21 +29,21 @@ RSpec.describe "post bundle message" do expect(out).to include(bundle_complete_message) expect(out).to include(installed_gems_stats) - bundle "config --local without emo" + bundle "config set --local without emo" bundle :install expect(out).to include(bundle_show_message) expect(out).to include("Gems in the group emo were not installed") expect(out).to include(bundle_complete_message) expect(out).to include(installed_gems_stats) - bundle "config --local without emo test" + bundle "config set --local without emo test" bundle :install expect(out).to include(bundle_show_message) expect(out).to include("Gems in the groups emo and test were not installed") expect(out).to include(bundle_complete_message) expect(out).to include("4 Gemfile dependencies, 3 gems now installed.") - bundle "config --local without emo obama test" + bundle "config set --local without emo obama test" bundle :install expect(out).to include(bundle_show_message) expect(out).to include("Gems in the groups emo, obama and test were not installed") @@ -55,28 +55,28 @@ RSpec.describe "post bundle message" do let(:bundle_path) { "./vendor" } it "shows proper messages according to the configured groups" do - bundle "config --local path vendor" + bundle "config set --local path vendor" bundle :install expect(out).to include(bundle_show_path_message) expect(out).to_not include("Gems in the group") expect(out).to include(bundle_complete_message) - bundle "config --local path vendor" - bundle "config --local without emo" + bundle "config set --local path vendor" + bundle "config set --local without emo" bundle :install expect(out).to include(bundle_show_path_message) expect(out).to include("Gems in the group emo were not installed") expect(out).to include(bundle_complete_message) - bundle "config --local path vendor" - bundle "config --local without emo test" + bundle "config set --local path vendor" + bundle "config set --local without emo test" bundle :install expect(out).to include(bundle_show_path_message) expect(out).to include("Gems in the groups emo and test were not installed") expect(out).to include(bundle_complete_message) - bundle "config --local path vendor" - bundle "config --local without emo obama test" + bundle "config set --local path vendor" + bundle "config set --local without emo obama test" bundle :install expect(out).to include(bundle_show_path_message) expect(out).to include("Gems in the groups emo, obama and test were not installed") @@ -88,7 +88,7 @@ RSpec.describe "post bundle message" do let(:bundle_path) { bundled_app("cache") } it "shows proper messages according to the configured groups" do - bundle "config --local path #{bundle_path}" + bundle "config set --local path #{bundle_path}" bundle :install expect(out).to include("Bundled gems are installed into `./cache`") expect(out).to_not include("Gems in the group") @@ -100,7 +100,7 @@ RSpec.describe "post bundle message" do let(:bundle_path) { tmp("not_bundled_app") } it "shows proper messages according to the configured groups" do - bundle "config --local path #{bundle_path}" + bundle "config set --local path #{bundle_path}" bundle :install expect(out).to include("Bundled gems are installed into `#{tmp("not_bundled_app")}`") expect(out).to_not include("Gems in the group") @@ -193,19 +193,19 @@ The source does not contain any versions of 'not-a-gem' expect(out).not_to include("Gems in the groups") expect(out).to include(bundle_updated_message) - bundle "config --local without emo" + bundle "config set --local without emo" bundle :install bundle :update, :all => true expect(out).to include("Gems in the group emo were not updated") expect(out).to include(bundle_updated_message) - bundle "config --local without emo test" + bundle "config set --local without emo test" bundle :install bundle :update, :all => true expect(out).to include("Gems in the groups emo and test were not updated") expect(out).to include(bundle_updated_message) - bundle "config --local without emo obama test" + bundle "config set --local without emo obama test" bundle :install bundle :update, :all => true expect(out).to include("Gems in the groups emo, obama and test were not updated") diff --git a/spec/bundler/install/deploy_spec.rb b/spec/bundler/install/deploy_spec.rb index 357f4512f1..5f4fc71499 100644 --- a/spec/bundler/install/deploy_spec.rb +++ b/spec/bundler/install/deploy_spec.rb @@ -44,8 +44,8 @@ RSpec.describe "install in deployment or frozen mode" do it "still works if you are not in the app directory and specify --gemfile" do bundle "install" simulate_new_machine - bundle "config --local deployment true" - bundle "config --local path vendor/bundle" + bundle "config set --local deployment true" + bundle "config set --local path vendor/bundle" bundle "install --gemfile #{tmp}/bundled_app/Gemfile", :dir => tmp expect(the_bundle).to include_gems "rack 1.0" end @@ -58,8 +58,8 @@ RSpec.describe "install in deployment or frozen mode" do end G bundle :install - bundle "config --local deployment true" - bundle "config --local without test" + bundle "config set --local deployment true" + bundle "config set --local without test" bundle :install end @@ -67,7 +67,7 @@ RSpec.describe "install in deployment or frozen mode" do skip "doesn't find bundle" if Gem.win_platform? bundle :install - bundle "config --local deployment true" + bundle "config set --local deployment true" bundle :install bundle "exec bundle check", :env => { "PATH" => path } end @@ -81,7 +81,7 @@ RSpec.describe "install in deployment or frozen mode" do G bundle :install - bundle "config --local deployment true" + bundle "config set --local deployment true" bundle :install end @@ -92,7 +92,7 @@ RSpec.describe "install in deployment or frozen mode" do gem "rack-obama", ">= 1.0" G - bundle "config --local deployment true" + bundle "config set --local deployment true" bundle :install, :artifice => "endpoint_strict_basic_authentication" end @@ -103,7 +103,7 @@ RSpec.describe "install in deployment or frozen mode" do end G - bundle "config --local deployment true" + bundle "config set --local deployment true" bundle :install expect(the_bundle).to include_gems "rack 1.0" @@ -111,7 +111,7 @@ RSpec.describe "install in deployment or frozen mode" do context "when replacing a host with the same host with credentials" do before do - bundle "config --local path vendor/bundle" + bundle "config set --local path vendor/bundle" bundle "install" gemfile <<-G source "http://user_name:[email protected]/" @@ -215,7 +215,7 @@ RSpec.describe "install in deployment or frozen mode" do gem "rack-obama" G - bundle "config --local deployment true" + bundle "config set --local deployment true" bundle :install, :raise_on_error => false expect(err).to include("deployment mode") expect(err).to include("You have added to the Gemfile") @@ -234,9 +234,9 @@ RSpec.describe "install in deployment or frozen mode" do expect(the_bundle).to include_gems "path_gem 1.0" FileUtils.rm_r lib_path("path_gem-1.0") - bundle "config --local path .bundle" - bundle "config --local without development" - bundle "config --local deployment true" + bundle "config set --local path .bundle" + bundle "config set --local without development" + bundle "config set --local deployment true" bundle :install, :env => { "DEBUG" => "1" } run "puts :WIN" expect(out).to eq("WIN") @@ -252,8 +252,8 @@ RSpec.describe "install in deployment or frozen mode" do expect(the_bundle).to include_gems "path_gem 1.0" FileUtils.rm_r lib_path("path_gem-1.0") - bundle "config --local path .bundle" - bundle "config --local deployment true" + bundle "config set --local path .bundle" + bundle "config set --local deployment true" bundle :install, :raise_on_error => false expect(err).to include("The path `#{lib_path("path_gem-1.0")}` does not exist.") end @@ -324,7 +324,7 @@ RSpec.describe "install in deployment or frozen mode" do gem "activesupport" G - bundle "config --local deployment true" + bundle "config set --local deployment true" bundle :install, :raise_on_error => false expect(err).to include("deployment mode") expect(err).to include("You have added to the Gemfile:\n* activesupport\n\n") @@ -338,7 +338,7 @@ RSpec.describe "install in deployment or frozen mode" do gem "rack", :git => "git://hubz.com" G - bundle "config --local deployment true" + bundle "config set --local deployment true" bundle :install, :raise_on_error => false expect(err).to include("deployment mode") expect(err).to include("You have added to the Gemfile:\n* source: git://hubz.com (at master)") @@ -358,7 +358,7 @@ RSpec.describe "install in deployment or frozen mode" do gem "rack" G - bundle "config --local deployment true" + bundle "config set --local deployment true" bundle :install, :raise_on_error => false 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]}") @@ -382,7 +382,7 @@ RSpec.describe "install in deployment or frozen mode" do gem "foo", :git => "#{lib_path("rack")}" G - bundle "config --local deployment true" + bundle "config set --local deployment true" bundle :install, :raise_on_error => false 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]})`") diff --git a/spec/bundler/install/gemfile/eval_gemfile_spec.rb b/spec/bundler/install/gemfile/eval_gemfile_spec.rb index c42ae7ef79..102f61dc12 100644 --- a/spec/bundler/install/gemfile/eval_gemfile_spec.rb +++ b/spec/bundler/install/gemfile/eval_gemfile_spec.rb @@ -47,7 +47,7 @@ RSpec.describe "bundle install with gemfile that uses eval_gemfile" do # parsed lockfile and the evaluated gemfile. it "bundles with deployment mode configured" do bundle :install - bundle "config --local deployment true" + bundle "config set --local deployment true" bundle :install end end diff --git a/spec/bundler/install/gemfile/gemspec_spec.rb b/spec/bundler/install/gemfile/gemspec_spec.rb index 7a95a8abde..b41a083d92 100644 --- a/spec/bundler/install/gemfile/gemspec_spec.rb +++ b/spec/bundler/install/gemfile/gemspec_spec.rb @@ -291,7 +291,7 @@ RSpec.describe "bundle install from an existing gemspec" do s.add_dependency "activesupport", ">= 1.0.1" end - bundle "config --local deployment true" + bundle "config set --local deployment true" bundle :install, :raise_on_error => false expect(err).to include("changed") @@ -558,7 +558,7 @@ RSpec.describe "bundle install from an existing gemspec" do it "installs the ruby platform gemspec and skips dev deps with `without development` configured" do simulate_platform "ruby" - bundle "config --local without development" + bundle "config set --local without development" install_gemfile <<-G source "#{file_uri_for(gem_repo1)}" gemspec :path => '#{tmp.join("foo")}', :name => 'foo' diff --git a/spec/bundler/install/gemfile/git_spec.rb b/spec/bundler/install/gemfile/git_spec.rb index 7850fad8d0..2e0c0bcf6d 100644 --- a/spec/bundler/install/gemfile/git_spec.rb +++ b/spec/bundler/install/gemfile/git_spec.rb @@ -128,7 +128,7 @@ RSpec.describe "bundle install with git sources" do end it "still works after moving the application directory" do - bundle "config --local path vendor/bundle" + bundle "config set --local path vendor/bundle" bundle "install" FileUtils.mv bundled_app, tmp("bundled_app.bck") @@ -137,7 +137,7 @@ RSpec.describe "bundle install with git sources" do end it "can still install after moving the application directory" do - bundle "config --local path vendor/bundle" + bundle "config set --local path vendor/bundle" bundle "install" FileUtils.mv bundled_app, tmp("bundled_app.bck") @@ -1064,7 +1064,7 @@ RSpec.describe "bundle install with git sources" do simulate_new_machine - bundle "config --local deployment true" + bundle "config set --local deployment true" bundle :install end end diff --git a/spec/bundler/install/gemfile/groups_spec.rb b/spec/bundler/install/gemfile/groups_spec.rb index 567a9b1172..f53315e766 100644 --- a/spec/bundler/install/gemfile/groups_spec.rb +++ b/spec/bundler/install/gemfile/groups_spec.rb @@ -86,7 +86,7 @@ RSpec.describe "bundle install with groups" do end it "installs gems in the default group" do - bundle "config --local without emo" + bundle "config set --local without emo" bundle :install expect(the_bundle).to include_gems "rack 1.0.0", :groups => [:default] end @@ -117,7 +117,7 @@ RSpec.describe "bundle install with groups" do end it "does not install gems from the excluded group" do - bundle "config --local without emo" + bundle "config set --local without emo" bundle :install expect(the_bundle).not_to include_gems "activesupport 2.3.5", :groups => [:default] end @@ -130,13 +130,13 @@ RSpec.describe "bundle install with groups" do end it "does not say it installed gems from the excluded group" do - bundle "config --local without emo" + bundle "config set --local without emo" bundle :install expect(out).not_to include("activesupport") end it "allows Bundler.setup for specific groups" do - bundle "config --local without emo" + bundle "config set --local without emo" bundle :install run("require 'rack'; puts RACK", :default) expect(out).to eq("1.0.0") @@ -151,7 +151,7 @@ RSpec.describe "bundle install with groups" do end G - bundle "config --local without emo" + bundle "config set --local without emo" bundle :install expect(the_bundle).to include_gems "activesupport 2.3.2", :groups => [:default] end @@ -188,7 +188,7 @@ RSpec.describe "bundle install with groups" do end it "installs gems from the optional group when requested" do - bundle "config --local with debugging" + bundle "config set --local with debugging" bundle :install expect(the_bundle).to include_gems "thin 1.0" end @@ -214,13 +214,13 @@ RSpec.describe "bundle install with groups" do end it "removes groups from without when passed at --with", :bundler => "< 3" do - bundle "config --local without emo" + bundle "config set --local without emo" bundle "install --with emo" expect(the_bundle).to include_gems "activesupport 2.3.5" end it "removes groups from with when passed at --without", :bundler => "< 3" do - bundle "config --local with debugging" + bundle "config set --local with debugging" bundle "install --without debugging", :raise_on_error => false expect(the_bundle).not_to include_gem "thin 1.0" end @@ -251,13 +251,13 @@ RSpec.describe "bundle install with groups" do end it "has no effect when listing a not optional group in with" do - bundle "config --local with emo" + bundle "config set --local with emo" bundle :install expect(the_bundle).to include_gems "activesupport 2.3.5" end it "has no effect when listing an optional group in without" do - bundle "config --local without debugging" + bundle "config set --local without debugging" bundle :install expect(the_bundle).not_to include_gems "thin 1.0" end @@ -275,13 +275,13 @@ RSpec.describe "bundle install with groups" do end it "installs gems in the default group" do - bundle "config --local without emo lolercoaster" + bundle "config set --local without emo lolercoaster" bundle :install expect(the_bundle).to include_gems "rack 1.0.0" end it "installs the gem if any of its groups are installed" do - bundle "config --local without emo" + bundle "config set --local without emo" bundle :install expect(the_bundle).to include_gems "rack 1.0.0", "activesupport 2.3.5" end @@ -303,19 +303,19 @@ RSpec.describe "bundle install with groups" do end it "installs the gem unless all groups are excluded" do - bundle "config --local without emo" + bundle "config set --local without emo" bundle :install expect(the_bundle).to include_gems "activesupport 2.3.5" - bundle "config --local without lolercoaster" + bundle "config set --local without lolercoaster" bundle :install expect(the_bundle).to include_gems "activesupport 2.3.5" - bundle "config --local without emo lolercoaster" + bundle "config set --local without emo lolercoaster" bundle :install expect(the_bundle).not_to include_gems "activesupport 2.3.5" - bundle "config --local without 'emo lolercoaster'" + bundle "config set --local without 'emo lolercoaster'" bundle :install expect(the_bundle).not_to include_gems "activesupport 2.3.5" end @@ -336,13 +336,13 @@ RSpec.describe "bundle install with groups" do end it "installs gems in the default group" do - bundle "config --local without emo lolercoaster" + bundle "config set --local without emo lolercoaster" bundle :install expect(the_bundle).to include_gems "rack 1.0.0" end it "installs the gem if any of its groups are installed" do - bundle "config --local without emo" + bundle "config set --local without emo" bundle :install expect(the_bundle).to include_gems "rack 1.0.0", "activesupport 2.3.5" end @@ -380,7 +380,7 @@ RSpec.describe "bundle install with groups" do system_gems "rack-0.9.1" - bundle "config --local without rack" + bundle "config set --local without rack" install_gemfile <<-G source "#{file_uri_for(gem_repo2)}" gem "rack" @@ -404,7 +404,7 @@ RSpec.describe "bundle install with groups" do it "does not hit the remote a second time" do FileUtils.rm_rf gem_repo2 - bundle "config --local without rack" + bundle "config set --local without rack" bundle :install, :verbose => true expect(last_command.stdboth).not_to match(/fetching/i) end diff --git a/spec/bundler/install/gemfile/path_spec.rb b/spec/bundler/install/gemfile/path_spec.rb index f19fe39721..fc40c5e9b9 100644 --- a/spec/bundler/install/gemfile/path_spec.rb +++ b/spec/bundler/install/gemfile/path_spec.rb @@ -131,7 +131,7 @@ RSpec.describe "bundle install with explicit source paths" do gem 'foo', :path => File.expand_path("../foo-1.0", __FILE__) G - bundle "config --local frozen true" + bundle "config set --local frozen true" bundle :install end diff --git a/spec/bundler/install/gemfile/platform_spec.rb b/spec/bundler/install/gemfile/platform_spec.rb index 46fc393fe9..1a3794dffe 100644 --- a/spec/bundler/install/gemfile/platform_spec.rb +++ b/spec/bundler/install/gemfile/platform_spec.rb @@ -291,7 +291,7 @@ RSpec.describe "bundle install across platforms" do gem "rack", "1.0.0" G - bundle "config --local path vendor/bundle" + bundle "config set --local path vendor/bundle" bundle :install FileUtils.mv(vendored_gems, bundled_app("vendor/bundle", Gem.ruby_engine, "1.8")) diff --git a/spec/bundler/install/gemfile/sources_spec.rb b/spec/bundler/install/gemfile/sources_spec.rb index 655f91dd69..75b7b67e98 100644 --- a/spec/bundler/install/gemfile/sources_spec.rb +++ b/spec/bundler/install/gemfile/sources_spec.rb @@ -107,7 +107,7 @@ RSpec.describe "bundle install with gems on multiple sources" do expect(bundled_app("vendor/cache/rack-1.0.0.gem")).to exist expect(bundled_app("vendor/cache/rack-obama-1.0.gem")).to exist - bundle "config --local deployment true" + bundle "config set --local deployment true" bundle :install expect(the_bundle).to include_gems("rack-obama 1.0.0", "rack 1.0.0") @@ -486,7 +486,7 @@ RSpec.describe "bundle install with gems on multiple sources" do gem 'bar', '~> 0.1', :source => '#{file_uri_for(gem_repo4)}' G - bundle "config --local path ../gems/system" + bundle "config set --local path ../gems/system" bundle :install # And then we add some new versions... diff --git a/spec/bundler/install/gems/compact_index_spec.rb b/spec/bundler/install/gems/compact_index_spec.rb index b5fca9c6ad..92cbd26b88 100644 --- a/spec/bundler/install/gems/compact_index_spec.rb +++ b/spec/bundler/install/gems/compact_index_spec.rb @@ -80,8 +80,8 @@ RSpec.describe "compact index api" do G bundle :install, :artifice => "compact_index" - bundle "config --local deployment true" - bundle "config --local path vendor/bundle" + bundle "config set --local deployment true" + bundle "config set --local path vendor/bundle" bundle :install, :artifice => "compact_index" expect(out).to include("Fetching gem metadata from #{source_uri}") expect(the_bundle).to include_gems "rack 1.0.0" @@ -118,7 +118,7 @@ RSpec.describe "compact index api" do bundle :install, :artifice => "compact_index" - bundle "config --local deployment true" + bundle "config set --local deployment true" bundle :install, :artifice => "compact_index" expect(the_bundle).to include_gems("rails 2.3.2") @@ -132,7 +132,7 @@ RSpec.describe "compact index api" do G bundle "install", :artifice => "compact_index" - bundle "config --local deployment true" + bundle "config set --local deployment true" bundle :install, :artifice => "compact_index" expect(the_bundle).to include_gems("foo 1.0") @@ -503,7 +503,7 @@ The checksum of /versions does not match the checksum provided by the server! So G bundle :install, :artifice => "compact_index_extra" - bundle "config --local deployment true" + bundle "config set --local deployment true" bundle :install, :artifice => "compact_index_extra" expect(the_bundle).to include_gems "back_deps 1.0" end diff --git a/spec/bundler/install/gems/dependency_api_spec.rb b/spec/bundler/install/gems/dependency_api_spec.rb index 5e0be89995..c23323682d 100644 --- a/spec/bundler/install/gems/dependency_api_spec.rb +++ b/spec/bundler/install/gems/dependency_api_spec.rb @@ -60,8 +60,8 @@ RSpec.describe "gemcutter's dependency API" do G bundle :install, :artifice => "endpoint" - bundle "config --local deployment true" - bundle "config --local path vendor/bundle" + bundle "config set --local deployment true" + bundle "config set --local path vendor/bundle" bundle :install, :artifice => "endpoint" expect(out).to include("Fetching gem metadata from #{source_uri}") expect(the_bundle).to include_gems "rack 1.0.0" @@ -98,7 +98,7 @@ RSpec.describe "gemcutter's dependency API" do bundle :install, :artifice => "endpoint" - bundle "config --local deployment true" + bundle "config set --local deployment true" bundle :install, :artifice => "endpoint" expect(the_bundle).to include_gems("rails 2.3.2") @@ -112,7 +112,7 @@ RSpec.describe "gemcutter's dependency API" do G bundle "install", :artifice => "endpoint" - bundle "config --local deployment true" + bundle "config set --local deployment true" bundle :install, :artifice => "endpoint" expect(the_bundle).to include_gems("foo 1.0") @@ -475,7 +475,7 @@ RSpec.describe "gemcutter's dependency API" do bundle :install, :artifice => "endpoint_extra" - bundle "config --local deployment true" + bundle "config set --local deployment true" bundle "install", :artifice => "endpoint_extra" expect(the_bundle).to include_gems "back_deps 1.0" end diff --git a/spec/bundler/install/gems/standalone_spec.rb b/spec/bundler/install/gems/standalone_spec.rb index 02452f1ef6..1037a98092 100644 --- a/spec/bundler/install/gems/standalone_spec.rb +++ b/spec/bundler/install/gems/standalone_spec.rb @@ -55,7 +55,7 @@ RSpec.shared_examples "bundle install --standalone" do source "#{file_uri_for(gem_repo1)}" gem "rails" G - bundle "config --local path #{bundled_app("bundle")}" + bundle "config set --local path #{bundled_app("bundle")}" bundle :install, :standalone => true, :dir => cwd end @@ -71,7 +71,7 @@ RSpec.shared_examples "bundle install --standalone" do describe "with gems with native extension", :ruby_repo do before do - bundle "config --local path #{bundled_app("bundle")}" + bundle "config set --local path #{bundled_app("bundle")}" install_gemfile <<-G, :standalone => true, :dir => cwd source "#{file_uri_for(gem_repo1)}" gem "very_simple_binary" @@ -105,7 +105,7 @@ RSpec.shared_examples "bundle install --standalone" do end G end - bundle "config --local path #{bundled_app("bundle")}" + bundle "config set --local path #{bundled_app("bundle")}" install_gemfile <<-G, :standalone => true, :dir => cwd, :raise_on_error => false gem "bar", :git => "#{lib_path("bar-1.0")}" G @@ -126,7 +126,7 @@ RSpec.shared_examples "bundle install --standalone" do gem "rails" gem "devise", :git => "#{lib_path("devise-1.0")}" G - bundle "config --local path #{bundled_app("bundle")}" + bundle "config set --local path #{bundled_app("bundle")}" bundle :install, :standalone => true, :dir => cwd end @@ -154,7 +154,7 @@ RSpec.shared_examples "bundle install --standalone" do gem "rack-test" end G - bundle "config --local path #{bundled_app("bundle")}" + bundle "config set --local path #{bundled_app("bundle")}" bundle :install, :standalone => true, :dir => cwd end @@ -168,7 +168,7 @@ RSpec.shared_examples "bundle install --standalone" do include_examples "common functionality" it "allows creating a standalone file with limited groups" do - bundle "config --local path #{bundled_app("bundle")}" + bundle "config set --local path #{bundled_app("bundle")}" bundle :install, :standalone => "default", :dir => cwd load_error_ruby <<-RUBY, "spec" @@ -185,8 +185,8 @@ RSpec.shared_examples "bundle install --standalone" do end it "allows `without` configuration to limit the groups used in a standalone" do - bundle "config --local path #{bundled_app("bundle")}" - bundle "config --local without test" + bundle "config set --local path #{bundled_app("bundle")}" + bundle "config set --local without test" bundle :install, :standalone => true, :dir => cwd load_error_ruby <<-RUBY, "spec" @@ -203,7 +203,7 @@ RSpec.shared_examples "bundle install --standalone" do end it "allows `path` configuration to change the location of the standalone bundle" do - bundle "config --local path path/to/bundle" + bundle "config set --local path path/to/bundle" bundle "install", :standalone => true, :dir => cwd ruby <<-RUBY @@ -218,9 +218,9 @@ RSpec.shared_examples "bundle install --standalone" do end it "allows `without` to limit the groups used in a standalone" do - bundle "config --local without test" + bundle "config set --local without test" bundle :install, :dir => cwd - bundle "config --local path #{bundled_app("bundle")}" + bundle "config set --local path #{bundled_app("bundle")}" bundle :install, :standalone => true, :dir => cwd load_error_ruby <<-RUBY, "spec" @@ -246,7 +246,7 @@ RSpec.shared_examples "bundle install --standalone" do source "#{source_uri}" gem "rails" G - bundle "config --local path #{bundled_app("bundle")}" + bundle "config set --local path #{bundled_app("bundle")}" bundle :install, :standalone => true, :artifice => "endpoint", :dir => cwd end @@ -267,7 +267,7 @@ RSpec.shared_examples "bundle install --standalone" do source "#{file_uri_for(gem_repo1)}" gem "rails" G - bundle "config --local path #{bundled_app("bundle")}" + bundle "config set --local path #{bundled_app("bundle")}" bundle :install, :standalone => true, :binstubs => true, :dir => cwd end diff --git a/spec/bundler/install/git_spec.rb b/spec/bundler/install/git_spec.rb index 62658137e0..31c9568f85 100644 --- a/spec/bundler/install/git_spec.rb +++ b/spec/bundler/install/git_spec.rb @@ -57,8 +57,8 @@ RSpec.describe "bundle install" do foo! L - bundle "config --local path vendor/bundle" - bundle "config --local without development" + bundle "config set --local path vendor/bundle" + bundle "config set --local without development" bundle :install expect(out).to include("Bundle complete!") diff --git a/spec/bundler/install/path_spec.rb b/spec/bundler/install/path_spec.rb index a05467db12..b0392c4ed2 100644 --- a/spec/bundler/install/path_spec.rb +++ b/spec/bundler/install/path_spec.rb @@ -14,14 +14,14 @@ RSpec.describe "bundle install" do end it "does not use available system gems with `vendor/bundle" do - bundle "config --local path vendor/bundle" + bundle "config set --local path vendor/bundle" bundle :install expect(the_bundle).to include_gems "rack 1.0.0" end it "uses system gems with `path.system` configured with more priority than `path`" do - bundle "config --local path.system true" - bundle "config --global path vendor/bundle" + bundle "config set --local path.system true" + bundle "config set --global path vendor/bundle" bundle :install run "require 'rack'", :raise_on_error => false expect(out).to include("FAIL") @@ -31,7 +31,7 @@ RSpec.describe "bundle install" do dir = bundled_app("bun++dle") dir.mkpath - bundle "config --local path #{dir.join("vendor/bundle")}" + bundle "config set --local path #{dir.join("vendor/bundle")}" bundle :install, :dir => dir expect(out).to include("installed into `./vendor/bundle`") @@ -39,7 +39,7 @@ RSpec.describe "bundle install" do end it "prints a message to let the user know where gems where installed" do - bundle "config --local path vendor/bundle" + bundle "config set --local path vendor/bundle" bundle :install expect(out).to include("gems are installed into `./vendor/bundle`") end @@ -109,7 +109,7 @@ RSpec.describe "bundle install" do context "when set via #{type}" do it "installs gems to a path if one is specified" do set_bundle_path(type, bundled_app("vendor2").to_s) - bundle "config --local path vendor/bundle" + bundle "config set --local path vendor/bundle" bundle :install expect(vendored_gems("gems/rack-1.0.0")).to be_directory @@ -159,7 +159,7 @@ RSpec.describe "bundle install" do end it "sets BUNDLE_PATH as the first argument to bundle install" do - bundle "config --local path ./vendor/bundle" + bundle "config set --local path ./vendor/bundle" bundle :install expect(vendored_gems("gems/rack-1.0.0")).to be_directory @@ -169,7 +169,7 @@ RSpec.describe "bundle install" do it "disables system gems when passing a path to install" do # This is so that vendored gems can be distributed to others build_gem "rack", "1.1.0", :to_system => true - bundle "config --local path ./vendor/bundle" + bundle "config set --local path ./vendor/bundle" bundle :install expect(vendored_gems("gems/rack-1.0.0")).to be_directory @@ -186,7 +186,7 @@ RSpec.describe "bundle install" do gem "very_simple_binary" G - bundle "config --local path ./vendor/bundle" + bundle "config set --local path ./vendor/bundle" bundle :install expect(vendored_gems("gems/very_simple_binary-1.0")).to be_directory @@ -198,7 +198,7 @@ RSpec.describe "bundle install" do run "require 'very_simple_binary_c'", :raise_on_error => false expect(err).to include("Bundler::GemNotFound") - bundle "config --local path ./vendor/bundle" + bundle "config set --local path ./vendor/bundle" bundle :install expect(vendored_gems("gems/very_simple_binary-1.0")).to be_directory @@ -218,7 +218,7 @@ RSpec.describe "bundle install" do gem "rack" G - bundle "config --local path bundle" + bundle "config set --local path bundle" bundle :install, :raise_on_error => false expect(err).to include("file already exists") end diff --git a/spec/bundler/lock/lockfile_spec.rb b/spec/bundler/lock/lockfile_spec.rb index 0d340b070e..af3a10f9e9 100644 --- a/spec/bundler/lock/lockfile_spec.rb +++ b/spec/bundler/lock/lockfile_spec.rb @@ -1202,7 +1202,7 @@ RSpec.describe "the lockfile format" do gem "omg", :git => "#{lib_path("omg")}", :branch => 'master' G - bundle "config --local path vendor" + bundle "config set --local path vendor" bundle :install expect(the_bundle).to include_gems "omg 1.0" diff --git a/spec/bundler/plugins/install_spec.rb b/spec/bundler/plugins/install_spec.rb index 370973ad1a..308f9c79fc 100644 --- a/spec/bundler/plugins/install_spec.rb +++ b/spec/bundler/plugins/install_spec.rb @@ -228,7 +228,7 @@ RSpec.describe "bundler plugin install" do gem 'rack', "1.0.0" G - bundle "config --local deployment true" + bundle "config set --local deployment true" install_gemfile <<-G source '#{file_uri_for(gem_repo2)}' plugin 'foo' diff --git a/spec/bundler/plugins/source/example_spec.rb b/spec/bundler/plugins/source/example_spec.rb index 03a377ac93..e2bab9c199 100644 --- a/spec/bundler/plugins/source/example_spec.rb +++ b/spec/bundler/plugins/source/example_spec.rb @@ -132,7 +132,7 @@ RSpec.describe "real source plugins" do end it "copies repository to vendor cache and uses it even when installed with `path` configured" do - bundle "config --local path vendor/bundle" + bundle "config set --local path vendor/bundle" bundle :install bundle "config set cache_all true" bundle :cache @@ -144,7 +144,7 @@ RSpec.describe "real source plugins" do end it "bundler package copies repository to vendor cache" do - bundle "config --local path vendor/bundle" + bundle "config set --local path vendor/bundle" bundle :install bundle "config set cache_all true" bundle :cache diff --git a/spec/bundler/quality_spec.rb b/spec/bundler/quality_spec.rb index 808f0502a4..405c786842 100644 --- a/spec/bundler/quality_spec.rb +++ b/spec/bundler/quality_spec.rb @@ -249,7 +249,7 @@ RSpec.describe "The library itself" do end it "does not use require internally, but require_relative" do - exempt = %r{templates/|man/|vendor/} + exempt = %r{templates/|\.5|\.1|vendor/} all_bad_requires = [] lib_tracked_files.each do |filename| next if filename =~ exempt diff --git a/spec/bundler/runtime/setup_spec.rb b/spec/bundler/runtime/setup_spec.rb index ead826c4e6..da1a2ae6e2 100644 --- a/spec/bundler/runtime/setup_spec.rb +++ b/spec/bundler/runtime/setup_spec.rb @@ -12,7 +12,7 @@ RSpec.describe "Bundler.setup" do G ruby <<-RUBY - require '#{lib_dir}/bundler' + require 'bundler' Bundler.setup require 'rack' @@ -34,7 +34,7 @@ RSpec.describe "Bundler.setup" do it "doesn't make all groups available" do ruby <<-RUBY - require '#{lib_dir}/bundler' + require 'bundler' Bundler.setup(:default) begin @@ -49,7 +49,7 @@ RSpec.describe "Bundler.setup" do it "accepts string for group name" do ruby <<-RUBY - require '#{lib_dir}/bundler' + require 'bundler' Bundler.setup(:default, 'test') require 'rack' @@ -61,7 +61,7 @@ RSpec.describe "Bundler.setup" do it "leaves all groups available if they were already" do ruby <<-RUBY - require '#{lib_dir}/bundler' + require 'bundler' Bundler.setup Bundler.setup(:default) @@ -74,7 +74,7 @@ RSpec.describe "Bundler.setup" do it "leaves :default available if setup is called twice" do ruby <<-RUBY - require '#{lib_dir}/bundler' + require 'bundler' Bundler.setup(:default) Bundler.setup(:default, :test) @@ -91,7 +91,7 @@ RSpec.describe "Bundler.setup" do it "handles multiple non-additive invocations" do ruby <<-RUBY, :raise_on_error => false - require '#{lib_dir}/bundler' + require 'bundler' Bundler.setup(:default, :test) Bundler.setup(:default) require 'rack' @@ -122,7 +122,7 @@ RSpec.describe "Bundler.setup" do ENV["RUBYLIB"] = "rubylib_dir" ruby <<-RUBY - require '#{lib_dir}/bundler' + require 'bundler' Bundler.setup puts $LOAD_PATH RUBY @@ -143,6 +143,10 @@ RSpec.describe "Bundler.setup" do gem "rails" G + # We require an absolute path because relying on the $LOAD_PATH behaves + # inconsistently depending on whether we're in a ruby-core setup (and + # bundler's lib is in RUBYLIB) or not. + ruby <<-RUBY require '#{lib_dir}/bundler' Bundler.setup @@ -171,6 +175,10 @@ RSpec.describe "Bundler.setup" do gem "terranova" G + # We require an absolute path because relying on the $LOAD_PATH behaves + # inconsistently depending on whether we're in a ruby-core setup (and + # bundler's lib is in RUBYLIB) or not. + ruby <<-RUBY require '#{lib_dir}/bundler/setup' puts $LOAD_PATH @@ -192,8 +200,10 @@ RSpec.describe "Bundler.setup" do gem "rack" G + entrypoint = mis_activates_prerelease_default_bundler? ? "#{lib_dir}/bundler" : "bundler" + ruby <<-R - require '#{lib_dir}/bundler' + require '#{entrypoint}' begin Bundler.setup @@ -213,7 +223,7 @@ RSpec.describe "Bundler.setup" do G ruby <<-R, :raise_on_error => false - require '#{lib_dir}/bundler' + require 'bundler' Bundler.setup R @@ -236,7 +246,7 @@ RSpec.describe "Bundler.setup" do G ruby <<-R, :raise_on_error => false - require '#{lib_dir}/bundler' + require 'bundler' Bundler.setup R @@ -289,7 +299,7 @@ RSpec.describe "Bundler.setup" do ENV["BUNDLE_GEMFILE"] = "Gemfile" ruby <<-R - require '#{lib_dir}/bundler' + require 'bundler' begin Bundler.setup @@ -444,7 +454,7 @@ RSpec.describe "Bundler.setup" do break_git! ruby <<-R - require '#{lib_dir}/bundler' + require 'bundler' begin Bundler.setup @@ -464,8 +474,10 @@ RSpec.describe "Bundler.setup" do break_git! + entrypoint = mis_activates_prerelease_default_bundler? ? "#{lib_dir}/bundler" : "bundler" + ruby <<-R - require "#{lib_dir}/bundler" + require "#{entrypoint}" begin Bundler.setup @@ -481,14 +493,14 @@ RSpec.describe "Bundler.setup" do end it "works even when the cache directory has been deleted" do - bundle "config --local path vendor/bundle" + bundle "config set --local path vendor/bundle" bundle :install FileUtils.rm_rf vendored_gems("cache") expect(the_bundle).to include_gems "rack 1.0.0" end it "does not randomly change the path when specifying --path and the bundle directory becomes read only" do - bundle "config --local path vendor/bundle" + bundle "config set --local path vendor/bundle" bundle :install with_read_only("#{bundled_app}/**/*") do @@ -592,7 +604,7 @@ RSpec.describe "Bundler.setup" do describe "when excluding groups" do it "doesn't change the resolve if --without is used" do - bundle "config --local without rails" + bundle "config set --local without rails" install_gemfile <<-G source "#{file_uri_for(gem_repo1)}" gem "activesupport" @@ -608,7 +620,7 @@ RSpec.describe "Bundler.setup" do end it "remembers --without and does not bail on bare Bundler.setup" do - bundle "config --local without rails" + bundle "config set --local without rails" install_gemfile <<-G source "#{file_uri_for(gem_repo1)}" gem "activesupport" @@ -624,7 +636,7 @@ RSpec.describe "Bundler.setup" do end it "remembers --without and does not bail on bare Bundler.setup, even in the case of path gems no longer available" do - bundle "config --local without development" + bundle "config set --local without development" path = bundled_app(File.join("vendor", "foo")) build_lib "foo", :path => path @@ -644,7 +656,7 @@ RSpec.describe "Bundler.setup" do end it "remembers --without and does not include groups passed to Bundler.setup" do - bundle "config --local without rails" + bundle "config set --local without rails" install_gemfile <<-G source "#{file_uri_for(gem_repo1)}" gem "activesupport" @@ -798,7 +810,7 @@ end # Don't build extensions. s.class.send(:define_method, :build_extensions) { nil } - require '#{lib_dir}/bundler' + require 'bundler' gem '#{gem_name}' puts $LOAD_PATH.count {|path| path =~ /#{gem_name}/} >= 2 @@ -1056,7 +1068,7 @@ end bundle "install" ruby <<-RUBY - require '#{lib_dir}/bundler' + require 'bundler' bundler_module = class << Bundler; self; end bundler_module.send(:remove_method, :require) def Bundler.require(path) @@ -1104,6 +1116,8 @@ end end before do + bundle "config set --local path.system true" + install_gemfile <<-G source "#{file_uri_for(gem_repo1)}" gem "rack" @@ -1112,8 +1126,9 @@ end context "is not present" do it "does not change the lock" do + entrypoint = mis_activates_prerelease_default_bundler? ? "#{lib_dir}/bundler/setup" : "bundler/setup" lockfile lock_with(nil) - ruby "require '#{lib_dir}/bundler/setup'" + ruby "require '#{entrypoint}'" lockfile_should_be lock_with(nil) end end @@ -1121,7 +1136,7 @@ end context "is newer" do it "does not change the lock or warn" do lockfile lock_with(Bundler::VERSION.succ) - ruby "require '#{lib_dir}/bundler/setup'" + ruby "require 'bundler/setup'" expect(out).to be_empty expect(err).to be_empty lockfile_should_be lock_with(Bundler::VERSION.succ) @@ -1130,8 +1145,10 @@ end context "is older" do it "does not change the lock" do + entrypoint = mis_activates_prerelease_default_bundler? ? "#{lib_dir}/bundler/setup" : "bundler/setup" + system_gems "bundler-1.10.1" lockfile lock_with("1.10.1") - ruby "require '#{lib_dir}/bundler/setup'" + ruby "require '#{entrypoint}'" lockfile_should_be lock_with("1.10.1") end end @@ -1178,14 +1195,14 @@ end context "is not present" do it "does not change the lock" do - expect { ruby "require '#{lib_dir}/bundler/setup'" }.not_to change { lockfile } + expect { ruby "require 'bundler/setup'" }.not_to change { lockfile } end end context "is newer" do let(:ruby_version) { "5.5.5" } it "does not change the lock or warn" do - expect { ruby "require '#{lib_dir}/bundler/setup'" }.not_to change { lockfile } + expect { ruby "require 'bundler/setup'" }.not_to change { lockfile } expect(out).to be_empty expect(err).to be_empty end @@ -1194,7 +1211,7 @@ end context "is older" do let(:ruby_version) { "1.0.0" } it "does not change the lock" do - expect { ruby "require '#{lib_dir}/bundler/setup'" }.not_to change { lockfile } + expect { ruby "require 'bundler/setup'" }.not_to change { lockfile } end end end @@ -1202,8 +1219,9 @@ end describe "with gemified standard libraries" do it "does not load Psych" do gemfile "" + entrypoint = mis_activates_prerelease_default_bundler? ? "#{lib_dir}/bundler/setup" : "bundler/setup" ruby <<-RUBY - require '#{lib_dir}/bundler/setup' + require '#{entrypoint}' puts defined?(Psych::VERSION) ? Psych::VERSION : "undefined" require 'psych' puts Psych::VERSION @@ -1216,7 +1234,7 @@ end it "does not load openssl" do install_gemfile "" ruby <<-RUBY - require "#{lib_dir}/bundler/setup" + require "bundler/setup" puts defined?(OpenSSL) || "undefined" require "openssl" puts defined?(OpenSSL) || "undefined" @@ -1274,7 +1292,7 @@ end it "activates no gems with -rbundler/setup" do install_gemfile "" - ruby code, :env => { "RUBYOPT" => activation_warning_hack_rubyopt + " -r#{lib_dir}/bundler/setup" } + ruby code, :env => { "RUBYOPT" => activation_warning_hack_rubyopt + " -rbundler/setup" } expect(out).to eq("{}") end @@ -1327,7 +1345,7 @@ end if File.exist?(ext_folder.join("#{require_name}.rb")) { :exclude_from_load_path => ext_folder.to_s } else - lib_folder = source_root.join("lib") + lib_folder = source_lib_dir if File.exist?(lib_folder.join("#{require_name}.rb")) { :exclude_from_load_path => lib_folder.to_s } else @@ -1383,7 +1401,7 @@ end G ruby <<-RUBY - require "#{lib_dir}/bundler/setup" + require "bundler/setup" Object.new.gem "rack" puts Gem.loaded_specs["rack"].full_name RUBY @@ -1398,7 +1416,7 @@ end G ruby <<-RUBY, :raise_on_error => false - require "#{lib_dir}/bundler/setup" + require "bundler/setup" Object.new.gem "rack" puts "FAIL" RUBY @@ -1414,7 +1432,7 @@ end G ruby <<-RUBY, :raise_on_error => false - require "#{lib_dir}/bundler/setup" + require "bundler/setup" Object.new.require "rack" puts "FAIL" RUBY @@ -1429,4 +1447,9 @@ end expect(last_command.stdboth).to eq("true") end end + + # Tested rubygems does not include https://github.com/rubygems/rubygems/pull/2728 and will not always end up activating the current bundler + def mis_activates_prerelease_default_bundler? + Gem.rubygems_version < Gem::Version.new("3.1.a") + end end diff --git a/spec/bundler/spec_helper.rb b/spec/bundler/spec_helper.rb index a259100b2a..7723c85ce6 100644 --- a/spec/bundler/spec_helper.rb +++ b/spec/bundler/spec_helper.rb @@ -13,6 +13,7 @@ require "bundler" require "rspec/core" require "rspec/expectations" require "rspec/mocks" +require "diff/lcs" require_relative "support/builders" require_relative "support/build_metadata" diff --git a/spec/bundler/support/path.rb b/spec/bundler/support/path.rb index 305ea0a876..56d3c71f3c 100644 --- a/spec/bundler/support/path.rb +++ b/spec/bundler/support/path.rb @@ -63,6 +63,10 @@ module Spec @spec_dir ||= source_root.join(ruby_core? ? "spec/bundler" : "spec") end + def man_dir + @man_dir ||= lib_dir.join("bundler/man") + end + def tracked_files @tracked_files ||= git_ls_files(tracked_files_glob) end @@ -236,7 +240,7 @@ module Spec end def man_tracked_files_glob - ruby_core? ? "man/bundle* man/gemfile*" : "man" + ruby_core? ? "man/bundle* man/gemfile*" : "lib/bundler/man/bundle*.1 lib/bundler/man/gemfile*.5" end def git_root diff --git a/spec/bundler/support/rubygems_ext.rb b/spec/bundler/support/rubygems_ext.rb index d743a76391..55f20ff29a 100644 --- a/spec/bundler/support/rubygems_ext.rb +++ b/spec/bundler/support/rubygems_ext.rb @@ -71,6 +71,26 @@ module Spec install_gems(test_gemfile, test_lockfile) end + def check_source_control_changes(success_message:, error_message:) + require "open3" + + output, status = Open3.capture2e("git status --porcelain") + + if status.success? && output.empty? + puts + puts success_message + puts + else + system("git status --porcelain") + + puts + puts error_message + puts + + exit(1) + end + end + private # Some rubygems versions include loaded specs when loading gemspec stubs diff --git a/spec/bundler/support/streams.rb b/spec/bundler/support/streams.rb deleted file mode 100644 index a947eebf6f..0000000000 --- a/spec/bundler/support/streams.rb +++ /dev/null @@ -1,19 +0,0 @@ -# frozen_string_literal: true - -require "stringio" - -def capture(*args) - opts = args.pop if args.last.is_a?(Hash) - opts ||= {} - - args.map!(&:to_s) - begin - result = StringIO.new - result.close if opts[:closed] - args.each {|stream| eval "$#{stream} = result" } - yield - ensure - args.each {|stream| eval("$#{stream} = #{stream.upcase}") } - end - result.string -end |