summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBryan Kearney <bkearney@redhat.com>2009-02-18 12:46:17 -0500
committerBryan Kearney <bkearney@redhat.com>2009-03-04 16:51:08 -0500
commitcedeb7982b051e00173822c8d14a794e4fb10ae7 (patch)
tree1de584e184bad8b10f78abd41f8004f911100da6
parentcf48ec0aba120e6e83e48b3499df9029b5302767 (diff)
downloadpuppet-cedeb7982b051e00173822c8d14a794e4fb10ae7.tar.gz
puppet-cedeb7982b051e00173822c8d14a794e4fb10ae7.tar.xz
puppet-cedeb7982b051e00173822c8d14a794e4fb10ae7.zip
Backport the fix for #1835
-rw-r--r--lib/puppet/provider/augeas/augeas.rb26
-rw-r--r--spec/unit/provider/augeas/augeas.rb80
2 files changed, 102 insertions, 4 deletions
diff --git a/lib/puppet/provider/augeas/augeas.rb b/lib/puppet/provider/augeas/augeas.rb
index 5fa5ab409..e9471b1be 100644
--- a/lib/puppet/provider/augeas/augeas.rb
+++ b/lib/puppet/provider/augeas/augeas.rb
@@ -42,10 +42,27 @@ Puppet::Type.type(:augeas).provide(:augeas) do
if data.is_a?(String)
data.each_line do |line|
cmd_array = Array.new()
- tokens = line.split(" ")
- cmd = tokens.shift()
- file = tokens.shift()
- other = tokens.join(" ")
+ single = line.index("'")
+ double = line.index('"')
+ tokens = nil
+ delim = " "
+ if ((single != nil) or (double != nil))
+ single = 99999 if single == nil
+ double = 99999 if double == nil
+ delim = '"' if double < single
+ delim = "'" if single < double
+ end
+ tokens = line.split(delim)
+ # If the length of tokens is 2, thn that means the pattern was
+ # command file "some text", therefore we need to re-split
+ # the first line
+ if tokens.length == 2
+ tokens = (tokens[0].split(" ")) << tokens[1]
+ end
+ cmd = tokens.shift().strip()
+ delim = "" if delim == " "
+ file = tokens.shift().strip()
+ other = tokens.join(" ").strip()
cmd_array << cmd if !cmd.nil?
cmd_array << file if !file.nil?
cmd_array << other if other != ""
@@ -59,6 +76,7 @@ Puppet::Type.type(:augeas).provide(:augeas) do
return commands
end
+
def open_augeas
if (@aug.nil?)
flags = 0
diff --git a/spec/unit/provider/augeas/augeas.rb b/spec/unit/provider/augeas/augeas.rb
index 3ce64576e..e05812d78 100644
--- a/spec/unit/provider/augeas/augeas.rb
+++ b/spec/unit/provider/augeas/augeas.rb
@@ -54,6 +54,86 @@ describe provider_class do
tokens[0][1].should == "/Jar/Jar"
tokens[0][2].should == "Binks is my copilot"
end
+
+ it "should accept spaces and and single ticks" do
+ provider = provider_class.new()
+ tokens = provider.parse_commands("set 'Jar Jar' Binks")
+ tokens.size.should == 1
+ tokens[0].size.should == 3
+ tokens[0][0].should == "set"
+ tokens[0][1].should == "Jar Jar"
+ tokens[0][2].should == "Binks"
+ end
+
+ it "should accept spaces in the value and and single ticks" do
+ provider = provider_class.new()
+ tokens = provider.parse_commands("set 'Jar Jar' 'Binks is my copilot'")
+ tokens.size.should == 1
+ tokens[0].size.should == 3
+ tokens[0][0].should == "set"
+ tokens[0][1].should == "Jar Jar"
+ tokens[0][2].should == "Binks is my copilot"
+ end
+
+ it "should accept spaces and and double ticks" do
+ provider = provider_class.new()
+ tokens = provider.parse_commands('set "Jar Jar" Binks')
+ tokens.size.should == 1
+ tokens[0].size.should == 3
+ tokens[0][0].should == "set"
+ tokens[0][1].should == 'Jar Jar'
+ tokens[0][2].should == 'Binks'
+ end
+
+ it "should accept spaces in the value and and double ticks" do
+ provider = provider_class.new()
+ tokens = provider.parse_commands('set "Jar Jar" "Binks is my copilot"')
+ tokens.size.should == 1
+ tokens[0].size.should == 3
+ tokens[0][0].should == "set"
+ tokens[0][1].should == 'Jar Jar'
+ tokens[0][2].should == 'Binks is my copilot'
+ end
+
+ it "should accept mixed ticks" do
+ provider = provider_class.new()
+ tokens = provider.parse_commands('set "Jar Jar" "Some \'Test\'"')
+ tokens.size.should == 1
+ tokens[0].size.should == 3
+ tokens[0][0].should == "set"
+ tokens[0][1].should == 'Jar Jar'
+ tokens[0][2].should == "Some \'Test\'"
+ end
+
+ it "should accept only the last value using ticks" do
+ provider = provider_class.new()
+ tokens = provider.parse_commands('set /Jar/Jar "Binks is my copilot"')
+ tokens.size.should == 1
+ tokens[0].size.should == 3
+ tokens[0][0].should == "set"
+ tokens[0][1].should == '/Jar/Jar'
+ tokens[0][2].should == "Binks is my copilot"
+ end
+
+ it "should accept only the first value using ticks" do
+ provider = provider_class.new()
+ tokens = provider.parse_commands('set "Jar Jar" copilot')
+ tokens.size.should == 1
+ tokens[0].size.should == 3
+ tokens[0][0].should == "set"
+ tokens[0][1].should == 'Jar Jar'
+ tokens[0][2].should == "copilot"
+ end
+
+ it "should accept only the first value using ticks and the last values being concatenated" do
+ provider = provider_class.new()
+ tokens = provider.parse_commands('set "Jar Jar" Binks is my copilot')
+ tokens.size.should == 1
+ tokens[0].size.should == 3
+ tokens[0][0].should == "set"
+ tokens[0][1].should == 'Jar Jar'
+ tokens[0][2].should == "Binks is my copilot"
+ end
end
describe "get filters" do