From bb213bebf548c64b0f7e2853a46f8fc9b63a5f8a Mon Sep 17 00:00:00 2001 From: "(no author)" <(no author)@cd1c1023-2f26-0410-ae45-c471fc1f0318> Date: Wed, 9 Jan 2008 17:26:27 +0000 Subject: [PATCH] - some updates to spritz queue handling git-svn-id: http://svn.sabayonlinux.org/projects/entropy/trunk@1027 cd1c1023-2f26-0410-ae45-c471fc1f0318 --- spritz/src/gui.py | 9 ++-- spritz/src/misc.py | 106 +++++++++++++++++++++++++++++++++-------- spritz/src/packages.py | 5 -- spritz/src/spritz.py | 4 +- spritz/src/views.py | 3 +- 5 files changed, 96 insertions(+), 31 deletions(-) diff --git a/spritz/src/gui.py b/spritz/src/gui.py index 0d0f6d937..4013d728c 100644 --- a/spritz/src/gui.py +++ b/spritz/src/gui.py @@ -34,7 +34,7 @@ class YumexPackageInfo: self.pkgChangeLog = TextViewConsole( self.ui.pkgCLog, font=self.settings.font_pkgdesc, color=self.settings.color_pkgdesc ) self.pkgOther = TextViewConsole( self.ui.pkgOther, font=self.settings.font_pkgdesc, color=self.settings.color_pkgdesc ) self.yumbase = None - + def clear( self ): self.pkgDesc.clear() self.pkgInfo.clear() @@ -223,7 +223,7 @@ class YumexProgress: def setTotal( self, now, total ): self.total.setProgress( now, total ) - + def set_progress( self, frac, text=None ): if self.parent.quitNow: self.parent.exitNow() @@ -262,13 +262,16 @@ class YumexProgress: class YumexGUI: ''' This class contains GUI related methods ''' - def __init__(self): + def __init__(self, EquoConnection, etpbase): self.settings = YumexConf() self.output = TextViewConsole( self.ui.viewOutput ) # Package & Queue Views + self.Entropy = EquoConnection + self.etpbase = etpbase self.queue = YumexQueue() self.queueView = YumexQueueView(self.ui.queueView,self.queue) self.pkgView = EntropyPackageView(self.ui.viewPkg,self.queueView) + self.queue.connect_objects(self.Entropy, self.etpbase, self.pkgView, self.queueView) #self.catView = YumexCategoryView(self.ui.tvCategory) self.catsView = CategoriesView(self.ui.tvComps,self.queueView) self.catPackages = EntropyPackageView(self.ui.tvCatPackages,self.queueView) diff --git a/spritz/src/misc.py b/spritz/src/misc.py index 7f8e63c15..e8bb61800 100644 --- a/spritz/src/misc.py +++ b/spritz/src/misc.py @@ -158,14 +158,14 @@ class YumexProfile: self.proDict = {} self.load() - + def save( self ): if self.profiles.has_section('yum-enabled'): self.profiles.remove_section('yum-enabled') f=open( self.filename, "w" ) self.profiles.write( f ) f.close() - + def load( self ): self.profiles.read( self.filename ) self.active=self.profiles.get( "main", "LastProfile" ) @@ -183,9 +183,9 @@ class YumexProfile: return None def writeProfile( self, repos ): - self.profiles.remove_section( self.active) - return self.addProfile(self.active, repos ) - + self.profiles.remove_section( self.active) + return self.addProfile(self.active, repos ) + def getList( self ): return self.proDict.keys() @@ -196,7 +196,7 @@ class YumexProfile: def setActive( self, name ): if self.profiles.has_section( name ) or name == "yum-enabled": self.active = name - self.profiles.set( "main", "LastProfile", name ) + self.profiles.set( "main", "LastProfile", name ) self.save() def addProfile( self, name, repos ): @@ -210,7 +210,7 @@ class YumexProfile: else: return False - + class YumexQueue: def __init__(self): self.logger = logging.getLogger('yumex.YumexQueue') @@ -221,6 +221,16 @@ class YumexQueue: self.groups = {} self.groups['i'] = [] self.groups['r'] = [] + self.Entropy = None + self.etpbase = None + self.pkgView = None + self.queueView = None + + def connect_objects(self, EquoConnection, etpbase, pkgView, queueView): + self.Entropy = EquoConnection + self.etpbase = etpbase + self.pkgView = pkgView + self.queueView = queueView def clear( self ): del self.packages @@ -231,23 +241,81 @@ class YumexQueue: self.groups = {} self.groups['i'] = [] self.groups['r'] = [] - - def get( self, action = None ): + + def get( self, action = None ): if action == None: return self.packages else: return self.packages[action] - + def total(self): return len(self.packages['i'])+len(self.packages['u'])+len(self.packages['r']) - - def add( self, pkg): - list = self.packages[pkg.action] - if not pkg in list: - list.append( pkg ) - self.packages[pkg.action] = list - def remove( self, pkg): + def add(self, pkg): + 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() + 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 + 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] + + 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() + return 0,1 + + def remove(self, pkg): list = self.packages[pkg.action] if pkg in list: list.remove( pkg ) @@ -270,7 +338,7 @@ class YumexQueue: if grp in self.groups[action]: return action return None - + def dump(self): self.logger.info(_("Package Queue:")) for action in ['install','update','remove']: @@ -287,7 +355,7 @@ class YumexQueue: self.logger.info(_(" Groups to %s" % action)) for grp in list: self.logger.info(" ---> %s " % grp) - + def getParser(self): cp = YumexQueueFile() for action in ['install','update','remove']: diff --git a/spritz/src/packages.py b/spritz/src/packages.py index 24a6d0d74..b8303c8ab 100644 --- a/spritz/src/packages.py +++ b/spritz/src/packages.py @@ -18,7 +18,6 @@ # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. from etpgui.packages import PackageWrapper -import exceptionTools import logging import time @@ -64,10 +63,6 @@ class EntropyPackage( PackageWrapper ): class EntropyPackages: def __init__(self, EquoInstance): self.Entropy = EquoInstance - try: - self.Entropy.instanceTest() - except: - raise exceptionTools.IncorrectParameter("IncorrectParameter: a valid Entropy Instance is needed") self.logger = logging.getLogger('yumex.Packages') self.filterCallback = None self._packages = {} diff --git a/spritz/src/spritz.py b/spritz/src/spritz.py index 20c28c3f8..b688a60e0 100644 --- a/spritz/src/spritz.py +++ b/spritz/src/spritz.py @@ -374,7 +374,8 @@ class YumexApplication(YumexController,YumexGUI): YumexController.__init__( self ) self.yumexOptions = YumexOptions() self.yumexOptions.parseCmdOptions() - YumexGUI.__init__(self) + self.Equo = EquoConnection + YumexGUI.__init__(self, self.Equo, self.etpbase) self.logger = logging.getLogger("yumex.main") # init flags self.rpmTransactionIsRunning = False @@ -392,7 +393,6 @@ class YumexApplication(YumexController,YumexGUI): self.catsView.etpbase = self.etpbase self.lastPkgPB = "updates" self.etpbase.setFilter(filters.yumexFilter.processFilters) - self.Equo = EquoConnection # Setup GUI self.setupGUI() diff --git a/spritz/src/views.py b/spritz/src/views.py index 5cadf3ecc..77f208074 100644 --- a/spritz/src/views.py +++ b/spritz/src/views.py @@ -221,7 +221,7 @@ class YumexQueueView: model.set_sort_column_id( 0, gtk.SORT_ASCENDING ) self.view.get_selection().set_mode( gtk.SELECTION_MULTIPLE ) return model - + def deleteSelected( self ): rmvlist = [] model, paths = self.view.get_selection().get_selected_rows() @@ -239,7 +239,6 @@ class YumexQueueView: self.queue.packages[action] = filter( f, list ) self.refresh() - def getPkgsFromList( self, rlist ): rclist = [] f = lambda x: str( x ) in rlist