From 67a9b1477ef706b6b47fc5f37d864076b653c017 Mon Sep 17 00:00:00 2001 From: Chris Lumens Date: Fri, 3 Oct 2014 11:04:35 -0400 Subject: [PATCH 21/21] Graphically handle errors arising from ostree repo pull problems. This requires setting up a new glib main context as well, so ostree doesn't nuke the one we're currently using and make it impossible to do anything with GTK. Resolves: rhbz#1131382 --- pyanaconda/packaging/rpmostreepayload.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/pyanaconda/packaging/rpmostreepayload.py b/pyanaconda/packaging/rpmostreepayload.py index aba85bb..8be6d3b 100644 --- a/pyanaconda/packaging/rpmostreepayload.py +++ b/pyanaconda/packaging/rpmostreepayload.py @@ -22,7 +22,9 @@ import os import shutil +import sys +from pyanaconda import constants from pyanaconda import iutil from pyanaconda.i18n import _ from pyanaconda.progress import progressQ @@ -88,6 +90,9 @@ class RPMOSTreePayload(ArchivePayload): progressQ.send_message("Writing objects") def install(self): + mainctx = GLib.MainContext.new() + mainctx.push_thread_default() + cancellable = None from gi.repository import OSTree ostreesetup = self.data.ostreesetup @@ -120,7 +125,16 @@ class RPMOSTreePayload(ArchivePayload): progress = OSTree.AsyncProgress.new() progress.connect('changed', self._pullProgressCb) - repo.pull(ostreesetup.remote, [ostreesetup.ref], 0, progress, cancellable) + + try: + repo.pull(ostreesetup.remote, [ostreesetup.ref], 0, progress, cancellable) + except GLib.GError as e: + exn = PayloadInstallError("Failed to pull from repository: %s" % e) + log.error(str(exn)) + if errors.errorHandler.cb(exn) == errors.ERROR_RAISE: + progressQ.send_quit(1) + iutil.ipmi_report(constants.IPMI_ABORTED) + sys.exit(1) progressQ.send_message(_("Preparing deployment of %s") % (ostreesetup.ref, )) @@ -164,6 +178,8 @@ class RPMOSTreePayload(ArchivePayload): log.info("Copying bootloader data: " + fname) shutil.copytree(srcpath, os.path.join(physboot, fname)) + mainctx.pop_thread_default() + def prepareMountTargets(self, storage): ostreesetup = self.data.ostreesetup -- 1.9.3