diff options
| author | Jack Nagel | 2014-04-21 09:40:23 -0500 |
|---|---|---|
| committer | Jack Nagel | 2014-04-21 12:43:06 -0500 |
| commit | a231de388b588d7db15c98699ef113154ca4c8ad (patch) | |
| tree | 3cf3c6301b66b05332471cc37162de2f1a21e67f /Library/Homebrew/keg.rb | |
| parent | 2991c60e6747e45b429b5288bdd0b259a23ab671 (diff) | |
| download | homebrew-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.rb | 44 |
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 |
