From 13918ff6d9e093e4ec7e8eac36d5076f3c41eb03 Mon Sep 17 00:00:00 2001 From: Max Howell Date: Wed, 24 Aug 2011 11:30:32 +0100 Subject: [PATCH] Record which keg is linked Will be useful for a variety of reasons, but for now, I'm just using it to ensure install won't install again if something is already installed (use brew upgrade instead). But means that brew switch and that can work properly etc. --- .gitignore | 1 + Library/Homebrew/cmd/install.rb | 6 ++++++ Library/Homebrew/keg.rb | 13 +++++++++++++ 3 files changed, 20 insertions(+) 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