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 sys
|
||||||
import os
|
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
|
# 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 within_section and option:
|
||||||
if state == 'present':
|
if state == 'present':
|
||||||
# change the existing option line
|
# change the existing option line
|
||||||
if re.match('%s *=' % option, line) \
|
if match_opt(option, line):
|
||||||
or re.match('# *%s *=' % option, line) \
|
|
||||||
or re.match('; *%s *=' % option, line):
|
|
||||||
newline = '%s = %s\n' % (option, value)
|
newline = '%s = %s\n' % (option, value)
|
||||||
changed = ini_lines[index] != newline
|
changed = ini_lines[index] != newline
|
||||||
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]
|
line = ini_lines[index]
|
||||||
if line.startswith('['):
|
if line.startswith('['):
|
||||||
break
|
break
|
||||||
if re.match('%s *=' % option, line):
|
if match_active_opt(option, line):
|
||||||
del ini_lines[index]
|
del ini_lines[index]
|
||||||
else:
|
else:
|
||||||
index = index + 1
|
index = index + 1
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
# comment out the existing option line
|
# 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]
|
ini_lines[index] = '#%s' % ini_lines[index]
|
||||||
changed = True
|
changed = True
|
||||||
break
|
break
|
||||||
|
|
Loading…
Reference in a new issue