From 0bd6d07155fe629e6d3e9320c65b6191a181a25c Mon Sep 17 00:00:00 2001 From: Avery Pennarun Date: Sat, 13 Nov 2010 01:21:59 -0800 Subject: [PATCH] Prettier printing of errors. --- helpers.py | 10 +++++++++- redo-ifchange.py | 4 ++-- redo-ifcreate.py | 4 ++-- redo.py | 16 +++++++++++++--- 4 files changed, 26 insertions(+), 8 deletions(-) diff --git a/helpers.py b/helpers.py index f8ddd03..00de8d2 100644 --- a/helpers.py +++ b/helpers.py @@ -50,10 +50,19 @@ def _clog(s): _log('\x1b[32mredo: %s\x1b[1m%s\x1b[m' % (vars.DEPTH, s)) def _bwlog(s): _log('redo: %s%s' % (vars.DEPTH, s)) + +def _cerr(s): + _log('\x1b[31mredo: %s\x1b[1m%s\x1b[m' % (vars.DEPTH, s)) +def _bwerr(s): + _log('redo: %s%s' % (vars.DEPTH, s)) + + if os.isatty(2): log = _clog + err = _cerr else: log = _bwlog + err = _bwerr def debug(s): @@ -61,7 +70,6 @@ def debug(s): _log('redo: %s%s' % (vars.DEPTH, s)) - def relpath(t, base): t = os.path.abspath(t) tparts = t.split('/') diff --git a/redo-ifchange.py b/redo-ifchange.py index b3cdc4c..dbe5cfb 100755 --- a/redo-ifchange.py +++ b/redo-ifchange.py @@ -45,8 +45,8 @@ def dirty_deps(t, depth): if not vars.TARGET: - sys.stderr.write('redo-ifchange: error: must be run from inside a .do\n') - sys.exit(1) + err('redo-ifchange: error: must be run from inside a .do\n') + sys.exit(100) want_build = [] for t in sys.argv[1:]: diff --git a/redo-ifcreate.py b/redo-ifcreate.py index 9e14946..473f61e 100755 --- a/redo-ifcreate.py +++ b/redo-ifcreate.py @@ -5,8 +5,8 @@ from helpers import * if not vars.TARGET: - sys.stderr.write('redo-ifcreate: error: must be run from inside a .do\n') - sys.exit(1) + err('redo-ifcreate: error: must be run from inside a .do\n') + sys.exit(100) for t in sys.argv[1:]: mkdirp('%s/.redo' % vars.BASE) diff --git a/redo.py b/redo.py index 1b2c2bb..3324df0 100755 --- a/redo.py +++ b/redo.py @@ -33,6 +33,10 @@ import vars from helpers import * +class BuildError(Exception): + pass + + def find_do_file(t): dofile = '%s.do' % t if os.path.exists(dofile): @@ -75,7 +79,7 @@ def build(t): stamp(t) return # success else: - raise Exception('no rule to make %r' % t) + raise BuildError('no rule to make %r' % t) stamp(dofile) unlink(t) tmpname = '%s.redo.tmp' % t @@ -102,7 +106,7 @@ def build(t): unlink(stampfile) f.close() if rv != 0: - raise Exception('non-zero return code building %r' % t) + raise BuildError('%s: exit code %d' % (t,rv)) if not vars.DEPTH: @@ -113,8 +117,14 @@ if not vars.DEPTH: dirnames = [os.path.dirname(p) for p in exenames] os.environ['PATH'] = ':'.join(dirnames) + ':' + os.environ['PATH'] +retcode = 0 startdir = os.getcwd() for t in targets: mkdirp('%s/.redo' % vars.BASE) os.chdir(startdir) - build(t) + try: + build(t) + except BuildError, e: + err('%s\n' % e) + retcode = 1 +sys.exit(retcode)