public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Michał Górny" <mgorny@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/pms-test-suite:master commit in: pmstestsuite/
Date: Tue,  3 Jan 2012 15:52:32 +0000 (UTC)	[thread overview]
Message-ID: <100cd1471544a89e330625e4eaf6ba41aa5c3993.mgorny@gentoo> (raw)

commit:     100cd1471544a89e330625e4eaf6ba41aa5c3993
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Tue Jan  3 11:57:44 2012 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Tue Jan  3 11:58:47 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/pms-test-suite.git;a=commit;h=100cd147

Add exception handling within main loop callbacks.

---
 pmstestsuite/cli.py |  170 +++++++++++++++++++++++++++++----------------------
 1 files changed, 96 insertions(+), 74 deletions(-)

diff --git a/pmstestsuite/cli.py b/pmstestsuite/cli.py
index 73468d1..ac8dd2e 100644
--- a/pmstestsuite/cli.py
+++ b/pmstestsuite/cli.py
@@ -7,6 +7,7 @@ from __future__ import print_function
 import os, os.path, shlex
 import gobject
 
+from traceback import format_exc
 from optparse import OptionParser
 
 from . import PV
@@ -186,31 +187,35 @@ class PMSTestSuiteCLI(object):
 		print('-> [%s] %s...' % (self.pm.name, text))
 
 	def tests_done(self):
-		self.pm.reload_config()
-		self._print_stage('Checking test results')
-		results = {}
-		for t in self.test_library:
-			tr = TestResult(t, self.pm)
+		try:
+			self.pm.reload_config()
+			self._print_stage('Checking test results')
+			results = {}
+			for t in self.test_library:
+				tr = TestResult(t, self.pm)
 
-			if tr:
-				outc = '.'
-			elif tr.exception:
-				outc = 'E'
-				raise tr.exception
-			else:
-				outc = 'F'
-			print(outc, end='')
+				if tr:
+					outc = '.'
+				elif tr.exception:
+					outc = 'E'
+					raise tr.exception
+				else:
+					outc = 'F'
+				print(outc, end='')
 
-			results[t] = tr
-			t.clean(self.pm)
-		self.results[self.pm] = results
-		print('')
+				results[t] = tr
+				t.clean(self.pm)
+			self.results[self.pm] = results
+			print('')
 
-		if self.pm.has_pending_actions:
-			self._print_stage('Unmerging test ebuilds')
-			self.pm.commit(self.prepare)
-		else:
-			self.prepare()
+			if self.pm.has_pending_actions:
+				self._print_stage('Unmerging test ebuilds')
+				self.pm.commit(self.prepare)
+			else:
+				self.prepare()
+		except Exception as e:
+			self.exception = format_exc()
+			self.loop.quit()
 
 	def all_done(self):
 		ret = self.output(self.results, verbose = self.verbose)
@@ -225,73 +230,87 @@ class PMSTestSuiteCLI(object):
 		self.pm.commit(self.tests_done)
 
 	def pre_unmerge_done(self):
-		self.pm.reload_config()
-		for t in self.test_library:
-			t.clean(self.pm)
-		if self.pm.has_pending_actions:
-			print('Failed to unmerge the following test ebuilds:')
-			print(' '.join(self.pm.pkg_queue))
-			print('Refusing to proceed.')
-			self.loop.quit()
-			return
-		self.start_pm()
-
-	def prepare(self, first = False):
 		try:
-			self.pm = next(self.pm_iter)
-		except StopIteration:
-			self.all_done()
-		else:
-			if not first:
-				self.pm.reload_config()
+			self.pm.reload_config()
 			for t in self.test_library:
 				t.clean(self.pm)
-
 			if self.pm.has_pending_actions:
-				print('-> Unmerging already-merged test ebuilds...')
-				self.pm.commit(self.pre_unmerge_done)
+				print('Failed to unmerge the following test ebuilds:')
+				print(' '.join(self.pm.pkg_queue))
+				print('Refusing to proceed.')
+				self.loop.quit()
+				return
+			self.start_pm()
+		except Exception as e:
+			self.exception = format_exc()
+			self.loop.quit()
+
+	def prepare(self, first = False):
+		try:
+			try:
+				self.pm = next(self.pm_iter)
+			except StopIteration:
+				self.all_done()
 			else:
-				self.start_pm()
+				if not first:
+					self.pm.reload_config()
+				for t in self.test_library:
+					t.clean(self.pm)
+
+				if self.pm.has_pending_actions:
+					print('-> Unmerging already-merged test ebuilds...')
+					self.pm.commit(self.pre_unmerge_done)
+				else:
+					self.start_pm()
+		except Exception as e:
+			self.exception = format_exc()
+			self.loop.quit()
 
 	def generate_and_start(self):
-		print('-> Generating ebuilds...')
-		files = {}
-		for t in self.test_library:
-			files.update(t.get_output_files())
-		if len(self.test_library) == 0:
-			print('No tests found (?!), refusing to proceed.')
-			return 1
+		try:
+			print('-> Generating ebuilds...')
+			files = {}
+			for t in self.test_library:
+				files.update(t.get_output_files())
+			if len(self.test_library) == 0:
+				print('No tests found (?!), refusing to proceed.')
+				return 1
 
-		files.update(get_common_eclass_files())
-		files.update(self.test_library.get_common_files())
+			files.update(get_common_eclass_files())
+			files.update(self.test_library.get_common_files())
 
-		self.repository.write_files(files)
-		if self.update_manifests:
-			needs_manifests = False
-			for pm in self.pms:
-				needs_manifests |= pm.requires_manifests
-				try:
-					self.repository.remanifest(files, pm)
-				except NotImplementedError:
-					pass
+			self.repository.write_files(files)
+			if self.update_manifests:
+				needs_manifests = False
+				for pm in self.pms:
+					needs_manifests |= pm.requires_manifests
+					try:
+						self.repository.remanifest(files, pm)
+					except NotImplementedError:
+						pass
+					else:
+						break
 				else:
-					break
-			else:
-				if needs_manifests:
-					print('No PM was able to do the Manifests, failing.')
-					return 1
-
-		if self.create_repo_only:
-			return 0
-
-		self.pm_iter = iter(self.pms)
-		self.results = {}
-		self.prepare(first = True)
+					if needs_manifests:
+						print('No PM was able to do the Manifests, failing.')
+						return 1
+
+			if self.create_repo_only:
+				return 0
+
+			self.pm_iter = iter(self.pms)
+			self.results = {}
+			self.prepare(first = True)
+		except Exception as e:
+			self.exception = format_exc()
+			self.loop.quit()
 
 		return False
 
+
 	def main(self, argv):
 		self._start(*argv)
+		self.exception = None
 
 		try:
 			gobject.idle_add(self.generate_and_start)
@@ -303,4 +322,7 @@ class PMSTestSuiteCLI(object):
 			# Ensure to terminate the spawned D-Bus.
 			self.dbus_hdlr.terminate()
 
+		if self.exception is not None:
+			return self.exception
+
 		return self.ret



             reply	other threads:[~2012-01-03 15:53 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-01-03 15:52 Michał Górny [this message]
  -- strict thread matches above, loose matches on Subject: below --
2012-06-20  8:01 [gentoo-commits] proj/pms-test-suite:master commit in: pmstestsuite/ Michał Górny
2012-01-04 16:33 Michał Górny
2012-01-03 15:52 Michał Górny
2012-01-03 15:52 Michał Górny
2012-01-03 15:52 Michał Górny
2011-08-21  8:19 Michał Górny
2011-08-20  6:23 Michał Górny
2011-08-13  7:38 Michał Górny
2011-08-08 22:15 Michał Górny
2011-08-05 21:36 Michał Górny
2011-08-05 17:09 Michał Górny
2011-08-05 17:09 Michał Górny
2011-08-05 17:09 Michał Górny
2011-08-05 17:09 Michał Górny
2011-08-05 17:09 Michał Górny
2011-08-05 17:09 Michał Górny
2011-08-05 17:09 Michał Górny
2011-08-05 10:04 Michał Górny
2011-08-03 20:17 Michał Górny
2011-08-03 20:17 Michał Górny
2011-08-03 20:17 Michał Górny
2011-08-03 20:17 Michał Górny
2011-08-03  8:17 Michał Górny
2011-08-02 18:53 Michał Górny
2011-07-18  6:49 Michał Górny
2011-06-24 18:03 [gentoo-commits] proj/pms-test-suite:master commit in: PMSTestSuite/ Michał Górny
2011-06-22 19:53 Michał Górny
2011-06-21 17:58 Michał Górny
2011-06-21 17:54 Michał Górny
2011-06-21 17:54 Michał Górny
2011-06-16 19:49 Michał Górny
2011-06-15 16:14 Michał Górny
2011-06-13 19:16 Michał Górny
2011-06-11  6:32 Michał Górny
2011-06-09  5:48 Michał Górny
2011-06-07 16:48 Michał Górny
2011-06-07 16:48 Michał Górny
2011-06-07 15:20 Michał Górny
2011-06-06  5:56 Michał Górny
2011-06-03 16:25 Michał Górny
2011-05-31 21:06 Michał Górny
2011-05-31 19:18 Michał Górny
2011-05-31 17:19 Michał Górny
2011-05-31 17:19 Michał Górny
2011-05-29 17:46 Michał Górny

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=100cd1471544a89e330625e4eaf6ba41aa5c3993.mgorny@gentoo \
    --to=mgorny@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox