]> Cypherpunks.ru repositories - goredo.git/blobdiff - run.go
redo-stamp with REDO_NO_HASH workability fix
[goredo.git] / run.go
diff --git a/run.go b/run.go
index c73d8b4517bbd29bcf0177ef72b1d7b77c6ed69a..eb67304fea4de6fe8798c7e28823fdfbe71b6f9b 100644 (file)
--- a/run.go
+++ b/run.go
@@ -47,6 +47,7 @@ const (
        EnvStderrKeep   = "REDO_LOGS"
        EnvStderrSilent = "REDO_SILENT"
        EnvNoSync       = "REDO_NO_SYNC"
+       EnvStampPrev    = "REDO_STAMP_PREV"
 
        RedoDir    = ".redo"
        LockSuffix = ".lock"
@@ -61,6 +62,7 @@ var (
        StderrKeep   bool = false
        StderrSilent bool = false
        StderrPrefix string
+       StampPrev    string
 
        flagTrace        = flag.Bool("x", false, "trace current target (sh -x) (set REDO_TRACE=1 for others too)")
        flagStderrKeep   = flag.Bool("logs", false, "keep job's stderr (REDO_LOGS=1)")
@@ -162,7 +164,7 @@ func syncDir(dir string) error {
        return err
 }
 
-func runScript(tgtOrig string, errs chan error) error {
+func runScript(tgtOrig string, errs chan error, stampPrev string) error {
        cwd, tgt := cwdAndTgt(tgtOrig)
        redoDir := path.Join(cwd, RedoDir)
        if err := mkdirs(redoDir); err != nil {
@@ -199,20 +201,21 @@ func runScript(tgtOrig string, errs chan error) error {
                        unix.Flock(int(fdLock.Fd()), unix.LOCK_EX)
                        lockRelease()
                        trace(CDebug, "waiting done: %s", tgtOrig)
-                       var builtNow bool
+                       var depInfo *DepInfo
                        fdDep, err := os.Open(path.Join(redoDir, tgt+DepSuffix))
                        if err != nil {
                                if os.IsNotExist(err) {
-                                       err = errors.New("was not built")
+                                       err = errors.New("was not built: no .dep")
                                }
                                goto Finish
                        }
-                       builtNow, _, err = isBuiltNow(fdDep)
+                       defer fdDep.Close()
+                       depInfo, err = depRead(fdDep)
                        if err != nil {
                                goto Finish
                        }
-                       if !builtNow {
-                               err = errors.New("was not built")
+                       if depInfo.build != BuildUUID {
+                               err = errors.New("was not built: build differs")
                        }
                Finish:
                        if err != nil {
@@ -343,6 +346,11 @@ func runScript(tgtOrig string, errs chan error) error {
        cmd.Env = append(os.Environ(), fmt.Sprintf("%s=%d", EnvLevel, Level+1))
        cmd.Env = append(cmd.Env, fmt.Sprintf("%s=%s", EnvDirPrefix, dirPrefix))
        cmd.Env = append(cmd.Env, fmt.Sprintf("%s=%s", EnvBuildUUID, BuildUUID))
+
+       if stampPrev != "" {
+               cmd.Env = append(cmd.Env, fmt.Sprintf("%s=%s", EnvStampPrev, stampPrev))
+       }
+
        childStderrPrefix := tempsuffix()
        cmd.Env = append(cmd.Env, fmt.Sprintf(
                "%s=%s", EnvStderrPrefix, childStderrPrefix,