]> Cypherpunks.ru repositories - goredo.git/blobdiff - main.go
Relative paths to targets in outside directories
[goredo.git] / main.go
diff --git a/main.go b/main.go
index f466faa376813377582889cd955c8d3324fa3aa4..b5618e649916efac50dc6ca0d6668a330422f80a 100644 (file)
--- a/main.go
+++ b/main.go
@@ -18,7 +18,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 package main
 
 import (
-       "bufio"
        "crypto/rand"
        "flag"
        "fmt"
@@ -29,6 +28,7 @@ import (
        "path"
        "path/filepath"
        "strconv"
+       "strings"
 
        "go.cypherpunks.ru/recfile"
        "golang.org/x/sys/unix"
@@ -91,7 +91,6 @@ func main() {
                                log.Println(err)
                        }
                }
-               fmt.Println("no creating optional:", os.Args[0], "<- tai64nlocal")
                os.Exit(rc)
        }
        log.SetFlags(0)
@@ -106,7 +105,9 @@ func main() {
        NoSync = os.Getenv(EnvNoSync) == "1"
 
        TopDir = os.Getenv(EnvTopDir)
-       if TopDir != "" {
+       if TopDir == "" {
+               TopDir = "/"
+       } else {
                TopDir, err = filepath.Abs(TopDir)
                if err != nil {
                        panic(err)
@@ -143,10 +144,14 @@ func main() {
        if Debug || os.Getenv(EnvLogPid) == "1" {
                MyPid = os.Getpid()
        }
+       var traced bool
+       if *flagTraceAll {
+               mustSetenv(EnvTrace, "1")
+       }
        if *flagTrace {
-               Trace = true
+               traced = true
        } else {
-               Trace = os.Getenv(EnvTrace) == "1"
+               traced = os.Getenv(EnvTrace) == "1"
        }
 
        // Those are internal envs
@@ -176,6 +181,7 @@ func main() {
                        raw[0:4], raw[4:6], raw[6:8], raw[8:10], raw[10:],
                )
        }
+       statusInit()
 
        tgts := flag.Args()
        if len(tgts) == 0 {
@@ -190,13 +196,13 @@ CmdSwitch:
        switch cmdName {
        case "redo":
                for _, tgt := range tgts {
-                       ok, err = ifchange([]string{tgt}, true)
+                       ok, err = ifchange([]string{tgt}, true, traced)
                        if err != nil || !ok {
                                break
                        }
                }
        case "redo-ifchange":
-               ok, err = ifchange(tgts, false)
+               ok, err = ifchange(tgts, false, traced)
                writeDeps(fdDep, tgts)
        case "redo-ifcreate":
                if fdDep == nil {
@@ -248,9 +254,8 @@ CmdSwitch:
                        break
                }
                os.Remove(fdTmp.Name())
-               var doFile string
                cwd, tgt := cwdAndTgt(tgts[0])
-               doFile, _, err = findDo(fdTmp, cwd, tgt)
+               doFile, upLevels, err := findDo(fdTmp, cwd, tgt)
                if err != nil {
                        break
                }
@@ -269,11 +274,11 @@ CmdSwitch:
                        }
                        fmt.Println(cwdMustRel(cwd, m["Target"]))
                }
-               ok = doFile != ""
-       case "tai64nlocal":
-               bw := bufio.NewWriter(os.Stdout)
-               err = tai64nLocal(bw, os.Stdin)
-               bw.Flush()
+               if doFile == "" {
+                       ok = false
+               } else {
+                       fmt.Println(path.Join(strings.Repeat("..", upLevels), doFile))
+               }
        default:
                log.Fatalln("unknown command", cmdName)
        }