Entropy/Spritz:

- improve speed on calls involving queue add/remove methods


git-svn-id: http://svn.sabayonlinux.org/projects/entropy/trunk@2832 cd1c1023-2f26-0410-ae45-c471fc1f0318
This commit is contained in:
lxnay
2009-01-02 21:34:11 +00:00
parent 9ba980b877
commit 4b4a2a668f
2 changed files with 31 additions and 25 deletions
+29 -24
View File
@@ -19,6 +19,7 @@
from entropy_i18n import _
from spritz_setup import cleanMarkupString, SpritzConf
import time
class SpritzQueue:
@@ -197,15 +198,15 @@ class SpritzQueue:
if action[0] in ("u","i","rr"): # update/install
action = ["u","i","rr"]
xlist = [x.matched_atom for x in self.packages['u']+self.packages['i']+self.packages['rr'] if x not in pkgs]
pkgs_matches = [x.matched_atom for x in pkgs]
myq = [x.matched_atom for x in self.packages['u']+self.packages['i']+self.packages['rr']]
xlist = [x for x in myq if x not in pkgs_matches]
xlist, abort = self.elaborateUndoremove(pkgs_matches, xlist)
if abort: return -10,0
self.before = self.packages['u'][:]+self.packages['i'][:]+self.packages['rr'][:]
for pkg in self.before:
pkg.queued = None
for pkg in self.before: pkg.queued = None
del self.packages['u'][:]
del self.packages['i'][:]
del self.packages['rr'][:]
@@ -278,9 +279,8 @@ class SpritzQueue:
return 1,0
action = ["u","i","rr"]
tmpqueue = [x for x in pkgs if x not in self.packages['u']+self.packages['i']+self.packages['rr']]
xlist = [x.matched_atom for x in self.packages['u']+self.packages['i']+self.packages['rr']+tmpqueue]
xlist = list(set(xlist))
myq = [x.matched_atom for x in self.packages['u']+self.packages['i']+self.packages['rr']]
xlist = myq+[x.matched_atom for x in pkgs if x.matched_atom not in myq]
status = self.elaborateInstall(xlist,action,False,accept,always_ask)
if status == 0:
self.keyslotFilter |= self._keyslotFilter
@@ -293,27 +293,23 @@ class SpritzQueue:
return False
return True
def mymap(pkg):
return pkg.matched_atom[0]
pkgs = filter(myfilter,pkgs)
if not pkgs:
return -2,1
tmpqueue = pkgs
if self.packages['r']: tmpqueue = [x for x in pkgs if x not in self.packages['r']]
xlist = map(mymap,self.packages['r']+tmpqueue)
status = self.elaborateRemoval(xlist,False,accept,always_ask)
if not pkgs: return -2,1
myq = [x.matched_atom[0] for x in self.packages['r']]
pkgs = [x.matched_atom[0] for x in pkgs if x.matched_atom[0] not in myq]+myq
status = self.elaborateRemoval(pkgs,False,accept,always_ask)
return status,1
finally:
self.Spritz.hide_wait_window()
def elaborateMaskedPackages(self, matches):
matchfilter = set()
masks = {}
for match in matches:
mymasks = self.Entropy.get_masked_packages_tree(match, atoms = False, flat = True)
mymasks = self.Entropy.get_masked_packages_tree(match, atoms = False, flat = True, matchfilter = matchfilter)
masks.update(mymasks)
# run dialog if found some
if not masks:
@@ -352,7 +348,7 @@ class SpritzQueue:
if status != 0:
return status
(runQueue, removalQueue, status) = self.Entropy.retrieveInstallQueue(xlist,False,deep_deps)
(runQueue, removalQueue, status) = self.Entropy.retrieveInstallQueue(xlist,False,deep_deps, quiet = True)
if status == -2: # dependencies not found
confirmDialog = self.dialogs.ConfirmationDialog( self.ui.main,
runQueue,
@@ -385,7 +381,7 @@ class SpritzQueue:
if not dep_pkg:
continue
install_todo.append(dep_pkg)
del my_icache,icache
if removalQueue:
my_rcache = set()
@@ -402,14 +398,15 @@ class SpritzQueue:
if not rem_pkg:
continue
remove_todo.append(rem_pkg)
del my_rcache,rcache
if install_todo or remove_todo:
ok = True
items_before = [x for x in install_todo+remove_todo if x not in self.before]
mybefore = [x.matched_atom for x in self.before]
items_before = [x for x in install_todo+remove_todo if x.matched_atom not in mybefore]
if ((len(items_before) > 1) and (not accept)) or (always_ask):
ok = False
size = 0
for x in install_todo:
@@ -434,13 +431,21 @@ class SpritzQueue:
confirmDialog.destroy()
if ok:
mycache = {
'r': [x.matched_atom for x in self.packages['r']],
'u': [x.matched_atom for x in self.packages['u']],
'rr': [x.matched_atom for x in self.packages['rr']],
'i': [x.matched_atom for x in self.packages['i']],
}
for rem_pkg in remove_todo:
rem_pkg.queued = rem_pkg.action
if rem_pkg not in self.packages['r']:
if rem_pkg.matched_atom not in mycache['r']:
self.packages['r'].append(rem_pkg)
for dep_pkg in install_todo:
dep_pkg.queued = dep_pkg.action
if dep_pkg not in self.packages[dep_pkg.action]:
if dep_pkg.matched_atom not in mycache[dep_pkg.action]:
self.packages[dep_pkg.action].append(dep_pkg)
else:
return -10
+2 -1
View File
@@ -522,7 +522,8 @@ class SpritzApplication(Controller):
def setupUgc(self):
self.ugcTask = entropyTools.TimeScheduled(self.spawnUgcUpdate, 300)
self.ugcTask.start()
if "--nougc" not in sys.argv:
self.ugcTask.start()
def spawnAdRotation(self):
if self.do_debug: print "entering ad rotation"