From 2a5bb9d56e785e8b8f70c24621d469c473c9061a Mon Sep 17 00:00:00 2001 From: Max Holder Date: Fri, 20 Mar 2015 14:00:17 -0400 Subject: Print `bundle install` output in `rails new` as soon as it's available Previously, running `rails new` would not print any of the output from `bundle install` until all the gems had finished installing. This made it look like the generator was hanging at the `bundle install` step. This commit switches to using `system` so that the bundle command can output as it needs to. This has the added benefit of including output bundler produces on standard error, which the previous code ignored since backticks only capture standard out. This is not a big deal right now since bundler does not currently print errors to standard error, but that may change in the future (see: bundler/bundler/issues/3353). --- railties/CHANGELOG.md | 7 +++++++ railties/lib/rails/generators/app_base.rb | 12 ++++++------ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/railties/CHANGELOG.md b/railties/CHANGELOG.md index 595a50dbdc..b4ad3be8f9 100644 --- a/railties/CHANGELOG.md +++ b/railties/CHANGELOG.md @@ -1,3 +1,10 @@ +* Print `bundle install` output in `rails new` as soon as it's available + + Running `rails new` will now print the output of `bundle install` as + it is available, instead of waiting until all gems finish installing. + + *Max Holder* + * Add a new-line to the end of route method generated code. We need to add a `\n`, because we cannot have two routes diff --git a/railties/lib/rails/generators/app_base.rb b/railties/lib/rails/generators/app_base.rb index 813f8b21fd..10deeb0ba2 100644 --- a/railties/lib/rails/generators/app_base.rb +++ b/railties/lib/rails/generators/app_base.rb @@ -315,10 +315,6 @@ module Rails # its own vendored Thor, which could be a different version. Running both # things in the same process is a recipe for a night with paracetamol. # - # We use backticks and #print here instead of vanilla #system because it - # is easier to silence stdout in the existing test suite this way. The - # end-user gets the bundler commands called anyway, so no big deal. - # # We unset temporary bundler variables to load proper bundler and Gemfile. # # Thanks to James Tucker for the Gem tricks involved in this call. @@ -326,8 +322,12 @@ module Rails require 'bundler' Bundler.with_clean_env do - output = `"#{Gem.ruby}" "#{_bundle_command}" #{command}` - print output unless options[:quiet] + full_command = %Q["#{Gem.ruby}" "#{_bundle_command}" #{command}] + if options[:quiet] + system(full_command, out: File::NULL) + else + system(full_command) + end end end -- cgit v1.2.3