run.go | 13 +++++++++++++ t/goredo-$1-touch.t | 3 ++- t/goredo-already-existing.t | 24 ++++++++++++++++++++++++ diff --git a/run.go b/run.go index 76555e150c48d1e4952c59369c572cfbcd6b1de60b6d875088daf23eaa63d732..2a714e065242e578f60d4963f11797dda456e9f3be16de6ccb05b7cf0a434996 100644 --- a/run.go +++ b/run.go @@ -298,6 +298,19 @@ Jobs.Done() }() return nil } + if inodePrev == nil && FileExists(tgt.a) { + lockRelease() + if StopIfMod { + return fmt.Errorf("%s already existing", tgt) + } + Jobs.Add(1) + tracef(CWarn, "%s already existing: not redoing", tgt) + go func() { + errs <- nil + Jobs.Done() + }() + return nil + } dep = nil // Start preparing .dep diff --git a/t/goredo-$1-touch.t b/t/goredo-$1-touch.t index c44dcf703b97ec84ea2dc9f1dcc62085351386dc44823b28bcfdd51d2e2e6e6f..a2bdb68fe4d8be2783ab9a707a27914336a014507d30de5b60f9c7cf883965d1 100755 --- a/t/goredo-$1-touch.t +++ b/t/goredo-$1-touch.t @@ -5,6 +5,7 @@ . $SHARNESS_TEST_SRCDIR/sharness.sh export REDO_TOP_DIR="`pwd`" REDO_NO_PROGRESS=1 echo touch \$1 >foo.do -test_expect_success "it fails" 'redo foo ; [ $? = 1 ]' +test_expect_success "it fails" 'redo foo 2>out ; [ $? = 1 ]' +test_expect_success "message" 'grep -q "touched" out' test_done diff --git a/t/goredo-already-existing.t b/t/goredo-already-existing.t new file mode 100755 index 0000000000000000000000000000000000000000..fb358f6c51cd8b4bde8eb6c0adfe32a7de136ca4127a34c0acd51bbf19b5281c --- /dev/null +++ b/t/goredo-already-existing.t @@ -0,0 +1,24 @@ +#!/bin/sh + +test_description="Check failing if \$1 already exists" +. $SHARNESS_TEST_SRCDIR/sharness.sh +export REDO_TOP_DIR="`pwd`" REDO_NO_PROGRESS=1 + +echo echo ok >foo.do +touch foo +test_expect_success "does not fail" "redo foo 2>out" +test_expect_success "message" 'grep -q "already existing" out' + +export REDO_STOP_IF_MODIFIED=1 +test_expect_success "must fail" 'redo foo 2>out ; [ $? = 1 ]' +unset REDO_STOP_IF_MODIFIED +test_expect_success "message" 'grep -q "already existing" out' + +rm foo +test_expect_success "ok" "redo foo" + +echo overwrite >foo +test_expect_success "externally modified" "redo foo 2>out" +test_expect_success "message" 'grep -q "externally modified" out' + +test_done