summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJan Safranek <jsafrane@redhat.com>2014-04-18 14:59:08 +0200
committerJan Safranek <jsafrane@redhat.com>2014-04-18 14:59:08 +0200
commiteea94010e76d9422ea4be00c12443634172c8d4d (patch)
treebb00127bc25a5a1c6da9bdae903eff771a265633 /src
parenta6dc6d2ca62da67874e2ea761566b504b4887719 (diff)
downloadopenlmi-providers-eea94010e76d9422ea4be00c12443634172c8d4d.tar.gz
openlmi-providers-eea94010e76d9422ea4be00c12443634172c8d4d.tar.xz
openlmi-providers-eea94010e76d9422ea4be00c12443634172c8d4d.zip
Don't use epoch for 'rpm -q' or '-e'.
Older rpm doesn't support it.
Diffstat (limited to 'src')
-rw-r--r--src/software/test/package.py40
1 files changed, 25 insertions, 15 deletions
diff --git a/src/software/test/package.py b/src/software/test/package.py
index 28a49b0..5978730 100644
--- a/src/software/test/package.py
+++ b/src/software/test/package.py
@@ -173,17 +173,27 @@ def is_pkg_installed(pkg):
Check, whether package is installed.
"""
if not isinstance(pkg, Package):
- return subprocess.call(["rpm", "--quiet", "-q", pkg]) == 0
+ match = util.RE_NEVRA.match(pkg)
+ if not match:
+ match = util.RE_ENVRA.match(pkg)
+ if not match:
+ return subprocess.call(["rpm", "--quiet", "-q", pkg]) == 0
+ cmp_nvra = "%s-%s-%s.%s" % (match.group('name'),
+ match.group('ver'), match.group('rel'), match.group('arch'))
+ cmp_epoch = match.group('epoch')
else:
- cmd = ["/bin/rpm", "-q", "--qf", "%{EPOCH}:%{NVRA}\n", pkg.nevra]
- try:
- out = util.check_output(cmd).splitlines()[0]
- epoch, _ = out.split(':')
- if not epoch or epoch.lower() == "(none)":
- epoch = "0"
- return int(epoch) == int(pkg.epoch)
- except subprocess.CalledProcessError:
- return False
+ cmp_nvra = pkg.get_nevra('NEVER')
+ cmp_epoch = pkg.epoch
+
+ cmd = ["/bin/rpm", "-q", "--qf", "%{EPOCH}:%{NVRA}\n", cmp_nvra]
+ try:
+ out = util.check_output(cmd).splitlines()[0]
+ epoch, _ = out.split(':')
+ if not epoch or epoch.lower() == "(none)":
+ epoch = "0"
+ return int(epoch) == int(cmp_epoch)
+ except subprocess.CalledProcessError:
+ return False
def filter_installed_packages(pkgs, installed=True):
"""
@@ -205,13 +215,13 @@ def filter_installed_packages(pkgs, installed=True):
pkg_map = {}
for pkg in pkgs:
if isinstance(pkg, Package):
- pkg_map[pkg.nevra] = pkg
- pkg = pkg.nevra
+ pkg_map[pkg.get_nevra('NEVER')] = pkg
+ pkg = pkg.get_nevra('NEVER')
elif not installed:
raise TypeError("packages must be objects of Package")
pkg_strings.append(pkg)
cmd = [ "/bin/rpm", "-q", "--qf"
- , "%{NAME}-%{EPOCH}:%{VERSION}-%{RELEASE}.%{ARCH}\n"]
+ , "%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n"]
cmd.extend(pkg_strings)
process = subprocess.Popen(cmd,
stdout=subprocess.PIPE, stderr=util.DEV_NULL)
@@ -219,7 +229,7 @@ def filter_installed_packages(pkgs, installed=True):
if installed:
result = set()
for line in out.splitlines():
- if not util.RE_NEVRA.match(line):
+ if not util.RE_NEVRA_OPT_EPOCH.match(line):
continue
if line in result:
continue
@@ -254,7 +264,7 @@ def remove_pkgs(pkgs, *args, **kwargs):
pkg_strings = []
for pkg in pkgs:
if isinstance(pkg, Package):
- pkg_strings.append(pkg.nevra)
+ pkg_strings.append(pkg.get_nevra('NEVER'))
else:
pkg_strings.append(pkg)
if len(pkg_strings) > 0: