in src/core/src/package_managers/ZypperPackageManager.py [0:0]
def get_all_available_versions_of_package_ex(self, package_name, include_installed=False, include_available=True):
""" Returns a list of all the available versions of a package """
# Sample output format
# S | Name | Type | Version | Arch | Repository
# --+-------------------------+------------+--------------+--------+-------------------
# v | bash | package | 4.3-83.5.2 | x86_64 | SLES12-SP2-Updates
package_versions = []
self.composite_logger.log_verbose("[ZPM] Getting all available versions of package '" + package_name + "' [Installed=" + str(include_installed) + ", Available=" + str(include_available) + "]...")
cmd = self.single_package_check_versions.replace('<PACKAGE-NAME>', package_name)
output = self.invoke_package_manager(cmd)
lines = output.strip().split('\n')
packages_list_flag = False
for line in lines:
if not packages_list_flag: # keep going until the packages list starts
if not all(word in line for word in ["S", "Name", "Type", "Version", "Arch", "Repository"]):
self.composite_logger.log_verbose("[ZPM] > Inapplicable line: " + str(line))
continue
else:
self.composite_logger.log_verbose("[ZPM] > Package list started: " + str(line))
packages_list_flag = True
continue
package_details = line.split(' |')
if len(package_details) != 6:
self.composite_logger.log_verbose("[ZPM] > Inapplicable line: " + str(line))
continue
else:
self.composite_logger.log_verbose("[ZPM] > Applicable line: " + str(line))
details_status = str(package_details[0].strip())
details_name = str(package_details[1].strip())
details_type = str(package_details[2].strip())
details_version = str(package_details[3].strip())
if details_name != package_name:
self.composite_logger.log_verbose("[ZPM] > Excluding as package name doesn't match exactly: " + details_name)
continue
if details_type == "srcpackage":
self.composite_logger.log_verbose("[ZPM] > Excluding as package is of type 'srcpackage'.")
continue
if (details_status == "i" or details_status == "i+") and not include_installed: # exclude installed as (include_installed not selected)
self.composite_logger.log_verbose("[ZPM] > Excluding as package version is installed: " + details_version)
continue
if (details_status != "i" and details_status != "i+") and not include_available: # exclude available as (include_available not selected)
self.composite_logger.log_verbose("[ZPM] > Excluding as package version is available: " + details_version)
continue
package_versions.append(details_version)
return package_versions