}
}
build, err := depReadBuild(path.Join(redoDir, tgt+DepSuffix))
- if err != nil {
+ if err == nil {
+ if build != BuildUUID {
+ err = errors.New("was not built: build differs")
+ }
+ } else {
if errors.Is(err, fs.ErrNotExist) {
err = errors.New("was not built: no .rec")
}
- goto Finish
}
- if build != BuildUUID {
- err = errors.New("was not built: build differs")
- }
- Finish:
if err != nil {
err = TgtError{tgtOrig, err}
- fdLock.Close()
}
errs <- err
}()
return nil
}
+ // It scans the whole .rec file while searching for the single target,
+ // but that one is always located at the very end
depInfo, err := depRead(path.Join(redoDir, tgt+DepSuffix))
if err != nil {
if errors.Is(err, fs.ErrNotExist) {
lockRelease()
return TgtError{tgtOrig, ErrLine(err)}
}
+ fdDepOpened := true
fdDepPath := fdDep.Name()
cleanup := func() {
lockRelease()
- fdDep.Close()
+ if fdDepOpened {
+ fdDep.Close()
+ }
os.Remove(fdDep.Name())
}
if _, err = recfile.NewWriter(fdDep).WriteFields(
return TgtError{tgtOrig, ErrLine(err)}
}
fdDep.Close()
+ fdDepOpened = false
tracef(CWait, "%s", runErr.Name())
// Prepare command line
errs <- runErr
return
}
+ fdDepOpened = true
cmd.ExtraFiles = append(cmd.ExtraFiles, fdDep)
cmd.Env = append(cmd.Env, fmt.Sprintf("%s=%d", EnvDepFd, 3+fdNum))
fdNum++
cmd.Env = append(cmd.Env, fmt.Sprintf("%s=%s", EnvDepCwd, cwd))
defer func() {
- fdDep.Close()
+ if fdDepOpened {
+ fdDep.Close()
+ }
fdStdout.Close()
if fdStderr != nil {
fdStderr.Close()
}
}
fdDep.Close()
+ fdDepOpened = false
// Post-commit .rec sanitizing
if depInfo, err := depRead(fdDepPath); err == nil {