"""
return self.pakfire.repos.local
- def _extract(self, message, prefix=None):
- # Add package to the database.
- self.local.add_package(self.pkg)
-
- if prefix is None:
- prefix = self.pakfire.path
-
- self.pkg.extract(message, prefix=prefix)
-
-
-class ActionCleanup(Action):
- type = "ignore"
-
- def run(self):
- print "XXX Cleanup: %s" % self.pkg
-
class ActionScript(Action):
def run(self):
type = "install"
def run(self):
- self._extract(_("Installing"))
+ # Add package to the database.
+ self.local.add_package(self.pkg)
+
+ self.pkg.extract(_("Installing"), prefix=self.pakfire.path)
class ActionUpdate(Action):
type = "upgrade"
def run(self):
- self._extract(_("Updating"))
+ # Add new package to the database.
+ self.local.add_package(self.pkg)
+
+ self.pkg.extract(_("Updating"), prefix=self.pakfire.path)
class ActionRemove(Action):
def run(self):
self.pkg.remove(_("Removing"), prefix=self.pakfire.path)
- # XXX Remove package from database
+ # Remove package from the database.
+ self.local.rem_package(self.pkg)
+
+
+class ActionCleanup(Action):
+ type = "ignore"
+
+ def __init__(self, *args, **kwargs):
+ Action.__init__(self, *args, **kwargs)
+
+ # XXX This is ugly, but works for the moment.
+ self.pkg = self.local.index.db.get_package_from_solv(self.pkg_solv)
+ assert self.pkg
+
+ def run(self):
+ # Cleaning up leftover files and stuff.
+ self.pkg.cleanup(_("Cleanup"), prefix=self.pakfire.path)
+
+ # Remove package from the database.
+ self.local.rem_package(self.pkg)
class ActionReinstall(Action):
type = "reinstall"
def run(self):
- self._extract(_("Installing"))
+ # Remove package from the database and add it afterwards.
+ # Sounds weird, but fixes broken entries in the database.
+ self.local.rem_package(self.pkg)
+ self.local.add_package(self.pkg)
+
+ self.pkg.extract(_("Installing"), prefix=self.pakfire.path)
class ActionDowngrade(Action):
type = "downgrade"
def run(self):
- self._extract(_("Downgrading"))
+ # Add new package to database.
+ self.local.add_package(self.pkg)
+
+ self.pkg.extract(_("Downgrading"), prefix=self.pakfire.path)
class ActionChange(Action):
type = "change"
+ # XXX still need to find out what this should be doing
+
def run(self):
print "XXX Change: %s" % self.pkg
raise NotImplementedError, "%s" % repr(self)
def remove(self, message=None, prefix=None):
- if prefix in ("/", None):
- prefix = ""
-
# Make two filelists. One contains all binary files that need to be
# removed, the other one contains the configuration files which are
# kept. files and configfiles are disjunct.
assert file.startswith("/")
files.append(file)
+ self._remove_files(files, message, prefix)
+
+ def _remove_files(self, files, message, prefix):
+ if prefix in ("/", None):
+ prefix = ""
+
# Load progressbar.
pb = None
if message:
from base import Package
from binary import BinaryPackage
+import pakfire.util as util
from pakfire.constants import *
class DatabasePackage(Package):
filename = os.path.join(cache.path, cache_filename)
return BinaryPackage(self.pakfire, self.repo, filename)
+ def cleanup(self, message, prefix):
+ c = self.db.cursor()
+
+ # Get all files, that are in this package and check for all of
+ # them if they need to be removed.
+ files = self.filelist
+
+ # Fetch the whole filelist of the system from the database and create
+ # a diff. Exclude files from this package - of course.
+ c.execute("SELECT name FROM files WHERE pkg != ?", (self.id,))
+
+ for row in c:
+ # Check if file in filelist.
+ if row["name"] in files:
+ files.remove(row["name"])
+
+ c.close()
+
+ self._remove_files(files, message, prefix)
+
+
# XXX maybe we can remove this later?
class InstalledPackage(DatabasePackage):
type = "installed"
c.close()
+ def rem_package(self, pkg):
+ logging.debug("Removing package from database: %s" % pkg.friendly_name)
+
+ assert pkg.uuid
+
+ # Get the ID of the package in the database.
+ c = self.cursor()
+ c.execute("SELECT id FROM packages WHERE uuid = ? LIMIT 1", (pkg.uuid,))
+
+ id = None
+ for row in c:
+ id = row["id"]
+ break
+ assert id
+
+ # First, delete all files from the database and then delete the pkg itself.
+ c.execute("DELETE FROM files WHERE pkg = ?", (id,))
+ c.execute("DELETE FROM packages WHERE id = ?", (id,))
+
+ c.close()
+ self.commit()
+
@property
def packages(self):
c = self.cursor()
rel = self.create_relation(file)
solvable.add_provides(rel)
+ def rem_package(self, pkg):
+ # XXX delete the solvable from the index.
+ self.db.rem_package(pkg)
+
def clear(self):
"""
Forget all packages from memory.
self.index.db.add_package(pkg)
self.index.add_package(pkg)
+
+ def rem_package(self, pkg):
+ # Remove package from the database.
+ self.index.rem_package(pkg)
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-07-31 15:33+0000\n"
+"POT-Creation-Date: 2011-07-31 17:38+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: ../pakfire/actions.py:87 ../pakfire/actions.py:117
+#: ../pakfire/actions.py:74 ../pakfire/actions.py:131
msgid "Installing"
msgstr ""
-#: ../pakfire/actions.py:94
+#: ../pakfire/actions.py:84
msgid "Updating"
msgstr ""
-#: ../pakfire/actions.py:108
+#: ../pakfire/actions.py:98
msgid "Removing"
msgstr ""
-#: ../pakfire/actions.py:124
+#. Cleaning up leftover files and stuff.
+#: ../pakfire/actions.py:116
+msgid "Cleanup"
+msgstr ""
+
+#: ../pakfire/actions.py:141
msgid "Downgrading"
msgstr ""
msgid "Requires"
msgstr ""
-#: ../pakfire/repository/index.py:227
+#: ../pakfire/repository/index.py:231
#, python-format
msgid "%s: package database"
msgstr ""
#. Create progress bar.
-#: ../pakfire/repository/index.py:315
+#: ../pakfire/repository/index.py:319
#, python-format
msgid "Loading from %s"
msgstr ""
#. Add all packages from the database to the index.
-#: ../pakfire/repository/index.py:368
+#: ../pakfire/repository/index.py:372
msgid "Loading installed packages"
msgstr ""