This is the patch from Mike Pountney <[email protected]> off
the list with the additional test Luke requested.

Signed-off-by: Markus Roberts <[email protected]>
---
 lib/puppet/util/settings.rb |    7 +++++--
 spec/unit/util/settings.rb  |   18 ++++++++++++++++--
 2 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/lib/puppet/util/settings.rb b/lib/puppet/util/settings.rb
index df07d5c..469fc33 100644
--- a/lib/puppet/util/settings.rb
+++ b/lib/puppet/util/settings.rb
@@ -147,6 +147,7 @@ class Puppet::Util::Settings
         @cache.clear
         value = munge_value(value) if value
         str = opt.sub(/^--/,'')
+
         bool = true
         newstr = str.sub(/^no-/, '')
         if newstr != str
@@ -155,8 +156,10 @@ class Puppet::Util::Settings
         end
         str = str.intern
 
-        if value == "" or value.nil?
-            value = bool
+        if @config[str].is_a?(Puppet::Util::Settings::BooleanSetting)
+            if value == "" or value.nil?
+                value = bool
+            end
         end
 
         set_value(str, value, :cli)
diff --git a/spec/unit/util/settings.rb b/spec/unit/util/settings.rb
index 5642813..dc4de3f 100755
--- a/spec/unit/util/settings.rb
+++ b/spec/unit/util/settings.rb
@@ -79,6 +79,7 @@ describe Puppet::Util::Settings do
         end
 
         it "should support a getopt-specific mechanism for turning booleans 
off" do
+            @settings[:bool] = true
             @settings.handlearg("--no-bool", "")
             @settings[:bool].should == false
         end
@@ -97,20 +98,33 @@ describe Puppet::Util::Settings do
             @settings[:bool].should == true
         end
 
-        it "should consider a cli setting with an empty string as an argument 
to be a boolean" do
+        it "should consider a cli setting with an empty string as an argument 
to be a boolean, if the setting itself is a boolean" do
             # Turn it off first
             @settings[:bool] = false
             @settings.handlearg("--bool", "")
             @settings[:bool].should == true
         end
 
+        it "should consider a cli setting with an empty string as an argument 
to be an empty argument, if the setting itself is not a boolean" do
+            @settings[:myval] = "bob"
+            @settings.handlearg("--myval", "")
+            @settings[:myval].should == ""
+        end
+
         it "should consider a cli setting with a boolean as an argument to be 
a boolean" do
             # Turn it off first
             @settings[:bool] = false
-            @settings.handlearg("--bool", true)
+            @settings.handlearg("--bool", "true")
             @settings[:bool].should == true
         end
 
+       it "should not consider a cli setting of a non boolean with a boolean 
as an argument to be a boolean" do
+            # Turn it off first
+            @settings[:myval] = "bob"
+            @settings.handlearg("--no-myval", "")
+            @settings[:myval].should == ""
+        end
+
         it "should clear the cache when setting getopt-specific values" do
             @settings.setdefaults :mysection, :one => ["whah", "yay"], :two => 
["$one yay", "bah"]
             @settings[:two].should == "whah yay"
-- 
1.6.4

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-dev?hl=en.

Reply via email to