main.go | 5 +++--
usage.go | 97 +++++++++++++++++++++++++++++------------------------
diff --git a/main.go b/main.go
index b7d5ad6a75b8b149dcf929477c5241d393de12dbe5f9eaeff7fcf86f6de0f7bb..4271a669b29f14029a7a7233bc28093dad3e11661485bb99a2d438f891a37eab 100644
--- a/main.go
+++ b/main.go
@@ -29,6 +29,7 @@ "log"
"os"
"path"
"path/filepath"
+ "runtime"
"strconv"
"go.cypherpunks.ru/recfile"
@@ -63,14 +64,14 @@ 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")
- flag.Usage = usage
+ flag.Usage = func() { usage(os.Args[0]) }
flag.Parse()
if *warranty {
fmt.Println(Warranty)
return
}
if *version {
- fmt.Println(versionGet())
+ fmt.Println("goredo", Version, "built with", runtime.Version())
return
}
if *symlinks {
diff --git a/usage.go b/usage.go
index 1945e50184702b4b87a4d02a205161c772e996f7ec0850e609d2a250ff859b63..852e9dbe73f98c3f24dec0550324c8680faf24b0f353dbf64b8135d7361631f2 100644
--- a/usage.go
+++ b/usage.go
@@ -21,13 +21,13 @@ import (
"flag"
"fmt"
"os"
- "runtime"
- "strings"
)
const (
Version = "1.3.0"
- Warranty = `This program is free software: you can redistribute it and/or modify
+ Warranty = `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
the Free Software Foundation, version 3 of the License.
@@ -40,51 +40,60 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see .`
)
-func versionGet() string {
- return strings.Join([]string{
- "goredo", Version, "built with", runtime.Version(),
- }, " ")
-}
+func usage(cmd string) {
+ var d string
+ switch cmd {
+ case "redo":
+ d = `Usage: redo [options] [target ...]
+
+Forcefully and *sequentially* build specified targets.`
+ case "redo-ifchange":
+ d = `Usage: redo-ifchange target [...]
+
+Build specified targets in parallel, if they are changed.
+Record them as dependencies for current target.`
+ case "redo-ifcreate":
+ d = `Usage: redo-ifcreate target [...]
+
+Record ifcreate dependency for current target. Unusable outside .do.`
+ case "redo-always":
+ d = `Usage: redo-always
+
+Always build current target. Unusable outside .do.`
+ case "redo-cleanup":
+ d = `Usage: redo-cleanup [-dry-run] {full,log,tmp} [...]
-func usage() {
- fmt.Fprintf(os.Stderr, versionGet()+`
-Copyright (C) 2020-2021 Sergey Matveev
-License GPLv3: GNU GPL version 3
-This is free software: you are free to change and redistribute it.
-There is NO WARRANTY, to the extent permitted by law.
+Remove either all goredo's related temporary files, or kept stderr
+logs, or everything (including .redo directories) related.`
+ case "redo-log":
+ d = `Usage: redo-log target [ | tai64nlocal ]
+
+Display kept target's stderr with TAI64N timestamped lines. Only the
+last build is kept. You must enable stderr keeping with either -logs,
+or REDO_LOGS=1.`
+ case "redo-dot":
+ d = `Usage: redo-dot target [...]
+
+Write dependency DOT graph to stdout.`
+ case "redo-stamp":
+ d = `Usage: redo-stamp < [$3]
-redo, redo-{always,cleanup,dot,ifchange,ifcreate,log,stamp,whichdo} must
-be linked to goredo executable. It determines the command by its own name.
-You can create them by running: goredo -symlinks.
+Record stamp dependency for current target. Unusable outside .do.
+Stamp dependency does not play any role, as all targets are hashed
+anyway.`
+ case "redo-whichdo":
+ d = `Usage: redo-whichdo target
-* redo [options] [target ...]
- forcefully and *sequentially* build specified targets
-* redo-always
- always build current target. Unusable outside .do
-* redo-cleanup [-dry-run] {full,log,tmp} [...]
- remove either all goredo's related temporary files, or kept stderr
- logs, or everything (including .redo directories) related
-* redo-dot target [...]
- write dependency DOT graph to stdout
-* redo-ifchange target [...]
- build specified targets in parallel, if they are changed. Record them
- as dependencies for current target
-* redo-ifcreate target [...]
- record ifcreate dependency for current target. Unusable outside .do
-* redo-log target [ | tai64nlocal ]
- display kept target's stderr with TAI64N timestamped lines. Only the
- last build is kept. You must enable stderr keeping with either -logs,
- or REDO_LOGS=1
-* redo-stamp < [$3]
- record stamp dependency for current target. Unusable outside .do.
- Stamp dependency does not play any role, as all targets are hashed
- anyway
-* redo-whichdo target
- display .do search paths for specified target. Exits successfully
- if the last .do in output if the found existing one
+Display .do search paths for specified target. Exits successfully
+if the last .do in output if the found existing one.`
+ default:
+ d = `Usage: goredo -symlinks
-Options:
-`)
+goredo expects to be called through the symbolic link to it.
+Available commands: redo, redo-always, redo-cleanup, redo-dot,
+redo-ifchange, redo-ifcreate, redo-log, redo-stamp, redo-whichdo.`
+ }
+ fmt.Fprintf(os.Stderr, "%s\n\nOptions:\n", d)
flag.PrintDefaults()
fmt.Fprintln(os.Stderr, `
Additional environment variables: