doc/news.texi | 8 ++++++++ run.go | 23 +++++++++++++++++++++++ t/goredo-$1-touch.t | 11 +++++++++++ usage.go | 2 +- diff --git a/doc/news.texi b/doc/news.texi index e5c2ec8e4e315ff592c87bd38b31efa6083569f0dfadb22e68f54370e877892f..1b730f3624454124a1e98b17f3a5f25622999fbc176e6000e17ec5864af2296d 100644 --- a/doc/news.texi +++ b/doc/news.texi @@ -1,6 +1,14 @@ @node News @unnumbered News +@anchor{Release 1_15_0} +@section Release 1.15.0 +@itemize +@item + Explicitly check if @code{$1} target is touched and then fail. + Previously we check if @code{$1} was only altered. +@end itemize + @anchor{Release 1_14_0} @section Release 1.14.0 @itemize diff --git a/run.go b/run.go index 423bb7756667a61a14a25d097f6dafdf589205a5ba845c9753d316478d5acfd9..674efa6ea3668ff5be867b068afaa7ad5c8a206dc2235adfc9c9503d224a8724 100644 --- a/run.go +++ b/run.go @@ -587,6 +587,29 @@ return } // Was $1 touched? + if fd, err := os.Open(path.Join(cwdOrig, tgt)); err == nil { + errTouched := errors.New("$1 was explicitly touched") + if inodePrev == nil { + fd.Close() + runErr.Err = errTouched + errs <- runErr + return + } else { + inode, err := inodeFromFile(fd) + fd.Close() + if err != nil { + runErr.Err = err + errs <- runErr + return + } + if !inode.Equals(inodePrev) { + runErr.Err = errTouched + errs <- runErr + return + } + } + } + if inodePrev != nil { if fd, err := os.Open(path.Join(cwdOrig, tgt)); err == nil { inode, err := inodeFromFile(fd) diff --git a/t/goredo-$1-touch.t b/t/goredo-$1-touch.t new file mode 100755 index 0000000000000000000000000000000000000000..c20202b4c2f7fcb10774cb0317cfff8bfb94506c39851d2f02ca0be9140004d8 --- /dev/null +++ b/t/goredo-$1-touch.t @@ -0,0 +1,11 @@ +#!/bin/sh + +testname=`basename "$0"` +test_description="Check failing if unexistent \$1 is touched" +. $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_done diff --git a/usage.go b/usage.go index 8337967a1514124342f44d92981bc448e464b6dc74d1e06718399e3c16485b03..077a8b80b27bcf85c23c864a2df14828c90d4dd45a0b764f1ee29aad39ef94e7 100644 --- a/usage.go +++ b/usage.go @@ -24,7 +24,7 @@ "os" ) const ( - Version = "1.14.0" + Version = "1.15.0" Warranty = `Copyright (C) 2020-2021 Sergey Matveev This program is free software: you can redistribute it and/or modify