From bc7d703f9a123395144adf394c27e87740ff5e72 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Thu, 30 Sep 2021 13:17:49 +0300 Subject: [PATCH] Explicitly check if $1 unexpectedly appears --- doc/news.texi | 8 ++++++++ run.go | 23 +++++++++++++++++++++++ t/goredo-$1-touch.t | 11 +++++++++++ usage.go | 2 +- 4 files changed, 43 insertions(+), 1 deletion(-) create mode 100755 t/goredo-$1-touch.t diff --git a/doc/news.texi b/doc/news.texi index e4016ca..ab7b9a1 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 ca8eebb..f356d81 100644 --- a/run.go +++ b/run.go @@ -587,6 +587,29 @@ func runScript(tgtOrig string, errs chan error, traced bool) error { } // 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 0000000..0d73b02 --- /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 4e49c2b..cb4c756 100644 --- a/usage.go +++ b/usage.go @@ -24,7 +24,7 @@ import ( ) 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 -- 2.44.0