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
next 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