summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Minar <miminar@redhat.com>2012-10-07 21:19:16 +0200
committerMichal Minar <miminar@redhat.com>2012-10-07 21:43:19 +0200
commit167c13bdf07c2a86ff7043b4b874073556858e69 (patch)
treed1044f5e4e121c660549c8652ec7c3b5808ba2a1
parent1ae172139edb7648b3729b6459b9f9a6c02212b4 (diff)
downloadopenlmi-providers-0.0.8.tar.gz
openlmi-providers-0.0.8.tar.xz
openlmi-providers-0.0.8.zip
accept SoftwareElementID without epoch part0.0.8
in such case epoch is assumed to be 0 bumped Yum version
-rw-r--r--mof/LMI_Yum.mof3
-rw-r--r--src/yum/TODO4
-rw-r--r--src/yum/providers/util/common.py45
-rw-r--r--src/yum/setup.py2
-rwxr-xr-xsrc/yum/test/test_yum_package.py10
5 files changed, 36 insertions, 28 deletions
diff --git a/mof/LMI_Yum.mof b/mof/LMI_Yum.mof
index 74dcfca..892c1fb 100644
--- a/mof/LMI_Yum.mof
+++ b/mof/LMI_Yum.mof
@@ -415,7 +415,8 @@ class LMI_YumFileCheck : CIM_FileSpecification {
[ Override("SoftwareElementID"), Description (
"RPM's nevra. This means: "
- "\"name-epoch:version-release.architecture\".") ]
+ "\"name-[epoch:]version-release.architecture\"."
+ " If epoch part is missing, a \"0:\" is assumed." ) ]
String SoftwareElementID;
[ Override("Version"), Description (
diff --git a/src/yum/TODO b/src/yum/TODO
new file mode 100644
index 0000000..18c155b
--- /dev/null
+++ b/src/yum/TODO
@@ -0,0 +1,4 @@
+provide a way to manage repositories
+associate LMI_YumPackages with each LMI_YumRepository for available packages
+ this will solve enumeration of available packages
+make installation/update/remove asynchronous jobs
diff --git a/src/yum/providers/util/common.py b/src/yum/providers/util/common.py
index 0cd5116..ba0d16d 100644
--- a/src/yum/providers/util/common.py
+++ b/src/yum/providers/util/common.py
@@ -38,7 +38,7 @@ import singletonmixin
re_evra = re.compile(r'^(?P<epoch>\d+):(?P<ver>[^-]+)'
r'-(?P<rel>.+)\.(?P<arch>[^.]+)$')
-re_nevra = re.compile(r'^(?P<name>.+)-(?P<evra>(?P<epoch>\d+):(?P<ver>[^-]+)'
+re_nevra = re.compile(r'^(?P<name>.+)-(?P<evra>((?P<epoch>\d+):)?(?P<ver>[^-]+)'
r'-(?P<rel>.+)\.(?P<arch>[^.]+))$')
rpmdb_path = '/var/lib/rpm/Packages'
@@ -601,18 +601,14 @@ class YumPackage:
if not m:
raise pywbem.CIMError(pywbem.CIM_ERR_NOT_FOUND,
"Wrong SotwareElementID. Expected valid nevra"
- " (name-epoch:version-release.arch).")
+ " (name-[epoch:]version-release.arch).")
if op['Version'] != m.group('ver'):
raise pywbem.CIMError(pywbem.CIM_ERR_NOT_FOUND,
"Version does not match version part in SoftwareElementID.")
- kwargs = dict((k, m.group(k)) for k in
- ('name', 'epoch', 'ver', 'rel', 'arch'))
+ evra = "{}:{}-{}.{}".format(*(
+ (m.group(k) if k != "epoch" or m.group(k) else "0")
+ for k in ("epoch", 'ver', 'rel', 'arch')))
with YumDB.getInstance(env) as yb:
- if ( package_list == 'installed'
- and not yb.rpmdb.installed(**kwargs)):
- raise pywbem.CIMError(pywbem.CIM_ERR_NOT_FOUND,
- "Package not installed")
-
pl = yb.doPackageLists(package_list,
showdups=package_list != 'installed')
if package_list != 'all':
@@ -622,10 +618,10 @@ class YumPackage:
pl = itertools.chain(pl.available, pl.installed)
exact,_,_ = yum.packages.parsePackages(pl, [op['Name']])
for pkg in yum.misc.unique(exact):
- if pkg.evra == m.group('evra'): break
+ if pkg.evra == evra: break
else:
raise pywbem.CIMError(pywbem.CIM_ERR_NOT_FOUND,
- "No matching package found")
+ "No matching package found.")
return pkg
@staticmethod
@@ -928,29 +924,26 @@ class YumFileCheck:
raise pywbem.CIMError(pywbem.CIM_ERR_NOT_FOUND,
"Version does not match version part in SoftwareElementID.")
- kwargs = dict((k, m.group(k)) for k in
- ('name', 'epoch', 'ver', 'rel', 'arch'))
+ evra = "{}:{}-{}.{}".format(*(
+ (m.group(k) if k != "epoch" or m.group(k) else "0")
+ for k in ("epoch", 'ver', 'rel', 'arch')))
with YumDB.getInstance(env) as yb:
- if not yb.rpmdb.installed(**kwargs):
- raise pywbem.CIMError(pywbem.CIM_ERR_NOT_FOUND,
- "Package not installed")
-
pl = yb.doPackageLists('installed')
exact, matched, unmatched = yum.packages.parsePackages(
- pl.installed, [kwargs['name']])
+ pl.installed, [m.group('name')])
exact = yum.misc.unique(exact)
for pkg in exact:
- if pkg.evra == m.group('evra'): break
+ if pkg.evra == evra: break
else:
raise pywbem.CIMError(pywbem.CIM_ERR_NOT_FOUND,
- "No matching package installed")
+ "No matching package installed.")
- fi = pkg.hdr.fiFromHeader()
- vpkg = yum.packages._RPMVerifyPackage(pkg, fi,
- YumFileCheck.pkg_checksum_type(pkg), [], True)
- if not op['Name'] in vpkg:
- raise pywbem.CIMError(pywbem.CIM_ERR_NOT_FOUND,
- "File not found in RPM package")
+ fi = pkg.hdr.fiFromHeader()
+ vpkg = yum.packages._RPMVerifyPackage(pkg, fi,
+ YumFileCheck.pkg_checksum_type(pkg), [], True)
+ if not op['Name'] in vpkg:
+ raise pywbem.CIMError(pywbem.CIM_ERR_NOT_FOUND,
+ "File not found in RPM package.")
return vpkg
"""
diff --git a/src/yum/setup.py b/src/yum/setup.py
index 7f5f1b1..4823b59 100644
--- a/src/yum/setup.py
+++ b/src/yum/setup.py
@@ -5,7 +5,7 @@ setup(
author='Michal Minar',
author_email='miminar@redhat.com',
url='https://fedorahosted.org/cura/',
- version='0.2',
+ version='0.3',
package_dir={'cura.yum': 'providers'},
packages=['cura.yum', 'cura.yum.util'],
classifiers=[
diff --git a/src/yum/test/test_yum_package.py b/src/yum/test/test_yum_package.py
index c5b2715..b631e21 100755
--- a/src/yum/test/test_yum_package.py
+++ b/src/yum/test/test_yum_package.py
@@ -35,6 +35,16 @@ class TestYumPackage(YumBaseTestCase):
inst = self.conn.GetInstance(InstanceName=op, LocalOnly=False)
self.assertEqual(inst.path, op)
+ # try to leave out epoch part
+ if pkg.epoch == "0":
+ op_no_epoch = op.copy()
+ op_no_epoch["SoftwareElementID"] = make_nevra(pkg.name, pkg.epoch,
+ pkg.ver, pkg.rel, pkg.arch, "NEVER")
+ self.assertNotIn(":", op_no_epoch["SoftwareElementID"])
+ inst = self.conn.GetInstance(
+ InstanceName=op_no_epoch, LocalOnly=False)
+ self.assertIn(inst.path, (op, op_no_epoch))
+
def test_method_install(self):
for pkg in packages:
if is_installed(pkg.name):