diff options
| author | Mike McQuaid | 2016-09-05 21:37:02 +0100 |
|---|---|---|
| committer | Mike McQuaid | 2016-09-08 20:46:37 +0100 |
| commit | af8605ea4ba1d9856c055c8c76b447e030540e3f (patch) | |
| tree | d093b11340406c21a4b873a80effe3b068fd07d4 /Library/Homebrew/dev-cmd/man.rb | |
| parent | 4f6bae46f9c0f7b713cdbb999318460135f423de (diff) | |
| download | brew-af8605ea4ba1d9856c055c8c76b447e030540e3f.tar.bz2 | |
Move developer-focused commands to dev-cmd.
Diffstat (limited to 'Library/Homebrew/dev-cmd/man.rb')
| -rw-r--r-- | Library/Homebrew/dev-cmd/man.rb | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/Library/Homebrew/dev-cmd/man.rb b/Library/Homebrew/dev-cmd/man.rb new file mode 100644 index 000000000..6754a15f2 --- /dev/null +++ b/Library/Homebrew/dev-cmd/man.rb @@ -0,0 +1,88 @@ +#: @hide_from_man_page +#: * `man`: +#: Generate Homebrew's manpages. + +require "formula" +require "erb" +require "ostruct" + +module Homebrew + SOURCE_PATH = HOMEBREW_LIBRARY_PATH/"manpages" + TARGET_MAN_PATH = HOMEBREW_REPOSITORY/"share/man/man1" + TARGET_DOC_PATH = HOMEBREW_REPOSITORY/"share/doc/homebrew" + + def man + raise UsageError unless ARGV.named.empty? + + if ARGV.flag? "--link" + odie "`brew man --link` is now done automatically by `brew update`." + else + regenerate_man_pages + end + end + + private + + def regenerate_man_pages + Homebrew.install_gem_setup_path! "ronn" + + markup = build_man_page + convert_man_page(markup, TARGET_DOC_PATH/"brew.1.html") + convert_man_page(markup, TARGET_MAN_PATH/"brew.1") + + cask_markup = (HOMEBREW_LIBRARY/"Homebrew/manpages/brew-cask.1.md").read + convert_man_page(cask_markup, TARGET_MAN_PATH/"brew-cask.1") + end + + def build_man_page + template = (SOURCE_PATH/"brew.1.md.erb").read + variables = OpenStruct.new + + variables[:commands] = Pathname.glob("#{HOMEBREW_LIBRARY_PATH}/cmd/*.{rb,sh}"). + sort_by { |source_file| sort_key_for_path(source_file) }. + map { |source_file| + source_file.read.lines. + grep(/^#:/). + map { |line| line.slice(2..-1) }. + join + }. + reject { |s| s.strip.empty? || s.include?("@hide_from_man_page") } + + variables[:maintainers] = (HOMEBREW_REPOSITORY/"README.md"). + read[/Homebrew's current maintainers are (.*)\./, 1]. + scan(/\[([^\]]*)\]/).flatten + + ERB.new(template, nil, ">").result(variables.instance_eval{ binding }) + end + + def sort_key_for_path(path) + # Options after regular commands (`~` comes after `z` in ASCII table). + path.basename.to_s.sub(/\.(rb|sh)$/, "").sub(/^--/, "~~") + end + + def convert_man_page(markup, target) + shared_args = %W[ + --pipe + --organization=Homebrew + --manual=#{target.basename(".1")} + ] + + format_flag, format_desc = target_path_to_format(target) + + puts "Writing #{format_desc} to #{target}" + Utils.popen(["ronn", format_flag] + shared_args, "rb+") do |ronn| + ronn.write markup + ronn.close_write + target.atomic_write ronn.read + end + end + + def target_path_to_format(target) + case target.basename + when /\.html?$/ then ["--fragment", "HTML fragment"] + when /\.\d$/ then ["--roff", "man page"] + else + odie "Failed to infer output format from '#{target.basename}'." + end + end +end |
