]> Cypherpunks.ru repositories - goredo.git/blobdiff - run.go
Correct relative dependency paths
[goredo.git] / run.go
diff --git a/run.go b/run.go
index a4aeb8738206b7bac7030d28dce67e07ffb74714..57401ce627a54c83d6bfac2320c00a1ccc06a655 100644 (file)
--- a/run.go
+++ b/run.go
@@ -42,6 +42,7 @@ import (
 const (
        EnvDepFd        = "REDO_DEP_FD"
        EnvDirPrefix    = "REDO_DIRPREFIX"
+       EnvDepCwd       = "REDO_DEP_CWD"
        EnvBuildUUID    = "REDO_BUILD_UUID"
        EnvStderrPrefix = "REDO_STDERR_PREFIX"
        EnvTrace        = "REDO_TRACE"
@@ -89,7 +90,7 @@ func (e *RunErr) Name() string {
        if e.Finished == nil {
                return name
        }
-       return fmt.Sprintf("%s (%fsec)", name, e.Finished.Sub(*e.Started).Seconds())
+       return fmt.Sprintf("%s (%.3fs)", name, e.Finished.Sub(*e.Started).Seconds())
 }
 
 func (e RunErr) Error() string {
@@ -362,18 +363,6 @@ func runScript(tgtOrig string, errs chan error, traced bool) error {
                fdNum++
        }
 
-       if JSR == nil {
-               // infinite jobs
-               cmd.Env = append(cmd.Env, fmt.Sprintf("%s=NO", EnvJSFd))
-       } else {
-               cmd.ExtraFiles = append(cmd.ExtraFiles, JSR)
-               cmd.ExtraFiles = append(cmd.ExtraFiles, JSW)
-               cmd.Env = append(cmd.Env, fmt.Sprintf(
-                       "%s=%d,%d", EnvJSFd, 3+fdNum+0, 3+fdNum+1,
-               ))
-               fdNum += 2
-       }
-
        // Preparing stderr
        var fdStderr *os.File
        if StderrKeep {
@@ -396,7 +385,21 @@ func runScript(tgtOrig string, errs chan error, traced bool) error {
 
        Jobs.Add(1)
        go func() {
-               jsAcquire(shCtx)
+               jsToken := jsAcquire(shCtx)
+               if JSR == nil {
+                       // infinite jobs
+                       cmd.Env = append(cmd.Env, fmt.Sprintf("%s=NO", EnvJobs))
+               } else {
+                       cmd.ExtraFiles = append(cmd.ExtraFiles, JSR)
+                       cmd.ExtraFiles = append(cmd.ExtraFiles, JSW)
+                       cmd.Env = append(cmd.Env, fmt.Sprintf(
+                               "%s=%s %s%d,%d",
+                               MakeFlagsName, MakeFlags, MakeJSArg, 3+fdNum+0, 3+fdNum+1,
+                       ))
+                       fdNum += 2
+                       cmd.Env = append(cmd.Env, fmt.Sprintf("%s=%d", EnvJSToken, jsToken))
+               }
+
                if FdStatus != nil {
                        FdStatus.Write([]byte{StatusRun})
                }
@@ -419,9 +422,10 @@ func runScript(tgtOrig string, errs chan error, traced bool) error {
                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() {
-                       jsRelease(shCtx)
+                       jsRelease(shCtx, jsToken)
                        lockRelease()
                        fdDep.Close()
                        fdStdout.Close()
@@ -468,7 +472,7 @@ func runScript(tgtOrig string, errs chan error, traced bool) error {
                                if fdStderr != nil {
                                        ts.FromTime(time.Now())
                                        LogMutex.Lock()
-                                       fmt.Fprintf(fdStderr, "%s %s\n", tai64n.Encode(ts[:]), line)
+                                       fmt.Fprintln(fdStderr, tai64n.Encode(ts[:]), line)
                                        LogMutex.Unlock()
                                }
                                if StderrSilent {