71 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
		
		
			
		
	
	
			71 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
|   | module Utils | ||
|  |   module Link | ||
|  |     module_function | ||
|  | 
 | ||
|  |     def link_src_dst_dirs(src_dir, dst_dir, command, link_dir: false) | ||
|  |       return unless src_dir.exist? | ||
|  |       conflicts = [] | ||
|  |       src_paths = link_dir ? [src_dir] : src_dir.find | ||
|  |       src_paths.each do |src| | ||
|  |         next if src.directory? && !link_dir | ||
|  |         dst = dst_dir/src.relative_path_from(src_dir) | ||
|  |         if dst.symlink? | ||
|  |           next if src == dst.resolved_path | ||
|  |           dst.unlink | ||
|  |         end | ||
|  |         if dst.exist? | ||
|  |           conflicts << dst | ||
|  |           next | ||
|  |         end | ||
|  |         dst_dir.parent.mkpath | ||
|  |         dst.make_relative_symlink(src) | ||
|  |       end | ||
|  | 
 | ||
|  |       return if conflicts.empty? | ||
|  |       onoe <<-EOS.undent
 | ||
|  |         Could not link: | ||
|  |         #{conflicts.join("\n")} | ||
|  | 
 | ||
|  |         Please delete these paths and run `#{command}`. | ||
|  |       EOS | ||
|  |     end | ||
|  |     private_class_method :link_src_dst_dirs | ||
|  | 
 | ||
|  |     def unlink_src_dst_dirs(src_dir, dst_dir, unlink_dir: false) | ||
|  |       return unless src_dir.exist? | ||
|  |       src_paths = unlink_dir ? [src_dir] : src_dir.find | ||
|  |       src_paths.each do |src| | ||
|  |         next if src.directory? && !unlink_dir | ||
|  |         dst = dst_dir/src.relative_path_from(src_dir) | ||
|  |         dst.delete if dst.symlink? && src == dst.resolved_path | ||
|  |         dst.parent.rmdir_if_possible | ||
|  |       end | ||
|  |     end | ||
|  |     private_class_method :unlink_src_dst_dirs | ||
|  | 
 | ||
|  |     def link_manpages(path, command) | ||
|  |       link_src_dst_dirs(path/"manpages", HOMEBREW_PREFIX/"share/man/man1", command) | ||
|  |     end | ||
|  | 
 | ||
|  |     def unlink_manpages(path) | ||
|  |       unlink_src_dst_dirs(path/"manpages", HOMEBREW_PREFIX/"share/man/man1") | ||
|  |     end | ||
|  | 
 | ||
|  |     def link_completions(path, command) | ||
|  |       link_src_dst_dirs(path/"completions/bash", HOMEBREW_PREFIX/"etc/bash_completion.d", command) | ||
|  |       link_src_dst_dirs(path/"completions/zsh", HOMEBREW_PREFIX/"share/zsh/site-functions", command) | ||
|  |       link_src_dst_dirs(path/"completions/fish", HOMEBREW_PREFIX/"share/fish/vendor_completions.d", command) | ||
|  |     end | ||
|  | 
 | ||
|  |     def unlink_completions(path) | ||
|  |       unlink_src_dst_dirs(path/"completions/bash", HOMEBREW_PREFIX/"etc/bash_completion.d") | ||
|  |       unlink_src_dst_dirs(path/"completions/zsh", HOMEBREW_PREFIX/"share/zsh/site-functions") | ||
|  |       unlink_src_dst_dirs(path/"completions/fish", HOMEBREW_PREFIX/"share/fish/vendor_completions.d") | ||
|  |     end | ||
|  | 
 | ||
|  |     def link_docs(path, command) | ||
|  |       link_src_dst_dirs(path/"docs", HOMEBREW_PREFIX/"share/doc/homebrew", command, link_dir: true) | ||
|  |     end | ||
|  |   end | ||
|  | end |