packaging/os/portage: Handle noreplace in check mode
The `--noreplace` argument to `emerge` is generally coupled with `--newuse` or `--changed-use`, and can be used instruct Portage to rebuild a package only if necessary. Simply checking to see if the package is already installed using `equery` is not sufficient to determine if any changes would be made, so that step is skipped when the `noreplace` module argument is specified. The module then falls back to parsing the output from `emerge` to determine if anything changed. In check mode, `emerge` is called with `--pretend`, so it produces different output, and the parsing fails to correctly infer that a change would be made. This commit adds another regular expression to check when running in check mode that matches the pretend output from `emerge`. Signed-off-by: Dustin C. Hatch <dustin@hatch.name>
This commit is contained in:
parent
c514a9a940
commit
90df50b045
1 changed files with 6 additions and 1 deletions
|
@ -298,13 +298,18 @@ def emerge_packages(module, packages):
|
||||||
changed = True
|
changed = True
|
||||||
for line in out.splitlines():
|
for line in out.splitlines():
|
||||||
if re.match(r'(?:>+) Emerging (?:binary )?\(1 of', line):
|
if re.match(r'(?:>+) Emerging (?:binary )?\(1 of', line):
|
||||||
|
msg = 'Packages installed.'
|
||||||
|
break
|
||||||
|
elif module.check_mode and re.match(r'\[(binary|ebuild)', line):
|
||||||
|
msg = 'Packages would be installed.'
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
changed = False
|
changed = False
|
||||||
|
msg = 'No packages installed.'
|
||||||
|
|
||||||
module.exit_json(
|
module.exit_json(
|
||||||
changed=changed, cmd=cmd, rc=rc, stdout=out, stderr=err,
|
changed=changed, cmd=cmd, rc=rc, stdout=out, stderr=err,
|
||||||
msg='Packages installed.',
|
msg=msg,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue