summaryrefslogtreecommitdiff
path: root/lib/thandy/packagesys
diff options
context:
space:
mode:
authorTomás Touceda <chiiph@torproject.org>2011-11-01 13:20:49 -0300
committerTomás Touceda <chiiph@torproject.org>2011-11-01 13:20:49 -0300
commit3e752ddc9435831c5d74181e070ec8c5ba1b714e (patch)
tree48f899e0c6c6d435b614ac7711a9fb1b33911317 /lib/thandy/packagesys
parent87470801fdc396b54bf0f7f8bfe73f05431aa080 (diff)
Make transactions not Thp specific
Diffstat (limited to 'lib/thandy/packagesys')
-rw-r--r--lib/thandy/packagesys/PackageSystem.py29
-rw-r--r--lib/thandy/packagesys/ThpPackages.py8
2 files changed, 35 insertions, 2 deletions
diff --git a/lib/thandy/packagesys/PackageSystem.py b/lib/thandy/packagesys/PackageSystem.py
index d255bef..b2e66a1 100644
--- a/lib/thandy/packagesys/PackageSystem.py
+++ b/lib/thandy/packagesys/PackageSystem.py
@@ -121,6 +121,16 @@ def getInstaller(relPath, extra, defaultFormat, package):
return installer
+def getTransaction(transactionType, packages, alreadyInstalledSet, cacheRoot):
+ """ Return a transaction from the type transactionType considering
+ the alreadyInstalledSet and that works in the cacheRoot """
+ if transactionType == "thp":
+ import thandy.packagesys.ThpPackages
+ return thandy.packagesys.ThpPackages.ThpTransaction(packages,
+ alreadyInstalledSet,
+ cacheRoot)
+ return None
+
class PackageItem:
"""Represents a single item from a package."""
def __init__(self, relativePath, checker, installer):
@@ -237,4 +247,23 @@ class Installer:
"DOCDOC params, manifest"
return None, None
+class Transaction(object):
+ """ Abstract base class. A Transaction knows how to install or
+ remove a bundle. """
+ def __init__(self, packages, alreadyInstalled, repoRoot):
+ self._raw_packages = packages
+ self._repo_root = repoRoot
+ self._alreadyInstalled = alreadyInstalled
+ def isReady(self):
+ """ Returns True if the transaction is ready to start installing
+ or removing a bundle. """
+ raise NotImplemented()
+
+ def install(self):
+ """ Installs the packages that belong to this transaction. """
+ raise NotImplemented()
+
+ def remove(self):
+ """ Removes the packages that belong to this transaction. """
+ raise NotImplemented()
diff --git a/lib/thandy/packagesys/ThpPackages.py b/lib/thandy/packagesys/ThpPackages.py
index b558d59..f82415e 100644
--- a/lib/thandy/packagesys/ThpPackages.py
+++ b/lib/thandy/packagesys/ThpPackages.py
@@ -142,7 +142,7 @@ class ThpChecker(PS.Checker):
# we need to reinstall
return (status == "INSTALLED" and self._version in versions)
-class ThpTransaction(object):
+class ThpTransaction(PS.Transaction):
""" Represents the installation of a bundle that contains thp packages. """
def __init__(self, packages, alreadyInstalled, repoRoot):
self._raw_packages = packages
@@ -254,8 +254,12 @@ class ThpInstaller(PS.Installer):
except:
# Ignore if it already exists
pass
+
+ if "/" in file["name"]:
+ os.makedirs("/".join([destPath] + file["name"].split("/")[:-1]))
+
shutil.copy(os.path.join(self._pkg.getTmpPath(), "content", file['name']),
- os.path.join(destPath, file['name']));
+ os.path.join(destPath, file['name']));
if self._db.isUpgrading():
logging.info("Finishing upgrade.")