diff --git a/Library/Homebrew/keg.rb b/Library/Homebrew/keg.rb index 576811fb88..c826598e88 100644 --- a/Library/Homebrew/keg.rb +++ b/Library/Homebrew/keg.rb @@ -16,10 +16,13 @@ class Keg class LinkError < RuntimeError attr_reader :keg, :src, :dst - def initialize(keg, src, dst) + def initialize(keg, src, dst, cause) @src = src @dst = dst @keg = keg + @cause = cause + super(cause.message) + set_backtrace(cause.backtrace) end end @@ -361,17 +364,17 @@ class Keg dst.delete if mode.overwrite && (dst.exist? || dst.symlink?) dst.make_relative_symlink(src) - rescue Errno::EEXIST + rescue Errno::EEXIST => e if dst.exist? - raise ConflictError.new(self, src.relative_path_from(path), dst) + raise ConflictError.new(self, src.relative_path_from(path), dst, e) elsif dst.symlink? dst.unlink retry end - rescue Errno::EACCES - raise DirectoryNotWritableError.new(self, src.relative_path_from(path), dst) - rescue SystemCallError - raise LinkError.new(self, src.relative_path_from(path), dst) + rescue Errno::EACCES => e + raise DirectoryNotWritableError.new(self, src.relative_path_from(path), dst, e) + rescue SystemCallError => e + raise LinkError.new(self, src.relative_path_from(path), dst, e) end protected