]> git.ipfire.org Git - pakfire.git/commitdiff
Implement update command.
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 30 Apr 2011 21:03:49 +0000 (21:03 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 30 Apr 2011 21:03:49 +0000 (21:03 +0000)
pakfire/base.py
pakfire/repository/solver.py
pakfire/repository/transaction.py
po/pakfire.pot

index 5ea411150648d60debdb8946221f7e46c548f81e..52dfd74d2318a46b24b7f9735dc368373733d8a8 100644 (file)
@@ -138,8 +138,22 @@ class Pakfire(object):
                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 = []
index a34b82ce348fcbce65e456e63c7f087edeba484d..cf9bf610ed5cc7ad82e4f95a6c7735ee93684ecd 100644 (file)
@@ -136,9 +136,14 @@ class Solver(object):
        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.
index d9ded3d8bcbf3a45bd3491c503732e3bd901b672..193a2df252c961948c2ec8f865613d9931402950 100644 (file)
@@ -3,6 +3,7 @@
 import logging
 import os
 import progressbar
+import satsolver
 import sys
 
 import pakfire.packages as packages
@@ -49,62 +50,10 @@ class Action(object):
 
 
 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):
@@ -149,7 +98,7 @@ class ActionInstall(Action):
 
 
 class ActionUpdate(ActionInstall):
-       type = "update"
+       type = "upgrade"
 
        def run(self):
                self.extract(_("Updating: %s") % self.pkg.name)
@@ -167,19 +116,12 @@ class ActionRemove(ActionCleanup):
                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):
@@ -188,6 +130,10 @@ class Transaction(object):
 
                self.downloads = []
 
+               self.installs = []
+               self.updates = []
+               self.removes = []
+
        @classmethod
        def from_solver(cls, pakfire, solver1, solver2):
                # Grab the original transaction object from the solver.
@@ -200,11 +146,17 @@ class Transaction(object):
                # 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:
@@ -239,18 +191,6 @@ class Transaction(object):
                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 = []
 
@@ -286,9 +226,9 @@ class Transaction(object):
                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)
index 637ed212df7973f8ce5b58cf9b77861fdb9a40bc..1175c05b7e8751581f13c04621ab02921fdeff4f 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 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"
@@ -21,11 +21,11 @@ msgstr ""
 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 ""
 
@@ -33,7 +33,7 @@ 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 ""
 
@@ -90,81 +90,76 @@ 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 ""