| 
									
										
										
										
											2010-06-16 09:42:06 -07:00
										 |  |  | require 'formula' | 
					
						
							|  |  |  | require 'keg' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if ARGV.named.length != 2
 | 
					
						
							| 
									
										
										
										
											2010-07-12 09:31:21 -07:00
										 |  |  |   onoe "Usage: brew switch <formula> <version>" | 
					
						
							| 
									
										
										
										
											2010-06-16 09:42:06 -07:00
										 |  |  |   exit 1
 | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | name = ARGV.shift | 
					
						
							|  |  |  | version = ARGV.shift | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Does this formula have any versions? | 
					
						
							|  |  |  | f = Formula.factory(name.downcase) | 
					
						
							|  |  |  | cellar = f.prefix.parent | 
					
						
							|  |  |  | unless cellar.directory? | 
					
						
							|  |  |  |   onoe "#{name} not found in the Cellar." | 
					
						
							|  |  |  |   exit 2
 | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Does the target version exist? | 
					
						
							|  |  |  | unless (cellar+version).directory? | 
					
						
							| 
									
										
										
										
											2010-07-12 09:31:21 -07:00
										 |  |  |   onoe "#{name} does not have a version \"#{version}\" in the Cellar." | 
					
						
							| 
									
										
										
										
											2010-06-16 09:42:06 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |   versions = cellar.children.select { |pn| pn.directory? }.collect { |pn| pn.basename.to_s } | 
					
						
							|  |  |  |   puts "Versions available: #{versions.join(', ')}" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   exit 3
 | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Unlink all existing versions | 
					
						
							|  |  |  | cellar.children.select { |pn| pn.directory? }.each do |v| | 
					
						
							|  |  |  |   keg = Keg.new(v) | 
					
						
							|  |  |  |   puts "Cleaning #{keg}" | 
					
						
							|  |  |  |   keg.unlink | 
					
						
							|  |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Link new version | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | keg = Keg.new(cellar+version) | 
					
						
							|  |  |  | puts "#{keg.link} links created for #{keg}" |