| 
									
										
										
										
											2016-04-08 16:28:43 +02:00
										 |  |  | #:  * `prune` [`--dry-run`]: | 
					
						
							|  |  |  | #:    Remove dead symlinks from the Homebrew prefix. This is generally not | 
					
						
							|  |  |  | #:    needed, but can be useful when doing DIY installations. Also remove broken | 
					
						
							|  |  |  | #:    app symlinks from `/Applications` and `~/Applications` that were previously | 
					
						
							|  |  |  | #:    created by `brew linkapps`. | 
					
						
							|  |  |  | #: | 
					
						
							|  |  |  | #:    If `--dry-run` or `-n` is passed, show what would be removed, but do not | 
					
						
							|  |  |  | #:    actually remove anything. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  | require "keg" | 
					
						
							|  |  |  | require "cmd/tap" | 
					
						
							| 
									
										
										
										
											2015-12-08 09:11:33 +01:00
										 |  |  | require "cmd/unlinkapps" | 
					
						
							| 
									
										
										
										
											2012-02-01 22:36:07 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-18 22:41:47 -05:00
										 |  |  | module Homebrew | 
					
						
							| 
									
										
										
										
											2016-09-26 01:44:51 +02:00
										 |  |  |   module_function | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											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 | 
					
						
							| 
									
										
										
										
											2016-12-13 01:05:11 +00:00
										 |  |  |         elsif path.directory? && !Keg::PRUNEABLE_DIRECTORIES.include?(path) | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  |           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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-10 10:24:57 +01:00
										 |  |  |     unless ARGV.dry_run? | 
					
						
							|  |  |  |       if ObserverPathnameExtension.total.zero? | 
					
						
							|  |  |  |         puts "Nothing pruned" if ARGV.verbose? | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  |         n, d = ObserverPathnameExtension.counts | 
					
						
							|  |  |  |         print "Pruned #{n} symbolic links " | 
					
						
							|  |  |  |         print "and #{d} directories " if d > 0
 | 
					
						
							|  |  |  |         puts "from #{HOMEBREW_PREFIX}" | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2015-12-08 09:11:33 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-17 15:32:44 +01:00
										 |  |  |     unlinkapps_prune(dry_run: ARGV.dry_run?, quiet: true) | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | end |