diff --git a/helpers.py b/helpers.py index ab320ab..f8ddd03 100644 --- a/helpers.py +++ b/helpers.py @@ -1,4 +1,5 @@ import sys, os, errno +import vars def atoi(v): @@ -39,3 +40,49 @@ def mkdirp(d, mode=None): raise +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)) + + + +def relpath(t, base): + t = os.path.abspath(t) + tparts = t.split('/') + bparts = base.split('/') + for tp,bp in zip(tparts,bparts): + if tp != bp: + break + tparts.pop(0) + bparts.pop(0) + while bparts: + tparts.insert(0, '..') + bparts.pop(0) + return '/'.join(tparts) + + +def sname(typ, t): + # FIXME: t.replace(...) is non-reversible and non-unique here! + tnew = relpath(t, vars.BASE) + #log('sname: (%r) %r -> %r\n' % (vars.BASE, t, tnew)) + return vars.BASE + ('/.redo/%s^%s' % (typ, tnew.replace('/', '^'))) + + +def add_dep(t, mode, dep): + open(sname('dep', t), 'a').write('%s %s\n' % (mode, dep)) diff --git a/libdo.py b/libdo.py deleted file mode 100644 index 0cd859a..0000000 --- a/libdo.py +++ /dev/null @@ -1,27 +0,0 @@ -import sys, os -import vars - -def relpath(t, base): - t = os.path.abspath(t) - tparts = t.split('/') - bparts = base.split('/') - for tp,bp in zip(tparts,bparts): - if tp != bp: - break - tparts.pop(0) - bparts.pop(0) - while bparts: - tparts.insert(0, '..') - bparts.pop(0) - return '/'.join(tparts) - - -def sname(typ, t): - # FIXME: t.replace(...) is non-reversible and non-unique here! - tnew = relpath(t, vars.BASE) - #log('sname: (%r) %r -> %r\n' % (vars.BASE, t, tnew)) - return vars.BASE + ('/.redo/%s^%s' % (typ, tnew.replace('/', '^'))) - - -def add_dep(t, mode, dep): - open(sname('dep', t), 'a').write('%s %s\n' % (mode, dep)) diff --git a/log.py b/log.py deleted file mode 100644 index dc8b24c..0000000 --- a/log.py +++ /dev/null @@ -1,23 +0,0 @@ -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)) diff --git a/redo-ifchange.py b/redo-ifchange.py index 07a9a39..b3cdc4c 100755 --- a/redo-ifchange.py +++ b/redo-ifchange.py @@ -2,8 +2,6 @@ import sys, os import vars from helpers import * -from log import * -from libdo import * def _dirty_deps(t, depth): diff --git a/redo.py b/redo.py index e1bdb92..a4cce51 100755 --- a/redo.py +++ b/redo.py @@ -1,7 +1,6 @@ #!/usr/bin/python import sys, os, subprocess import options -from helpers import * optspec = """ redo [targets...] @@ -14,6 +13,25 @@ o = options.Options('redo', optspec) targets = extra or ['it'] +if opt.debug: + os.environ['REDO_DEBUG'] = '1' +if opt.verbose: + os.environ['REDO_VERBOSE'] = '1' + +if not os.environ.get('REDO_BASE', ''): + base = os.path.commonprefix([os.path.abspath(os.path.dirname(t)) + for t in targets] + [os.getcwd()]) + bsplit = base.split('/') + for i in range(len(bsplit)-1, 0, -1): + newbase = '%s/.redo' % '/'.join(bsplit[:i]) + if os.path.exists(newbase): + base = newbase + break + os.environ['REDO_BASE'] = base + +import vars +from helpers import * + def find_do_file(t): dofile = '%s.do' % t @@ -87,26 +105,6 @@ def build(t): raise Exception('non-zero return code building %r' % t) -if opt.debug: - os.environ['REDO_DEBUG'] = '1' -if opt.verbose: - os.environ['REDO_VERBOSE'] = '1' - -if not os.environ.get('REDO_BASE', ''): - base = os.path.commonprefix([os.path.abspath(os.path.dirname(t)) - for t in targets] + [os.getcwd()]) - bsplit = base.split('/') - for i in range(len(bsplit)-1, 0, -1): - newbase = '%s/.redo' % '/'.join(bsplit[:i]) - if os.path.exists(newbase): - base = newbase - break - os.environ['REDO_BASE'] = base - -import vars -from log import * -from libdo import * - if not vars.DEPTH: # toplevel call to redo exenames = [os.path.abspath(sys.argv[0]), os.path.realpath(sys.argv[0])]