]> Cypherpunks.ru repositories - goredo.git/blobdiff - main.go
No flags for not appropriate commands
[goredo.git] / main.go
diff --git a/main.go b/main.go
index 3a7088d16431492773e78a07781e54ff85eeef19..0bb9357e9bf021dcc3c46a085cba5c1a4bd529ea 100644 (file)
--- a/main.go
+++ b/main.go
@@ -37,6 +37,23 @@ import (
        "golang.org/x/sys/unix"
 )
 
+const (
+       CmdNameGoredo       = "goredo"
+       CmdNameRedo         = "redo"
+       CmdNameRedoAffects  = "redo-affects"
+       CmdNameRedoAlways   = "redo-always"
+       CmdNameRedoCleanup  = "redo-cleanup"
+       CmdNameRedoDot      = "redo-dot"
+       CmdNameRedoIfchange = "redo-ifchange"
+       CmdNameRedoIfcreate = "redo-ifcreate"
+       CmdNameRedoLog      = "redo-log"
+       CmdNameRedoOOD      = "redo-ood"
+       CmdNameRedoSources  = "redo-sources"
+       CmdNameRedoStamp    = "redo-stamp"
+       CmdNameRedoTargets  = "redo-targets"
+       CmdNameRedoWhichdo  = "redo-whichdo"
+)
+
 var (
        Cwd       string
        BuildUUID string
@@ -61,10 +78,19 @@ func mustParseFd(v, name string) *os.File {
        return fd
 }
 
+func CmdName() string {
+       return path.Base(os.Args[0])
+}
+
 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 directory")
+
+       var symlinks *bool
+       cmdName := CmdName()
+       if cmdName == "goredo" {
+               symlinks = flag.Bool("symlinks", false, "create necessary symlinks in current directory")
+       }
 
        flag.Usage = func() { usage(os.Args[0]) }
        flag.Parse()
@@ -76,22 +102,22 @@ func main() {
                fmt.Println("goredo", Version, "built with", runtime.Version())
                return
        }
-       if *symlinks {
+       if cmdName == CmdNameGoredo && *symlinks {
                rc := 0
                for _, cmdName := range []string{
-                       "redo",
-                       "redo-affects",
-                       "redo-always",
-                       "redo-cleanup",
-                       "redo-dot",
-                       "redo-ifchange",
-                       "redo-ifcreate",
-                       "redo-log",
-                       "redo-ood",
-                       "redo-sources",
-                       "redo-stamp",
-                       "redo-targets",
-                       "redo-whichdo",
+                       CmdNameRedo,
+                       CmdNameRedoAffects,
+                       CmdNameRedoAlways,
+                       CmdNameRedoCleanup,
+                       CmdNameRedoDot,
+                       CmdNameRedoIfchange,
+                       CmdNameRedoIfcreate,
+                       CmdNameRedoLog,
+                       CmdNameRedoOOD,
+                       CmdNameRedoSources,
+                       CmdNameRedoStamp,
+                       CmdNameRedoTargets,
+                       CmdNameRedoWhichdo,
                } {
                        fmt.Println(os.Args[0], "<-", cmdName)
                        if err := os.Symlink(os.Args[0], cmdName); err != nil {
@@ -125,28 +151,28 @@ func main() {
        DirPrefix = os.Getenv(EnvDirPrefix)
        DepCwd = os.Getenv(EnvDepCwd)
 
-       if *flagStderrKeep {
+       if flagStderrKeep != nil && *flagStderrKeep {
                mustSetenv(EnvStderrKeep, "1")
        }
-       if *flagStderrSilent {
+       if flagStderrSilent != nil && *flagStderrSilent {
                mustSetenv(EnvStderrSilent, "1")
        }
-       if *flagNoProgress {
+       if flagNoProgress != nil && *flagNoProgress {
                mustSetenv(EnvNoProgress, "1")
        }
-       if *flagDebug {
+       if flagDebug != nil && *flagDebug {
                mustSetenv(EnvDebug, "1")
        }
-       if *flagLogWait {
+       if flagLogWait != nil && *flagLogWait {
                mustSetenv(EnvLogWait, "1")
        }
-       if *flagLogLock {
+       if flagLogLock != nil && *flagLogLock {
                mustSetenv(EnvLogLock, "1")
        }
-       if *flagLogPid {
+       if flagLogPid != nil && *flagLogPid {
                mustSetenv(EnvLogPid, "1")
        }
-       if *flagLogJS {
+       if flagLogJS != nil && *flagLogJS {
                mustSetenv(EnvLogJS, "1")
        }
        StderrKeep = os.Getenv(EnvStderrKeep) == "1"
@@ -160,13 +186,13 @@ func main() {
                MyPid = os.Getpid()
        }
        var traced bool
-       if *flagTraceAll {
+       if flagTraceAll != nil && *flagTraceAll {
                mustSetenv(EnvTrace, "1")
        }
        if os.Getenv(EnvTrace) == "1" {
                TracedAll = true
                traced = true
-       } else {
+       } else if flagTrace != nil {
                traced = *flagTrace
        }
 
@@ -246,7 +272,9 @@ func main() {
                }
        }
 
-       statusInit()
+       if cmdName == CmdNameRedo || cmdName == CmdNameRedoIfchange {
+               statusInit()
+       }
 
        for i, tgt := range tgts {
                if path.IsAbs(tgt) {
@@ -256,7 +284,6 @@ func main() {
 
        ok := true
        err = nil
-       cmdName := path.Base(os.Args[0])
        trace(
                CDebug, "[%s] run: %s %s cwd:%s dirprefix:%s",
                BuildUUID, cmdName, tgts, Cwd, DirPrefix,
@@ -264,19 +291,19 @@ func main() {
 
 CmdSwitch:
        switch cmdName {
-       case "redo":
+       case CmdNameRedo:
                for _, tgt := range tgts {
                        ok, err = ifchange([]string{tgt}, true, traced)
                        if err != nil || !ok {
                                break
                        }
                }
-       case "redo-ifchange":
+       case CmdNameRedoIfchange:
                ok, err = ifchange(tgts, false, traced)
                if err == nil {
                        err = writeDeps(fdDep, tgts)
                }
-       case "redo-ifcreate":
+       case CmdNameRedoIfcreate:
                if fdDep == nil {
                        log.Fatalln("no", EnvDepFd)
                }
@@ -286,26 +313,26 @@ CmdSwitch:
                                break
                        }
                }
-       case "redo-always":
+       case CmdNameRedoAlways:
                if fdDep == nil {
                        log.Fatalln("no", EnvDepFd)
                }
                err = always(fdDep)
-       case "redo-cleanup":
+       case CmdNameRedoCleanup:
                for _, what := range tgts {
                        err = cleanupWalker(Cwd, what)
                        if err != nil {
                                break
                        }
                }
-       case "redo-dot":
+       case CmdNameRedoDot:
                err = dotPrint(tgts)
-       case "redo-stamp":
+       case CmdNameRedoStamp:
                if fdDep == nil {
                        log.Fatalln("no", EnvDepFd)
                }
                err = stamp(fdDep, os.Stdin)
-       case "redo-log":
+       case CmdNameRedoLog:
                if len(tgts) != 1 {
                        log.Fatalln("single target expected")
                }
@@ -316,7 +343,7 @@ CmdSwitch:
                        break
                }
                _, err = io.Copy(os.Stdout, fd)
-       case "redo-whichdo":
+       case CmdNameRedoWhichdo:
                if len(tgts) != 1 {
                        log.Fatalln("single target expected")
                }
@@ -363,7 +390,7 @@ CmdSwitch:
                        }
                        fmt.Println(rel)
                }
-       case "redo-targets":
+       case CmdNameRedoTargets:
                if tgtsWasEmpty {
                        tgts = []string{Cwd}
                }
@@ -375,7 +402,7 @@ CmdSwitch:
                for _, tgt := range tgts {
                        fmt.Println(tgt)
                }
-       case "redo-affects":
+       case CmdNameRedoAffects:
                if tgtsWasEmpty {
                        log.Fatalln("no targets specified")
                }
@@ -400,7 +427,7 @@ CmdSwitch:
                for _, dep := range tgts {
                        fmt.Println(dep)
                }
-       case "redo-ood":
+       case CmdNameRedoOOD:
                if tgtsWasEmpty {
                        tgts, err = targetsWalker([]string{Cwd})
                        if err != nil {
@@ -418,7 +445,7 @@ CmdSwitch:
                                fmt.Println(tgt)
                        }
                }
-       case "redo-sources":
+       case CmdNameRedoSources:
                if tgtsWasEmpty {
                        tgts, err = targetsWalker([]string{Cwd})
                        if err != nil {