| From 67a9b1477ef706b6b47fc5f37d864076b653c017 Mon Sep 17 00:00:00 2001 |
| From: Chris Lumens <clumens@redhat.com> |
| 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 |
| |
| |
| @@ -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 |
| |