}
func isModified(dep *Dep, tgt *Tgt) (
- modified bool, ourInode Inode, hshPrev Hash, err error,
+ modified bool, ourInode *Inode, hshPrev Hash, err error,
) {
if dep == nil {
return
var cmdName string
var args []string
if err = unix.Access(doFile.rel, unix.X_OK); err == nil {
- cmdName = doFileT
+ cmdName = doFile.a
args = make([]string, 0, 3)
} else {
cmdName = "/bin/sh"
line = scanner.Text()
if strings.HasPrefix(line, childStderrPrefix) {
line = line[len(childStderrPrefix):]
+ LogMutex.Lock()
os.Stderr.WriteString(StderrPrefix + line + "\n")
+ LogMutex.Unlock()
continue
}
if fdStderr != nil {
ts.FromTime(time.Now())
- LogMutex.Lock()
fmt.Fprintln(fdStderr, tai64n.Encode(ts[:]), line)
- LogMutex.Unlock()
}
if StderrSilent {
continue
// Was $1 touched?
if inode, err := inodeFromFileByPath(tgt.a); err == nil {
- if inodePrev == "" {
+ if inodePrev == nil {
runErr.Err = Err1WasTouched
errs <- runErr
return
// Determine what file we must process at last
var fd *os.File
+ var chmod fs.FileMode
if tmpExists {
fd, err = os.Open(tmpPath)
if err != nil {
goto Finish
}
defer fd.Close()
+ if fi, rerr := fd.Stat(); rerr == nil {
+ chmod = fi.Mode()
+ } else {
+ err = ErrLine(rerr)
+ goto Finish
+ }
} else if fiStdout.Size() > 0 {
fd = fdStdout
}
if err != nil {
goto Finish
}
+ if chmod != 0 {
+ err = ErrLine(os.Chmod(tgt.a, chmod))
+ if err != nil {
+ goto Finish
+ }
+ }
err = ErrLine(os.Chtimes(tgt.a, finished, finished))
if err != nil {
goto Finish