Skip to content

Commit

Permalink
MODULES-1599 Match only on space and tab whitespace after k/v separator
Browse files Browse the repository at this point in the history
The previous match for \s would also match on newlines.  This caused
existing settings with blank values to have the newline considered part
of the whitespace surrounding the separator.  When such settings are
set with a value, the value ends up on the next line.

Also adding acceptance test for this particular situation.
  • Loading branch information
Mike Dorman committed Jun 18, 2015
1 parent e132445 commit c784253
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 1 deletion.
2 changes: 1 addition & 1 deletion lib/puppet/util/ini_file.rb
Expand Up @@ -13,7 +13,7 @@ def initialize(path, key_val_separator = ' = ', section_prefix = '[', section_su
@section_suffix = section_suffix

@@SECTION_REGEX = section_regex
@@SETTING_REGEX = /^(\s*)([^#;\s]|[^#;\s].*?[^\s#{k_v_s}])(\s*#{k_v_s}\s*)(.*)\s*$/
@@SETTING_REGEX = /^(\s*)([^#;\s]|[^#;\s].*?[^\s#{k_v_s}])(\s*#{k_v_s}[ \t]*)(.*)\s*$/
@@COMMENTED_SETTING_REGEX = /^(\s*)[#;]+(\s*)(.*?[^\s#{k_v_s}])(\s*#{k_v_s}[ \t]*)(.*)\s*$/

@path = path
Expand Down
34 changes: 34 additions & 0 deletions spec/acceptance/ini_setting_spec.rb
Expand Up @@ -72,6 +72,40 @@
it_behaves_like 'has_content', "#{tmpdir}/ini_setting.ini", pp, /four = five\n\n\[one\]\ntwo = three/
end

context '=> present for global and section (from previous blank value)' do
before :all do
if fact('osfamily') == 'Darwin'
shell("echo \"four =[one]\ntwo =\" > #{tmpdir}/ini_setting.ini")
else
shell("echo -e \"four =\n[one]\ntwo =\" > #{tmpdir}/ini_setting.ini")
end
end

pp = <<-EOS
ini_setting { 'ensure => present for section':
ensure => present,
path => "#{tmpdir}/ini_setting.ini",
section => 'one',
setting => 'two',
value => 'three',
}
ini_setting { 'ensure => present for global':
ensure => present,
path => "#{tmpdir}/ini_setting.ini",
section => '',
setting => 'four',
value => 'five',
}
EOS

it 'applies the manifest twice' do
apply_manifest(pp, :catch_failures => true)
apply_manifest(pp, :catch_changes => true)
end

it_behaves_like 'has_content', "#{tmpdir}/ini_setting.ini", pp, /four = five\n\n\[one\]\ntwo = three/
end

context '=> absent for key/value' do
before :all do
if fact('osfamily') == 'Darwin'
Expand Down

0 comments on commit c784253

Please sign in to comment.