- 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:
+1
-1
@@ -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
@@ -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
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user