]> Cypherpunks.ru repositories - goredo.git/commitdiff
Output-less target as a dependency v0.12.0
authorSergey Matveev <stargrave@stargrave.org>
Tue, 12 Jan 2021 18:29:08 +0000 (21:29 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Tue, 12 Jan 2021 18:32:28 +0000 (21:32 +0300)
dep.go
doc/news.texi
t/goredo-deps.t
t/goredo-empty-dep.t [new file with mode: 0755]
usage.go

diff --git a/dep.go b/dep.go
index 0c5b6348740393340435a7c81a3d9c85b5274324..d7c874a95ea4d845592611a8e85377e0722b6af3 100644 (file)
--- a/dep.go
+++ b/dep.go
@@ -123,30 +123,34 @@ func writeDep(fdDep *os.File, cwd, tgt string) error {
        )
 }
 
-func writeDeps(fdDep *os.File, tgts []string) error {
+func writeDeps(fdDep *os.File, tgts []string) (err error) {
        if fdDep == nil {
                trace(CDebug, "no opened fdDep: %s", tgts)
                return nil
        }
        for _, tgt := range tgts {
-               if _, err := os.Stat(tgt); err == nil {
-                       tgtAbs, err := filepath.Abs(tgt)
-                       if err != nil {
-                               panic(err)
-                       }
-                       tgtDir := path.Join(Cwd, DirPrefix)
-                       tgtRel, err := filepath.Rel(tgtDir, tgtAbs)
-                       if err != nil {
-                               panic(err)
-                       }
-                       if err = writeDep(fdDep, tgtDir, tgtRel); err != nil {
-                               return err
-                       }
+               tgtAbs, err := filepath.Abs(tgt)
+               if err != nil {
+                       panic(err)
+               }
+               tgtDir := path.Join(Cwd, DirPrefix)
+               tgtRel, err := filepath.Rel(tgtDir, tgtAbs)
+               if err != nil {
+                       panic(err)
+               }
+               if _, errStat := os.Stat(tgt); errStat == nil {
+                       err = writeDep(fdDep, tgtDir, tgtRel)
                } else {
-                       trace(CDebug, "skipping dep record, can not stat: %s", tgt)
+                       trace(CDebug, "ifchange: %s <- %s (unexisting)", fdDep.Name(), tgtRel)
+                       err = recfileWrite(
+                               fdDep,
+                               recfile.Field{Name: "Type", Value: DepTypeIfchange},
+                               recfile.Field{Name: "Target", Value: tgtRel},
+                               recfile.Field{Name: "Ctime", Value: "0.0"},
+                       )
                }
        }
-       return nil
+       return
 }
 
 type DepInfo struct {
index 3504e46134375d0bc8f93a7db26d943c55cfe28d..8955eabef8abc3d33e5bb9706c1fb0f7e63df960 100644 (file)
@@ -1,9 +1,11 @@
 @node News
 @unnumbered News
 
-@anchor{Release 0.11.1}
-@section Release 0.11.1
+@anchor{Release 0.12.0}
+@section Release 0.12.0
 @itemize
+@item
+    Do not forget to save even output-less target as a dependency.
 @item
     @option{-debug} option renamed to shorter @option{-d}.
 @end itemize
index a0a58d50343a084e3cd7d14255de31ebb1857d15..2e3ca5e0f9eabb6435221daacf3c1ba71c7ba67b 100755 (executable)
@@ -6,6 +6,7 @@ test_description="Check that the following use-case won't rebuild everytime and
 
 tmp=`mktemp -d`
 trap "rm -fr $tmp" HUP PIPE INT QUIT TERM EXIT
+
 cd $tmp
 mkdir -p sub
 cat > default.html.do <<EOF
diff --git a/t/goredo-empty-dep.t b/t/goredo-empty-dep.t
new file mode 100755 (executable)
index 0000000..1b4a6d2
--- /dev/null
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+testname=`basename "$0"`
+test_description="Check that empty target is a dependency and always OOD"
+. $SHARNESS_TEST_SRCDIR/sharness.sh
+
+tmp=`mktemp -d`
+trap "rm -fr $tmp" HUP PIPE INT QUIT TERM EXIT
+cd $tmp
+
+echo > foo.do
+cat > bar.do <<EOF
+redo-ifchange foo
+echo bar
+EOF
+export REDO_NO_PROGRESS=1
+redo-ifchange bar
+stat1=`stat bar`
+redo-ifchange bar
+stat2=`stat bar`
+
+test_expect_success "bar rebuilds" '[ "$stat1" != "$stat2" ]'
+
+test_done
index af660db5ef1636d34910da8ee00bf68e6e5462ab..cbbb672702adebf54997499c15800d21c4ae128c 100644 (file)
--- a/usage.go
+++ b/usage.go
@@ -26,7 +26,7 @@ import (
 )
 
 const (
-       Version  = "0.11.1"
+       Version  = "0.12.0"
        Warranty = `This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, version 3 of the License.