- dependencies calculation queues (removal,update,install) should now work as expected

git-svn-id: http://svn.sabayonlinux.org/projects/entropy/trunk@1029 cd1c1023-2f26-0410-ae45-c471fc1f0318
This commit is contained in:
(no author)
2008-01-09 21:41:48 +00:00
parent 76a321d684
commit 8079bded7f
3 changed files with 87 additions and 55 deletions
+1 -1
View File
@@ -260,7 +260,7 @@ class YumexProgress:
self.lastFrac = -1
class YumexGUI:
class SpritzGUI:
''' This class contains GUI related methods '''
def __init__(self, EquoConnection, etpbase):
self.settings = YumexConf()
+80 -43
View File
@@ -255,54 +255,39 @@ class YumexQueue:
action = pkg.action
if action in ("u","i"): # update/install
# XXX add support for deep_deps?
# XXX handle status
tmpqueue = []
if not pkg in self.packages[action]:
tmpqueue.append( pkg )
list = [x.matched_atom for x in self.packages[action]+tmpqueue]
(runQueue, removalQueue, status) = self.Entropy.retrieveInstallQueue(list,False,False)
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):
dep_pkg.set_select(True)
dep_pkg.queued = dep_pkg.action
self.packages[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):
rem_pkg.set_select(False)
rem_pkg.queued = rem_pkg.action
self.packages['r'].append(rem_pkg)
self.queueView.refresh()
status = self.elaborateInstall(pkg,list,action,False)
return status,0
else: # remove
# check if it's a system package
valid = self.Entropy.validatePackageRemoval(pkg.matched_atom[0])
if not valid:
pkg.set_select(not pkg.selected)
pkg.queued = None
status = self.checkSystemPackage(pkg)
if not status:
return -2,1
# XXX handle --nodeps
# XXX handle status
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)
return 0,1
removalQueue = self.Entropy.retrieveRemovalQueue(list)
def elaborateInstall(self, pkg, list, action, deep_deps):
(runQueue, removalQueue, status) = self.Entropy.retrieveInstallQueue(list,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):
dep_pkg.set_select(True)
dep_pkg.queued = dep_pkg.action
self.packages[action].append(dep_pkg)
# removalQueue
if removalQueue:
for rem_pkg in self.etpbase.getPackages('installed'):
for matched_atom in removalQueue:
@@ -310,16 +295,68 @@ class YumexQueue:
if str(pkg) != str(rem_pkg):
rem_pkg.set_select(False)
rem_pkg.queued = rem_pkg.action
self.packages[action].append(rem_pkg)
self.packages['r'].append(rem_pkg)
self.queueView.refresh()
return status
def checkSystemPackage(self, pkg):
# check if it's a system package
valid = self.Entropy.validatePackageRemoval(pkg.matched_atom[0])
if not valid:
pkg.set_select(not pkg.selected)
pkg.queued = None
return valid
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()
self.queueView.refresh()
return 0,1
def remove(self, pkg):
list = self.packages[pkg.action]
if pkg in list:
list.remove( pkg )
self.packages[pkg.action] = list
# we need to remove packages, recalculating lists
action = pkg.action
if action in ("u","i"): # update/install
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 rem_pkg in tmpdata:
if rem_pkg not in self.packages[action]:
# disable
rem_pkg.set_select(not rem_pkg.selected)
rem_pkg.action = None
rem_pkg.queued = rem_pkg.action
return 0,1
def addGroup( self, grp, action):
list = self.groups[action]
@@ -402,7 +439,7 @@ class YumexSaveFile:
def get(self,section,option):
try:
return self.parser.get(section,option)
except NoSectionError,NoOptionError:
except:
return None
def save(self,fp):
@@ -434,7 +471,7 @@ class YumexQueueFile(YumexSaveFile):
try:
options = self.parser.options(action)
for opt in options:
tup,repo = self.getPO(action,opt)
tup,repo = self.getPO(action,opt)
if dict.has_key(repo):
lst = dict[repo]
lst.append(tup)
@@ -442,7 +479,7 @@ class YumexQueueFile(YumexSaveFile):
else:
dict[repo] = [tup]
return dict
except NoSectionError:
except:
return {}
+6 -11
View File
@@ -44,14 +44,14 @@ from etpgui import *
# yumex imports
import filters
from gui import YumexGUI
from gui import SpritzGUI
from dialogs import *
from misc import const, YumexOptions, YumexProfile
from i18n import _
import time
class YumexController(Controller):
class SpritzController(Controller):
''' This class contains all glade signal callbacks '''
@@ -368,17 +368,16 @@ class YumexController(Controller):
def on_ToolsRepoCache( self, widget ):
self.logger.info(_('Cleaning up all yum metadata'))
class YumexApplication(YumexController,YumexGUI):
class SpritzApplication(SpritzController,SpritzGUI):
def __init__(self):
YumexController.__init__( self )
SpritzController.__init__( self )
self.yumexOptions = YumexOptions()
self.yumexOptions.parseCmdOptions()
self.Equo = EquoConnection
YumexGUI.__init__(self, self.Equo, self.etpbase)
SpritzGUI.__init__(self, self.Equo, self.etpbase)
self.logger = logging.getLogger("yumex.main")
# init flags
self.rpmTransactionIsRunning = False
self.skipMirror = False
self.skipMirrorNow = False
self.doProgress = False
@@ -605,11 +604,7 @@ class YumexApplication(YumexController,YumexGUI):
# Skip Transaction is downloadonly is set.
if not self.settings.downloadonly:
self.progress.total.next() # -> Transaction Test
#self.etpbase._doTransactionTest()
self.progress.total.next() # -> Run Transaction
self.rpmTransactionIsRunning = True # Disable Quit
#self.etpbase._runTransaction()
self.rpmTransactionIsRunning = False
self.progress.hide()
self.endWorking()
rc = infoMessage( self.ui.main, _( "Packages Processing" ), _( "Packages Processing completed ok" ) )
@@ -713,7 +708,7 @@ if __name__ == "__main__":
gtkEventThread = ProcessGtkEventsThread()
gtkEventThread.start()
gtk.window_set_default_icon_from_file(const.PIXMAPS_PATH+"/spritz-icon.png")
mainApp = YumexApplication()
mainApp = SpritzApplication()
gtk.main()
except SystemExit, e:
print "Quit by User"