X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=run.go;h=0178d726b9d9b476dbd01d1db45e713d0f5c80c0;hb=4274dce3366cee45bfaccbe5ca340ce6efe68e00;hp=b836ad9982631d25b70c635f8d47daa01f2d56a8;hpb=651c41ddfbc19069cb0e56abb6fe4f6b3e8791ae;p=goredo.git diff --git a/run.go b/run.go index b836ad9..0178d72 100644 --- a/run.go +++ b/run.go @@ -73,6 +73,9 @@ var ( flagStderrSilent *bool TracedAll bool + + RunningProcs = map[int]*os.Process{} + RunningProcsM sync.Mutex ) func init() { @@ -140,7 +143,7 @@ func isModified(cwd, redoDir, tgt string) (bool, *Inode, error) { } return false, nil, err } - if m["Target"] != tgt { + if m["Type"] != DepTypeIfchange || m["Target"] != tgt { continue } fd, err := os.Open(path.Join(cwd, tgt)) @@ -457,10 +460,14 @@ func runScript(tgtOrig string, errs chan error, traced bool) error { ); err == nil { fields := []recfile.Field{ {Name: "Build", Value: BuildUUID}, - {Name: "PID", Value: strconv.Itoa(cmd.Process.Pid)}, {Name: "PPID", Value: strconv.Itoa(os.Getpid())}, {Name: "Cwd", Value: cwd}, } + if cmd.Process != nil { + fields = append(fields, recfile.Field{ + Name: "PID", Value: strconv.Itoa(cmd.Process.Pid), + }) + } ts := new(tai64n.TAI64N) ts.FromTime(started) fields = append(fields, @@ -475,7 +482,7 @@ func runScript(tgtOrig string, errs chan error, traced bool) error { }) fields = append(fields, recfile.Field{Name: "Cmd", Value: cmdName}) for _, arg := range args { - fields = append(fields, recfile.Field{Name: "Cmd", Value: arg}) + fields = append(fields, recfile.Field{Name: "Arg", Value: arg}) } for _, env := range cmd.Env { fields = append(fields, recfile.Field{Name: "Env", Value: env}) @@ -542,6 +549,9 @@ func runScript(tgtOrig string, errs chan error, traced bool) error { errs <- runErr return } + RunningProcsM.Lock() + RunningProcs[cmd.Process.Pid] = cmd.Process + RunningProcsM.Unlock() pid := fmt.Sprintf("[%d]", cmd.Process.Pid) trace(CDebug, "%s runs %s", tgtOrig, pid) @@ -578,6 +588,9 @@ func runScript(tgtOrig string, errs chan error, traced bool) error { // Wait for job completion <-stderrTerm err = cmd.Wait() + RunningProcsM.Lock() + delete(RunningProcs, cmd.Process.Pid) + RunningProcsM.Unlock() finished = time.Now() runErr.Finished = &finished if err != nil {