mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00
Refactor $foo into HOMEBREW_FOO
CONSTANTS are the far saner choice for these important parameters. Split env up so I can redefine the CONSTANTS in unittest.rb.
This commit is contained in:
parent
7f3e8bc36a
commit
9b19f194cc
@ -31,18 +31,18 @@ ENV['CC']='gcc-4.2'
|
|||||||
ENV['CXX']='g++-4.2'
|
ENV['CXX']='g++-4.2'
|
||||||
ENV['MAKEFLAGS']="-j#{OSX::NSProcessInfo.processInfo.processorCount}"
|
ENV['MAKEFLAGS']="-j#{OSX::NSProcessInfo.processInfo.processorCount}"
|
||||||
|
|
||||||
unless $root.to_s == '/usr/local'
|
unless HOMEBREW_PREFIX == '/usr/local'
|
||||||
ENV['CPPFLAGS']='-I'+$root+'include'
|
ENV['CPPFLAGS']="-I#{HOMEBREW_PREFIX}/include"
|
||||||
ENV['LDFLAGS']='-L'+$root+'lib'
|
ENV['LDFLAGS']="-L#{HOMEBREW_PREFIX}/lib"
|
||||||
end
|
end
|
||||||
|
|
||||||
def inreplace(path, before, after)
|
def inreplace(path, before, after)
|
||||||
before=Regexp.escape before.to_s
|
before=Regexp.escape before.to_s
|
||||||
after=Regexp.escape after.to_s
|
after=Regexp.escape after.to_s
|
||||||
before=before.gsub "/", "\\\/"
|
before.gsub! "/", "\\\/"
|
||||||
after=after.gsub "/", "\\\/"
|
after.gsub! "/", "\\\/"
|
||||||
before=before.gsub "'", '\''
|
before.gsub! "'", '\''
|
||||||
after=after.gsub "'", '\''
|
after.gsub! "'", '\''
|
||||||
|
|
||||||
# TODO this sucks
|
# TODO this sucks
|
||||||
# either use 'ed', or allow regexp and use a proper ruby function
|
# either use 'ed', or allow regexp and use a proper ruby function
|
||||||
|
@ -15,103 +15,10 @@
|
|||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with Homebrew. If not, see <http://www.gnu.org/licenses/>.
|
# along with Homebrew. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
require 'pathname'
|
require 'pathname+yeast'
|
||||||
|
require 'utils'
|
||||||
$root=Pathname.new(__FILE__).dirname.parent.parent.realpath
|
|
||||||
$formula=$root+'Library'+'Formula'
|
|
||||||
$cellar=$root+'Cellar'
|
|
||||||
|
|
||||||
HOMEBREW_VERSION='0.3'
|
HOMEBREW_VERSION='0.3'
|
||||||
HOMEBREW_CACHE=File.expand_path "~/Library/Caches/Homebrew"
|
HOMEBREW_CACHE=File.expand_path "~/Library/Caches/Homebrew"
|
||||||
|
HOMEBREW_PREFIX=Pathname.new(__FILE__).dirname.parent.parent.realpath
|
||||||
|
HOMEBREW_CELLAR=HOMEBREW_PREFIX+'Cellar'
|
||||||
######################################################################## utils
|
|
||||||
def ohai title
|
|
||||||
n=`tput cols`.strip.to_i-4
|
|
||||||
puts "\033[0;34m==>\033[0;0;1m #{title[0,n]}\033[0;0m"
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
############################################################### class Pathname
|
|
||||||
# we enhance Pathname to make our code more legible
|
|
||||||
# of course this kind of thing is evil, but meh
|
|
||||||
class Pathname
|
|
||||||
def mv dst
|
|
||||||
FileUtils.mv to_s, dst
|
|
||||||
end
|
|
||||||
|
|
||||||
def rename dst
|
|
||||||
dst=Pathname.new dst
|
|
||||||
dst.unlink if dst.exist?
|
|
||||||
mv dst
|
|
||||||
end
|
|
||||||
|
|
||||||
def install src
|
|
||||||
if src.is_a? Array
|
|
||||||
src.each {|src| install src }
|
|
||||||
elsif File.exist? src
|
|
||||||
mkpath
|
|
||||||
if File.symlink? src
|
|
||||||
# we use the BSD mv command because FileUtils copies the target and
|
|
||||||
# not the link! I'm beginning to wish I'd used Python quite honestly!
|
|
||||||
`mv #{src} #{to_s}`
|
|
||||||
else
|
|
||||||
# we mv when possible as it is faster and you should only be using
|
|
||||||
# this function when installing from the temporary build directory
|
|
||||||
FileUtils.mv src, to_s
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def cp dst
|
|
||||||
if file?
|
|
||||||
FileUtils.cp to_s, dst
|
|
||||||
else
|
|
||||||
FileUtils.cp_r to_s, dst
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# extended to support the double extensions .tar.gz and .tar.bz2
|
|
||||||
def extname
|
|
||||||
/(\.tar\.(gz|bz2))$/.match to_s
|
|
||||||
return $1 if $1
|
|
||||||
return File.extname(to_s)
|
|
||||||
end
|
|
||||||
|
|
||||||
# for filetypes we support, basename without extension
|
|
||||||
def stem
|
|
||||||
return File.basename(to_s, extname)
|
|
||||||
end
|
|
||||||
|
|
||||||
def version
|
|
||||||
# eg. boost_1_39_0
|
|
||||||
/((\d+_)+\d+)$/.match stem
|
|
||||||
return $1.gsub('_', '.') if $1
|
|
||||||
|
|
||||||
# eg. foobar-4.5.1-1
|
|
||||||
/-((\d+\.)*\d+-\d+)$/.match stem
|
|
||||||
return $1 if $1
|
|
||||||
|
|
||||||
# eg. foobar-4.5.1
|
|
||||||
/-((\d+\.)*\d+)$/.match stem
|
|
||||||
return $1 if $1
|
|
||||||
|
|
||||||
# eg. foobar-4.5.1b
|
|
||||||
/-((\d+\.)*\d+([abc]|rc\d))$/.match stem
|
|
||||||
return $1 if $1
|
|
||||||
|
|
||||||
# eg foobar-4.5.0-beta1
|
|
||||||
/-((\d+\.)*\d+-beta\d+)$/.match stem
|
|
||||||
return $1 if $1
|
|
||||||
|
|
||||||
# eg. foobar4.5.1
|
|
||||||
/((\d+\.)*\d+)$/.match stem
|
|
||||||
return $1 if $1
|
|
||||||
|
|
||||||
# eg. otp_src_R13B (this is erlang's style)
|
|
||||||
# eg. astyle_1.23_macosx.tar.gz
|
|
||||||
stem.scan /_([^_]+)/ do |match|
|
|
||||||
return match.first if /\d/.match $1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
@ -15,8 +15,6 @@
|
|||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with Homebrew. If not, see <http://www.gnu.org/licenses/>.
|
# along with Homebrew. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
require 'env'
|
|
||||||
|
|
||||||
class BuildError <RuntimeError
|
class BuildError <RuntimeError
|
||||||
def initialize cmd
|
def initialize cmd
|
||||||
super "Build failed during: #{cmd}"
|
super "Build failed during: #{cmd}"
|
||||||
@ -76,7 +74,7 @@ class AbstractFormula
|
|||||||
def prefix
|
def prefix
|
||||||
raise "@name.nil!" if @name.nil?
|
raise "@name.nil!" if @name.nil?
|
||||||
raise "@version.nil?" if @version.nil?
|
raise "@version.nil?" if @version.nil?
|
||||||
$cellar+@name+@version
|
HOMEBREW_CELLAR+@name+@version
|
||||||
end
|
end
|
||||||
def bin
|
def bin
|
||||||
prefix+'bin'
|
prefix+'bin'
|
||||||
@ -239,7 +237,7 @@ class Formula <UnidentifiedFormula
|
|||||||
end
|
end
|
||||||
|
|
||||||
def self.path name
|
def self.path name
|
||||||
$formula+(name.downcase+'.rb')
|
Pathanme.new(HOMEBREW_PREFIX)+'Formula'+(name.downcase+'.rb')
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.create name
|
def self.create name
|
||||||
|
@ -15,7 +15,6 @@
|
|||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with Homebrew. If not, see <http://www.gnu.org/licenses/>.
|
# along with Homebrew. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
require 'env'
|
|
||||||
require 'formula'
|
require 'formula'
|
||||||
|
|
||||||
class Keg
|
class Keg
|
||||||
@ -29,7 +28,7 @@ class Keg
|
|||||||
elsif formula.is_a? Pathname
|
elsif formula.is_a? Pathname
|
||||||
# TODO
|
# TODO
|
||||||
elsif formula.is_a? String
|
elsif formula.is_a? String
|
||||||
path=$cellar+formula
|
path=HOMEBREW_CELLAR+formula
|
||||||
kids=path.children
|
kids=path.children
|
||||||
raise "Empty installation: #{path}" if kids.length < 1
|
raise "Empty installation: #{path}" if kids.length < 1
|
||||||
raise "Multiple versions installed" if kids.length > 1
|
raise "Multiple versions installed" if kids.length > 1
|
||||||
@ -83,12 +82,12 @@ class Keg
|
|||||||
|
|
||||||
def rm
|
def rm
|
||||||
# don't rmtree shit if we aren't positive about our location!
|
# don't rmtree shit if we aren't positive about our location!
|
||||||
raise "Bad stuff!" unless path.parent.parent == $cellar
|
raise "Bad stuff!" unless path.parent.parent == HOMEBREW_CELLAR
|
||||||
|
|
||||||
if path.directory?
|
if path.directory?
|
||||||
FileUtils.chmod_R 0777, path # ensure we have permission to delete
|
FileUtils.chmod_R 0777, path # ensure we have permission to delete
|
||||||
path.rmtree # $cellar/foo/1.2.0
|
path.rmtree # HOMEBREW_CELLAR/foo/1.2.0
|
||||||
path.parent.rmdir if path.parent.children.length == 0 # $cellar/foo
|
path.parent.rmdir if path.parent.children.length == 0 # HOMEBREW_CELLAR/foo
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -109,13 +108,14 @@ private
|
|||||||
start=path+start
|
start=path+start
|
||||||
return unless start.directory?
|
return unless start.directory?
|
||||||
|
|
||||||
|
root=Pathname.new HOMEBREW_PREFIX
|
||||||
start.find do |from|
|
start.find do |from|
|
||||||
next if from == start
|
next if from == start
|
||||||
|
|
||||||
prune=false
|
prune=false
|
||||||
|
|
||||||
relative_path=from.relative_path_from path
|
relative_path=from.relative_path_from path
|
||||||
to=$root+relative_path
|
to=root+relative_path
|
||||||
|
|
||||||
if from.file?
|
if from.file?
|
||||||
__symlink_relative_to from, to
|
__symlink_relative_to from, to
|
||||||
|
100
Library/Homebrew/pathname+yeast.rb
Normal file
100
Library/Homebrew/pathname+yeast.rb
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
# Copyright 2009 Max Howell <max@methylblue.com>
|
||||||
|
#
|
||||||
|
# This file is part of Homebrew.
|
||||||
|
#
|
||||||
|
# Homebrew is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# Homebrew is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with Homebrew. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
require 'pathname'
|
||||||
|
|
||||||
|
# we enhance pathname to make our code more readable
|
||||||
|
class Pathname
|
||||||
|
def mv dst
|
||||||
|
FileUtils.mv to_s, dst
|
||||||
|
end
|
||||||
|
|
||||||
|
def rename dst
|
||||||
|
dst=Pathname.new dst
|
||||||
|
dst.unlink if dst.exist?
|
||||||
|
mv dst
|
||||||
|
end
|
||||||
|
|
||||||
|
def install src
|
||||||
|
if src.is_a? Array
|
||||||
|
src.each {|src| install src }
|
||||||
|
elsif File.exist? src
|
||||||
|
mkpath
|
||||||
|
if File.symlink? src
|
||||||
|
# we use the BSD mv command because FileUtils copies the target and
|
||||||
|
# not the link! I'm beginning to wish I'd used Python quite honestly!
|
||||||
|
`mv #{src} #{to_s}`
|
||||||
|
else
|
||||||
|
# we mv when possible as it is faster and you should only be using
|
||||||
|
# this function when installing from the temporary build directory
|
||||||
|
FileUtils.mv src, to_s
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def cp dst
|
||||||
|
if file?
|
||||||
|
FileUtils.cp to_s, dst
|
||||||
|
else
|
||||||
|
FileUtils.cp_r to_s, dst
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# extended to support the double extensions .tar.gz and .tar.bz2
|
||||||
|
def extname
|
||||||
|
/(\.tar\.(gz|bz2))$/.match to_s
|
||||||
|
return $1 if $1
|
||||||
|
return File.extname(to_s)
|
||||||
|
end
|
||||||
|
|
||||||
|
# for filetypes we support, basename without extension
|
||||||
|
def stem
|
||||||
|
return File.basename(to_s, extname)
|
||||||
|
end
|
||||||
|
|
||||||
|
def version
|
||||||
|
# eg. boost_1_39_0
|
||||||
|
/((\d+_)+\d+)$/.match stem
|
||||||
|
return $1.gsub('_', '.') if $1
|
||||||
|
|
||||||
|
# eg. foobar-4.5.1-1
|
||||||
|
/-((\d+\.)*\d+-\d+)$/.match stem
|
||||||
|
return $1 if $1
|
||||||
|
|
||||||
|
# eg. foobar-4.5.1
|
||||||
|
/-((\d+\.)*\d+)$/.match stem
|
||||||
|
return $1 if $1
|
||||||
|
|
||||||
|
# eg. foobar-4.5.1b
|
||||||
|
/-((\d+\.)*\d+([abc]|rc\d))$/.match stem
|
||||||
|
return $1 if $1
|
||||||
|
|
||||||
|
# eg foobar-4.5.0-beta1
|
||||||
|
/-((\d+\.)*\d+-beta\d+)$/.match stem
|
||||||
|
return $1 if $1
|
||||||
|
|
||||||
|
# eg. foobar4.5.1
|
||||||
|
/((\d+\.)*\d+)$/.match stem
|
||||||
|
return $1 if $1
|
||||||
|
|
||||||
|
# eg. otp_src_R13B (this is erlang's style)
|
||||||
|
# eg. astyle_1.23_macosx.tar.gz
|
||||||
|
stem.scan /_([^_]+)/ do |match|
|
||||||
|
return match.first if /\d/.match $1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -1,9 +1,16 @@
|
|||||||
#!/usr/bin/ruby
|
#!/usr/bin/ruby
|
||||||
|
|
||||||
$:.unshift File.dirname(__FILE__)
|
$:.unshift File.dirname(__FILE__)
|
||||||
require 'test/unit'
|
|
||||||
require 'formula'
|
require 'formula'
|
||||||
|
require 'pathname+yeast'
|
||||||
require 'stringio'
|
require 'stringio'
|
||||||
|
require 'test/unit'
|
||||||
|
require 'utils'
|
||||||
|
|
||||||
|
# these are defined in env usually, but we want a fake place for everything init
|
||||||
|
HOMEBREW_VERSION='1t'
|
||||||
|
HOMEBREW_CACHE="/tmp/testbrew"
|
||||||
|
HOMEBREW_PREFIX=Pathname.new(HOMEBREW_CACHE)+'prefix'
|
||||||
|
HOMEBREW_CELLAR=Pathname.new(HOMEBREW_CACHE)+'cellar'
|
||||||
|
|
||||||
class TestFormula <Formula
|
class TestFormula <Formula
|
||||||
def initialize url, md5='nomd5'
|
def initialize url, md5='nomd5'
|
||||||
@ -112,7 +119,7 @@ class BeerTasting <Test::Unit::TestCase
|
|||||||
|
|
||||||
nostdout do
|
nostdout do
|
||||||
TestFormula.new(url, md5).brew do |f|
|
TestFormula.new(url, md5).brew do |f|
|
||||||
assert_equal File.expand_path(f.prefix), ($cellar+f.name+'0.1').to_s
|
assert_equal File.expand_path(f.prefix), (HOMEBREW_CELLAR+f.name+'0.1').to_s
|
||||||
assert_kind_of Pathname, f.prefix
|
assert_kind_of Pathname, f.prefix
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
21
Library/Homebrew/utils.rb
Normal file
21
Library/Homebrew/utils.rb
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
# Copyright 2009 Max Howell <max@methylblue.com>
|
||||||
|
#
|
||||||
|
# This file is part of Homebrew.
|
||||||
|
#
|
||||||
|
# Homebrew is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# Homebrew is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with Homebrew. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
def ohai title
|
||||||
|
n=`tput cols`.strip.to_i-4
|
||||||
|
puts "\033[0;34m==>\033[0;0;1m #{title[0,n]}\033[0;0m"
|
||||||
|
end
|
16
bin/brew
16
bin/brew
@ -1,8 +1,7 @@
|
|||||||
#!/usr/bin/ruby
|
#!/usr/bin/ruby
|
||||||
require 'find'
|
$:.unshift __FILE__+'/../../Library/Homebrew'
|
||||||
require 'pathname'
|
|
||||||
$:.unshift Pathname.new(__FILE__).dirname.parent.realpath+'Library'+'Homebrew'
|
|
||||||
require 'env'
|
require 'env'
|
||||||
|
require 'find'
|
||||||
|
|
||||||
# often causes Ruby to throw exception ffs
|
# often causes Ruby to throw exception ffs
|
||||||
Dir.chdir '/' unless File.directory? ENV['PWD']
|
Dir.chdir '/' unless File.directory? ENV['PWD']
|
||||||
@ -11,9 +10,9 @@ Dir.chdir '/' unless File.directory? ENV['PWD']
|
|||||||
def prune
|
def prune
|
||||||
n=0
|
n=0
|
||||||
dirs=Array.new
|
dirs=Array.new
|
||||||
$root.find do |path|
|
HOMEBREW_PREFIX.find do |path|
|
||||||
if path.directory?
|
if path.directory?
|
||||||
name=path.relative_path_from($root).to_s
|
name=path.relative_path_from(HOMEBREW_PREFIX).to_s
|
||||||
if name == '.git' or name == 'Cellar' or name == 'Library'
|
if name == '.git' or name == 'Cellar' or name == 'Library'
|
||||||
Find.prune
|
Find.prune
|
||||||
else
|
else
|
||||||
@ -60,7 +59,7 @@ def extract_kegs
|
|||||||
end
|
end
|
||||||
|
|
||||||
def abv keg=nil
|
def abv keg=nil
|
||||||
path=keg ? keg.path : $cellar
|
path=keg ? keg.path : HOMEBREW_CELLAR
|
||||||
if path.directory?
|
if path.directory?
|
||||||
`find #{path} -type f | wc -l`.strip+' files, '+`du -hd0 #{path} | cut -d"\t" -f1`.strip
|
`find #{path} -type f | wc -l`.strip+' files, '+`du -hd0 #{path} | cut -d"\t" -f1`.strip
|
||||||
else
|
else
|
||||||
@ -203,7 +202,8 @@ begin
|
|||||||
|
|
||||||
when 'edit'
|
when 'edit'
|
||||||
if ARGV.empty?
|
if ARGV.empty?
|
||||||
exec "mate #{$formula} #{$root}/Library/Homebrew #{$root}/bin/brew #{$root}/README"
|
r=HOMEBREW_PREFIX
|
||||||
|
exec "mate #{r}/Library/Formula #{r}/Library/Homebrew #{r}/bin/brew #{r}/README"
|
||||||
else
|
else
|
||||||
require 'formula'
|
require 'formula'
|
||||||
paths=extract_named_args.collect {|name| Formula.path(name).to_s.gsub ' ', '\\ '}
|
paths=extract_named_args.collect {|name| Formula.path(name).to_s.gsub ' ', '\\ '}
|
||||||
@ -258,7 +258,7 @@ begin
|
|||||||
|
|
||||||
when 'info', 'abv'
|
when 'info', 'abv'
|
||||||
if ARGV.empty?
|
if ARGV.empty?
|
||||||
puts `ls #{$cellar} | wc -l`.strip+" kegs, "+abv
|
puts `ls #{HOMEBREW_CELLAR} | wc -l`.strip+" kegs, "+abv
|
||||||
elsif ARGV[0][0..6] == 'http://'
|
elsif ARGV[0][0..6] == 'http://'
|
||||||
puts Pathname.new(ARGV.shift).version
|
puts Pathname.new(ARGV.shift).version
|
||||||
else
|
else
|
||||||
|
Loading…
x
Reference in New Issue
Block a user