commit ab9f9dc5db73cd1ff756ccc2d17c0fc9225a035c
parent 42b46e8fea6e75e486b0dd111692aaf0c53fa378
Author: Sean Enck <sean@ttypty.com>
Date: Sun, 12 Feb 2023 19:09:11 -0500
docs should all come from the executable
Diffstat:
6 files changed, 76 insertions(+), 43 deletions(-)
diff --git a/Makefile b/Makefile
@@ -4,7 +4,6 @@ TARGET := $(BUILD)lb
TESTDIR := $(sort $(dir $(wildcard internal/**/*_test.go)))
DOC := $(BUILD)doc.text
MAN := $(BUILD)lb.man
-DOCTEXT := scripts/doc.sections
ACTUAL := $(BUILD)actual.log
DATE := $(shell date +%Y-%m-%d)
RUNS := -keyfile=true -keyfile=false
@@ -22,7 +21,7 @@ $(TARGET): cmd/main.go internal/**/*.go go.* internal/cli/completions*
$(TESTDIR):
cd $@ && go test
-check: $(TARGET) $(TESTDIR) $(RUNS)
+check: $(TARGET) $(TESTDIR) $(DOC) $(RUNS)
$(RUNS):
rm -f $(BUILD)*.kdbx
@@ -32,9 +31,8 @@ $(RUNS):
clean:
rm -rf $(BUILD)
-$(DOC): $(TARGET) $(DOCTEXT)
- @cat $(DOCTEXT) > $(DOC)
- $(TARGET) env -defaults >> $(DOC)
+$(DOC): $(TARGET)
+ $(TARGET) help -verbose > $(DOC)
$(MAN): $(TARGET) $(DOC)
help2man --include $(DOC) -h help -v version -o $(MAN) ./$(TARGET)
diff --git a/scripts/doc.sections b/cmd/doc.sections
diff --git a/cmd/main.go b/cmd/main.go
@@ -17,8 +17,12 @@ import (
"github.com/enckse/lockbox/internal/totp"
)
-//go:embed "vers.txt"
-var version string
+var (
+ //go:embed "vers.txt"
+ version string
+ //go:embed "doc.sections"
+ docSection string
+)
type (
callbackFunction func([]string) error
@@ -71,7 +75,28 @@ func getInfoDefault(args []string, possibleArg string) (bool, error) {
func processInfoCommands(command string, args []string) ([]string, error) {
switch command {
case cli.HelpCommand:
- return cli.Usage()
+ if len(args) > 3 {
+ return nil, errors.New("invalid help command")
+ }
+ isAdvanced := false
+ if len(args) == 3 {
+ if args[2] == cli.HelpAdvancedCommand {
+ isAdvanced = true
+ } else {
+ return nil, errors.New("invalid help option")
+ }
+ }
+ results, err := cli.Usage()
+ if err != nil {
+ return nil, err
+ }
+ if isAdvanced {
+ results = append(results, "")
+ results = append(results, strings.Split(strings.TrimSpace(docSection), "\n")...)
+ results = append(results, "")
+ results = append(results, inputs.ListEnvironmentVariables(false)...)
+ }
+ return results, nil
case cli.VersionCommand:
return []string{fmt.Sprintf("version: %s", version)}, nil
case cli.EnvCommand, cli.BashCommand:
diff --git a/internal/cli/completions.bash b/internal/cli/completions.bash
@@ -15,6 +15,9 @@ _{{ $.Executable }}() {
"{{ $.InsertCommand }}")
opts="{{ $.InsertMultiCommand }}{{ if $.CanTOTP }} {{ $.InsertTOTPCommand }}{{end}} $({{ $.DoList }})"
;;
+ "{{ $.HelpCommand }}")
+ opts="{{ $.HelpAdvancedCommand }}"
+ ;;
"{{ $.MoveCommand }}")
opts=$({{ $.DoList }})
;;
diff --git a/internal/cli/core.go b/internal/cli/core.go
@@ -38,6 +38,8 @@ const (
VersionCommand = "version"
// HelpCommand shows usage
HelpCommand = "help"
+ // HelpAdvancedCommand shows advanced help
+ HelpAdvancedCommand = "-verbose"
// RemoveCommand removes an entry
RemoveCommand = "rm"
// EnvCommand shows environment information used by lockbox
@@ -70,25 +72,27 @@ var bashCompletions string
type (
// Completions handles the inputs to completions for templating
Completions struct {
- Options []string
- CanClip bool
- CanTOTP bool
- ReadOnly bool
- InsertCommand string
- TOTPShortCommand string
- TOTPOnceCommand string
- TOTPClipCommand string
- InsertMultiCommand string
- InsertTOTPCommand string
- RemoveCommand string
- ClipCommand string
- ShowCommand string
- MoveCommand string
- TOTPCommand string
- DoTOTPList string
- DoList string
- Executable string
- StatsCommand string
+ Options []string
+ CanClip bool
+ CanTOTP bool
+ ReadOnly bool
+ InsertCommand string
+ TOTPShortCommand string
+ TOTPOnceCommand string
+ TOTPClipCommand string
+ InsertMultiCommand string
+ InsertTOTPCommand string
+ RemoveCommand string
+ ClipCommand string
+ ShowCommand string
+ MoveCommand string
+ TOTPCommand string
+ DoTOTPList string
+ DoList string
+ Executable string
+ StatsCommand string
+ HelpCommand string
+ HelpAdvancedCommand string
}
)
@@ -123,21 +127,23 @@ func BashCompletions(defaults bool) ([]string, error) {
return nil, err
}
c := Completions{
- Executable: name,
- InsertCommand: InsertCommand,
- RemoveCommand: RemoveCommand,
- TOTPShortCommand: TOTPShortCommand,
- TOTPClipCommand: TOTPClipCommand,
- TOTPOnceCommand: TOTPOnceCommand,
- ClipCommand: ClipCommand,
- ShowCommand: ShowCommand,
- StatsCommand: StatsCommand,
- InsertMultiCommand: InsertMultiCommand,
- InsertTOTPCommand: InsertTOTPCommand,
- TOTPCommand: TOTPCommand,
- MoveCommand: MoveCommand,
- DoList: fmt.Sprintf("%s %s", name, ListCommand),
- DoTOTPList: fmt.Sprintf("%s %s %s", name, TOTPCommand, TOTPListCommand),
+ Executable: name,
+ InsertCommand: InsertCommand,
+ RemoveCommand: RemoveCommand,
+ TOTPShortCommand: TOTPShortCommand,
+ TOTPClipCommand: TOTPClipCommand,
+ TOTPOnceCommand: TOTPOnceCommand,
+ ClipCommand: ClipCommand,
+ ShowCommand: ShowCommand,
+ StatsCommand: StatsCommand,
+ InsertMultiCommand: InsertMultiCommand,
+ HelpCommand: HelpCommand,
+ HelpAdvancedCommand: HelpAdvancedCommand,
+ InsertTOTPCommand: InsertTOTPCommand,
+ TOTPCommand: TOTPCommand,
+ MoveCommand: MoveCommand,
+ DoList: fmt.Sprintf("%s %s", name, ListCommand),
+ DoTOTPList: fmt.Sprintf("%s %s %s", name, TOTPCommand, TOTPListCommand),
}
isReadOnly := false
isClip := true
@@ -201,6 +207,7 @@ func Usage() ([]string, error) {
results = append(results, command(EnvCommand, "", "display environment variable information"))
results = append(results, command(FindCommand, "criteria", "perform a simplistic text search over the entry keys"))
results = append(results, command(HelpCommand, "", "show this usage information"))
+ results = append(results, subCommand(HelpCommand, HelpAdvancedCommand, "", "display verbose help information"))
results = append(results, command(InsertCommand, "entry", "insert a new entry into the store"))
results = append(results, subCommand(InsertCommand, InsertMultiCommand, "entry", "insert a multi-line entry"))
results = append(results, subCommand(InsertCommand, InsertTOTPCommand, "entry", "insert a new totp entry"))
diff --git a/internal/cli/core_test.go b/internal/cli/core_test.go
@@ -9,7 +9,7 @@ import (
func TestUsage(t *testing.T) {
u, _ := cli.Usage()
- if len(u) != 21 {
+ if len(u) != 22 {
t.Errorf("invalid usage, out of date? %d", len(u))
}
}