Provide more information about link errors
References Homebrew/homebrew#32046.
This commit is contained in:
parent
0d154a991d
commit
4fd78c9690
@ -16,10 +16,13 @@ class Keg
|
|||||||
class LinkError < RuntimeError
|
class LinkError < RuntimeError
|
||||||
attr_reader :keg, :src, :dst
|
attr_reader :keg, :src, :dst
|
||||||
|
|
||||||
def initialize(keg, src, dst)
|
def initialize(keg, src, dst, cause)
|
||||||
@src = src
|
@src = src
|
||||||
@dst = dst
|
@dst = dst
|
||||||
@keg = keg
|
@keg = keg
|
||||||
|
@cause = cause
|
||||||
|
super(cause.message)
|
||||||
|
set_backtrace(cause.backtrace)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -361,17 +364,17 @@ class Keg
|
|||||||
|
|
||||||
dst.delete if mode.overwrite && (dst.exist? || dst.symlink?)
|
dst.delete if mode.overwrite && (dst.exist? || dst.symlink?)
|
||||||
dst.make_relative_symlink(src)
|
dst.make_relative_symlink(src)
|
||||||
rescue Errno::EEXIST
|
rescue Errno::EEXIST => e
|
||||||
if dst.exist?
|
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?
|
elsif dst.symlink?
|
||||||
dst.unlink
|
dst.unlink
|
||||||
retry
|
retry
|
||||||
end
|
end
|
||||||
rescue Errno::EACCES
|
rescue Errno::EACCES => e
|
||||||
raise DirectoryNotWritableError.new(self, src.relative_path_from(path), dst)
|
raise DirectoryNotWritableError.new(self, src.relative_path_from(path), dst, e)
|
||||||
rescue SystemCallError
|
rescue SystemCallError => e
|
||||||
raise LinkError.new(self, src.relative_path_from(path), dst)
|
raise LinkError.new(self, src.relative_path_from(path), dst, e)
|
||||||
end
|
end
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user