diff --git a/.gitignore b/.gitignore index a2ccbd76c4..60119cef71 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ !/bin/brew !/share/man/man1/brew.1 .DS_Store +/Library/LinkedKegs \ No newline at end of file diff --git a/Library/Homebrew/cmd/install.rb b/Library/Homebrew/cmd/install.rb index 4b2711994a..07942f64ed 100644 --- a/Library/Homebrew/cmd/install.rb +++ b/Library/Homebrew/cmd/install.rb @@ -9,6 +9,12 @@ module Homebrew extend self raise "No available formula for #{name}\n#{msg}" if msg end unless ARGV.force? + ARGV.formulae.each do |f| + if File.directory? HOMEBREW_REPOSITORY/"Library/LinkedKegs/#{f.name}" + raise "#{f} already installed\nTry: brew upgrade #{f}" + end + end + if Process.uid.zero? and not File.stat(HOMEBREW_BREW_FILE).uid.zero? # note we only abort if Homebrew is *not* installed as sudo and the user # calls brew as root. The fix is to chown brew to root. diff --git a/Library/Homebrew/keg.rb b/Library/Homebrew/keg.rb index ad0e97653d..a0d028d08b 100644 --- a/Library/Homebrew/keg.rb +++ b/Library/Homebrew/keg.rb @@ -33,10 +33,21 @@ class Keg < Pathname n+=1 Find.prune if src.directory? end + linked_keg_record.unlink if linked_keg_record.exist? n end + def fname + parent.basename.to_s + end + + def linked_keg_record + @linked_keg_record ||= HOMEBREW_REPOSITORY/"Library/LinkedKegs"/fname + end + def link + raise "Cannot link #{fname}\nAnother version is already linked: #{linked_keg_record.realpath}" if linked_keg_record.directory? + $n=0 $d=0 @@ -68,6 +79,8 @@ class Keg < Pathname end end + (HOMEBREW_REPOSITORY/"Library/LinkedKegs"/fname).make_relative_symlink(self) + return $n+$d end