]> Cypherpunks.ru repositories - goredo.git/blobdiff - run.go
Warn simultaneous ifcreate/ifchange usage
[goredo.git] / run.go
diff --git a/run.go b/run.go
index ea14641a9304bd85adbee7c988cebdcc3059242c..0b77d499613f5549704b528fbfff49b440282ebd 100644 (file)
--- a/run.go
+++ b/run.go
@@ -322,7 +322,7 @@ func runScript(tgtOrig string, errs chan error, traced bool) error {
                runErr.DoFile = doFileRelPath
        }
 
-       if err = writeDep(fdDep, cwdOrig, doFileRelPath); err != nil {
+       if err = depWrite(fdDep, cwdOrig, doFileRelPath); err != nil {
                cleanup()
                return TgtError{tgtOrig, err}
        }
@@ -683,7 +683,7 @@ func runScript(tgtOrig string, errs chan error, traced bool) error {
                        fd = fdStdout
                }
 
-               // Do we need to ifcreate it, of ifchange with renaming?
+               // Do we need to ifcreate it, or ifchange with renaming?
                if fd == nil {
                        os.Remove(path.Join(cwdOrig, tgt))
                        err = ifcreate(fdDep, tgt)
@@ -707,7 +707,7 @@ func runScript(tgtOrig string, errs chan error, traced bool) error {
                                        goto Finish
                                }
                        }
-                       err = writeDep(fdDep, cwdOrig, tgt)
+                       err = depWrite(fdDep, cwdOrig, tgt)
                        if err != nil {
                                goto Finish
                        }
@@ -731,6 +731,26 @@ func runScript(tgtOrig string, errs chan error, traced bool) error {
                                goto Finish
                        }
                }
+
+               // Post-commit .rec sanitizing
+               fdDep.Close()
+               if fdDepR, err := os.Open(fdDepPath); err == nil {
+                       depInfo, err := depRead(fdDepR)
+                       fdDepR.Close()
+                       if err != nil {
+                               goto Finish
+                       }
+                       ifchangeSeen := make(map[string]struct{}, len(depInfo.ifchanges))
+                       for _, dep := range depInfo.ifchanges {
+                               ifchangeSeen[dep["Target"]] = struct{}{}
+                       }
+                       for _, dep := range depInfo.ifcreates {
+                               if _, exists := ifchangeSeen[dep]; exists {
+                                       tracef(CWarn, "simultaneous ifcreate and ifchange records: %s", tgt)
+                               }
+                       }
+               }
+
        Finish:
                runErr.Err = err
                errs <- runErr