t.run()
def update(self, pkgs):
- # XXX needs to be done
- pass
+ request = self.solver.create_request()
+
+ repo_installed = self.solver.get_repo("installed")
+ assert repo_installed
+
+ for solvable in repo_installed:
+ request.update(solvable)
+
+ t = self.solver.solve(request, update=True)
+
+ if not t:
+ return
+
+ t.dump()
+
+ t.run()
def info(self, patterns):
pkgs = []
def create_request(self):
return self.pool.create_request()
- def solve(self, request, interactive=False):
+ def solve(self, request, update=False, interactive=False):
solver = self.pool.create_solver()
- solver.set_allow_uninstall(True)
+ #solver.set_allow_uninstall(True)
+
+ # Configure the solver for an update.
+ if update:
+ solver.set_update_system(True)
+ solver.set_do_split_provides(True)
while True:
# Save start time.
import logging
import os
import progressbar
+import satsolver
import sys
import pakfire.packages as packages
class ActionCleanup(Action):
- def gen_files(self):
- """
- Return a list of all files that are not in the package anymore
- and so to be removed.
- """
- files = []
-
- # Compare the filelist of the old and the new package and save the
- # difference.
-
- for f in self.pkg.old_package.filelist:
- if f in self.pkg.filelist:
- continue
-
- # Save absolute path.
- f = os.path.join(self.pakfire.path, f)
- files.append(f)
-
- return files
-
- def remove_files(self, message, files):
- if not files:
- return
-
- pb = util.make_progress(message, len(files))
- i = 0
-
- for f in self.gen_files():
- # Update progress if any.
- i += 1
- if pb:
- pb.update(i)
-
- # Skip non-existant files (mabye the user removed it already?)
- if not os.path.exists(f):
- continue
-
- logging.debug("Going to remove file: %s" % f)
-
- try:
- os.unlink(f)
- except:
- logging.critical("Could not remove file: %s. Do it manually." % f)
-
- # XXX remove file from database
-
- if pb:
- pb.finish()
+ type = "ignore"
def run(self):
- files = self.gen_files()
-
- if not files:
- return
-
- self.remove_files(_("Cleanup: %s") % self.pkg.name, files)
+ print "XXX Cleanup: %s" % self.pkg
class ActionScript(Action):
class ActionUpdate(ActionInstall):
- type = "update"
+ type = "upgrade"
def run(self):
self.extract(_("Updating: %s") % self.pkg.name)
self.remove_files(_("Removing: %s") % self.pkg.name, files)
-class ActionIgnore(Action):
- type = "ignore"
-
- def run(self):
- pass
-
-
class Transaction(object):
action_classes = [
ActionInstall,
ActionUpdate,
ActionRemove,
- ActionIgnore,
+ ActionCleanup,
]
def __init__(self, pakfire):
self.downloads = []
+ self.installs = []
+ self.updates = []
+ self.removes = []
+
@classmethod
def from_solver(cls, pakfire, solver1, solver2):
# Grab the original transaction object from the solver.
# Create a new instance of our own transaction class.
transaction = cls(pakfire)
+ # Copy all information.
+ transaction.installs = solver1.solvables2packages(solver2.installs())
+ transaction.updates = \
+ [p for p in solver1.solvables2packages(solver2.updates()) if not p.repo.name == "installed"]
+ transaction.removes = solver1.solvables2packages(solver2.removes())
+
for step in _transaction.steps():
- action = step.type_s()
+ action = step.type_s(satsolver.TRANSACTION_MODE_ACTIVE)
pkg = solver1.id2pkg[step.solvable().id()]
- if not isinstance(pkg, packages.BinaryPackage):
+ if action in ("install", "upgrade") and not isinstance(pkg, packages.BinaryPackage):
transaction.downloads.append(pkg)
for action_cls in cls.action_classes:
self.downloads = []
print
- @property
- def installs(self):
- return [a for a in self.actions if a.type == "install"]
-
- @property
- def removes(self):
- return [a for a in self.actions if a.type == "remove"]
-
- @property
- def updates(self):
- return [a for a in self.actions if a.type == "update"]
-
def dump_pkg(self, pkg):
ret = []
s.append(PKG_DUMP_FORMAT % (_("Package"), _("Arch"), _("Version"), _("Repository"), _("Size")))
s.append(line)
- s += self.dump_pkgs(_("Installing:"), [a.pkg for a in self.installs])
- s += self.dump_pkgs(_("Updating:"), [a.pkg for a in self.updates])
- s += self.dump_pkgs(_("Removing:"), [a.pkg for a in self.removes])
+ s += self.dump_pkgs(_("Installing:"), self.installs)
+ s += self.dump_pkgs(_("Updating:"), self.updates)
+ s += self.dump_pkgs(_("Removing:"), self.removes)
s.append(_("Transaction Summary"))
s.append(line)
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-04-30 16:33+0000\n"
+"POT-Creation-Date: 2011-04-30 20:58+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"
msgid "Name"
msgstr ""
-#: ../pakfire/packages/base.py:68 ../pakfire/repository/transaction.py:278
+#: ../pakfire/packages/base.py:68 ../pakfire/repository/transaction.py:226
msgid "Arch"
msgstr ""
-#: ../pakfire/packages/base.py:69 ../pakfire/repository/transaction.py:278
+#: ../pakfire/packages/base.py:69 ../pakfire/repository/transaction.py:226
msgid "Version"
msgstr ""
msgid "Release"
msgstr ""
-#: ../pakfire/packages/base.py:71 ../pakfire/repository/transaction.py:278
+#: ../pakfire/packages/base.py:71 ../pakfire/repository/transaction.py:226
msgid "Size"
msgstr ""
msgid "Loading %s"
msgstr ""
-#: ../pakfire/repository/solver.py:188
+#: ../pakfire/repository/solver.py:197
msgid "Empty to abort."
msgstr ""
-#: ../pakfire/repository/solver.py:191
+#: ../pakfire/repository/solver.py:200
msgid "Choose a solution:"
msgstr ""
-#: ../pakfire/repository/solver.py:207
+#: ../pakfire/repository/solver.py:216
msgid "You have entered an invalid solution. Try again."
msgstr ""
-#: ../pakfire/repository/transaction.py:107
-#, python-format
-msgid "Cleanup: %s"
-msgstr ""
-
-#: ../pakfire/repository/transaction.py:146
+#: ../pakfire/repository/transaction.py:95
#, python-format
msgid "Installing: %s"
msgstr ""
-#: ../pakfire/repository/transaction.py:155
+#: ../pakfire/repository/transaction.py:104
#, python-format
msgid "Updating: %s"
msgstr ""
-#: ../pakfire/repository/transaction.py:167
+#: ../pakfire/repository/transaction.py:116
#, python-format
msgid "Removing: %s"
msgstr ""
-#: ../pakfire/repository/transaction.py:278
+#: ../pakfire/repository/transaction.py:226
msgid "Package"
msgstr ""
-#: ../pakfire/repository/transaction.py:278 ../pakfire/cli.py:227
+#: ../pakfire/repository/transaction.py:226 ../pakfire/cli.py:227
msgid "Repository"
msgstr ""
-#: ../pakfire/repository/transaction.py:281
+#: ../pakfire/repository/transaction.py:229
msgid "Installing:"
msgstr ""
-#: ../pakfire/repository/transaction.py:282
+#: ../pakfire/repository/transaction.py:230
msgid "Updating:"
msgstr ""
-#: ../pakfire/repository/transaction.py:283
+#: ../pakfire/repository/transaction.py:231
msgid "Removing:"
msgstr ""
-#: ../pakfire/repository/transaction.py:285
+#: ../pakfire/repository/transaction.py:233
msgid "Transaction Summary"
msgstr ""
-#: ../pakfire/repository/transaction.py:291
+#: ../pakfire/repository/transaction.py:239
msgid "Install"
msgstr ""
-#: ../pakfire/repository/transaction.py:291
-#: ../pakfire/repository/transaction.py:294
-#: ../pakfire/repository/transaction.py:297
+#: ../pakfire/repository/transaction.py:239
+#: ../pakfire/repository/transaction.py:242
+#: ../pakfire/repository/transaction.py:245
msgid "Package(s)"
msgstr ""
-#: ../pakfire/repository/transaction.py:294
+#: ../pakfire/repository/transaction.py:242
msgid "Updates"
msgstr ""
-#: ../pakfire/repository/transaction.py:297
+#: ../pakfire/repository/transaction.py:245
msgid "Remove"
msgstr ""
-#: ../pakfire/repository/transaction.py:303
+#: ../pakfire/repository/transaction.py:251
#, python-format
msgid "Total download size: %s"
msgstr ""