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:
@@ -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
@@ -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
|
||||
|
||||
@@ -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
@@ -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):
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user