| 
									
										
										
										
											2012-10-20 20:54:11 -05:00
										 |  |  | require 'ostruct' | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  | module Homebrew extend self | 
					
						
							| 
									
										
										
										
											2012-03-19 00:15:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  |   def link | 
					
						
							| 
									
										
										
										
											2012-02-04 00:01:29 -06:00
										 |  |  |     raise KegUnspecifiedError if ARGV.named.empty? | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-04 02:47:53 +00:00
										 |  |  |     if Process.uid.zero? and not File.stat(HOMEBREW_BREW_FILE).uid.zero? | 
					
						
							| 
									
										
										
										
											2012-08-10 09:33:33 -04:00
										 |  |  |       raise "Cowardly refusing to `sudo brew link'\n#{SUDO_BAD_ERRMSG}" | 
					
						
							| 
									
										
										
										
											2012-03-04 02:47:53 +00:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-20 20:54:11 -05:00
										 |  |  |     mode = OpenStruct.new | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     mode.overwrite = true if ARGV.include? '--overwrite' | 
					
						
							|  |  |  |     mode.dry_run = true if ARGV.dry_run? | 
					
						
							| 
									
										
										
										
											2012-06-17 16:54:20 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  |     ARGV.kegs.each do |keg| | 
					
						
							| 
									
										
										
										
											2012-07-11 20:13:46 -07:00
										 |  |  |       if keg.linked? | 
					
						
							| 
									
										
										
										
											2012-03-19 12:24:13 +00:00
										 |  |  |         opoo "Already linked: #{keg}" | 
					
						
							| 
									
										
										
										
											2012-10-22 12:27:07 -07:00
										 |  |  |         puts "To relink: brew unlink #{keg.fname} && brew link #{keg.fname}" | 
					
						
							| 
									
										
										
										
											2012-03-19 12:24:13 +00:00
										 |  |  |         next | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-20 20:54:11 -05:00
										 |  |  |       if mode.dry_run and mode.overwrite | 
					
						
							| 
									
										
										
										
											2012-06-17 16:54:20 -05:00
										 |  |  |         print "Would remove:\n" do | 
					
						
							|  |  |  |           keg.link(mode) | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-20 20:54:11 -05:00
										 |  |  |         next | 
					
						
							|  |  |  |       elsif mode.dry_run | 
					
						
							|  |  |  |         print "Would link:\n" do | 
					
						
							|  |  |  |           keg.link(mode) | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-06-17 16:54:20 -05:00
										 |  |  |         next | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-19 00:15:40 +00:00
										 |  |  |       print "Linking #{keg}... " do | 
					
						
							| 
									
										
										
										
											2012-06-17 16:54:20 -05:00
										 |  |  |         puts "#{keg.link(mode)} symlinks created" | 
					
						
							| 
									
										
										
										
											2012-03-19 00:15:40 +00:00
										 |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   private | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   # Allows us to ensure a puts happens before the block exits so that if say, | 
					
						
							|  |  |  |   # an exception is thrown, its output starts on a new line. | 
					
						
							|  |  |  |   def print str, &block | 
					
						
							|  |  |  |     Kernel.print str | 
					
						
							|  |  |  |     puts_capture = Class.new do | 
					
						
							|  |  |  |       def self.puts str | 
					
						
							|  |  |  |         $did_puts = true | 
					
						
							|  |  |  |         Kernel.puts str | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2012-03-19 00:15:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     puts_capture.instance_eval &block | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   ensure | 
					
						
							|  |  |  |     puts unless $did_puts | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2012-03-19 00:15:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  | end |