]> Cypherpunks.ru repositories - goredo.git/blobdiff - run.go
Use more shorter Cwd-relative paths
[goredo.git] / run.go
diff --git a/run.go b/run.go
index bea836661746b36060927e9c604d5c61c02b1e94..7fa4deae08c35b428111e5773d5744eca32417cd 100644 (file)
--- a/run.go
+++ b/run.go
@@ -21,7 +21,6 @@ package main
 
 import (
        "bufio"
-       "bytes"
        "crypto/rand"
        "encoding/hex"
        "errors"
@@ -112,7 +111,7 @@ type RunError struct {
 func (e *RunError) Name() string {
        var name string
        if e.DoFile == "" {
-               name = e.Tgt.String()
+               name = e.Tgt.rel
        } else {
                name = fmt.Sprintf("%s (%s)", e.Tgt, e.DoFile)
        }
@@ -134,7 +133,7 @@ func mkdirs(pth string) error {
 }
 
 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
@@ -304,13 +303,15 @@ func runScript(tgt *Tgt, errs chan error, forced, traced bool) error {
                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},
@@ -349,11 +350,11 @@ func runScript(tgt *Tgt, errs chan error, forced, traced bool) error {
                doFile = NewTgt(path.Join(ups...))
                if strings.HasPrefix(doFile.t, "default.") {
                        basename = basename[:len(basename)-(len(doFile.t)-len("default.")-len(".do"))-1]
-                       runErr.DoFile = doFile.String()
+                       runErr.DoFile = doFile.rel
                }
        }
 
-       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)}
        }
@@ -364,7 +365,7 @@ func runScript(tgt *Tgt, errs chan error, forced, traced bool) error {
        // Prepare command line
        var cmdName string
        var args []string
-       if err = unix.Access(doFile.String(), unix.X_OK); err == nil {
+       if err = unix.Access(doFile.rel, unix.X_OK); err == nil {
                cmdName = doFile.t
                args = make([]string, 0, 3)
        } else {
@@ -383,9 +384,8 @@ func runScript(tgt *Tgt, errs chan error, forced, traced bool) error {
                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,
@@ -475,7 +475,7 @@ func runScript(tgt *Tgt, errs chan error, forced, traced bool) error {
                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()
@@ -485,7 +485,7 @@ func runScript(tgt *Tgt, errs chan error, forced, traced bool) error {
                        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()
@@ -582,7 +582,9 @@ func runScript(tgt *Tgt, errs chan error, forced, traced bool) error {
                                }
                        }
                        lockRelease()
-                       os.Remove(fdDep.Name())
+                       if fdDepExists {
+                               os.Remove(fdDep.Name())
+                       }
                        os.Remove(fdStdout.Name())
                        os.Remove(tmpPath)
                        if FdStatus != nil {
@@ -663,11 +665,6 @@ func runScript(tgt *Tgt, errs chan error, forced, traced bool) error {
                                errs <- runErr
                                return
                        }
-                       if err != nil {
-                               runErr.Err = err
-                               errs <- runErr
-                               return
-                       }
                        if !inode.Equals(inodePrev) {
                                runErr.Err = Err1WasTouched
                                errs <- runErr
@@ -719,8 +716,8 @@ func runScript(tgt *Tgt, errs chan error, forced, traced bool) error {
                                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)
@@ -731,7 +728,7 @@ func runScript(tgt *Tgt, errs chan error, forced, traced bool) error {
                                        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 {
@@ -788,6 +785,7 @@ func runScript(tgt *Tgt, errs chan error, forced, traced bool) error {
                if err != nil {
                        goto Finish
                }
+               fdDepExists = false
                if !NoSync {
                        err = ErrLine(syncDir(redoDir))
                        if err != nil {