From fb5aefd4a053d718637ea8690c6eeba2d6e56008 Mon Sep 17 00:00:00 2001 From: Max Howell Date: Fri, 24 Jul 2009 15:10:01 +0100 Subject: Refactor--object orientate where sensible --- bin/brew | 378 ++++++++++++++++++++++++--------------------------------------- 1 file changed, 145 insertions(+), 233 deletions(-) (limited to 'bin') diff --git a/bin/brew b/bin/brew index 4ec8a6468..d40296768 100755 --- a/bin/brew +++ b/bin/brew @@ -8,6 +8,7 @@ require 'env' # often causes Ruby to throw exception ffs Dir.chdir '/' unless File.directory? ENV['PWD'] +######################################################################## funcs def prune n=0 dirs=Array.new @@ -37,130 +38,113 @@ def prune return n end -def formulize name - name=Pathname.new name - return name if name.directory? and name.parent.realpath == $cellar - return File.basename(name, '.rb') if name.file? and name.extname == '.rb' and name.parent.realpath == $formula - - name=name.to_s - raise "#{name} is an invalid name for a formula" if name.include? '/' - - return name if ($formula+(name+'.rb')).file? - return name if ($cellar+name).directory? - - raise "No formula or keg for #{name} found" -end - -def shift_formulae_from_ARGV - fae=Array.new - i=0 - while name=ARGV[i] - unless name[0,1] == '-' - fae< 1 - keg=keg.children.first - raise "#{keg} is not a directory" unless keg.directory? - elsif keg.parent.parent.parent != $root - raise '#{keg} is not a keg' +def install formula + require 'keg' + + raise "#{formula.name} already installed!\n\t#{formula.prefix}" if formula.installed? + + beginning = Time.now + + formula.brew do + if ARGV.include? '--interactive' + ohai "Entering interactive mode" + puts "Type `exit' to return and finalize the installation" + puts "Install to this prefix: #{formula.prefix}" + pid=fork + if pid.nil? + exec 'bash' + else + Process.wait pid + end + elsif ARGV.include? '--help' + ohai './configure --help' + puts `./configure --help` + exit + else + formula.prefix.mkpath + formula.install + %w[README ChangeLog COPYING COPYRIGHT AUTHORS].each do |file| + formula.prefix.install file if File.file? file + end + end end - - # yeah indeed, you have to force anything you need in the main tree into - # these directories :P - # NOTE that not everything needs to be in the main tree - # TODO consider using hardlinks - $n=0 - lnd(keg, 'etc') {:mkdir} - lnd(keg, 'include') {:link} - lnd(keg, 'bin') {:link} - lnd(keg, 'lib') {|path| :mkpath if ['pkgconfig','php'].include? path.to_s} - lnd(keg, 'share') do |path| - mkpaths=(1..9).collect {|x| "man/man#{x}"} <<'man'<<'doc'<<'locale'<<'info'<<'aclocal' - :mkpath if mkpaths.include? path.to_s + ohai 'Finishing up' + keg=Keg.new formula + keg.clean + keg.ln + if formula.caveats + ohai "Caveats" + puts formula.caveats + ohai "Summary" end - - return $n + puts "#{keg.path}: "+abv(keg)+", built in #{pretty_duration Time.now-beginning}" +rescue Exception + formula.prefix.rmtree + raise end -def symlink_relative_to from, to - tod=to.dirname - tod.mkpath - Dir.chdir(tod) do - #TODO use ruby function so we get exceptions - `ln -sf "#{from.relative_path_from tod}"` - $n+=1 - end +def mk url + require 'formula' + path=Pathname.new(url) + + /(.*?)[-_.]?#{path.version}/.match path.basename + raise "Couldn't parse name from #{url}" if $1.nil? or $1.empty? + + path=Formula.path $1 + raise "#{path} already exists!" if File.exist? path + + f=File.new path, 'w' + f.puts "require 'brewkit'" + f.puts + f.puts "class #{Formula.class $1} 1 + end puts "Created #{n} links" when 'rm', 'uninstall' - shift_formulae_from_ARGV.each {|name| rm name} - - when 'mk' - require 'brewkit' - url=ARGV.shift - version=extract_version File.basename(url, Pathname.new(url).extname) - - /(.*?)[-_.]?#{version}/.match File.basename(url) - raise "Couldn't parse name from #{url}" if $1.nil? or $1.empty? - - path=$formula+($1.downcase+'.rb') - raise "#{path} already exists!" if File.exist? path - - f=File.new path, 'w' - f.puts "require 'brewkit'" - f.puts - f.puts "class #{__class $1} /dev/null" and $? == 0 - exec "mate #{path}" + when 'prune' + puts "Pruned #{prune} symbolic links" + + when 'mk', 'make' + paths=ARGV.collect {|arg| mk arg} + if paths.empty? + raise "Invalid URL" + elsif Kernel.system "which mate > /dev/null" and $? == 0 + paths=paths.collect {|path| path.to_s.gsub " ", "\\ "} + exec "mate #{paths.join ' '}" else - puts path + puts paths.join("\n") end - when 'info','abv' + when 'info', 'abv' if ARGV.empty? puts abv + elsif ARGV[0][0..6] == 'http://' + puts Pathname.new(ARGV.shift).version else - if ARGV[0][0..6] == 'http://' - require 'brewkit' - path=Pathname.new ARGV[0] - basename=File.basename path, path.extname - v=extract_version basename - puts v - else - o=__obj shift_formulae_from_ARGV[0] - puts "#{o.name} #{o.version}" - puts o.homepage - if abv=abv(o.name) - ohai "Installation" - puts abv - end - if o.caveats - ohai 'Caveats' - puts o.caveats - end + #TODO show outdated status and that + keg=extract_kegs[0] + frm=Formula.create keg.name + puts "#{keg.name} #{keg.version}" + puts frm.homepage + if keg.installed? + puts "#{abv keg} (installed to #{keg.path})" + end + if frm.caveats + ohai 'Caveats' + puts frm.caveats end end - + else puts usage end -- cgit v1.2.3