Skip to content
This repository has been archived by the owner on Jul 4, 2023. It is now read-only.

Allow taps to link manpages. #46795

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Library/Homebrew/cmd/tap.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
1 change: 1 addition & 0 deletions Library/Homebrew/cmd/update.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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|
Expand Down
36 changes: 36 additions & 0 deletions Library/Homebrew/tap.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should check files by origin. Because the symlink may still be a user file.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, I think I may need to abstract out code from Keg.link in this case.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done.

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
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A unlink method is required for uninstall.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yup.

raise TapUnavailableError, name unless installed?
Expand All @@ -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
Expand Down