summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Pittman <daniel@puppetlabs.com>2011-04-11 22:04:28 -0700
committerDaniel Pittman <daniel@puppetlabs.com>2011-04-12 16:12:09 -0700
commitfe6d59528d18e9aa989f48d364868a5a105017a5 (patch)
tree92a26221cdd038a7adeb21311534cca290599470
parentacbbd52e0e876afa62f9c6098f0f40504b993dce (diff)
downloadpuppet-fe6d59528d18e9aa989f48d364868a5a105017a5.tar.gz
puppet-fe6d59528d18e9aa989f48d364868a5a105017a5.tar.xz
puppet-fe6d59528d18e9aa989f48d364868a5a105017a5.zip
(#6962) Integrate legacy subcommands into the help face.
Previously we would only emit help for a face; now we fully integrate legacy subcommands in the sense that asking for face-level help will emit their entire help text. Asking for any action subsequent will raise an error: this is an annoyingly inconsistent behaviour, but there isn't a saner definition of the change. Reviewed-By: Matt Robinson <matt@puppetlabs.com>
-rw-r--r--lib/puppet/faces/help.rb12
-rw-r--r--spec/unit/faces/help_spec.rb22
2 files changed, 32 insertions, 2 deletions
diff --git a/lib/puppet/faces/help.rb b/lib/puppet/faces/help.rb
index 29a4a62f7..1d8abe20e 100644
--- a/lib/puppet/faces/help.rb
+++ b/lib/puppet/faces/help.rb
@@ -35,8 +35,16 @@ Puppet::Faces.define(:help, '0.0.1') do
# Name those parameters...
facename, actionname = args
- face = facename ? Puppet::Faces[facename.to_sym, version] : nil
- action = (face and actionname) ? face.get_action(actionname.to_sym) : nil
+
+ if facename then
+ if legacy_applications.include? facename then
+ actionname and raise ArgumentError, "Legacy subcommands don't take actions"
+ return Puppet::Application[facename].help
+ else
+ face = Puppet::Faces[facename.to_sym, version]
+ actionname and action = face.get_action(actionname.to_sym)
+ end
+ end
case args.length
when 0 then
diff --git a/spec/unit/faces/help_spec.rb b/spec/unit/faces/help_spec.rb
index f2aeb44e9..cd74a5bf1 100644
--- a/spec/unit/faces/help_spec.rb
+++ b/spec/unit/faces/help_spec.rb
@@ -87,4 +87,26 @@ describe Puppet::Faces[:help, '0.0.1'] do
it { should_not include name }
end
end
+
+ context "help for legacy applications" do
+ subject { Puppet::Faces[:help, :current] }
+ let :appname do subject.legacy_applications.first end
+
+ # This test is purposely generic, so that as we eliminate legacy commands
+ # we don't get into a loop where we either test a face-based replacement
+ # and fail to notice breakage, or where we have to constantly rewrite this
+ # test and all. --daniel 2011-04-11
+ it "should return the legacy help when given the subcommand" do
+ help = subject.help(appname)
+ help.should =~ /puppet-#{appname}/
+ %w{SYNOPSIS USAGE DESCRIPTION OPTIONS COPYRIGHT}.each do |heading|
+ help.should =~ /^#{heading}$/
+ end
+ end
+
+ it "should fail when asked for an action on a legacy command" do
+ expect { subject.help(appname, :whatever) }.
+ to raise_error ArgumentError, /Legacy subcommands don't take actions/
+ end
+ end
end