Fix #2475 ini_file module: bracklets in key break idempotence
Escape the regex special characters in the option name.
This commit is contained in:
parent
42d0ce8744
commit
df4109d946
1 changed files with 19 additions and 5 deletions
|
@ -98,6 +98,22 @@ import ConfigParser
|
|||
import sys
|
||||
import os
|
||||
|
||||
# ==============================================================
|
||||
# match_opt
|
||||
|
||||
def match_opt(option, line):
|
||||
option = re.escape(option)
|
||||
return re.match('%s *=' % option, line) \
|
||||
or re.match('# *%s *=' % option, line) \
|
||||
or re.match('; *%s *=' % option, line)
|
||||
|
||||
# ==============================================================
|
||||
# match_active_opt
|
||||
|
||||
def match_active_opt(option, line):
|
||||
option = re.escape(option)
|
||||
return re.match('%s *=' % option, line)
|
||||
|
||||
# ==============================================================
|
||||
# do_ini
|
||||
|
||||
|
@ -140,9 +156,7 @@ def do_ini(module, filename, section=None, option=None, value=None, state='prese
|
|||
if within_section and option:
|
||||
if state == 'present':
|
||||
# change the existing option line
|
||||
if re.match('%s *=' % option, line) \
|
||||
or re.match('# *%s *=' % option, line) \
|
||||
or re.match('; *%s *=' % option, line):
|
||||
if match_opt(option, line):
|
||||
newline = '%s = %s\n' % (option, value)
|
||||
changed = ini_lines[index] != newline
|
||||
ini_lines[index] = newline
|
||||
|
@ -153,14 +167,14 @@ def do_ini(module, filename, section=None, option=None, value=None, state='prese
|
|||
line = ini_lines[index]
|
||||
if line.startswith('['):
|
||||
break
|
||||
if re.match('%s *=' % option, line):
|
||||
if match_active_opt(option, line):
|
||||
del ini_lines[index]
|
||||
else:
|
||||
index = index + 1
|
||||
break
|
||||
else:
|
||||
# comment out the existing option line
|
||||
if re.match('%s *=' % option, line):
|
||||
if match_active_opt(option, line):
|
||||
ini_lines[index] = '#%s' % ini_lines[index]
|
||||
changed = True
|
||||
break
|
||||
|
|
Loading…
Reference in a new issue