mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-07-23 05:10:22 -07:00
Check for regexp match when using insertbefore or insertafter (#36474)
Add tests to cover this scenario Fixes #36156
This commit is contained in:
parent
afdd748f4c
commit
723daf3e3a
4 changed files with 220 additions and 29 deletions
|
@ -42,10 +42,10 @@ options:
|
|||
regexp:
|
||||
description:
|
||||
- The regular expression to look for in every line of the file. For
|
||||
C(state=present), the pattern to replace if found; only the last line
|
||||
C(state=present), the pattern to replace if found. Only the last line
|
||||
found will be replaced. For C(state=absent), the pattern of the line(s)
|
||||
to remove. Uses Python regular expressions; see
|
||||
U(http://docs.python.org/2/library/re.html).
|
||||
to remove. Uses Python regular expressions.
|
||||
See U(http://docs.python.org/2/library/re.html).
|
||||
version_added: '1.7'
|
||||
state:
|
||||
description:
|
||||
|
@ -282,7 +282,7 @@ def present(module, dest, regexp, line, insertafter, insertbefore, create,
|
|||
if firstmatch:
|
||||
break
|
||||
if insertbefore:
|
||||
# + 1 for the previous line
|
||||
# index[1] for the previous line
|
||||
index[1] = lineno
|
||||
if firstmatch:
|
||||
break
|
||||
|
@ -301,44 +301,49 @@ def present(module, dest, regexp, line, insertafter, insertbefore, create,
|
|||
if not b_new_line.endswith(b_linesep):
|
||||
b_new_line += b_linesep
|
||||
|
||||
# Add lines when the regexp match already exists somewhere else in the file
|
||||
if insertafter and insertafter != 'EOF':
|
||||
# If a regexp is specified and a match is found anywhere in the file, do
|
||||
# not insert the line before or after.
|
||||
if regexp is None and m:
|
||||
|
||||
# Ensure there is a line separator after the found string
|
||||
# at the end of the file.
|
||||
if b_lines and not b_lines[-1][-1:] in (b('\n'), b('\r')):
|
||||
b_lines[-1] = b_lines[-1] + b_linesep
|
||||
# Insert lines
|
||||
if insertafter and insertafter != 'EOF':
|
||||
|
||||
# If the line to insert after is at the end of the file
|
||||
# use the appropriate index value.
|
||||
if len(b_lines) == index[1]:
|
||||
if b_lines[index[1] - 1].rstrip(b('\r\n')) != b_line:
|
||||
b_lines.append(b_line + b_linesep)
|
||||
# Ensure there is a line separator after the found string
|
||||
# at the end of the file.
|
||||
if b_lines and not b_lines[-1][-1:] in (b('\n'), b('\r')):
|
||||
b_lines[-1] = b_lines[-1] + b_linesep
|
||||
|
||||
# If the line to insert after is at the end of the file
|
||||
# use the appropriate index value.
|
||||
if len(b_lines) == index[1]:
|
||||
if b_lines[index[1] - 1].rstrip(b('\r\n')) != b_line:
|
||||
b_lines.append(b_line + b_linesep)
|
||||
msg = 'line added'
|
||||
changed = True
|
||||
elif b_lines[index[1]].rstrip(b('\r\n')) != b_line:
|
||||
b_lines.insert(index[1], b_line + b_linesep)
|
||||
msg = 'line added'
|
||||
changed = True
|
||||
elif b_lines[index[1]].rstrip(b('\r\n')) != b_line:
|
||||
b_lines.insert(index[1], b_line + b_linesep)
|
||||
msg = 'line added'
|
||||
changed = True
|
||||
|
||||
elif insertbefore:
|
||||
# If the line to insert before is at the beginning of the file
|
||||
# use the appropriate index value.
|
||||
if index[1] == 0:
|
||||
if b_lines[index[1]].rstrip(b('\r\n')) != b_line:
|
||||
elif insertbefore:
|
||||
# If the line to insert before is at the beginning of the file
|
||||
# use the appropriate index value.
|
||||
if index[1] == 0:
|
||||
if b_lines[index[1]].rstrip(b('\r\n')) != b_line:
|
||||
b_lines.insert(index[1], b_line + b_linesep)
|
||||
msg = 'line replaced'
|
||||
changed = True
|
||||
|
||||
elif b_lines[index[1] - 1].rstrip(b('\r\n')) != b_line:
|
||||
b_lines.insert(index[1], b_line + b_linesep)
|
||||
msg = 'line replaced'
|
||||
changed = True
|
||||
|
||||
elif b_lines[index[1] - 1].rstrip(b('\r\n')) != b_line:
|
||||
b_lines.insert(index[1], b_line + b_linesep)
|
||||
msg = 'line replaced'
|
||||
changed = True
|
||||
|
||||
elif b_lines[index[0]] != b_new_line:
|
||||
b_lines[index[0]] = b_new_line
|
||||
msg = 'line replaced'
|
||||
changed = True
|
||||
|
||||
elif backrefs:
|
||||
# Do absolutely nothing, since it's not safe generating the line
|
||||
# without the regexp matching to populate the backrefs.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue