1
0
Fork 0
mirror of https://github.com/ansible-collections/community.general.git synced 2024-09-14 20:13:21 +02:00

[Pacman Module] Allow for the pacman repository check to be skipped when it's not needed (#3606)

* Allow for the pacman repository check to be skipped when it's not needed

* Adding a changelog fragment

* Undo the variable rename because the lint doesn't like it

* Update changelogs/fragments/3606-pacman-speed-up-check-if-package-is-installed.yml

Co-authored-by: Felix Fontein <felix@fontein.de>

Co-authored-by: Elie Moreau <emoreau@atlassian.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
This commit is contained in:
Elie Moreau 2021-10-30 17:17:45 +11:00 committed by GitHub
parent cdfc4dcf49
commit 38e0d97c8b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 33 additions and 26 deletions

View file

@ -0,0 +1,2 @@
minor_changes:
- "pacman - speed up checking if the package is installed, when the latest version check is not needed (https://github.com/ansible-collections/community.general/pull/3606)."

View file

@ -189,11 +189,11 @@ def get_name(module, pacman_output):
module.fail_json(msg="get_name: fail to retrieve package name from pacman output")
def query_package(module, pacman_path, name, state="present"):
def query_package(module, pacman_path, name, state):
"""Query the package status in both the local system and the repository. Returns a boolean to indicate if the package is installed, a second
boolean to indicate if the package is up-to-date and a third boolean to indicate whether online information were available
"""
if state == "present":
lcmd = "%s --query %s" % (pacman_path, name)
lrc, lstdout, lstderr = module.run_command(lcmd, check_rc=False)
if lrc != 0:
@ -206,6 +206,11 @@ def query_package(module, pacman_path, name, state="present"):
if installed_name != name:
return False, False, False
# no need to check the repository if state is present or absent
# return False for package version check, because we didn't check it
if state == 'present' or state == 'absent':
return True, False, False
# get the version installed locally (if any)
lversion = get_version(lstdout)
@ -291,7 +296,7 @@ def remove_packages(module, pacman_path, packages):
# Using a for loop in case of error, we can report the package that failed
for package in packages:
# Query the package first, to see if we even need to remove
installed, updated, unknown = query_package(module, pacman_path, package)
installed, updated, unknown = query_package(module, pacman_path, package, 'absent')
if not installed:
continue
@ -330,7 +335,7 @@ def install_packages(module, pacman_path, state, packages, package_files):
to_install_files = []
for i, package in enumerate(packages):
# if the package is installed and state == present or state == latest and is up-to-date then skip
installed, updated, latestError = query_package(module, pacman_path, package)
installed, updated, latestError = query_package(module, pacman_path, package, state)
if latestError and state == 'latest':
package_err.append(package)
@ -399,7 +404,7 @@ def check_packages(module, pacman_path, packages, state):
}
for package in packages:
installed, updated, unknown = query_package(module, pacman_path, package)
installed, updated, unknown = query_package(module, pacman_path, package, state)
if ((state in ["present", "latest"] and not installed) or
(state == "absent" and installed) or
(state == "latest" and not updated)):