Merge pull request #199 from hunner/remove_empty_section

Remove empty sections after last setting is removed
This commit is contained in:
Bryan Jen 2016-03-01 15:48:33 -07:00
commit af9de61afc
3 changed files with 116 additions and 18 deletions

View file

@ -134,6 +134,11 @@ module Util
end
if ! section.is_new_section?
# don't add empty sections
if section.empty? and ! section.is_global?
next
end
# write all of the pre-existing settings
(section.start_line..section.end_line).each do |line_num|
line = lines[line_num]

View file

@ -1,6 +1,4 @@
module Puppet
module Util
class IniFile
class Puppet::Util::IniFile
class Section
# Some implementation details:
#
@ -44,6 +42,10 @@ class IniFile
@existing_settings.has_key?(setting_name)
end
def empty?
start_line == end_line
end
def update_existing_setting(setting_name, value)
@existing_settings[setting_name] = value
end
@ -99,5 +101,3 @@ class IniFile
end
end
end
end

View file

@ -89,7 +89,7 @@ subby=bar
end
end
child_three.stubs(:file_path).returns(tmpfile)
child_three.instances.size == 7
child_three.instances.size.should eq(7)
expected_array = [
{:name => 'section1/foo', :value => 'foovalue' },
{:name => 'section1/bar', :value => 'barvalue' },
@ -107,7 +107,7 @@ subby=bar
ensure_array.push(ensure_value)
real_array.push(prop_hash)
end
ensure_array.uniq.should == [:present]
ensure_array.uniq.should eq([:present])
((real_array - expected_array) && (expected_array - real_array)).should == []
end
@ -305,7 +305,7 @@ subby=bar
:section => 'section:sub', :setting => 'subby', :value => 'foo'))
provider = described_class.new(resource)
provider.exists?.should be true
provider.value.should == 'bar'
provider.value.should eq('bar')
provider.value=('foo')
validate_file(<<-EOS
# This is a comment
@ -336,7 +336,7 @@ subby=foo
:setting => 'url', :value => 'http://192.168.0.1:8080'))
provider = described_class.new(resource)
provider.exists?.should be true
provider.value.should == 'http://192.168.1.1:8080'
provider.value.should eq('http://192.168.1.1:8080')
provider.value=('http://192.168.0.1:8080')
validate_file( <<-EOS
@ -370,7 +370,7 @@ subby=bar
:section_prefix => '-', :section_suffix => '-' ))
provider = described_class.new(resource)
provider.exists?.should be true
provider.value.should == 'purple'
provider.value.should eq('purple')
provider.value=('http://192.168.0.1:8080')
validate_file( <<-EOS
@ -640,7 +640,7 @@ foo = http://192.168.1.1:8080
:section => '', :setting => 'foo', :value => 'yippee'))
provider = described_class.new(resource)
provider.exists?.should be true
provider.value.should == 'blah'
provider.value.should eq('blah')
provider.value=('yippee')
validate_file(<<-EOS
# This is a comment
@ -688,7 +688,7 @@ foo = http://192.168.1.1:8080
:section => 'section2', :setting => 'foo', :value => 'yippee'))
provider = described_class.new(resource)
provider.exists?.should be true
provider.value.should == 'http://192.168.1.1:8080'
provider.value.should eq('http://192.168.1.1:8080')
provider.value=('yippee')
validate_file(<<-EOS
[section2]
@ -728,7 +728,7 @@ foo=bar
:key_val_separator => '='))
provider = described_class.new(resource)
provider.exists?.should be true
provider.value.should == 'bar'
provider.value.should eq('bar')
provider.value=('yippee')
validate_file(<<-EOS
[section2]
@ -755,7 +755,7 @@ foo: bar
:key_val_separator => ': '))
provider = described_class.new(resource)
provider.exists?.should be true
provider.value.should == 'bar'
provider.value.should eq('bar')
provider.value=('yippee')
validate_file(<<-EOS
[section2]
@ -799,7 +799,7 @@ foo bar
:key_val_separator => ' '))
provider = described_class.new(resource)
provider.exists?.should be true
provider.value.should == 'bar'
provider.value.should eq('bar')
provider.value=('yippee')
validate_file(<<-EOS
[section2]
@ -840,6 +840,11 @@ master = true
foo= foovalue2
baz=bazvalue
url = http://192.168.1.1:8080
[section3]
# com = ment
uncom = ment
[section4]
uncom = ment
[section:sub]
subby=bar
#another comment
@ -867,6 +872,11 @@ master = true
foo= foovalue2
baz=bazvalue
url = http://192.168.1.1:8080
[section3]
# com = ment
uncom = ment
[section4]
uncom = ment
[section:sub]
subby=bar
#another comment
@ -897,12 +907,16 @@ master = true
foo= foovalue2
baz=bazvalue
url = http://192.168.1.1:8080
[section3]
# com = ment
uncom = ment
[section4]
uncom = ment
[section:sub]
subby=bar
#another comment
; yet another comment
-nonstandard-
EOS
)
end
@ -925,6 +939,11 @@ master = true
foo= foovalue2
baz=bazvalue
url = http://192.168.1.1:8080
[section3]
# com = ment
uncom = ment
[section4]
uncom = ment
[section:sub]
subby=bar
#another comment
@ -955,6 +974,11 @@ master = true
foo= foovalue2
baz=bazvalue
url = http://192.168.1.1:8080
[section3]
# com = ment
uncom = ment
[section4]
uncom = ment
[section:sub]
subby=bar
#another comment
@ -965,6 +989,77 @@ subby=bar
EOS
)
end
it "does not remove a section when the last uncommented setting is removed if there are comments" do
resource = Puppet::Type::Ini_setting.new(common_params.merge(
:section => 'section3',
:setting => 'uncom',
:ensure => 'absent',
))
provider = described_class.new(resource)
provider.exists?.should be true
provider.destroy
validate_file(<<-EOS
[section1]
; This is also a comment
foo=foovalue
bar = barvalue
master = true
[section2]
foo= foovalue2
baz=bazvalue
url = http://192.168.1.1:8080
[section3]
# com = ment
[section4]
uncom = ment
[section:sub]
subby=bar
#another comment
; yet another comment
-nonstandard-
shoes = purple
EOS
)
end
it "removes the section when removing the last line in the section" do
resource = Puppet::Type::Ini_setting.new(common_params.merge(
:section => 'section4',
:setting => 'uncom',
:ensure => 'absent',
))
provider = described_class.new(resource)
provider.exists?.should be true
provider.destroy
validate_file(<<-EOS
[section1]
; This is also a comment
foo=foovalue
bar = barvalue
master = true
[section2]
foo= foovalue2
baz=bazvalue
url = http://192.168.1.1:8080
[section3]
# com = ment
uncom = ment
[section:sub]
subby=bar
#another comment
; yet another comment
-nonstandard-
shoes = purple
EOS
)
end
end
context "when dealing with indentation in sections" do
@ -1399,7 +1494,5 @@ foo = bar
EOS
)
end
end
end