summaryrefslogtreecommitdiff
path: root/lib/thandy/packagesys/RPMPackages.py
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2008-11-16 22:27:17 +0000
committerNick Mathewson <nickm@torproject.org>2008-11-16 22:27:17 +0000
commit48adf40595f127c2bd167aa6774f4ba67e191c0f (patch)
tree8f200231a5f2a6f4f45a3f964f847457c5da5f00 /lib/thandy/packagesys/RPMPackages.py
parent115bc0308c9384967ed25975aa21a312a2591524 (diff)
attach per-file type-specific metainfo to packages. use metainfo to tell what is already installed. use database to track things we have installed with not attacked version. notice when we have installable files and optionally install them.
git-svn-id: file:///home/or/svnrepo/updater/trunk@17294 55e972cd-5a19-0410-ae62-a4d7a52db4cd
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