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
1b0676b559
commit
e3d608297d
1 changed files with 6 additions and 1 deletions
|
@ -300,13 +300,18 @@ def emerge_packages(module, packages):
|
|||
changed = True
|
||||
for line in out.splitlines():
|
||||
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
|
||||
else:
|
||||
changed = False
|
||||
msg = 'No packages installed.'
|
||||
|
||||
module.exit_json(
|
||||
changed=changed, cmd=cmd, rc=rc, stdout=out, stderr=err,
|
||||
msg='Packages installed.',
|
||||
msg=msg,
|
||||
)
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue