diff options
author | Daniel Pittman <daniel@puppetlabs.com> | 2011-04-11 12:00:06 -0700 |
---|---|---|
committer | Daniel Pittman <daniel@puppetlabs.com> | 2011-04-12 16:12:08 -0700 |
commit | 91c29a72e2b728e2d9ba495cd34b7354faa3852b (patch) | |
tree | c71b96ff050b52f999354e607e8d65e2281a4f37 /lib/puppet | |
parent | d13a938b0abc604a7802cf41ff75a30ad6ccd192 (diff) | |
download | puppet-91c29a72e2b728e2d9ba495cd34b7354faa3852b.tar.gz puppet-91c29a72e2b728e2d9ba495cd34b7354faa3852b.tar.xz puppet-91c29a72e2b728e2d9ba495cd34b7354faa3852b.zip |
(#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 <matt@puppetlabs.com>
Diffstat (limited to 'lib/puppet')
-rw-r--r-- | lib/puppet/faces/help.rb | 39 |
1 files changed, 33 insertions, 6 deletions
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 |