From 480accdd4702a3bcff522512333aa079082b7ded Mon Sep 17 00:00:00 2001 From: Adam Vandenberg Date: Mon, 28 Jun 2010 09:39:14 -0700 Subject: [PATCH] Add brew doctor check for Cellar and TMP on separate volumes. Add a brew doctor check for this issue: http://github.com/mxcl/homebrew/issues/issue/1238 --- Library/Homebrew/brew_doctor.rb | 61 +++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/Library/Homebrew/brew_doctor.rb b/Library/Homebrew/brew_doctor.rb index e279677017..ea907a1779 100644 --- a/Library/Homebrew/brew_doctor.rb +++ b/Library/Homebrew/brew_doctor.rb @@ -1,3 +1,34 @@ +class Volumes + def initialize + @volumes = [] + raw_mounts=`mount` + raw_mounts.split("\n").each do |line| + case line + when /^(.+) on (\S+) \(/ + @volumes << [$1, $2] + end + end + # Sort volumes by longest path prefix first + @volumes.sort! {|a,b| b[1].length <=> a[1].length} + end + + def which path + @volumes.each_index do |i| + vol = @volumes[i] + return i if is_prefix?(vol[1], path) + end + + return -1 + end +end + + +def is_prefix? prefix, longer_string + p = prefix.to_s + longer_string.to_s[0,p.length] == p +end + + def check_for_stray_dylibs bad_dylibs = Dir['/usr/local/lib/*.dylib'].select { |f| File.file? f and not File.symlink? f } if bad_dylibs.length > 0 @@ -291,6 +322,35 @@ def check_for_symlinked_cellar end end +def check_for_multiple_volumes + volumes = Volumes.new + + # Find the volumes for the TMP folder & HOMEBREW_CELLAR + real_cellar = HOMEBREW_CELLAR.realpath + tmp=Pathname.new `/usr/bin/mktemp -d /tmp/homebrew-brew-doctor-XXXX`.strip + real_temp = tmp.realpath.parent + + where_cellar = volumes.which real_cellar + where_temp = volumes.which real_temp + + unless where_cellar == where_temp + puts <<-EOS.undent + Your Cellar and TMP folders are on different volumes. + + Putting your Cellar and TMP folders on different volumes causes problems + for brews that install symlinks, such as Git. + + Please post the details of your setup to this existing issue, if the comments + there don't already capture them: + http://github.com/mxcl/homebrew/issues/issue/1238 + + A work-around is available in this branch: + http://github.com/adamv/homebrew/tree/temp + + EOS + end +end + def brew_doctor read, write = IO.pipe @@ -312,6 +372,7 @@ def brew_doctor check_for_config_scripts check_for_dyld_vars check_for_symlinked_cellar + check_for_multiple_volumes exit! 0 else