Move log stuff into a separate log.py.

This commit is contained in:
Avery Pennarun 2010-11-13 00:11:34 -08:00
commit 63c596ac61
3 changed files with 42 additions and 38 deletions

23
log.py Normal file
View file

@ -0,0 +1,23 @@
import sys, os
import vars
def _log(s):
sys.stdout.flush()
sys.stderr.write(s)
sys.stderr.flush()
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))
if os.isatty(2):
log = _clog
else:
log = _bwlog
def debug(s):
if vars.DEBUG:
_log('redo: %s%s' % (vars.DEPTH, s))

43
redo.py
View file

@ -34,29 +34,9 @@ def relpath(t, base):
def sname(typ, t): def sname(typ, t):
# FIXME: t.replace(...) is non-reversible and non-unique here! # FIXME: t.replace(...) is non-reversible and non-unique here!
tnew = relpath(t, REDO_BASE) tnew = relpath(t, vars.BASE)
#log('sname: (%r) %r -> %r\n' % (REDO_BASE, t, tnew)) #log('sname: (%r) %r -> %r\n' % (vars.BASE, t, tnew))
return REDO_BASE + ('/.redo/%s^%s' % (typ, tnew.replace('/', '^'))) return vars.BASE + ('/.redo/%s^%s' % (typ, tnew.replace('/', '^')))
def _log(s):
sys.stdout.flush()
sys.stderr.write(s)
sys.stderr.flush()
def _clog(s):
_log('\x1b[32mredo: %s\x1b[1m%s\x1b[m' % (REDO_DEPTH, s))
def _bwlog(s):
_log('redo: %s%s' % (REDO_DEPTH, s))
if os.isatty(2):
log = _clog
else:
log = _bwlog
def debug(s):
if REDO_DEBUG:
_log('redo: %s%s' % (REDO_DEPTH, s))
def add_dep(t, mode, dep): def add_dep(t, mode, dep):
@ -117,7 +97,7 @@ def dirty_deps(t, depth):
def stamp(t): def stamp(t):
stampfile = sname('stamp', t) stampfile = sname('stamp', t)
if not os.path.exists(REDO_BASE + '/.redo'): if not os.path.exists(vars.BASE + '/.redo'):
# .redo might not exist in a 'make clean' target # .redo might not exist in a 'make clean' target
return return
open(stampfile, 'w').close() open(stampfile, 'w').close()
@ -130,7 +110,7 @@ def stamp(t):
def _preexec(t): def _preexec(t):
os.environ['REDO_TARGET'] = t os.environ['REDO_TARGET'] = t
os.environ['REDO_DEPTH'] = REDO_DEPTH + ' ' os.environ['REDO_DEPTH'] = vars.DEPTH + ' '
dn = os.path.dirname(t) dn = os.path.dirname(t)
if dn: if dn:
os.chdir(dn) os.chdir(dn)
@ -152,7 +132,7 @@ def build(t):
f = open(tmpname, 'w+') f = open(tmpname, 'w+')
argv = ['sh', '-e', os.path.basename(dofile), argv = ['sh', '-e', os.path.basename(dofile),
os.path.basename(t), 'FIXME', os.path.basename(tmpname)] os.path.basename(t), 'FIXME', os.path.basename(tmpname)]
if REDO_VERBOSE: if vars.VERBOSE:
argv[1] += 'v' argv[1] += 'v'
log('%s\n' % t) log('%s\n' % t)
rv = subprocess.call(argv, preexec_fn=lambda: _preexec(t), rv = subprocess.call(argv, preexec_fn=lambda: _preexec(t),
@ -191,9 +171,10 @@ if not os.environ.get('REDO_BASE', ''):
break break
os.environ['REDO_BASE'] = base os.environ['REDO_BASE'] = base
from vars import * import vars
from log import *
if not REDO_DEPTH: if not vars.DEPTH:
# toplevel call to redo # toplevel call to redo
exenames = [os.path.abspath(sys.argv[0]), os.path.realpath(sys.argv[0])] exenames = [os.path.abspath(sys.argv[0]), os.path.realpath(sys.argv[0])]
if exenames[0] == exenames[1]: if exenames[0] == exenames[1]:
@ -203,11 +184,11 @@ if not REDO_DEPTH:
startdir = os.getcwd() startdir = os.getcwd()
for t in targets: for t in targets:
mkdirp('%s/.redo' % REDO_BASE) mkdirp('%s/.redo' % vars.BASE)
os.chdir(startdir) os.chdir(startdir)
if REDO_TARGET: if vars.TARGET:
add_dep(REDO_TARGET, opt.ifcreate and 'c' or 'm', t) add_dep(vars.TARGET, opt.ifcreate and 'c' or 'm', t)
if opt.ifcreate: if opt.ifcreate:
pass # just adding the dependency (above) is enough pass # just adding the dependency (above) is enough
elif opt.ifchange: elif opt.ifchange:

14
vars.py
View file

@ -1,9 +1,9 @@
import os import os
REDO_TARGET = os.environ.get('REDO_TARGET', '') TARGET = os.environ.get('REDO_TARGET', '')
REDO_DEPTH = os.environ.get('REDO_DEPTH', '') DEPTH = os.environ.get('REDO_DEPTH', '')
REDO_DEBUG = os.environ.get('REDO_DEBUG', '') and 1 or 0 DEBUG = os.environ.get('REDO_DEBUG', '') and 1 or 0
REDO_VERBOSE = os.environ.get('REDO_VERBOSE', '') and 1 or 0 VERBOSE = os.environ.get('REDO_VERBOSE', '') and 1 or 0
REDO_BASE = os.path.abspath(os.environ['REDO_BASE']) BASE = os.path.abspath(os.environ['REDO_BASE'])
while REDO_BASE.endswith('/'): while BASE.endswith('/'):
REDO_BASE = REDO_BASE[:-1] BASE = BASE[:-1]