diff options
author | Carlhuda <carlhuda@engineyard.com> | 2010-02-01 16:43:33 -0800 |
---|---|---|
committer | Carlhuda <carlhuda@engineyard.com> | 2010-02-01 16:43:33 -0800 |
commit | de5054af4069a93702763d70704b074202f2bf7d (patch) | |
tree | f266f5a363e22c2687aba4c0fee9123098357612 | |
parent | 98e8489593aa7ebaa41f3c5e3958b402e35c74d6 (diff) | |
download | bundler-de5054af4069a93702763d70704b074202f2bf7d.tar.gz |
Rescue all Bundler exceptions and exit with appropriate error code
-rw-r--r-- | bin/bundle | 7 | ||||
-rw-r--r-- | lib/bundler.rb | 19 | ||||
-rw-r--r-- | lib/bundler/cli.rb | 35 |
3 files changed, 31 insertions, 30 deletions
diff --git a/bin/bundle b/bin/bundle index c534a3b627..d11614be86 100644 --- a/bin/bundle +++ b/bin/bundle @@ -1,3 +1,8 @@ require 'bundler/cli' -Bundler::CLI.start
\ No newline at end of file +begin + Bundler::CLI.start +rescue Bundler::BundlerError => e + puts e.message + exit e.status_code +end
\ No newline at end of file diff --git a/lib/bundler.rb b/lib/bundler.rb index 7ded75d39f..23a993b5c6 100644 --- a/lib/bundler.rb +++ b/lib/bundler.rb @@ -18,10 +18,21 @@ module Bundler autoload :Specification, 'bundler/specification' autoload :UI, 'bundler/ui' - class GemfileNotFound < StandardError; end - class GemNotFound < StandardError; end - class VersionConflict < StandardError; end - class GemfileError < StandardError; end + class BundlerError < StandardError + def self.status_code(code = nil) + return @code unless code + @code = code + end + + def status_code + self.class.status_code + end + end + + class GemfileNotFound < BundlerError; status_code(10) ; end + class GemNotFound < BundlerError; status_code(7) ; end + class VersionConflict < BundlerError; status_code(6) ; end + class GemfileError < BundlerError; status_code(4) ; end class << self attr_accessor :ui, :bundle_path diff --git a/lib/bundler/cli.rb b/lib/bundler/cli.rb index 6e2924539c..de2540bb34 100644 --- a/lib/bundler/cli.rb +++ b/lib/bundler/cli.rb @@ -32,22 +32,18 @@ module Bundler desc "check", "Checks if the dependencies listed in Gemfile are satisfied by currently installed gems" def check - with_rescue do - env = Bundler.load - # Check top level dependencies - missing = env.dependencies.select { |d| env.index.search(d).empty? } - if missing.any? - puts "The following dependencies are missing" - missing.each do |d| - puts " * #{d}" - end - else - env.specs - puts "The Gemfile's dependencies are satisfied" + env = Bundler.load + # Check top level dependencies + missing = env.dependencies.select { |d| env.index.search(d).empty? } + if missing.any? + puts "The following dependencies are missing" + missing.each do |d| + puts " * #{d}" end + else + env.specs + puts "The Gemfile's dependencies are satisfied" end - rescue VersionConflict => e - puts e.message end desc "install", "Install the current environment to the system" @@ -58,9 +54,6 @@ module Bundler opts[:without].map! { |g| g.to_sym } Installer.install(Bundler.root, Bundler.definition, opts) - rescue Bundler::GemNotFound => e - puts e.message - exit 1 end desc "lock", "Locks a resolve" @@ -86,13 +79,5 @@ module Bundler Kernel.exec *ARGV end - private - - def with_rescue - yield - rescue GemfileNotFound => e - puts e.message - exit 1 - end end end
\ No newline at end of file |