X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=main.go;h=734239b682d5bdac63e48e5afe955509349be6b1;hb=7eabb39c54b96fca347a0576f501239d89bd8ec6;hp=c545dce0da4a791228b6a343850f4b78ed46b52f;hpb=79b9219363d2f69f8fd209ec5ee3794759fa7396;p=goredo.git diff --git a/main.go b/main.go index c545dce..734239b 100644 --- a/main.go +++ b/main.go @@ -1,6 +1,6 @@ /* -goredo -- redo implementation on pure Go -Copyright (C) 2020 Sergey Matveev +goredo -- djb's redo implementation on pure Go +Copyright (C) 2020-2021 Sergey Matveev This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -28,7 +28,6 @@ import ( "path" "path/filepath" "strconv" - "strings" "go.cypherpunks.ru/recfile" ) @@ -59,7 +58,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() @@ -102,6 +101,7 @@ func main() { NoColor = os.Getenv(EnvNoColor) != "" NoSync = os.Getenv(EnvNoSync) == "1" + InodeTrust = os.Getenv(EnvInodeNoTrust) == "" TopDir = os.Getenv(EnvTopDir) if TopDir == "" { @@ -112,6 +112,7 @@ func main() { panic(err) } } + DirPrefix = os.Getenv(EnvDirPrefix) if *flagStderrKeep { mustSetenv(EnvStderrKeep, "1") @@ -119,6 +120,9 @@ func main() { if *flagStderrSilent { mustSetenv(EnvStderrSilent, "1") } + if *flagNoProgress { + mustSetenv(EnvNoProgress, "1") + } if *flagDebug { mustSetenv(EnvDebug, "1") } @@ -136,6 +140,7 @@ func main() { } StderrKeep = os.Getenv(EnvStderrKeep) == "1" StderrSilent = os.Getenv(EnvStderrSilent) == "1" + NoProgress = os.Getenv(EnvNoProgress) == "1" Debug = os.Getenv(EnvDebug) == "1" LogWait = os.Getenv(EnvLogWait) == "1" LogLock = os.Getenv(EnvLogLock) == "1" @@ -195,7 +200,10 @@ func main() { ok := true err = nil cmdName := path.Base(os.Args[0]) - trace(CDebug, "[%s] run: %s %s [%s]", BuildUUID, cmdName, tgts, Cwd) + trace( + CDebug, "[%s] run: %s %s cwd:%s dirprefix:%s", + BuildUUID, cmdName, tgts, Cwd, DirPrefix, + ) CmdSwitch: switch cmdName { @@ -208,7 +216,9 @@ CmdSwitch: } case "redo-ifchange": ok, err = ifchange(tgts, false, traced) - writeDeps(fdDep, tgts) + if err == nil { + err = writeDeps(fdDep, tgts) + } case "redo-ifcreate": if fdDep == nil { log.Fatalln("no", EnvDepFd) @@ -260,7 +270,6 @@ CmdSwitch: } os.Remove(fdTmp.Name()) cwd, tgt := cwdAndTgt(tgts[0]) - cwdRel := cwdMustRel(cwd) doFile, upLevels, err := findDo(fdTmp, cwd, tgt) if err != nil { break @@ -283,7 +292,17 @@ CmdSwitch: if doFile == "" { ok = false } else { - fmt.Println(path.Join(cwdRel, strings.Repeat("..", upLevels), doFile)) + p := make([]string, 0, upLevels+2) + p = append(p, cwd) + for i := 0; i < upLevels; i++ { + p = append(p, "..") + } + p = append(p, doFile) + rel, err := filepath.Rel(Cwd, path.Join(p...)) + if err != nil { + panic(err) + } + fmt.Println(rel) } default: log.Fatalln("unknown command", cmdName)