diff options
author | Nick Mathewson <nickm@torproject.org> | 2008-11-16 22:27:17 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2008-11-16 22:27:17 +0000 |
commit | 48adf40595f127c2bd167aa6774f4ba67e191c0f (patch) | |
tree | 8f200231a5f2a6f4f45a3f964f847457c5da5f00 /lib/thandy/packagesys/RPMPackages.py | |
parent | 115bc0308c9384967ed25975aa21a312a2591524 (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.py | 39 |
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 |