Provide more information about link errors

References Homebrew/homebrew#32046.
This commit is contained in:
Jack Nagel 2014-09-09 14:24:18 -05:00
parent 0d154a991d
commit 4fd78c9690

View File

@ -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