| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  | require "keg" | 
					
						
							|  |  |  | require "cmd/tap" | 
					
						
							| 
									
										
										
										
											2012-02-01 22:36:07 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-18 22:41:47 -05:00
										 |  |  | module Homebrew | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  |   def prune | 
					
						
							| 
									
										
										
										
											2013-08-09 21:09:48 -05:00
										 |  |  |     ObserverPathnameExtension.reset_counts! | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  |     dirs = [] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-17 17:08:23 +02:00
										 |  |  |     Keg::PRUNEABLE_DIRECTORIES.each do |dir| | 
					
						
							|  |  |  |       next unless dir.directory? | 
					
						
							| 
									
										
										
										
											2013-02-17 22:54:43 -06:00
										 |  |  |       dir.find do |path| | 
					
						
							| 
									
										
										
										
											2013-05-15 12:45:39 -05:00
										 |  |  |         path.extend(ObserverPathnameExtension) | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  |         if path.symlink? | 
					
						
							| 
									
										
										
										
											2012-02-01 22:36:07 -06:00
										 |  |  |           unless path.resolved_path_exists? | 
					
						
							| 
									
										
										
										
											2014-02-22 09:20:09 -08:00
										 |  |  |             if path.to_s =~ Keg::INFOFILE_RX | 
					
						
							| 
									
										
										
										
											2013-05-15 12:45:39 -05:00
										 |  |  |               path.uninstall_info unless ARGV.dry_run? | 
					
						
							|  |  |  |             end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             if ARGV.dry_run? | 
					
						
							|  |  |  |               puts "Would remove (broken link): #{path}" | 
					
						
							|  |  |  |             else | 
					
						
							|  |  |  |               path.unlink | 
					
						
							| 
									
										
										
										
											2012-02-01 22:36:07 -06:00
										 |  |  |             end | 
					
						
							|  |  |  |           end | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  |         elsif path.directory? | 
					
						
							|  |  |  |           dirs << path | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-21 21:37:26 -06:00
										 |  |  |     dirs.reverse_each do |d| | 
					
						
							| 
									
										
										
										
											2013-05-15 12:45:39 -05:00
										 |  |  |       if ARGV.dry_run? && d.children.empty? | 
					
						
							|  |  |  |         puts "Would remove (empty directory): #{d}" | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  |         d.rmdir_if_possible | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-08 20:19:12 +08:00
										 |  |  |     migrate_taps :force => true unless ARGV.dry_run? | 
					
						
							| 
									
										
										
										
											2013-04-13 17:22:01 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-08-09 21:09:48 -05:00
										 |  |  |     if ObserverPathnameExtension.total.zero? | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  |       puts "Nothing pruned" if ARGV.verbose? | 
					
						
							|  |  |  |     else | 
					
						
							| 
									
										
										
										
											2014-02-23 22:07:30 -08:00
										 |  |  |       n, d = ObserverPathnameExtension.counts | 
					
						
							| 
									
										
										
										
											2013-08-09 21:09:48 -05:00
										 |  |  |       print "Pruned #{n} symbolic links " | 
					
						
							|  |  |  |       print "and #{d} directories " if d > 0
 | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |       puts "from #{HOMEBREW_PREFIX}" | 
					
						
							| 
									
										
										
										
											2013-05-15 12:45:39 -05:00
										 |  |  |     end unless ARGV.dry_run? | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | end |