tag 428897 patch thanks On Sat, Jun 16, 2007 at 09:30:23AM -0700, Daniel Burrows wrote: > In theory, it could slow any program using apt down. The basic > problem is that now, when you do Mark*(), apt runs an algorithm over > the whole cache to find unused packages. This isn't too slow if it's > done once, but if you modify more than one package in a row it starts > to add up. > > The solution is to tell apt that you're going to perform a group of > actions. You do this by creating a pkgDepCache::ActionGroup that wraps > your actions; as long as it exists, apt will not update the unused > states of packages.
Thanks for the explanation! I implemented your solution and it fixed the problem. I've attached a patch. -- Matt http://ftbfs.org/
diff -ru update-manager-0.42.2ubuntu22/UpdateManager/UpdateManager.py update-manager-0.42.2ubuntu22.new/UpdateManager/UpdateManager.py --- update-manager-0.42.2ubuntu22/UpdateManager/UpdateManager.py 2006-05-24 08:14:21.000000000 -0700 +++ update-manager-0.42.2ubuntu22.new/UpdateManager/UpdateManager.py 2007-06-16 10:20:12.000000000 -0700 @@ -83,8 +83,10 @@ assert self._depcache.BrokenCount == 0 and self._depcache.DelCount == 0 self.all_changes = {} def clean(self): + action_group = apt_pkg.GetPkgActionGroup(self._depcache) for pkg in self: pkg.markKeep() + action_group.release() def saveDistUpgrade(self): """ this functions mimics a upgrade but will never remove anything """ self._depcache.Upgrade(True)