Files
sigil/util.go
T

82 lines
1.5 KiB
Go

package main
import (
"bufio"
"errors"
"fmt"
"os"
"strings"
)
type packageFlags struct {
dryRun bool
}
func parsePackageFlags(args []string) (packageFlags, string, error) {
flags := packageFlags{}
var pkg string
for _, arg := range args {
if arg == "--dry-run" {
flags.dryRun = true
continue
}
if strings.HasPrefix(arg, "-") {
return flags, "", fmt.Errorf("unknown flag %q", arg)
}
if pkg != "" {
return flags, "", errors.New("too many arguments")
}
pkg = arg
}
if pkg == "" {
return flags, "", errors.New("missing package")
}
return flags, pkg, nil
}
var stdinReader *bufio.Reader
func newReader() *bufio.Reader {
if stdinReader == nil {
stdinReader = bufio.NewReader(os.Stdin)
}
return stdinReader
}
func promptWithDefault(label, def string) (string, error) {
reader := newReader()
if def != "" {
fmt.Printf("%s [%s]: ", label, def)
} else {
fmt.Printf("%s: ", label)
}
text, err := reader.ReadString('\n')
if err != nil {
return "", err
}
text = strings.TrimSpace(text)
if text == "" {
return def, nil
}
return text, nil
}
func promptYesNo(message string, def bool) (bool, error) {
reader := newReader()
defLabel := "y/N"
if def {
defLabel = "Y/n"
}
fmt.Printf("%s [%s]: ", message, defLabel)
text, err := reader.ReadString('\n')
if err != nil {
return false, err
}
text = strings.TrimSpace(strings.ToLower(text))
if text == "" {
return def, nil
}
return text == "y" || text == "yes", nil
}