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.py137
1 files changed, 56 insertions, 81 deletions
diff --git a/lib/thandy/packagesys/RPMPackages.py b/lib/thandy/packagesys/RPMPackages.py
index 4d0f326..c710b8d 100644
--- a/lib/thandy/packagesys/RPMPackages.py
+++ b/lib/thandy/packagesys/RPMPackages.py
@@ -1,48 +1,18 @@
# Copyright 2008 The Tor Project, Inc. See LICENSE for licensing information.
-import thandy.packagesys.PackageSystem
+import thandy.packagesys.PackageSystem as PS
import os
-import rpm
+try:
+ import rpm
+except ImportError:
+ rpm = None
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"
-
- 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]
-
- 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()
-
_CALLBACK_CODES = {}
for name in dir(rpm):
@@ -50,33 +20,33 @@ for name in dir(rpm):
_CALLBACK_CODES[getattr(rpm, name)] = name[12:]
del name
-class RPMPackageTransaction(thandy.packagesys.PackageSystem.PackageTransaction):
-
- def _start(self):
- thandy.packagesys.PackageSystem.PackageTransaction.__init__(self)
- self._tset = rpm.TransactionSet()
-
- def _commit(self):
- self._tset.run(self._callback, "")
-
- def _callback(self, what, amount, total, mydata, _):
- if what == rpm.RPMCALLBACK_INST_OPEN_FILE:
- hdr, path = mydata
- logging.info("Installing RPM for %s [%s]", hdr['name'], path)
-
- elif what == rpm.RPMCALLBACK_INST_CLOSE_FILE:
- hdr, path = mydata
- logging.info("Done installing RPM for %s", path)
-
- elif what == rpm.RPMCALLBACK_INST_PROGRESS:
- hdr, path = mydata
- logging.info("%s: %.5s%% done", name, float(amount)/total*100)
-
- else:
- hdr, path = mydata
- logging.info("RPM event %s on %s [%s/%s]",
- _CALLBACK_CODES.get(what,str(what)),
- hdr['name'], amount, total)
+class RPMPackageTransaction:
+
+ def _start(self):
+ PS.PackageTransaction.__init__(self)
+ self._tset = rpm.TransactionSet()
+
+ def _commit(self):
+ self._tset.run(self._callback, "")
+
+ def _callback(self, what, amount, total, mydata, _):
+ if what == rpm.RPMCALLBACK_INST_OPEN_FILE:
+ hdr, path = mydata
+ logging.info("Installing RPM for %s [%s]", hdr['name'], path)
+
+ elif what == rpm.RPMCALLBACK_INST_CLOSE_FILE:
+ hdr, path = mydata
+ logging.info("Done installing RPM for %s", path)
+
+ elif what == rpm.RPMCALLBACK_INST_PROGRESS:
+ hdr, path = mydata
+ logging.info("%s: %.5s%% done", name, float(amount)/total*100)
+
+ else:
+ hdr, path = mydata
+ logging.info("RPM event %s on %s [%s/%s]",
+ _CALLBACK_CODES.get(what,str(what)),
+ hdr['name'], amount, total)
def addRPMInstall(ts, path):
fd = os.open(path, os.O_RDONLY)
@@ -155,31 +125,36 @@ def checkRPMInstall(name, version, ts=None):
return found and all_ok
-class RPMPackageHandle(thandy.packagesys.PackageSystem.PackageHandle):
- def __init__(self, name, version, relativePath, filename):
- self._name = name
- self._version = version
- self._relPath = relativePath
- self._filename = filename
+class RPMChacker(PS.Checker):
+ def __init__(self, rpmname, rpmversion):
+ PS.Checker.__init__(self)
+ self._name = rpmname
+ self._version = rpmversion
+
+ def __repr__(self):
+ return "RPMChecker(%r, %r)"%(self._name, self._version)
- def getRelativePath(self):
- return self._relPath
+ def getInstalledVersions(self):
+ return getInstalledRPMVersions(self._name, self._transaction)
- def anyVersionInstalled(self, transaction=None):
- return len(getInstalledRPMVersions(self.name, transaction)) > 1
+ def isInstalled(self):
+ vers = getInstalledRPMVersions(self._name, self._transaction)
+ return self._version in vers
- def getInstalledVersion(self, transaction=None):
- s = max(getInstalledRPMVersions(self._name, transaction))
+# def checkInstall(self):
+# return checkRPMInstall(self._name, self._version)
+
+class RPMInstaller(PS.Installer):
+ def __init__(self, rpmname, relPath):
+ PS.Installer.__init__(self, relPath)
+ self._name = rpmname
+
+ def __repr__(self):
+ return "RPMInstaller(%r, %r)"%(self._name, self._relPath)
def install(self, transaction):
- addRPMInstall(transaction._trans, self._filename)
+ addRPMInstall(transaction._trans, self.getFilename())
def remove(self, transaction):
addRPMErase(transaction._trans, self._name)
- def isInstalled(self, transaction=None):
- return self._version in getInstalledRPMVersions(self._name,transaction)
-
- def checkInstall(self, transaction=None):
- return checkRPMInstall(self._name, self._version)
-