import (
"bufio"
- "bytes"
"crypto/rand"
"encoding/hex"
"errors"
}
func isModified(depInfo *DepInfo, tgt *Tgt) (
- modified bool, ourInode *Inode, hshPrev []byte, err error,
+ modified bool, ourInode *Inode, hshPrev Hash, err error,
) {
if depInfo == nil {
return
return TgtError{tgt, ErrLine(err)}
}
fdDepOpened := true
- fdDepPath := fdDep.Name()
+ fdDepExists := true
cleanup := func() {
lockRelease()
if fdDepOpened {
fdDep.Close()
}
- os.Remove(fdDep.Name())
+ if fdDepExists {
+ os.Remove(fdDep.Name())
+ }
}
if _, err = recfile.NewWriter(fdDep).WriteFields(
recfile.Field{Name: "Build", Value: BuildUUID},
}
}
- if err = depWrite(fdDep, tgt.h, doFile, nil); err != nil {
+ if err = depWrite(fdDep, tgt.h, doFile, ""); err != nil {
cleanup()
return TgtError{tgt, ErrLine(err)}
}
cleanup()
return TgtError{tgt, ErrLine(err)}
}
- stdoutPath := fdStdout.Name()
fdStdout.Close()
- tmpPath := stdoutPath + ".3" // and for $3
+ tmpPath := fdStdout.Name() + ".3" // and for $3
tmpPathRel := mustRel(cwd, tmpPath)
args = append(
args,
var exitErr *exec.ExitError
started := time.Now()
runErr.Started = &started
- fdStdout, err = os.OpenFile(stdoutPath, os.O_RDWR, os.FileMode(0666))
+ fdStdout, err = os.OpenFile(fdStdout.Name(), os.O_RDWR, os.FileMode(0666))
if err != nil {
if fdStderr != nil {
fdStderr.Close()
return
}
cmd.Stdout = fdStdout
- fdDep, err = os.OpenFile(fdDepPath, os.O_WRONLY|os.O_APPEND, os.FileMode(0666))
+ fdDep, err = os.OpenFile(fdDep.Name(), os.O_WRONLY|os.O_APPEND, os.FileMode(0666))
if err != nil {
if fdStderr != nil {
fdStderr.Close()
}
}
lockRelease()
- os.Remove(fdDep.Name())
+ if fdDepExists {
+ os.Remove(fdDep.Name())
+ }
os.Remove(fdStdout.Name())
os.Remove(tmpPath)
if FdStatus != nil {
goto Finish
}
} else {
- var hsh []byte
- if hshPrev != nil {
+ var hsh Hash
+ if hshPrev != "" {
_, err = fd.Seek(0, io.SeekStart)
if err != nil {
err = ErrLine(err)
err = ErrLine(err)
goto Finish
}
- if bytes.Equal(hsh, hshPrev) {
+ if hsh == hshPrev {
tracef(CDebug, "%s has same hash, not renaming", tgt)
err = ErrLine(os.Remove(fd.Name()))
if err != nil {
if err != nil {
goto Finish
}
+ fdDepExists = false
if !NoSync {
err = ErrLine(syncDir(redoDir))
if err != nil {