Prettier printing of errors.

This commit is contained in:
Avery Pennarun 2010-11-13 01:21:59 -08:00
commit 0bd6d07155
4 changed files with 26 additions and 8 deletions

View file

@ -50,10 +50,19 @@ def _clog(s):
_log('\x1b[32mredo: %s\x1b[1m%s\x1b[m' % (vars.DEPTH, s)) _log('\x1b[32mredo: %s\x1b[1m%s\x1b[m' % (vars.DEPTH, s))
def _bwlog(s): def _bwlog(s):
_log('redo: %s%s' % (vars.DEPTH, 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): if os.isatty(2):
log = _clog log = _clog
err = _cerr
else: else:
log = _bwlog log = _bwlog
err = _bwerr
def debug(s): def debug(s):
@ -61,7 +70,6 @@ def debug(s):
_log('redo: %s%s' % (vars.DEPTH, s)) _log('redo: %s%s' % (vars.DEPTH, s))
def relpath(t, base): def relpath(t, base):
t = os.path.abspath(t) t = os.path.abspath(t)
tparts = t.split('/') tparts = t.split('/')

View file

@ -45,8 +45,8 @@ def dirty_deps(t, depth):
if not vars.TARGET: if not vars.TARGET:
sys.stderr.write('redo-ifchange: error: must be run from inside a .do\n') err('redo-ifchange: error: must be run from inside a .do\n')
sys.exit(1) sys.exit(100)
want_build = [] want_build = []
for t in sys.argv[1:]: for t in sys.argv[1:]:

View file

@ -5,8 +5,8 @@ from helpers import *
if not vars.TARGET: if not vars.TARGET:
sys.stderr.write('redo-ifcreate: error: must be run from inside a .do\n') err('redo-ifcreate: error: must be run from inside a .do\n')
sys.exit(1) sys.exit(100)
for t in sys.argv[1:]: for t in sys.argv[1:]:
mkdirp('%s/.redo' % vars.BASE) mkdirp('%s/.redo' % vars.BASE)

16
redo.py
View file

@ -33,6 +33,10 @@ import vars
from helpers import * from helpers import *
class BuildError(Exception):
pass
def find_do_file(t): def find_do_file(t):
dofile = '%s.do' % t dofile = '%s.do' % t
if os.path.exists(dofile): if os.path.exists(dofile):
@ -75,7 +79,7 @@ def build(t):
stamp(t) stamp(t)
return # success return # success
else: else:
raise Exception('no rule to make %r' % t) raise BuildError('no rule to make %r' % t)
stamp(dofile) stamp(dofile)
unlink(t) unlink(t)
tmpname = '%s.redo.tmp' % t tmpname = '%s.redo.tmp' % t
@ -102,7 +106,7 @@ def build(t):
unlink(stampfile) unlink(stampfile)
f.close() f.close()
if rv != 0: if rv != 0:
raise Exception('non-zero return code building %r' % t) raise BuildError('%s: exit code %d' % (t,rv))
if not vars.DEPTH: if not vars.DEPTH:
@ -113,8 +117,14 @@ if not vars.DEPTH:
dirnames = [os.path.dirname(p) for p in exenames] dirnames = [os.path.dirname(p) for p in exenames]
os.environ['PATH'] = ':'.join(dirnames) + ':' + os.environ['PATH'] os.environ['PATH'] = ':'.join(dirnames) + ':' + os.environ['PATH']
retcode = 0
startdir = os.getcwd() startdir = os.getcwd()
for t in targets: for t in targets:
mkdirp('%s/.redo' % vars.BASE) mkdirp('%s/.redo' % vars.BASE)
os.chdir(startdir) os.chdir(startdir)
build(t) try:
build(t)
except BuildError, e:
err('%s\n' % e)
retcode = 1
sys.exit(retcode)