X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=run.go;h=eb67304fea4de6fe8798c7e28823fdfbe71b6f9b;hb=6ef14f9de82e4a61532b84b149bde0c953d58a04;hp=c73d8b4517bbd29bcf0177ef72b1d7b77c6ed69a;hpb=67e92d5a298516292bbbee1f7714708cdc0766f8;p=goredo.git diff --git a/run.go b/run.go index c73d8b4..eb67304 100644 --- 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,