Skip to content
Snippets Groups Projects
Commit d36d88ed authored by Mike McQuaid's avatar Mike McQuaid
Browse files

Allow taps to link manpages.

A blocker for https://github.com/caskroom/homebrew-cask/pull/15381
being merged.

Closes Homebrew/homebrew#46795.
parent ed35c18f
No related branches found
No related tags found
No related merge requests found
......@@ -5,6 +5,7 @@ module Homebrew
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"
......
......@@ -76,6 +76,7 @@ module Homebrew
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|
......
......@@ -138,6 +138,8 @@ class Tap
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)
......@@ -153,6 +155,29 @@ class Tap
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?
......@@ -161,11 +186,22 @@ class Tap
unpin if pinned?
formula_count = formula_files.size
Descriptions.uncache_formulae(formula_names)
unlink_manpages
path.rmtree
path.dirname.rmdir_if_possible
path.parent.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
......@@ -262,7 +298,7 @@ class Tap
raise TapUnavailableError, name unless installed?
raise TapPinStatusError.new(name, false) unless pinned?
pinned_symlink_path.delete
pinned_symlink_path.dirname.rmdir_if_possible
pinned_symlink_path.parent.rmdir_if_possible
@pinned = false
end
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment