diff --git a/Library/Homebrew/cmd/tap.rb b/Library/Homebrew/cmd/tap.rb index 701931f1e4d4..2994cf31c4ce 100644 --- a/Library/Homebrew/cmd/tap.rb +++ b/Library/Homebrew/cmd/tap.rb @@ -5,6 +5,7 @@ def tap if ARGV.empty? puts Tap.names elsif ARGV.first == "--repair" + Tap.each(&:link_manpages) migrate_taps :force => true elsif ARGV.first == "--list-official" require "official_taps" diff --git a/Library/Homebrew/cmd/update.rb b/Library/Homebrew/cmd/update.rb index f4cd9d712e53..17caeb37c43f 100644 --- a/Library/Homebrew/cmd/update.rb +++ b/Library/Homebrew/cmd/update.rb @@ -76,6 +76,7 @@ def update puts "Already up-to-date." unless master_updated || !updated_taps.empty? Tap.clear_cache + Tap.each(&:link_manpages) # automatically tap any migrated formulae's new tap report.select_formula(:D).each do |f| diff --git a/Library/Homebrew/tap.rb b/Library/Homebrew/tap.rb index 5a516f839c99..18bcf17f8990 100644 --- a/Library/Homebrew/tap.rb +++ b/Library/Homebrew/tap.rb @@ -118,6 +118,8 @@ def install(options = {}) raise end + link_manpages + formula_count = formula_files.size puts "Tapped #{formula_count} formula#{plural(formula_count, "e")} (#{@path.abv})" Descriptions.cache_formulae(formula_names) @@ -133,6 +135,29 @@ def install(options = {}) end end + def link_manpages + return unless (path/"man").exist? + conflicts = [] + (path/"man").find do |src| + next if src.directory? + dst = HOMEBREW_PREFIX/"share"/src.relative_path_from(path) + next if dst.symlink? && src == dst.resolved_path + if dst.exist? + conflicts << dst + next + end + dst.make_relative_symlink(src) + end + unless conflicts.empty? + onoe <<-EOS.undent + Could not link #{name} manpages to: + #{conflicts.join("\n")} + + Please delete these files and run `brew tap --repair`. + EOS + end + end + # uninstall this {Tap}. def uninstall raise TapUnavailableError, name unless installed? @@ -141,11 +166,22 @@ def uninstall unpin if pinned? formula_count = formula_files.size Descriptions.uncache_formulae(formula_names) + unlink_manpages @path.rmtree @path.dirname.rmdir_if_possible puts "Untapped #{formula_count} formula#{plural(formula_count, "e")}" end + def unlink_manpages + return unless (path/"man").exist? + (path/"man").find do |src| + next if src.directory? + dst = HOMEBREW_PREFIX/src.relative_path_from(path) + dst.delete if dst.symlink? && src == dst.resolved_path + dst.parent.rmdir_if_possible + end + end + # True if the {#remote} of {Tap} is customized. def custom_remote? return true unless remote