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.
This commit is contained in:
Max Howell 2011-08-24 11:30:32 +01:00
parent 1f95b07ba5
commit 13918ff6d9
3 changed files with 20 additions and 0 deletions

1
.gitignore vendored
View File

@ -7,3 +7,4 @@
!/bin/brew !/bin/brew
!/share/man/man1/brew.1 !/share/man/man1/brew.1
.DS_Store .DS_Store
/Library/LinkedKegs

View File

@ -9,6 +9,12 @@ module Homebrew extend self
raise "No available formula for #{name}\n#{msg}" if msg raise "No available formula for #{name}\n#{msg}" if msg
end unless ARGV.force? 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? 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 # 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. # calls brew as root. The fix is to chown brew to root.

View File

@ -33,10 +33,21 @@ class Keg < Pathname
n+=1 n+=1
Find.prune if src.directory? Find.prune if src.directory?
end end
linked_keg_record.unlink if linked_keg_record.exist?
n n
end end
def fname
parent.basename.to_s
end
def linked_keg_record
@linked_keg_record ||= HOMEBREW_REPOSITORY/"Library/LinkedKegs"/fname
end
def link def link
raise "Cannot link #{fname}\nAnother version is already linked: #{linked_keg_record.realpath}" if linked_keg_record.directory?
$n=0 $n=0
$d=0 $d=0
@ -68,6 +79,8 @@ class Keg < Pathname
end end
end end
(HOMEBREW_REPOSITORY/"Library/LinkedKegs"/fname).make_relative_symlink(self)
return $n+$d return $n+$d
end end