From 282bb0488eced7edbf653f5a6bfd950803964271 Mon Sep 17 00:00:00 2001 From: Avery Pennarun Date: Wed, 24 Nov 2010 02:30:54 -0800 Subject: [PATCH] If the created target is a directory, it's okay for the .do to create it. Normally, creating the target $1 yourself is bad; create $3 instead. But if $1 is a directory, we'll allow it. That way 'redo subdir' can call subdir.do, and subdir.do can both create the directory *and* run a bunch of sub-.do files on it. --- builder.py | 4 ++-- t/clean.do | 2 +- t/makedir.do | 2 ++ t/test.do | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 t/makedir.do diff --git a/builder.py b/builder.py index 5c8b4ea..1a33270 100644 --- a/builder.py +++ b/builder.py @@ -1,4 +1,4 @@ -import sys, os, random, errno +import sys, os, random, errno, stat import vars, jwack, state from helpers import log, log_, debug2, err, unlink, close_on_exec @@ -122,7 +122,7 @@ class BuildJob: before_tmp = os.fstat(f.fileno()) after_tmp = _try_stat(tmpname) after_where = os.lseek(f.fileno(), 0, os.SEEK_CUR) - if after_t != before_t: + if after_t != before_t and not stat.S_ISDIR(after_t.st_mode): err('%r modified %r directly!\n' % (self.argv[2], t)) err('...you should update $3 (a temp file) instead of $1.\n') rv = 206 diff --git a/t/clean.do b/t/clean.do index 20f1ef3..27c473d 100644 --- a/t/clean.do +++ b/t/clean.do @@ -1,4 +1,4 @@ redo example/clean curse/clean deps/clean "space dir/clean" rm -f c c.c c.c.c c.c.c.b c.c.c.b.b d mode1 rm -f hello [by]ellow *.o *~ .*~ CC LD passfail - +rm -rf makedir \ No newline at end of file diff --git a/t/makedir.do b/t/makedir.do new file mode 100644 index 0000000..a110c2f --- /dev/null +++ b/t/makedir.do @@ -0,0 +1,2 @@ +[ -e "$1" ] && rmdir $1 +mkdir $1 diff --git a/t/test.do b/t/test.do index 9b94af4..898fd6c 100644 --- a/t/test.do +++ b/t/test.do @@ -1,4 +1,4 @@ redo-ifchange all ./hello >&2 redo deltest deltest2 test.args test2.args passfailtest \ - curse/test deps/test "space dir/test" modetest + curse/test deps/test "space dir/test" modetest makedir