import (
"bufio"
+ "crypto/rand"
+ "encoding/hex"
"errors"
"flag"
"fmt"
}
func mkdirs(pth string) error {
- if _, err := os.Stat(pth); err == nil {
+ if FileExists(pth) {
return nil
}
return os.MkdirAll(pth, os.FileMode(0777))
if m["Type"] != DepTypeIfchange || m["Target"] != tgt {
continue
}
- fd, err := os.Open(path.Join(cwd, tgt))
+ ourInode, err = inodeFromFileByPath(path.Join(cwd, tgt))
if err != nil {
if os.IsNotExist(err) {
return false, nil, "", nil
}
return false, nil, "", err
}
- ourInode, err = inodeFromFile(fd)
- fd.Close()
- if err != nil {
- return false, nil, "", err
- }
theirInode, err := inodeFromRec(m)
if err != nil {
return false, nil, "", err
cmd.Env = append(cmd.Env, fmt.Sprintf("%s=%s", EnvDirPrefix, dirPrefix))
cmd.Env = append(cmd.Env, fmt.Sprintf("%s=%s", EnvBuildUUID, BuildUUID))
- childStderrPrefix := tempsuffix()
+ childStderrPrefixRaw := make([]byte, 8)
+ if _, err = io.ReadFull(rand.Reader, childStderrPrefixRaw); err != nil {
+ panic(err)
+ }
+ childStderrPrefix := hex.EncodeToString(childStderrPrefixRaw)
cmd.Env = append(cmd.Env, fmt.Sprintf(
"%s=%s", EnvStderrPrefix, childStderrPrefix,
))
}
// Was $1 touched?
- if fd, err := os.Open(path.Join(cwdOrig, tgt)); err == nil {
+ if inode, err := inodeFromFileByPath(path.Join(cwdOrig, tgt)); err == nil {
if inodePrev == nil {
- fd.Close()
runErr.Err = Err1WasTouched
errs <- runErr
return
}
- inode, err := inodeFromFile(fd)
- fd.Close()
if err != nil {
runErr.Err = err
errs <- runErr
}
if inodePrev != nil {
- if fd, err := os.Open(path.Join(cwdOrig, tgt)); err == nil {
- inode, err := inodeFromFile(fd)
- fd.Close()
- if err == nil && !inode.Equals(inodePrev) {
+ if inode, err := inodeFromFileByPath(path.Join(cwdOrig, tgt)); err == nil {
+ if !inode.Equals(inodePrev) {
runErr.Err = Err1WasTouched
errs <- runErr
return