RedoDir = ".redo"
LockSuffix = ".lock"
- DepSuffix = ".dep"
+ DepSuffix = ".rec"
TmpPrefix = ".redo."
LogSuffix = ".log"
)
fdDep, err := os.Open(path.Join(redoDir, tgt+DepSuffix))
if err != nil {
if os.IsNotExist(err) {
- err = errors.New("was not built: no .dep")
+ err = errors.New("was not built: no .rec")
}
goto Finish
}
return nil
}
- // Start preparing .dep
+ // Start preparing .rec
fdDep, err := tempfile(redoDir, tgt+DepSuffix)
if err != nil {
lockRelease()
return TgtErr{tgtOrig, err}
}
+ fdDepPath := fdDep.Name()
cleanup := func() {
lockRelease()
fdDep.Close()
cleanup()
return TgtErr{tgtOrig, err}
}
+ fdDep.Close()
trace(CWait, "%s", runErr.Name())
// Prepare command line
cleanup()
return TgtErr{tgtOrig, err}
}
- tmpPath := fdStdout.Name() + ".3" // and for $3
+ stdoutPath := fdStdout.Name()
+ fdStdout.Close()
+ tmpPath := stdoutPath + ".3" // and for $3
tmpPathRel, err := filepath.Rel(cwd, tmpPath)
if err != nil {
panic(err)
cmd := exec.Command(cmdName, args...)
cmd.Dir = cwd
- cmd.Stdout = fdStdout
// cmd.Stdin reads from /dev/null by default
cmd.Env = append(os.Environ(), fmt.Sprintf("%s=%d", EnvLevel, Level+1))
cmd.Env = append(cmd.Env, fmt.Sprintf("%s=%s", EnvDirPrefix, dirPrefix))
))
fdNum := 0
- cmd.ExtraFiles = append(cmd.ExtraFiles, fdDep)
- cmd.Env = append(cmd.Env, fmt.Sprintf("%s=%d", EnvDepFd, 3+fdNum))
+ cmd.ExtraFiles = append(cmd.ExtraFiles, FdOODTgts)
+ cmd.Env = append(cmd.Env, fmt.Sprintf("%s=%d", EnvOODTgtsFd, 3+fdNum))
+ fdNum++
+ cmd.ExtraFiles = append(cmd.ExtraFiles, FdOODTgtsLock)
+ cmd.Env = append(cmd.Env, fmt.Sprintf("%s=%d", EnvOODTgtsLockFd, 3+fdNum))
fdNum++
if FdStatus == nil {
}
// Preparing stderr
- stderr, err := cmd.StderrPipe()
- if err != nil {
- panic(err)
- }
var fdStderr *os.File
if StderrKeep {
fdStderr, err = os.OpenFile(
if FdStatus != nil {
FdStatus.Write([]byte{StatusRun})
}
+
+ started := time.Now()
+ runErr.Started = &started
+ fdStdout, err = os.OpenFile(stdoutPath, os.O_RDWR, os.FileMode(0666))
+ if err != nil {
+ runErr.Err = err
+ errs <- runErr
+ return
+ }
+ cmd.Stdout = fdStdout
+ fdDep, err = os.OpenFile(fdDepPath, os.O_WRONLY|os.O_APPEND, os.FileMode(0666))
+ if err != nil {
+ runErr.Err = err
+ errs <- runErr
+ return
+ }
+ cmd.ExtraFiles = append(cmd.ExtraFiles, fdDep)
+ cmd.Env = append(cmd.Env, fmt.Sprintf("%s=%d", EnvDepFd, 3+fdNum))
+ fdNum++
+
defer func() {
jsRelease(shCtx)
lockRelease()
}
Jobs.Done()
}()
- started := time.Now()
- runErr.Started = &started
- err := cmd.Start()
+ stderr, err := cmd.StderrPipe()
+ if err != nil {
+ runErr.Err = err
+ errs <- runErr
+ return
+ }
+ started = time.Now()
+ err = cmd.Start()
if err != nil {
runErr.Err = err
errs <- runErr
}
}
- // Commit .dep
+ // Commit .rec
if !NoSync {
err = fdDep.Sync()
if err != nil {