Updates from reviewers
This commit is contained in:
+47
-6
@@ -10,10 +10,12 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"flag"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"runtime/debug"
|
||||
"strings"
|
||||
|
||||
"github.com/Timewave-AB/fakes"
|
||||
@@ -25,7 +27,11 @@ const usage = `Usage: fakes -data-path D [-data-path D]... [-seed N] [-repeat N]
|
||||
<path> a category, or a dotted path into one (person, person.last)
|
||||
-seed N seed for reproducible output
|
||||
-repeat N render the path N times (default 1)
|
||||
-separator S string between repeated values (default newline)`
|
||||
-separator S string between repeated values (default newline)
|
||||
-list list the paths the data offers, then exit
|
||||
-version print the version, then exit
|
||||
|
||||
Flags must come before <path>.`
|
||||
|
||||
// stringList collects a repeatable string flag, preserving order.
|
||||
type stringList []string
|
||||
@@ -45,19 +51,24 @@ func run(args []string, stdout, stderr io.Writer) int {
|
||||
seed := fs.Uint64("seed", 0, "seed for reproducible output")
|
||||
repeat := fs.Int("repeat", 1, "render the path this many times")
|
||||
sep := fs.String("separator", "\n", "string between repeated values")
|
||||
list := fs.Bool("list", false, "list the paths the data offers, then exit")
|
||||
showVersion := fs.Bool("version", false, "print the version, then exit")
|
||||
var dirs stringList
|
||||
fs.Var(&dirs, "data-path", "a data directory to load (repeatable)")
|
||||
if err := fs.Parse(args); err != nil {
|
||||
if errors.Is(err, flag.ErrHelp) { // -h/-help already printed usage
|
||||
return 0
|
||||
}
|
||||
return 2
|
||||
}
|
||||
if len(dirs) == 0 || fs.NArg() != 1 {
|
||||
if *showVersion {
|
||||
fmt.Fprintln(stdout, "fakes "+buildVersion())
|
||||
return 0
|
||||
}
|
||||
if len(dirs) == 0 {
|
||||
fs.Usage()
|
||||
return 2
|
||||
}
|
||||
if *repeat < 1 {
|
||||
fmt.Fprintln(stderr, "repeat must be a positive integer")
|
||||
return 2
|
||||
}
|
||||
|
||||
var opts []fakes.Option
|
||||
fs.Visit(func(fl *flag.Flag) {
|
||||
@@ -66,6 +77,26 @@ func run(args []string, stdout, stderr io.Writer) int {
|
||||
}
|
||||
})
|
||||
|
||||
if *list {
|
||||
f, err := fakes.New(dirs, opts...)
|
||||
if err != nil {
|
||||
fmt.Fprintln(stderr, err)
|
||||
return 1
|
||||
}
|
||||
for _, p := range f.List() {
|
||||
fmt.Fprintln(stdout, p)
|
||||
}
|
||||
return 0
|
||||
}
|
||||
if fs.NArg() != 1 {
|
||||
fs.Usage()
|
||||
return 2
|
||||
}
|
||||
if *repeat < 1 {
|
||||
fmt.Fprintln(stderr, "repeat must be a positive integer")
|
||||
return 2
|
||||
}
|
||||
|
||||
path := fs.Arg(0)
|
||||
f, err := fakes.New(dirs, opts...)
|
||||
if err != nil {
|
||||
@@ -82,3 +113,13 @@ func run(args []string, stdout, stderr io.Writer) int {
|
||||
fmt.Fprintln(stdout, strings.Join(vals, *sep))
|
||||
return 0
|
||||
}
|
||||
|
||||
// buildVersion reports the module version stamped into the binary by `go install`
|
||||
// (or "devel" for a local build), read from the build info — no version constant
|
||||
// to bump, no extra dependency.
|
||||
func buildVersion() string {
|
||||
if info, ok := debug.ReadBuildInfo(); ok && info.Main.Version != "" {
|
||||
return info.Main.Version
|
||||
}
|
||||
return "devel"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user