]> git.ipfire.org Git - pakfire.git/commitdiff
Cleanup package download.
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 22 Feb 2011 17:49:49 +0000 (18:49 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 22 Feb 2011 17:49:49 +0000 (18:49 +0100)
pakfire/transaction.py

index 90bdfc9ffa449e5cbf9cfce942d66d5bd7185ff8..546f267abc2798a463e9ab1ee5ec940c233947da 100644 (file)
@@ -101,12 +101,22 @@ class TransactionSet(object):
                self.removes = []
                self.remove_deps = []
 
+       @property
+       def download_lists(self):
+               # All elements in these lists must be local.
+               return (self.installs, self.install_deps, self.updates, self.update_deps)
+
        @property
        def downloads(self):
                """
                        Return a list containing all packages that need to be downloaded.
                """
-               for pkg in self.installs + self.install_deps + self.updates + self.update_deps:
+               pkgs = []
+               for dl_list in self.download_lists:
+                       pkgs += dl_list
+               pkgs.sort()
+
+               for pkg in pkgs:
                        # Skip all packages that are already local.
                        if pkg.local:
                                continue
@@ -137,26 +147,18 @@ class TransactionSet(object):
                else:
                        self.updates.append(pkg)
 
-       def _download(self, pkgs):
-               """
-                       Download all given packages and return a list of BinaryPackages.
-               """
-               _pkgs = []
-               for pkg in pkgs:
-                       if not isinstance(pkg, packages.BinaryPackage):
-                               pkg = pkg.download()
-                       _pkgs.append(pkg)
-
-               return _pkgs
-
        def download(self):
                """
                        Convert all packages to BinaryPackage.
                """
-               self.installs = self._download(self.installs)
-               self.install_deps = self._download(self.install_deps)
-               self.updates = self._download(self.updates)
-               self.update_deps = self._download(self.update_deps)
+               for download in self.downloads:
+                       pkg = download.download()
+
+                       for download_list in self.download_lists:
+                               if download in download_list:
+                                       download_list.remove(download)
+                                       download_list.append(pkg)
+                                       break
 
 
 class Transaction(object):