From eea94010e76d9422ea4be00c12443634172c8d4d Mon Sep 17 00:00:00 2001 From: Jan Safranek Date: Fri, 18 Apr 2014 14:59:08 +0200 Subject: Don't use epoch for 'rpm -q' or '-e'. Older rpm doesn't support it. --- src/software/test/package.py | 40 +++++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 15 deletions(-) (limited to 'src/software') 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: -- cgit