aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/keg.rb
diff options
context:
space:
mode:
authorJack Nagel2014-04-21 09:40:23 -0500
committerJack Nagel2014-04-21 12:43:06 -0500
commita231de388b588d7db15c98699ef113154ca4c8ad (patch)
tree3cf3c6301b66b05332471cc37162de2f1a21e67f /Library/Homebrew/keg.rb
parent2991c60e6747e45b429b5288bdd0b259a23ab671 (diff)
downloadhomebrew-a231de388b588d7db15c98699ef113154ca4c8ad.tar.bz2
Rework make_relative_symlink error handling and move it into keg
Diffstat (limited to 'Library/Homebrew/keg.rb')
-rw-r--r--Library/Homebrew/keg.rb44
1 files changed, 41 insertions, 3 deletions
diff --git a/Library/Homebrew/keg.rb b/Library/Homebrew/keg.rb
index 973ce593f..8a9779d9b 100644
--- a/Library/Homebrew/keg.rb
+++ b/Library/Homebrew/keg.rb
@@ -183,7 +183,7 @@ class Keg < Pathname
end
unless mode.dry_run
- linked_keg_record.make_relative_symlink(self)
+ make_relative_symlink(linked_keg_record, self, mode)
optlink
end
@@ -203,7 +203,7 @@ class Keg < Pathname
elsif from.exist?
from.delete
end
- from.make_relative_symlink(self)
+ make_relative_symlink(from, self)
end
def delete_pyc_files!
@@ -250,7 +250,45 @@ class Keg < Pathname
end
dst.delete if mode.overwrite && (dst.exist? || dst.symlink?)
- dst.make_relative_symlink src
+ dst.make_relative_symlink(src)
+ rescue Errno::EEXIST
+ if dst.symlink? && dst.exist?
+ raise <<-EOS.undent
+ Could not symlink file: #{src}
+ Target #{dst} already exists as a symlink to #{dst.readlink}.
+ If this file is from another formula, you may need to
+ `brew unlink` it. Otherwise, you may want to delete it.
+ To force the link and overwrite all other conflicting files, do:
+ brew link --overwrite formula_name
+
+ To list all files that would be deleted:
+ brew link --overwrite --dry-run formula_name
+ EOS
+ elsif dst.exist?
+ raise <<-EOS.undent
+ Could not symlink file: #{src}
+ Target #{dst} already exists. You may need to delete it.
+ To force the link and overwrite all other conflicting files, do:
+ brew link --overwrite formula_name
+
+ To list all files that would be deleted:
+ brew link --overwrite --dry-run formula_name
+ EOS
+ elsif dst.symlink?
+ dst.unlink
+ retry
+ end
+ rescue Errno::EACCES
+ raise <<-EOS.undent
+ Could not symlink file: #{src}
+ #{dst.dirname} is not writable. You should change its permissions.
+ EOS
+ rescue SystemCallError
+ raise <<-EOS.undent
+ Could not symlink file: #{src}
+ #{dst} may already exist.
+ #{dst.dirname} may not be writable.
+ EOS
end
# symlinks the contents of self+foo recursively into #{HOMEBREW_PREFIX}/foo