summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlhuda <carlhuda@engineyard.com>2010-02-01 16:43:33 -0800
committerCarlhuda <carlhuda@engineyard.com>2010-02-01 16:43:33 -0800
commitde5054af4069a93702763d70704b074202f2bf7d (patch)
treef266f5a363e22c2687aba4c0fee9123098357612
parent98e8489593aa7ebaa41f3c5e3958b402e35c74d6 (diff)
downloadbundler-de5054af4069a93702763d70704b074202f2bf7d.tar.gz
Rescue all Bundler exceptions and exit with appropriate error code
-rw-r--r--bin/bundle7
-rw-r--r--lib/bundler.rb19
-rw-r--r--lib/bundler/cli.rb35
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