diff --git a/builder.py b/builder.py index 259faac..54a3057 100644 --- a/builder.py +++ b/builder.py @@ -95,9 +95,13 @@ class BuildJob: jwack.start_job(t, self._do_subproc, self._after) def _do_subproc(self): - td = os.environ.get('REDO_PWD', '') + # careful: REDO_PWD was the PWD relative to the STARTPATH at the time + # we *started* building the current target; but that target ran + # redo-ifchange, and it might have done it from a different directory + # than we started it in. So os.getcwd() might be != REDO_PWD right now. dn = os.path.dirname(self.t) - os.environ['REDO_PWD'] = os.path.join(td, dn) + newp = os.path.realpath(dn) + os.environ['REDO_PWD'] = state.relpath(newp, vars.STARTDIR) os.environ['REDO_TARGET'] = os.path.basename(self.t) os.environ['REDO_DEPTH'] = vars.DEPTH + ' ' if dn: diff --git a/helpers.py b/helpers.py index ce3ad69..3765343 100644 --- a/helpers.py +++ b/helpers.py @@ -67,6 +67,9 @@ def debug(s): def debug2(s): if vars.DEBUG >= 2: log_('redo: %s%s' % (vars.DEPTH, s)) +def debug3(s): + if vars.DEBUG >= 3: + log_('redo: %s%s' % (vars.DEPTH, s)) def close_on_exec(fd, yes): diff --git a/redo-ifchange.py b/redo-ifchange.py index de73201..256a2bb 100755 --- a/redo-ifchange.py +++ b/redo-ifchange.py @@ -1,7 +1,7 @@ #!/usr/bin/python import sys, os, errno import vars, state, builder, jwack -from helpers import debug, err, mkdirp, unlink +from helpers import debug, debug2, err, mkdirp, unlink def dirty_deps(t, depth): @@ -49,12 +49,13 @@ def should_build(t): rv = 202 try: + me = os.path.join(vars.STARTDIR, + os.path.join(vars.PWD, vars.TARGET)) + debug2('TARGET: %r %r %r\n' % (vars.STARTDIR, vars.PWD, vars.TARGET)) try: targets = sys.argv[1:] for t in targets: - state.add_dep(os.path.join(vars.STARTDIR, - os.path.join(vars.PWD, vars.TARGET)), - 'm', t) + state.add_dep(me, 'm', t) rv = builder.main(targets, should_build) finally: jwack.force_return_tokens() diff --git a/state.py b/state.py index 64e538f..de7e681 100644 --- a/state.py +++ b/state.py @@ -1,6 +1,6 @@ import sys, os, errno, glob import vars -from helpers import unlink, err, debug2, mkdirp, close_on_exec +from helpers import unlink, err, debug2, debug3, mkdirp, close_on_exec def init(): @@ -50,15 +50,17 @@ def _sname(typ, t): # FIXME: t.replace(...) is non-reversible and non-unique here! tnew = relpath(t, vars.BASE) v = vars.BASE + ('/.redo/%s^%s' % (typ, tnew.replace('/', '^'))) - if vars.DEBUG >= 2: - debug2('sname: (%r) %r -> %r\n' % (os.getcwd(), t, tnew)) + if vars.DEBUG >= 3: + debug3('sname: (%r) %r -> %r\n' % (os.getcwd(), t, tnew)) return v def add_dep(t, mode, dep): - debug2('add-dep(%r)\n' % t) - open(_sname('dep', t), 'a').write('%s %s\n' - % (mode, relpath(dep, vars.BASE))) + sn = _sname('dep', t) + reldep = relpath(dep, vars.BASE) + debug2('add-dep: %r < %s %r\n' % (sn, mode, reldep)) + + open(sn, 'a').write('%s %s\n' % (mode, reldep)) def deps(t):