- updated dependencies calculation code to work better on weird situations

i'll start to focus on the queue execution tomorrow

git-svn-id: http://svn.sabayonlinux.org/projects/entropy/trunk@1030 cd1c1023-2f26-0410-ae45-c471fc1f0318
This commit is contained in:
(no author)
2008-01-09 23:47:08 +00:00
parent 8079bded7f
commit 9417f2bbf5
4 changed files with 93 additions and 58 deletions
+4
View File
@@ -101,6 +101,9 @@ class PackageWrapper:
def getSlot(self):
return self.dbconn.retrieveSlot(self.idpackage)
def getKeySlot(self):
return self.dbconn.retrieveKeySlot(self.idpackage)
def getDescription(self):
return self.dbconn.retrieveDescription(self.idpackage)
@@ -189,6 +192,7 @@ class PackageWrapper:
version = property(fget=getVer)
release = property(fget=getRel)
slot = property(fget=getSlot)
keyslot = property(fget=getKeySlot)
description = property(fget=getDescription)
size = property(fget=getDownSize)
intelligentsizeFmt = property(fget=getIntelligentSize)
+71 -56
View File
@@ -251,54 +251,73 @@ class YumexQueue:
def total(self):
return len(self.packages['i'])+len(self.packages['u'])+len(self.packages['r'])
def add(self, pkg):
action = pkg.action
if action in ("u","i"): # update/install
def add(self, pkgs):
tmpqueue = []
if not pkg in self.packages[action]:
tmpqueue.append( pkg )
list = [x.matched_atom for x in self.packages[action]+tmpqueue]
status = self.elaborateInstall(pkg,list,action,False)
one = False
if type(pkgs) is not list:
one = True
pkgs = [pkgs]
action = [pkgs[0].action]
if action[0] in ("u","i"): # update/install
action = ["u","i"]
tmpqueue = [x for x in pkgs if x not in self.packages['u']+self.packages['i']]
xlist = [x.matched_atom for x in self.packages['u']+self.packages['i']+tmpqueue]
status = self.elaborateInstall(pkgs,xlist,action,False)
return status,0
else: # remove
status = self.checkSystemPackage(pkg)
if not status:
return -2,1
if one:
status = self.checkSystemPackage(pkgs[0])
if not status:
return -2,1
tmpqueue = []
if not pkg in self.packages[action]:
tmpqueue.append( pkg )
list = [x.matched_atom[0] for x in self.packages[action]+tmpqueue]
self.elaborateRemoval(pkg,list,action,False)
tmpqueue = [x for x in pkgs if x not in self.packages[action[0]]]
xlist = [x.matched_atom[0] for x in self.packages[action[0]]+tmpqueue]
self.elaborateRemoval(pkgs,xlist,action[0],False)
return 0,1
def elaborateInstall(self, pkg, list, action, deep_deps):
(runQueue, removalQueue, status) = self.Entropy.retrieveInstallQueue(list,False,deep_deps)
def elaborateInstall(self, pkgs, xlist, actions, deep_deps):
(runQueue, removalQueue, status) = self.Entropy.retrieveInstallQueue(xlist,False,deep_deps)
if status == 0:
# runQueue
if runQueue:
for dep_pkg in self.etpbase.getPackages('updates')+self.etpbase.getPackages('available'):
for matched_atom in runQueue:
if (dep_pkg.matched_atom == matched_atom) and (dep_pkg not in self.packages[action]):
if str(pkg) != str(dep_pkg):
if (dep_pkg.matched_atom == matched_atom) and (dep_pkg not in self.packages[actions[0]]+self.packages[actions[1]]):
if dep_pkg not in pkgs:
dep_pkg.set_select(True)
dep_pkg.queued = dep_pkg.action
self.packages[action].append(dep_pkg)
self.packages[dep_pkg.action].append(dep_pkg)
# removalQueue
if removalQueue:
for rem_pkg in self.etpbase.getPackages('installed'):
for matched_atom in removalQueue:
if rem_pkg.matched_atom == (matched_atom,0):
if str(pkg) != str(rem_pkg):
if rem_pkg not in pkgs:
rem_pkg.set_select(False)
rem_pkg.queued = rem_pkg.action
self.packages['r'].append(rem_pkg)
self.queueView.refresh()
return status
def elaborateRemoval(self, pkgs, list, action, nodeps):
if nodeps:
return
removalQueue = self.Entropy.retrieveRemovalQueue(list)
if removalQueue:
for rem_pkg in self.etpbase.getPackages('installed'):
for matched_atom in removalQueue:
if rem_pkg.matched_atom == (matched_atom,0):
if rem_pkg not in pkgs:
rem_pkg.set_select(False)
rem_pkg.queued = rem_pkg.action
self.packages[rem_pkg.action].append(rem_pkg)
self.queueView.refresh()
def checkSystemPackage(self, pkg):
# check if it's a system package
valid = self.Entropy.validatePackageRemoval(pkg.matched_atom[0])
@@ -307,49 +326,45 @@ class YumexQueue:
pkg.queued = None
return valid
def remove(self, pkgs):
def elaborateRemoval(self, pkg, list, action, nodeps):
if nodeps:
return
removalQueue = self.Entropy.retrieveRemovalQueue(list)
if removalQueue:
for rem_pkg in self.etpbase.getPackages('installed'):
for matched_atom in removalQueue:
if rem_pkg.matched_atom == (matched_atom,0):
if str(pkg) != str(rem_pkg):
rem_pkg.set_select(False)
rem_pkg.queued = rem_pkg.action
self.packages[action].append(rem_pkg)
self.queueView.refresh()
one = False
if type(pkgs) is not list:
one = True
pkgs = [pkgs]
action = [pkgs[0].action]
if action[0] in ("u","i"): # update/install
def remove(self, pkg):
# we need to remove packages, recalculating lists
action = pkg.action
if action in ("u","i"): # update/install
action = ["u","i"]
for r_pkg in pkgs:
if r_pkg in self.packages['u']:
self.packages['u'].remove( r_pkg )
elif r_pkg in self.packages['i']:
self.packages['i'].remove( r_pkg )
xlist = [x.matched_atom for x in self.packages['u']+self.packages['i']]
self.packages['u'] = []
self.packages['i'] = []
status = self.elaborateInstall(pkgs,xlist,action,False)
for r_pkg in pkgs:
if r_pkg in self.packages['u']+self.packages['i']:
r_pkg.set_select(not r_pkg.selected)
r_pkg.queued = r_pkg.action
if pkg in self.packages[action]:
self.packages[action].remove( pkg )
list = [x.matched_atom for x in self.packages[action]]
print self.packages[action]
self.packages[action] = []
status = self.elaborateInstall(pkg,list,action,False)
if pkg in self.packages[action]:
pkg.set_select(not pkg.selected)
pkg.queued = pkg.action
print self.packages[action]
return status,0
else:
if pkg in self.packages[action]:
self.packages[action].remove( pkg )
tmpdata = self.packages[action][:]
list = [x.matched_atom[0] for x in self.packages[action]]
self.packages[action] = []
self.elaborateRemoval(pkg,list,action,False)
for r_pkg in pkgs:
if r_pkg in self.packages[action[0]]:
self.packages[action[0]].remove( pkgs[0] )
tmpdata = self.packages[action[0]][:]
xlist = [x.matched_atom[0] for x in self.packages[action[0]]]
self.packages[action[0]] = []
self.elaborateRemoval(pkgs,xlist,action[0],False)
for rem_pkg in tmpdata:
if rem_pkg not in self.packages[action]:
if rem_pkg not in self.packages[action[0]]:
# disable
rem_pkg.set_select(not rem_pkg.selected)
rem_pkg.action = None
+2 -2
View File
@@ -164,7 +164,7 @@ class SpritzController(Controller):
self.setStatus(_('No packages in queue'))
return
self.queue.dump()
fn = '/tmp/last-queue.yumex'
fn = '/tmp/last-queue.spritz'
cp = self.queue.getParser()
fp = open(fn,"w")
cp.save(fp)
@@ -182,7 +182,7 @@ class SpritzController(Controller):
dialog = gtk.FileChooserDialog(title=None,action=gtk.FILE_CHOOSER_ACTION_SAVE,
buttons=(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_SAVE,gtk.RESPONSE_OK))
dialog.set_current_folder("/tmp")
dialog.set_current_name('queue.yumex')
dialog.set_current_name('queue.spritz')
response = dialog.run()
if response == gtk.RESPONSE_OK:
fn = dialog.get_filename()
+16
View File
@@ -146,22 +146,38 @@ class EntropyPackageView:
def selectAll(self):
list = [x[0] for x in self.store if not x[0].queued == x[0].action]
for obj in list:
obj.queued = obj.action
self.queue.add(list)
for obj in list:
obj.set_select( not obj.selected )
'''
for el in self.store:
obj = el[0]
if not obj.queued == obj.action:
obj.queued = obj.action
self.queue.add(obj)
obj.set_select( not obj.selected )
'''
self.queueView.refresh()
self.view.queue_draw()
def deselectAll(self):
list = [x[0] for x in self.store if x[0].queued == x[0].action]
for obj in list:
obj.queued = None
self.queue.remove(list)
for obj in list:
obj.set_select( not obj.selected )
'''
for el in self.store:
obj = el[0]
if obj.queued == obj.action:
obj.queued = None
self.queue.remove(obj)
obj.set_select( not obj.selected )
'''
self.queueView.refresh()
self.view.queue_draw()