args: fix help not usually showing

another weird side effect of the line cache/logging stuff.
The true stderr is now stored in the "stderr" global variable and is
used to print the help screen.
This commit is contained in:
Harvey Tindall 2023-06-11 15:48:27 +01:00
parent e4f03fac4b
commit 456c99d7db
Signed by: hrfee
GPG Key ID: BBC65952848FB1A2
2 changed files with 11 additions and 4 deletions

13
args.go
View File

@ -75,18 +75,23 @@ func (app *appContext) loadArgs(firstCall bool) {
os.Setenv("JFA_DATAPATH", app.dataPath) os.Setenv("JFA_DATAPATH", app.dataPath)
} }
/* Adds start/stop/systemd to help message, and /*
Adds start/stop/systemd to help message, and
also gets rid of usage for shorthand flags, and merge them with the full-length one. also gets rid of usage for shorthand flags, and merge them with the full-length one.
implementation is 🤢, will clean this up eventually. implementation is 🤢, will clean this up eventually.
-h SHORTHAND -h SHORTHAND
-help -help
prints this message. prints this message.
becomes: becomes:
-help, -h -help, -h
prints this message. prints this message.
*/ */
func helpFunc() { func helpFunc() {
fmt.Fprint(os.Stderr, `Usage of jfa-go: fmt.Fprint(stderr, `Usage of jfa-go:
start start
start jfa-go as a daemon and run in the background. start jfa-go as a daemon and run in the background.
stop stop
@ -99,7 +104,7 @@ func helpFunc() {
// Write defaults into buffer then remove any shorthands // Write defaults into buffer then remove any shorthands
flag.CommandLine.SetOutput(&b) flag.CommandLine.SetOutput(&b)
flag.PrintDefaults() flag.PrintDefaults()
flag.CommandLine.SetOutput(os.Stderr) flag.CommandLine.SetOutput(stderr)
scanner := bufio.NewScanner(&b) scanner := bufio.NewScanner(&b)
out := "" out := ""
line := scanner.Text() line := scanner.Text()
@ -150,5 +155,5 @@ func helpFunc() {
lastLine = true lastLine = true
} }
} }
fmt.Fprint(os.Stderr, out) fmt.Fprint(stderr, out)
} }

2
log.go
View File

@ -14,6 +14,8 @@ import (
var logPath string = filepath.Join(temp, "jfa-go.log") var logPath string = filepath.Join(temp, "jfa-go.log")
var lineCache = linecache.NewLineCache(100) var lineCache = linecache.NewLineCache(100)
var stderr = os.Stderr
func logOutput() (closeFunc func(), err error) { func logOutput() (closeFunc func(), err error) {
old := os.Stdout old := os.Stdout
writers := []io.Writer{old, colorStripper{lineCache}} writers := []io.Writer{old, colorStripper{lineCache}}