diff --git a/spritz/src/gui.py b/spritz/src/gui.py index 4013d728c..be3a2f621 100644 --- a/spritz/src/gui.py +++ b/spritz/src/gui.py @@ -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() diff --git a/spritz/src/misc.py b/spritz/src/misc.py index e8bb61800..99e026d9b 100644 --- a/spritz/src/misc.py +++ b/spritz/src/misc.py @@ -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 {} diff --git a/spritz/src/spritz.py b/spritz/src/spritz.py index b688a60e0..336e85616 100644 --- a/spritz/src/spritz.py +++ b/spritz/src/spritz.py @@ -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"