X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=main.go;h=b5618e649916efac50dc6ca0d6668a330422f80a;hb=0151c27b27d1ff53cdf92488c412ae5cb01c3054;hp=42d83beb0fddb14f15a3f5addb8181b5c362c7f1;hpb=634ee31ae35a2eaac517e0ffa1b7caede4b27ac5;p=goredo.git diff --git a/main.go b/main.go index 42d83be..b5618e6 100644 --- a/main.go +++ b/main.go @@ -28,6 +28,7 @@ import ( "path" "path/filepath" "strconv" + "strings" "go.cypherpunks.ru/recfile" "golang.org/x/sys/unix" @@ -77,12 +78,14 @@ func main() { "redo", "redo-always", "redo-cleanup", + "redo-dot", "redo-ifchange", "redo-ifcreate", "redo-log", "redo-stamp", "redo-whichdo", } { + fmt.Println(os.Args[0], "<-", cmdName) if err := os.Symlink(os.Args[0], cmdName); err != nil { rc = 1 log.Println(err) @@ -99,11 +102,12 @@ func main() { } NoColor = os.Getenv(EnvNoColor) != "" - NoHash = os.Getenv(EnvNoHash) == "1" 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) @@ -140,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 @@ -173,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 { @@ -186,10 +195,14 @@ func main() { CmdSwitch: switch cmdName { case "redo": - Force = true - ok, err = ifchange(tgts) + for _, tgt := range tgts { + ok, err = ifchange([]string{tgt}, true, traced) + if err != nil || !ok { + break + } + } case "redo-ifchange": - ok, err = ifchange(tgts) + ok, err = ifchange(tgts, false, traced) writeDeps(fdDep, tgts) case "redo-ifcreate": if fdDep == nil { @@ -213,6 +226,8 @@ CmdSwitch: break } } + case "redo-dot": + err = dotPrint(tgts) case "redo-stamp": if fdDep == nil { log.Fatalln("no", EnvDepFd) @@ -239,13 +254,15 @@ 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 + } + _, err = fdTmp.Seek(0, 0) if err != nil { break } - fdTmp.Seek(0, 0) r := recfile.NewReader(fdTmp) for { m, err := r.NextMap() @@ -255,13 +272,13 @@ CmdSwitch: } break CmdSwitch } - rel, err := filepath.Rel(Cwd, path.Join(cwd, m["Target"])) - if err != nil { - panic(err) - } - fmt.Println(rel) + fmt.Println(cwdMustRel(cwd, m["Target"])) + } + if doFile == "" { + ok = false + } else { + fmt.Println(path.Join(strings.Repeat("..", upLevels), doFile)) } - ok = doFile != "" default: log.Fatalln("unknown command", cmdName) }