From 8cdb504b149afd5b0742a31cc1f04f0cf2ea93ec Mon Sep 17 00:00:00 2001 From: Max Howell Date: Thu, 18 Feb 2010 17:15:38 +0000 Subject: [PATCH] Fix Pathname.install for relative symlinks If you have a bunch of symlinks and they all point at one file and you use Pathname.install on them all the error checking would fail if the file was moved before the symlinks because the symlinks would then point at a non existent file. --- Library/Homebrew/extend/pathname.rb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Library/Homebrew/extend/pathname.rb b/Library/Homebrew/extend/pathname.rb index 61a2a2d49c..698136fcb1 100644 --- a/Library/Homebrew/extend/pathname.rb +++ b/Library/Homebrew/extend/pathname.rb @@ -29,7 +29,12 @@ class Pathname if src.is_a? Array src.collect {|src| install src } else - raise "#{src} does not exist" unless File.exist? src + # if it's a symlink, don't resolve it to a file because if we are moving + # files one by one, it's likely we will break the symlink by moving what + # it points to before we move it + # and also broken symlinks are not the end of the world + raise "#{src} does not exist" unless File.symlink? src or File.exist? src + mkpath if File.symlink? src # we use the BSD mv command because FileUtils copies the target and