diff --git a/spritz/src/entropyapi.py b/spritz/src/entropyapi.py index 1fd89b831..3d06d36d2 100644 --- a/spritz/src/entropyapi.py +++ b/spritz/src/entropyapi.py @@ -51,7 +51,7 @@ class QueueExecutor: else: return 0,licenses - def run(self, install_queue, removal_queue, do_purge_cache = []): + def run(self, install_queue, removal_queue, do_purge_cache = [], fetch_only = False): # unmask packages for match in self.Spritz.etpbase.unmaskingPackages: @@ -79,7 +79,9 @@ class QueueExecutor: self.Entropy.clientDbconn.acceptLicense(lic) totalqueue = len(runQueue) - progress_step = float(1)/((totalqueue*2)+len(removalQueue)) + steps_here = 2 + if fetch_only: steps_here = 1 + progress_step = float(1)/((totalqueue*steps_here)+len(removalQueue)) step = progress_step myrange = [] while progress_step < 1.0: @@ -134,6 +136,9 @@ class QueueExecutor: self.Spritz.ui.skipMirror.hide() + if fetch_only: + return 0,0 + # then removalQueue # NOT conflicts! :-) totalremovalqueue = len(removalQueue) diff --git a/spritz/src/spritz.glade b/spritz/src/spritz.glade index 0d945dc26..77dea57d2 100644 --- a/spritz/src/spritz.glade +++ b/spritz/src/spritz.glade @@ -1602,10 +1602,46 @@ + + + True + + + True + True + If selected, packages will be downloaded only + Download only + 0 + True + + + False + + + + + True + False + True + Download source code + 0 + True + + + 1 + + + + + False + False + 8 + 1 + + True - 5 GTK_BUTTONBOX_END @@ -1653,7 +1689,8 @@ - 1 + False + 2 diff --git a/spritz/src/spritz.py b/spritz/src/spritz.py index bd5868477..5bd736369 100644 --- a/spritz/src/spritz.py +++ b/spritz/src/spritz.py @@ -1283,7 +1283,7 @@ class SpritzApplication(Controller): self.resetQueueProgressBars() self.disable_ugc = False - def processPackageQueue(self, pkgs, remove_repos = []): + def processPackageQueue(self, pkgs, remove_repos = [], fetch_only = False): # preventive check against other instances locked = self.Equo.application_lock_check() @@ -1298,6 +1298,7 @@ class SpritzApplication(Controller): total = len( pkgs['i'] )+len( pkgs['u'] )+len( pkgs['r'] ) +len( pkgs['rr'] ) state = True if total > 0: + self.startWorking(do_busy = True) normalCursor(self.ui.main) self.progress.show() @@ -1308,9 +1309,10 @@ class SpritzApplication(Controller): removal_queue = [x.matched_atom[0] for x in pkgs['r']] do_purge_cache = set([x.matched_atom[0] for x in pkgs['r'] if x.do_purge]) if install_queue or removal_queue: + controller = QueueExecutor(self) try: - e,i = controller.run(install_queue[:], removal_queue[:], do_purge_cache) + e,i = controller.run(install_queue[:], removal_queue[:], do_purge_cache, fetch_only = fetch_only) except exceptionTools.QueueError: e = 1 self.ui.skipMirror.hide() @@ -1320,25 +1322,24 @@ class SpritzApplication(Controller): _("Attention. An error occured when processing the queue." "\nPlease have a look in the processing terminal.") ) - self.endWorking() - self.etpbase.clearPackages() - time.sleep(5) + self.endWorking() self.progress.reset_progress() - self.etpbase.clearPackages() - self.etpbase.clearCache() - for myrepo in remove_repos: - self.Equo.removeRepository(myrepo) - self.Equo.closeAllRepositoryDatabases() - self.Equo.reopenClientDbconn() - # regenerate packages information - self.setupSpritz() - self.Equo.FileUpdates.scanfs(dcache = False) - if self.Equo.FileUpdates.scandata: - if len(self.Equo.FileUpdates.scandata) > 0: - self.setPage('filesconf') - #self.progress.hide() + if not fetch_only: + self.etpbase.clearPackages() + self.etpbase.clearCache() + for myrepo in remove_repos: + self.Equo.removeRepository(myrepo) + self.Equo.closeAllRepositoryDatabases() + self.Equo.reopenClientDbconn() + # regenerate packages information + self.setupSpritz() + self.Equo.FileUpdates.scanfs(dcache = False) + if self.Equo.FileUpdates.scandata: + if len(self.Equo.FileUpdates.scandata) > 0: + self.setPage('filesconf') + else: self.setStatus( _( "No packages selected" ) ) @@ -2013,11 +2014,15 @@ class SpritzApplication(Controller): self.setStatus(_('No packages in queue')) return - rc = self.processPackageQueue(self.queue.packages) + fetch_only = self.ui.queueProcessFetchOnly.get_active() + + rc = self.processPackageQueue(self.queue.packages, fetch_only = fetch_only) self.resetQueueProgressBars() - if rc: + if rc and not fetch_only: self.queue.clear() # Clear package queue self.queueView.refresh() # Refresh Package Queue + #if fetch_only: + # self.setPage('queue') def on_queueSave_clicked( self, widget ): fn = FileChooser(action = gtk.FILE_CHOOSER_ACTION_SAVE, buttons = (gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_SAVE,gtk.RESPONSE_OK))