X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=main.go;h=bd82de25075e2514f81be9477212712ddc7f96e6;hb=4bdefb4b9dead540e45bb22c8e6400eeb2122734;hp=f466faa376813377582889cd955c8d3324fa3aa4;hpb=bca646300f43c07ea51decd5620f34a39676e8c3;p=goredo.git diff --git a/main.go b/main.go index f466faa..bd82de2 100644 --- a/main.go +++ b/main.go @@ -18,7 +18,6 @@ along with this program. If not, see . package main import ( - "bufio" "crypto/rand" "flag" "fmt" @@ -29,9 +28,9 @@ import ( "path" "path/filepath" "strconv" + "strings" "go.cypherpunks.ru/recfile" - "golang.org/x/sys/unix" ) var ( @@ -60,7 +59,7 @@ func mustParseFd(v, name string) *os.File { func main() { version := flag.Bool("version", false, "print version") warranty := flag.Bool("warranty", false, "print warranty information") - symlinks := flag.Bool("symlinks", false, "create necessary symlinks in current direcotyr") + symlinks := flag.Bool("symlinks", false, "create necessary symlinks in current directory") flag.Usage = usage flag.Parse() @@ -91,13 +90,12 @@ func main() { log.Println(err) } } - fmt.Println("no creating optional:", os.Args[0], "<- tai64nlocal") os.Exit(rc) } log.SetFlags(0) var err error - Cwd, err = unix.Getwd() + Cwd, err = os.Getwd() if err != nil { panic(err) } @@ -106,7 +104,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 +143,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 @@ -165,6 +169,7 @@ func main() { fdDep = mustParseFd(v, EnvDepFd) } BuildUUID = os.Getenv(EnvBuildUUID) + tgts := flag.Args() if BuildUUID == "" { raw := new([16]byte) if _, err = io.ReadFull(rand.Reader, raw[:]); err != nil { @@ -175,12 +180,18 @@ func main() { "%x-%x-%x-%x-%x", raw[0:4], raw[4:6], raw[6:8], raw[8:10], raw[10:], ) + if len(tgts) == 0 { + tgts = []string{"all"} + } } + statusInit() - tgts := flag.Args() - if len(tgts) == 0 { - tgts = []string{"all"} + for i, tgt := range tgts { + if path.IsAbs(tgt) { + tgts[i] = cwdMustRel(tgt) + } } + ok := true err = nil cmdName := path.Base(os.Args[0]) @@ -190,13 +201,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 +259,9 @@ CmdSwitch: break } os.Remove(fdTmp.Name()) - var doFile string cwd, tgt := cwdAndTgt(tgts[0]) - doFile, _, err = findDo(fdTmp, cwd, tgt) + cwdRel := cwdMustRel(cwd) + doFile, upLevels, err := findDo(fdTmp, cwd, tgt) if err != nil { break } @@ -269,11 +280,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(cwdRel, strings.Repeat("..", upLevels), doFile)) + } default: log.Fatalln("unknown command", cmdName) }