Entropy/Equo/Spritz:

- made package conflicts removal non critical anymore, they are now removed through the installation process


git-svn-id: http://svn.sabayonlinux.org/projects/entropy/trunk@1529 cd1c1023-2f26-0410-ae45-c471fc1f0318
This commit is contained in:
lxnay
2008-03-28 16:32:25 +00:00
parent c1e8f26720
commit d1567bdbde
7 changed files with 71 additions and 35 deletions
-1
View File
@@ -1,5 +1,4 @@
TODO list
- remove conflicting packages right before the conflict (*)
- Socket Interface, use SSL - http://docs.python.org/lib/socket-example.html (*)
- http://www.shipyard.com.au/articles/webdevelopment/sslxmlrpc.py
- migrate server code to ServerInterface
+10 -6
View File
@@ -580,7 +580,7 @@ def installPackages(packages = [], atomsdata = [], deps = True, emptydeps = Fals
# store resume information
if not tbz2: # .tbz2 install resume not supported
resume_cache = {}
resume_cache['removalQueue'] = removalQueue[:]
#resume_cache['removalQueue'] = removalQueue[:]
resume_cache['runQueue'] = runQueue[:]
resume_cache['onlyfetch'] = onlyfetch
resume_cache['emptydeps'] = emptydeps
@@ -599,7 +599,7 @@ def installPackages(packages = [], atomsdata = [], deps = True, emptydeps = Fals
else:
try:
removalQueue = resume_cache['removalQueue'][:]
#removalQueue = resume_cache['removalQueue'][:]
runQueue = resume_cache['runQueue'][:]
onlyfetch = resume_cache['onlyfetch']
emptydeps = resume_cache['emptydeps']
@@ -611,17 +611,18 @@ def installPackages(packages = [], atomsdata = [], deps = True, emptydeps = Fals
return 128,-1
if skipfirst and runQueue:
runQueue, removalQueue, status = Equo.retrieveInstallQueue(runQueue[1:], emptydeps, deepdeps)
runQueue, x, status = Equo.retrieveInstallQueue(runQueue[1:], emptydeps, deepdeps)
del x # was removalQueue
# save new queues
resume_cache['runQueue'] = runQueue[:]
resume_cache['removalQueue'] = removalQueue[:]
#resume_cache['removalQueue'] = removalQueue[:]
Equo.dumpTools.dumpobj(etpCache['install'],resume_cache)
# running tasks
totalqueue = str(len(runQueue))
totalremovalqueue = str(len(removalQueue))
#totalremovalqueue = str(len(removalQueue))
currentqueue = 0
currentremovalqueue = 0
#currentremovalqueue = 0
def read_lic_selection():
print_info(darkred(" Please choose an action"))
@@ -702,6 +703,8 @@ def installPackages(packages = [], atomsdata = [], deps = True, emptydeps = Fals
print_info(red(" @@ ")+blue("Fetch Complete."))
return 0,0
# XXX packages are now removed through the install process
'''
for idpackage in removalQueue:
currentremovalqueue += 1
@@ -726,6 +729,7 @@ def installPackages(packages = [], atomsdata = [], deps = True, emptydeps = Fals
Package.kill()
del metaopts
del Package
'''
for packageInfo in runQueue:
currentqueue += 1
+1 -1
View File
@@ -2286,7 +2286,7 @@ class etpDatabase:
deps = self.retrieveDependencies(idpackage)
conflicts = self.retrieveConflicts(idpackage)
for x in conflicts:
if x[0] != "!": # workaround for my mistake
if x[0] != "!":
x = "!"+x
deps.add(x)
del conflicts
+54 -14
View File
@@ -1913,6 +1913,16 @@ class EquoInterface(TextInterface):
pass
return update, remove, fine
def get_match_conflicts(self, match):
dbconn = self.openRepositoryDatabase(match[1])
conflicts = dbconn.retrieveConflicts(match[0])
found_conflicts = set()
for conflict in conflicts:
match = self.clientDbconn.atomMatch(conflict)
if match[0] != -1:
found_conflicts.add(match[0])
return found_conflicts
def is_match_masked(self, match):
dbconn = self.openRepositoryDatabase(match[1])
idpackage, idreason = dbconn.idpackageValidator(match[0])
@@ -4131,6 +4141,20 @@ class PackageInterface:
del remdata
return 0
def removeconflict_step(self, idpackage):
for idpackage in self.infoDict['conflicts']:
if not self.Entropy.clientDbconn.isIDPackageAvailable(idpackage):
continue
Package = self.Entropy.Package()
Package.prepare((idpackage,),"remove", self.infoDict['remove_metaopts'])
rc = Package.run(xterm_header = self.xterm_title)
Package.kill()
if rc != 0:
return rc
return 0
def _run_create_lock(self):
self.Entropy.create_pid_file_lock(etpConst['locks']['packagehandling'])
@@ -4148,33 +4172,36 @@ class PackageInterface:
rc = 0
for step in self.infoDict['steps']:
self.xterm_title = xterm_header+' '
self.xterm_title = xterm_header
if step == "fetch":
self.xterm_title += 'Fetching: '+os.path.basename(self.infoDict['download'])
self.xterm_title += ' Fetching: '+os.path.basename(self.infoDict['download'])
self.Entropy.setTitle(self.xterm_title)
rc = self.fetch_step()
elif step == "checksum":
self.xterm_title += 'Verifying: '+os.path.basename(self.infoDict['download'])
self.xterm_title += ' Verifying: '+os.path.basename(self.infoDict['download'])
self.Entropy.setTitle(self.xterm_title)
rc = self.checksum_step()
elif step == "unpack":
if not self.infoDict['merge_from']:
self.xterm_title += 'Unpacking: '+os.path.basename(self.infoDict['download'])
self.xterm_title += ' Unpacking: '+os.path.basename(self.infoDict['download'])
else:
self.xterm_title += 'Merging: '+os.path.basename(self.infoDict['atom'])
self.xterm_title += ' Merging: '+os.path.basename(self.infoDict['atom'])
self.Entropy.setTitle(self.xterm_title)
rc = self.unpack_step()
elif step == "remove_conflicts":
rc = self.removeconflict_step()
elif step == "install":
self.xterm_title += 'Installing: '+self.infoDict['atom']
self.xterm_title += ' Installing: '+self.infoDict['atom']
self.Entropy.setTitle(self.xterm_title)
rc = self.install_step()
elif step == "remove":
self.xterm_title += 'Removing: '+self.infoDict['removeatom']
self.xterm_title += ' Removing: '+self.infoDict['removeatom']
self.Entropy.setTitle(self.xterm_title)
rc = self.remove_step()
@@ -4182,27 +4209,27 @@ class PackageInterface:
rc = self.messages_step()
elif step == "cleanup":
self.xterm_title += 'Cleaning: '+self.infoDict['atom']
self.xterm_title += ' Cleaning: '+self.infoDict['atom']
self.Entropy.setTitle(self.xterm_title)
rc = self.cleanup_step()
elif step == "postinstall":
self.xterm_title += 'Postinstall: '+self.infoDict['atom']
self.xterm_title += ' Postinstall: '+self.infoDict['atom']
self.Entropy.setTitle(self.xterm_title)
rc = self.postinstall_step()
elif step == "preinstall":
self.xterm_title += 'Preinstall: '+self.infoDict['atom']
self.xterm_title += ' Preinstall: '+self.infoDict['atom']
self.Entropy.setTitle(self.xterm_title)
rc = self.preinstall_step()
elif step == "preremove":
self.xterm_title += 'Preremove: '+self.infoDict['removeatom']
self.xterm_title += ' Preremove: '+self.infoDict['removeatom']
self.Entropy.setTitle(self.xterm_title)
rc = self.preremove_step()
elif step == "postremove":
self.xterm_title += 'Postremove: '+self.infoDict['removeatom']
self.xterm_title += ' Postremove: '+self.infoDict['removeatom']
self.Entropy.setTitle(self.xterm_title)
rc = self.postremove_step()
@@ -4325,16 +4352,26 @@ class PackageInterface:
self.infoDict['messages'] = dbconn.retrieveMessages(idpackage)
self.infoDict['checksum'] = dbconn.retrieveDigest(idpackage)
self.infoDict['accept_license'] = dbconn.retrieveLicensedataKeys(idpackage)
self.infoDict['conflicts'] = self.Entropy.get_match_conflicts(self.matched_atom)
# fill action queue
self.infoDict['removeidpackage'] = -1
removeConfig = False
if self.metaopts.has_key('removeconfig'):
removeConfig = self.metaopts.get('removeconfig')
self.infoDict['remove_metaopts'] = {
'removeconfig': True,
}
if self.metaopts.has_key('remove_metaopts'):
self.infoDict['remove_metaopts'] = self.metaopts.get('remove_metaopts')
self.infoDict['merge_from'] = None
mf = self.metaopts.get('merge_from')
if mf != None:
self.infoDict['merge_from'] = unicode(mf)
self.infoDict['removeconfig'] = removeConfig
self.infoDict['removeidpackage'] = self.Entropy.retrieveInstalledIdPackage(
self.Entropy.entropyTools.dep_getkey(self.infoDict['atom']),
self.infoDict['slot']
@@ -4401,6 +4438,8 @@ class PackageInterface:
# set steps
self.infoDict['steps'] = []
if self.infoDict['conflicts']:
self.infoDict['steps'].append("remove_conflicts")
# install
if (self.infoDict['removeidpackage'] != -1):
self.infoDict['steps'].append("preremove")
@@ -9893,8 +9932,9 @@ class SocketHostInterface:
return rng
def update_session_time(self, session):
self.sessions[session]['t'] = time.time()
self.updateProgress('session time updated for %s' % (session,) )
if self.sessions.has_key(session):
self.sessions[session]['t'] = time.time()
self.updateProgress('session time updated for %s' % (session,) )
def set_session_running(self, session):
if self.sessions.has_key(session):
+2
View File
@@ -44,6 +44,8 @@ def isRoot():
def is_user_in_entropy_group():
import grp
uid = os.getuid()
if uid == 0:
return True
etp_gid = None
try:
etp_gid = grp.getgrnam(etpConst['sysgroup'])[2]
+4 -10
View File
@@ -53,13 +53,11 @@ class QueueExecutor:
def run(self, install_queue, removal_queue, do_purge_cache = []):
removalQueue = []
runQueue = []
conflicts_queue = []
if install_queue:
#import pdb; pdb.set_trace()
runQueue, removalQueue, status = self.Entropy.retrieveInstallQueue(install_queue,False,False)
removalQueue = [(x,True) for x in removalQueue]
# XXX handle status
runQueue, conflicts_queue, status = self.Entropy.retrieveInstallQueue(install_queue,False,False)
if removal_queue:
removalQueue += [(x,False) for x in removal_queue if (x,True) not in removalQueue]
removalQueue += [(x,False) for x in removal_queue if x not in conflicts_queue]
# XXX handle for eva too, move db configuration to LicenseDialog and forget
rc, licenses = self.handle_licenses(runQueue)
@@ -90,7 +88,6 @@ class QueueExecutor:
importance = 2,
count = (fetchqueue,totalqueue)
)
# XXX handle status
rc = Package.run()
if rc != 0:
return -1,rc
@@ -99,6 +96,7 @@ class QueueExecutor:
self.Entropy.cycleDone()
# then removalQueue
# NOT conflicts! :-)
totalremovalqueue = len(removalQueue)
currentremovalqueue = 0
for rem_data in removalQueue:
@@ -118,7 +116,6 @@ class QueueExecutor:
count = (currentremovalqueue,totalremovalqueue)
)
# XXX handle status
rc = Package.run()
if rc != 0:
return -1,rc
@@ -128,7 +125,6 @@ class QueueExecutor:
del metaopts
del Package
# then runQueue
totalqueue = len(runQueue)
currentqueue = 0
for packageInfo in runQueue:
@@ -145,7 +141,6 @@ class QueueExecutor:
count = (currentqueue,totalqueue)
)
# XXX handle status
rc = Package.run()
if rc != 0:
return -1,rc
@@ -202,7 +197,6 @@ class Equo(EquoInterface):
self.progress.total.setup( range(total) )
class GuiUrlFetcher(urlFetcher):
""" hello my highness """
def connect_to_gui(self, progress):
self.progress = progress
-3
View File
@@ -55,13 +55,10 @@ class ProcessGtkEventsThread(Thread):
def run(self):
while self.__quit == False:
import time
while not self.__active.isSet():
self.__active.wait()
time.sleep(0.1)
while gtk.events_pending(): # process gtk events
gtk.main_iteration()
time.sleep(0.1)
def doQuit(self):
self.__quit = True