Rewrite of HOMEBREW_ folder locations
This rewrite attempts to sort out where the Prefix, Cellar, and Repository are relative to the real and symlinked 'brew' command. Also included is a --config option which dumps all of these variables. Any top-level script must define a "BREW_FILE" that gives the path to brew as it exists in the path. 'brew' itself just uses __FILE__ and install.rb does a `which brew` (there may be a better way?) The Prefix is always relative to the location of brew as it exists in the path. Thus, whether or not /usr/local/bin/brew is a symlink or real file, the Prefix is always /usr/local. If you have brew in some other prefix, such as /nonstandard/bin/brew, then '/nonstandard/ will be managed by brew instead. The Repository, Cellar, and "Library/Homebrew" required code is always found relative to the "real" path or brew. If brew is a real file in /usr/local/bin/brew, then everything else will be found in /usr/local and we'll expect a /usr/local/.git Otherwise, we dereference brew's symlink and look for everything else relative to that path instead.
This commit is contained in:
parent
ffe4f25d87
commit
3087888fb0
@ -28,6 +28,8 @@ require 'hardware'
|
|||||||
|
|
||||||
ARGV.extend(HomebrewArgvExtension)
|
ARGV.extend(HomebrewArgvExtension)
|
||||||
|
|
||||||
|
HOMEBREW_VERSION = 0.4
|
||||||
|
HOMEBREW_WWW = 'http://bit.ly/Homebrew'
|
||||||
|
|
||||||
if Process.uid == 0
|
if Process.uid == 0
|
||||||
# technically this is not the correct place, this cache is for *all users*
|
# technically this is not the correct place, this cache is for *all users*
|
||||||
@ -37,14 +39,9 @@ else
|
|||||||
HOMEBREW_CACHE=Pathname.new("~/Library/Caches/Homebrew").expand_path
|
HOMEBREW_CACHE=Pathname.new("~/Library/Caches/Homebrew").expand_path
|
||||||
end
|
end
|
||||||
|
|
||||||
HOMEBREW_PREFIX = (Pathname.getwd+__FILE__).dirname.parent.parent.cleanpath
|
HOMEBREW_PREFIX = Pathname.new(BREW_FILE).dirname.parent # Where we link under
|
||||||
HOMEBREW_CELLAR = HOMEBREW_PREFIX+'Cellar'
|
HOMEBREW_REPOSITORY = Pathname.new(BREW_FILE).realpath.dirname.parent # Where .git is found
|
||||||
HOMEBREW_VERSION = 0.4
|
HOMEBREW_CELLAR = HOMEBREW_REPOSITORY+'Cellar' # Where we build into
|
||||||
HOMEBREW_WWW = 'http://bit.ly/Homebrew'
|
|
||||||
|
|
||||||
# we use Library as we allow people to symlink their Homebrew into another
|
|
||||||
# directory so they can hack in one place and use it in another
|
|
||||||
HOMEBREW_REPOSITORY = (HOMEBREW_PREFIX+'Library').realpath.parent
|
|
||||||
|
|
||||||
MACOS_FULL_VERSION = `/usr/bin/sw_vers -productVersion`.chomp
|
MACOS_FULL_VERSION = `/usr/bin/sw_vers -productVersion`.chomp
|
||||||
MACOS_VERSION = /(10\.\d+)(\.\d+)?/.match(MACOS_FULL_VERSION).captures.first.to_f
|
MACOS_VERSION = /(10\.\d+)(\.\d+)?/.match(MACOS_FULL_VERSION).captures.first.to_f
|
||||||
|
|||||||
@ -1,4 +1,6 @@
|
|||||||
#!/usr/bin/ruby
|
#!/usr/bin/ruby
|
||||||
|
BREW_FILE = `which brew`.strip
|
||||||
|
|
||||||
require 'global'
|
require 'global'
|
||||||
|
|
||||||
require 'brew.h'
|
require 'brew.h'
|
||||||
@ -8,6 +10,7 @@ require 'formula'
|
|||||||
require 'hardware'
|
require 'hardware'
|
||||||
require 'keg'
|
require 'keg'
|
||||||
|
|
||||||
|
|
||||||
show_summary_heading = false
|
show_summary_heading = false
|
||||||
|
|
||||||
def text_for_keg_only_formula f
|
def text_for_keg_only_formula f
|
||||||
|
|||||||
49
bin/brew
49
bin/brew
@ -5,16 +5,14 @@
|
|||||||
# odd exceptions. Reduce our support burden by showing a user-friendly error.
|
# odd exceptions. Reduce our support burden by showing a user-friendly error.
|
||||||
Dir.getwd rescue abort "The current working directory doesn't exist, cannot proceed."
|
Dir.getwd rescue abort "The current working directory doesn't exist, cannot proceed."
|
||||||
|
|
||||||
|
BREW_FILE = __FILE__
|
||||||
|
|
||||||
def homebrew_rubylib_path
|
def homebrew_rubylib_path
|
||||||
lib_path = "/../../Library/Homebrew"
|
lib_path = "/../../Library/Homebrew"
|
||||||
# we resolve off of Dir.getwd as otherwise the symlink gets resolved!
|
|
||||||
brew_path = if not File.symlink? __FILE__ or File.exist? Dir.getwd+'/'+__FILE__+lib_path
|
# Library/Homebrew is relative to the real path of brew
|
||||||
# standard 100% symlinked or non-symlinked installation
|
brew_path = __FILE__
|
||||||
__FILE__
|
brew_path = File.readlink(brew_path) if File.symlink? brew_path
|
||||||
else
|
|
||||||
# non-standard installation -- just this script is symlinked
|
|
||||||
File.readlink(__FILE__)
|
|
||||||
end
|
|
||||||
return File.expand_path(brew_path+lib_path)
|
return File.expand_path(brew_path+lib_path)
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -53,12 +51,36 @@ case Hardware.cpu_type when :ppc, :dunno
|
|||||||
abort "Sorry, Homebrew does not support your computer's CPU architecture."
|
abort "Sorry, Homebrew does not support your computer's CPU architecture."
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def dump_config
|
||||||
|
puts <<-EOS
|
||||||
|
HOMEBREW_VERSION: #{HOMEBREW_VERSION}
|
||||||
|
|
||||||
|
HOMEBREW_PREFIX: #{HOMEBREW_PREFIX}
|
||||||
|
\tWhere do we symlink installs to?
|
||||||
|
|
||||||
|
HOMEBREW_CELLAR: #{HOMEBREW_CELLAR}
|
||||||
|
\tWhere do we store our built products?
|
||||||
|
|
||||||
|
HOMEBREW_CACHE: #{HOMEBREW_CACHE}
|
||||||
|
\tWhere do we cache our downloads?
|
||||||
|
|
||||||
|
HOMEBREW_REPOSITORY: #{HOMEBREW_REPOSITORY}
|
||||||
|
\tWhere is our .git?
|
||||||
|
|
||||||
|
library path: #{homebrew_rubylib_path}
|
||||||
|
\tWhat do we put on the ruby path?
|
||||||
|
EOS
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
begin
|
begin
|
||||||
require 'brew.h'
|
require 'brew.h'
|
||||||
|
|
||||||
case ARGV.shift
|
case ARGV.shift
|
||||||
when '--prefix'
|
when '--prefix'
|
||||||
puts HOMEBREW_PREFIX
|
puts HOMEBREW_PREFIX
|
||||||
|
when '--config'
|
||||||
|
dump_config
|
||||||
|
|
||||||
when 'home', 'homepage'
|
when 'home', 'homepage'
|
||||||
if ARGV.named_empty?
|
if ARGV.named_empty?
|
||||||
@ -83,7 +105,7 @@ begin
|
|||||||
end
|
end
|
||||||
|
|
||||||
when 'search', '-S'
|
when 'search', '-S'
|
||||||
formulae = (HOMEBREW_PREFIX+'Library'+'Formula').children.sort.map{|f| f.basename('.rb') }
|
formulae = (HOMEBREW_REPOSITORY+'Library/Formula').children.sort.map{|f| f.basename('.rb') }
|
||||||
if ARGV.first =~ /^\/(.*)\/$/
|
if ARGV.first =~ /^\/(.*)\/$/
|
||||||
puts_columns formulae.grep(Regexp.new($1))
|
puts_columns formulae.grep(Regexp.new($1))
|
||||||
else
|
else
|
||||||
@ -95,9 +117,9 @@ begin
|
|||||||
# EDITOR isn't a good fit here, we need a GUI client that actually has
|
# EDITOR isn't a good fit here, we need a GUI client that actually has
|
||||||
# a UI for projects, so apologies if this wasn't what you expected,
|
# a UI for projects, so apologies if this wasn't what you expected,
|
||||||
# please improve it! :)
|
# please improve it! :)
|
||||||
exec 'mate', *Dir["#{HOMEBREW_PREFIX}/Library/*"]<<
|
exec 'mate', *Dir["#{HOMEBREW_REPOSITORY}/Library/*"]<<
|
||||||
"#{HOMEBREW_PREFIX}/bin/brew"<<
|
"#{HOMEBREW_REPOSITORY}/bin/brew"<<
|
||||||
"#{HOMEBREW_PREFIX}/README.md"
|
"#{HOMEBREW_REPOSITORY}/README.md"
|
||||||
else
|
else
|
||||||
exec_editor *ARGV.formulae.collect {|f| f.path}
|
exec_editor *ARGV.formulae.collect {|f| f.path}
|
||||||
end
|
end
|
||||||
@ -108,6 +130,9 @@ begin
|
|||||||
exit 0
|
exit 0
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# The Cellar lives under the repository
|
||||||
|
raise "Cannot write to #{HOMEBREW_REPOSITORY}" unless HOMEBREW_REPOSITORY.writable?
|
||||||
|
# The Prefix is where we symlink under
|
||||||
raise "Cannot write to #{HOMEBREW_PREFIX}" unless HOMEBREW_PREFIX.writable?
|
raise "Cannot write to #{HOMEBREW_PREFIX}" unless HOMEBREW_PREFIX.writable?
|
||||||
|
|
||||||
if ARGV.interactive? and ARGV.formulae.length > 1
|
if ARGV.interactive? and ARGV.formulae.length > 1
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user