summaryrefslogtreecommitdiff
path: root/lib/thandy/packagesys/RPMPackages.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/thandy/packagesys/RPMPackages.py')
-rw-r--r--lib/thandy/packagesys/RPMPackages.py39
1 files changed, 34 insertions, 5 deletions
diff --git a/lib/thandy/packagesys/RPMPackages.py b/lib/thandy/packagesys/RPMPackages.py
index 5e4c960..4d0f326 100644
--- a/lib/thandy/packagesys/RPMPackages.py
+++ b/lib/thandy/packagesys/RPMPackages.py
@@ -6,14 +6,39 @@ import os
import rpm
import md5
+import thandy.formats
+
__all__ = [ 'RPMPackageSystem' ]
class RPMPackageSystem(thandy.packagesys.PackageSystem.PackageSystem):
+ def __init__(self, repo):
+ self._repo = repo
+
def getName(self):
- return "RPM"
+ return "rpm"
+
+ def packageHandlesFromJSON(self, package):
+ if package['format'] != 'rpm':
+ raise thandy.FormatException()
+
+ handles = []
+ for entry in package['files']:
+ if len(entry) < 3:
+ continue
+ fn, h, extra = entry[:3]
+ name = os.path.split(fn)[1]
- def packageHandleFromJSON(self, json):
- raise NotImplemented() # XXXX
+ try:
+ version = extra['rpm_version']
+ except KeyError:
+ raise thandy.FormatException()
+
+ handles.append(RPMPackageHandle(name,
+ version,
+ fn,
+ self._repo.getFilename(fn)))
+
+ return handles
def getTransaction(self):
return RPMPackageTransaction()
@@ -115,7 +140,7 @@ def checkRPMInstall(name, version, ts=None):
logging.info("%s is missing or unreadable from %s %s; "
"that's ok.", fname, name, h['version'])
else:
- logging.warn("%s is missing or unreadable from %s %s."
+ logging.warn("%s is missing or unreadable from %s %s.",
fname, name, h['version'])
all_ok = False
elif haveMD5 == md5sum:
@@ -131,11 +156,15 @@ def checkRPMInstall(name, version, ts=None):
return found and all_ok
class RPMPackageHandle(thandy.packagesys.PackageSystem.PackageHandle):
- def __init__(self, name, version, filename):
+ def __init__(self, name, version, relativePath, filename):
self._name = name
self._version = version
+ self._relPath = relativePath
self._filename = filename
+ def getRelativePath(self):
+ return self._relPath
+
def anyVersionInstalled(self, transaction=None):
return len(getInstalledRPMVersions(self.name, transaction)) > 1