From 91c29a72e2b728e2d9ba495cd34b7354faa3852b Mon Sep 17 00:00:00 2001 From: Daniel Pittman Date: Mon, 11 Apr 2011 12:00:06 -0700 Subject: (#6962) Extract summary from legacy applications for help. We use a dubious, but effective, regexp match on the existing man(1) style help string for the application to extract the summary data. This should properly be implemented as a summary method down in the applications themselves... Paired-With: Matt Robinson --- lib/puppet/faces/help.rb | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) (limited to 'lib/puppet/faces/help.rb') diff --git a/lib/puppet/faces/help.rb b/lib/puppet/faces/help.rb index c284433d1..2eb2869a4 100644 --- a/lib/puppet/faces/help.rb +++ b/lib/puppet/faces/help.rb @@ -36,14 +36,12 @@ Puppet::Faces.define(:help, '0.0.1') do message << format(HelpSummaryFormat, face.name, face.summary) end - legacy = Puppet::Util::CommandLine.available_subcommands.reject do |appname| - Puppet::Faces.face? appname.to_sym, :current - end - unless legacy.empty? then # great victory when this is true! + unless legacy_applications.empty? then # great victory when this is true! message << "" message << "Available applications, soon to be ported to Faces:" - legacy.sort.each do |appname| - message << format(HelpSummaryFormat, appname, 'REVISIT: how to summarize these?') + legacy_applications.each do |appname| + summary = horribly_extract_summary_from appname + message << format(HelpSummaryFormat, appname, summary) end end else @@ -63,4 +61,33 @@ Puppet::Faces.define(:help, '0.0.1') do message end end + + def legacy_applications + # The list of applications, less those that are duplicated as a face. + Puppet::Util::CommandLine.available_subcommands.reject do |appname| + Puppet::Faces.face? appname.to_sym, :current or + # ...this is a nasty way to exclude non-applications. :( + %w{faces_base indirection_base}.include? appname + end.sort + end + + def horribly_extract_summary_from(appname) + begin + require "puppet/application/#{appname}" + help = Puppet::Application[appname].help.split("\n") + # Now we find the line with our summary, extract it, and return it. This + # depends on the implementation coincidence of how our pages are + # formatted. If we can't match the pattern we expect we return the empty + # string to ensure we don't blow up in the summary. --daniel 2011-04-11 + while line = help.shift do + if md = /^puppet-#{appname}\([^\)]+\) -- (.*)$/.match(line) then + return md[1] + end + end + rescue Exception + # Damn, but I hate this: we just ignore errors here, no matter what + # class they are. Meh. + end + return '' + end end -- cgit