Hi!

I am going to apply this patch tomorrow as it drops creating this lists from 200s to 0.5s on a 9000pkg transaction.

have fun

Florian
>From daf8afb7b79838f98c4d0d114a7b70505e78a703 Mon Sep 17 00:00:00 2001
From: Florian Festi <[EMAIL PROTECTED]>
Date: Mon, 7 Jan 2008 17:53:48 +0100
Subject: [PATCH] Fix performance problem in TransactionData.makelists()

---
 yum/transactioninfo.py |   66 +++++++++++++++++++++++++++--------------------
 1 files changed, 38 insertions(+), 28 deletions(-)

diff --git a/yum/transactioninfo.py b/yum/transactioninfo.py
index 725789f..cf4ff68 100644
--- a/yum/transactioninfo.py
+++ b/yum/transactioninfo.py
@@ -241,60 +241,70 @@ class TransactionData:
            updated, installed, erased, obsoleted, depupdated, depinstalled
            deperased"""
            
-        self.instgroups = []
-        self.removedgroups = []
-        self.removed = []
-        self.installed = []
-        self.updated = []
-        self.obsoleted = []
-        self.depremoved = []
-        self.depinstalled = []
-        self.depupdated = []
+        self.instgroups = set()
+        self.removedgroups = set()
+        self.removed = set()
+        self.installed = set()
+        self.updated = set()
+        self.obsoleted = set()
+        self.depremoved = set()
+        self.depinstalled = set()
+        self.depupdated = set()
 
         for txmbr in self.getMembers():
             if txmbr.output_state == TS_UPDATE:
                 if txmbr.isDep and txmbr.reason == "dep":
-                    self.depupdated.append(txmbr)
+                    self.depupdated.add(txmbr)
                 else:
-                    self.updated.append(txmbr)
+                    self.updated.add(txmbr)
                     
             elif txmbr.output_state == TS_INSTALL or txmbr.output_state == TS_TRUEINSTALL:
                 if txmbr.groups:
                     for g in txmbr.groups:
                         if g not in self.instgroups:
-                            self.instgroups.append(g)
+                            self.instgroups.add(g)
                 if txmbr.isDep:
-                    self.depinstalled.append(txmbr)
+                    self.depinstalled.add(txmbr)
                 else:
-                    self.installed.append(txmbr)
+                    self.installed.add(txmbr)
             
             elif txmbr.output_state == TS_ERASE:
                 for g in txmbr.groups:
                     if g not in self.instgroups:
-                        self.removedgroups.append(g)
+                        self.removedgroups.add(g)
                 if txmbr.isDep:
-                    self.depremoved.append(txmbr)
+                    self.depremoved.add(txmbr)
                 else:
-                    self.removed.append(txmbr)
+                    self.removed.add(txmbr)
                     
             elif txmbr.output_state == TS_OBSOLETED:
-                self.obsoleted.append(txmbr)
+                self.obsoleted.add(txmbr)
                 
             elif txmbr.output_state == TS_OBSOLETING:
-                self.installed.append(txmbr)
+                self.installed.add(txmbr)
                 
             else:
                 pass
     
-            self.updated.sort()
-            self.installed.sort()
-            self.removed.sort()
-            self.obsoleted.sort()
-            self.depupdated.sort()
-            self.depinstalled.sort()
-            self.depremoved.sort()
-            self.instgroups.sort()
-            self.removedgroups.sort()
+        self.instgroups = list(self.instgroups)
+        self.removedgroups = list(self.removedgroups)
+        self.removed = list(self.removed)
+        self.installed = list(self.installed)
+        self.updated = list(self.updated)
+        self.obsoleted = list(self.obsoleted)
+        self.depremoved = list(self.depremoved)
+        self.depinstalled = list(self.depinstalled)
+        self.depupdated = list(self.depupdated)
+
+        self.updated.sort()
+        self.installed.sort()
+        self.removed.sort()
+        self.obsoleted.sort()
+        self.depupdated.sort()
+        self.depinstalled.sort()
+        self.depremoved.sort()
+        self.instgroups.sort()
+        self.removedgroups.sort()
 
     
     def addInstall(self, po):
-- 
1.5.3.3

_______________________________________________
Yum-devel mailing list
[email protected]
https://lists.dulug.duke.edu/mailman/listinfo/yum-devel

Reply via email to