| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  | require 'formula' | 
					
						
							| 
									
										
										
										
											2011-11-13 23:24:39 -06:00
										 |  |  | require 'tab' | 
					
						
							| 
									
										
										
										
											2012-01-01 15:27:21 -06:00
										 |  |  | require 'keg' | 
					
						
							| 
									
										
										
										
											2013-01-01 17:26:50 +00:00
										 |  |  | require 'caveats' | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | module Homebrew extend self | 
					
						
							|  |  |  |   def info | 
					
						
							| 
									
										
										
										
											2012-08-15 22:08:40 -05:00
										 |  |  |     # eventually we'll solidify an API, but we'll keep old versions | 
					
						
							|  |  |  |     # awhile around for compatibility | 
					
						
							|  |  |  |     if ARGV.json == "v1" | 
					
						
							|  |  |  |       print_json | 
					
						
							| 
									
										
										
										
											2013-02-16 21:20:14 -06:00
										 |  |  |     elsif ARGV.flag? '--github' | 
					
						
							| 
									
										
										
										
											2013-03-28 17:37:29 -05:00
										 |  |  |       exec_browser(*ARGV.formulae.map { |f| github_info(f) }) | 
					
						
							| 
									
										
										
										
											2012-08-15 22:08:40 -05:00
										 |  |  |     else | 
					
						
							|  |  |  |       print_info | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def print_info | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  |     if ARGV.named.empty? | 
					
						
							|  |  |  |       if ARGV.include? "--all" | 
					
						
							|  |  |  |         Formula.each do |f| | 
					
						
							|  |  |  |           info_formula f | 
					
						
							|  |  |  |           puts '---' | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  |         puts "#{HOMEBREW_CELLAR.children.length} kegs, #{HOMEBREW_CELLAR.abv}" | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     elsif valid_url ARGV[0] | 
					
						
							| 
									
										
										
										
											2011-03-14 10:55:15 -05:00
										 |  |  |       info_formula Formula.factory(ARGV.shift) | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  |     else | 
					
						
							|  |  |  |       ARGV.formulae.each{ |f| info_formula f } | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-15 22:08:40 -05:00
										 |  |  |   def print_json | 
					
						
							|  |  |  |     require 'vendor/multi_json' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     formulae = ARGV.include?("--all") ? Formula : ARGV.formulae | 
					
						
							|  |  |  |     json = formulae.map {|f| f.to_hash} | 
					
						
							|  |  |  |     if json.size == 1
 | 
					
						
							|  |  |  |       puts MultiJson.encode json.pop | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       puts MultiJson.encode json | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-06 17:35:10 +00:00
										 |  |  |   def github_fork | 
					
						
							| 
									
										
										
										
											2012-08-06 16:44:11 -04:00
										 |  |  |     if which 'git' and (HOMEBREW_REPOSITORY/".git").directory? | 
					
						
							| 
									
										
										
										
											2012-04-15 14:20:54 +01:00
										 |  |  |       if `git remote -v` =~ %r{origin\s+(https?://|git(?:@|://))github.com[:/](.+)/homebrew} | 
					
						
							| 
									
										
										
										
											2012-03-06 17:35:10 +00:00
										 |  |  |         $2 | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-06 23:40:54 -05:00
										 |  |  |   def github_info f | 
					
						
							|  |  |  |     path = f.path.realpath | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-06 17:35:10 +00:00
										 |  |  |     if path.to_s =~ %r{#{HOMEBREW_REPOSITORY}/Library/Taps/(\w+)-(\w+)/(.*)} | 
					
						
							|  |  |  |       user = $1 | 
					
						
							|  |  |  |       repo = "homebrew-#$2" | 
					
						
							|  |  |  |       path = $3 | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       path.parent.cd do | 
					
						
							|  |  |  |         user = github_fork | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2012-03-06 17:35:10 +00:00
										 |  |  |       repo = "homebrew" | 
					
						
							|  |  |  |       path = "Library/Formula/#{path.basename}" | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-06 17:35:10 +00:00
										 |  |  |     "https://github.com/#{user}/#{repo}/commits/master/#{path}" | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def info_formula f | 
					
						
							| 
									
										
										
										
											2012-04-05 21:11:49 -05:00
										 |  |  |     specs = [] | 
					
						
							|  |  |  |     stable = "stable #{f.stable.version}" if f.stable | 
					
						
							| 
									
										
										
										
											2013-03-01 17:44:58 +00:00
										 |  |  |     stable += " (bottled)" if f.bottle | 
					
						
							| 
									
										
										
										
											2012-04-05 21:11:49 -05:00
										 |  |  |     specs << stable if stable | 
					
						
							|  |  |  |     specs << "devel #{f.devel.version}" if f.devel | 
					
						
							|  |  |  |     specs << "HEAD" if f.head | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-31 12:27:11 +02:00
										 |  |  |     puts "#{f.name}: #{specs*', '}#{' (pinned)' if f.pinned?}" | 
					
						
							| 
									
										
										
										
											2012-04-05 21:11:49 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  |     puts f.homepage | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-06-21 13:57:09 -05:00
										 |  |  |     if f.keg_only? | 
					
						
							|  |  |  |       puts | 
					
						
							|  |  |  |       puts "This formula is keg-only." | 
					
						
							| 
									
										
										
										
											2012-08-09 02:00:58 -05:00
										 |  |  |       puts f.keg_only_reason | 
					
						
							| 
									
										
										
										
											2011-06-21 13:57:09 -05:00
										 |  |  |       puts | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  |     puts "Depends on: #{f.deps*', '}" unless f.deps.empty? | 
					
						
							| 
									
										
										
										
											2013-01-14 14:53:18 -06:00
										 |  |  |     conflicts = f.conflicts.map { |c| c.formula }.sort | 
					
						
							| 
									
										
										
										
											2012-07-28 13:02:46 -03:00
										 |  |  |     puts "Conflicts with: #{conflicts*', '}" unless conflicts.empty? | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-11 12:57:53 -07:00
										 |  |  |     if f.rack.directory? | 
					
						
							|  |  |  |       kegs = f.rack.children | 
					
						
							| 
									
										
										
										
											2012-12-03 22:21:28 +01:00
										 |  |  |       kegs.reject! {|keg| keg.basename.to_s == '.DS_Store' } | 
					
						
							|  |  |  |       kegs = kegs.map {|keg| Keg.new(keg) }.sort_by {|keg| keg.version } | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  |       kegs.each do |keg| | 
					
						
							| 
									
										
										
										
											2013-03-27 23:07:33 -05:00
										 |  |  |         puts "#{keg} (#{keg.abv})#{' *' if keg.linked?}" | 
					
						
							|  |  |  |         tab = Tab.for_keg(keg).to_s | 
					
						
							|  |  |  |         puts "  #{tab}" unless tab.empty? | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  |       end | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       puts "Not installed" | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-06 23:40:54 -05:00
										 |  |  |     history = github_info(f) | 
					
						
							| 
									
										
										
										
											2012-03-06 17:35:10 +00:00
										 |  |  |     puts history if history | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-09 09:24:07 -07:00
										 |  |  |     unless f.build.empty? | 
					
						
							| 
									
										
										
										
											2012-08-04 15:40:36 -04:00
										 |  |  |       require 'cmd/options' | 
					
						
							|  |  |  |       ohai "Options" | 
					
						
							|  |  |  |       Homebrew.dump_options_for_formula f | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-12 13:08:29 -06:00
										 |  |  |     c = Caveats.new(f) | 
					
						
							|  |  |  |     ohai 'Caveats', c.caveats unless c.empty? | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |   rescue FormulaUnavailableError | 
					
						
							|  |  |  |     # check for DIY installation | 
					
						
							| 
									
										
										
										
											2010-12-31 11:00:15 -08:00
										 |  |  |     d = HOMEBREW_PREFIX+name | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  |     if d.directory? | 
					
						
							|  |  |  |       ohai "DIY Installation" | 
					
						
							|  |  |  |       d.children.each{ |keg| puts "#{keg} (#{keg.abv})" } | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       raise "No such formula or keg" | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   private | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def valid_url u | 
					
						
							|  |  |  |     u[0..6] == 'http://' or u[0..7] == 'https://' or u[0..5] == 'ftp://' | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | end |