packaging/os/portage: Improve check mode handling

When running in check mode, the *portage* module always reports that no
changes were made, even if the requested packages do not exist on the
system. This is because it was erroneously expecting `emerge --pretend`
to produce the same output as `emerge` by itself would, and attempts to
parse it. This is not correct, for several reasons. Most specifically,
the string for which it is searching does not exist in the pretend
output. Additionally, `emerge --pretend` always prints the requested
packages, whether they are already installed or not; in the former case,
it shows them as reinstalls.

This commit adjusts the behavior to rely on `equery` alone when running
in check mode. If `equery` reports at least one package is not
installed, then nothing else is done: the system will definitely be
changed.

Signed-off-by: Dustin C. Hatch <dustin@hatch.name>
This commit is contained in:
Dustin C. Hatch 2015-06-17 16:12:58 -05:00 committed by Matt Clay
parent 754df8ff20
commit c514a9a940

View file

@ -252,6 +252,8 @@ def emerge_packages(module, packages):
break
else:
module.exit_json(changed=False, msg='Packages already present.')
if module.check_mode:
module.exit_json(changed=True, msg='Packages would be installed.')
args = []
emerge_flags = {