main: add short help text
We have accumulated so many options over time that they no longer fit on the screen. Display only a useful subset of options to the user unless they pass "-hh".
This commit is contained in:
parent
9a217ce786
commit
df2f4b1c40
|
@ -20,7 +20,7 @@ type argContainer struct {
|
||||||
debug, init, zerokey, fusedebug, openssl, passwd, fg, version,
|
debug, init, zerokey, fusedebug, openssl, passwd, fg, version,
|
||||||
plaintextnames, quiet, nosyslog, wpanic,
|
plaintextnames, quiet, nosyslog, wpanic,
|
||||||
longnames, allow_other, ro, reverse, aessiv, nonempty, raw64,
|
longnames, allow_other, ro, reverse, aessiv, nonempty, raw64,
|
||||||
noprealloc, speed, hkdf, serialize_reads, forcedecode bool
|
noprealloc, speed, hkdf, serialize_reads, forcedecode, hh bool
|
||||||
masterkey, mountpoint, cipherdir, cpuprofile, extpass,
|
masterkey, mountpoint, cipherdir, cpuprofile, extpass,
|
||||||
memprofile, ko, passfile, ctlsock, fsname string
|
memprofile, ko, passfile, ctlsock, fsname string
|
||||||
// Configuration file name override
|
// Configuration file name override
|
||||||
|
@ -94,7 +94,7 @@ func parseCliOpts() (args argContainer) {
|
||||||
var opensslAuto string
|
var opensslAuto string
|
||||||
|
|
||||||
flagSet = flag.NewFlagSet(tlog.ProgramName, flag.ContinueOnError)
|
flagSet = flag.NewFlagSet(tlog.ProgramName, flag.ContinueOnError)
|
||||||
flagSet.Usage = usageText
|
flagSet.Usage = helpShort
|
||||||
flagSet.BoolVar(&args.debug, "d", false, "")
|
flagSet.BoolVar(&args.debug, "d", false, "")
|
||||||
flagSet.BoolVar(&args.debug, "debug", false, "Enable debug output")
|
flagSet.BoolVar(&args.debug, "debug", false, "Enable debug output")
|
||||||
flagSet.BoolVar(&args.fusedebug, "fusedebug", false, "Enable fuse library debug output")
|
flagSet.BoolVar(&args.fusedebug, "fusedebug", false, "Enable fuse library debug output")
|
||||||
|
@ -125,6 +125,7 @@ func parseCliOpts() (args argContainer) {
|
||||||
flagSet.BoolVar(&args.serialize_reads, "serialize_reads", false, "Try to serialize read operations")
|
flagSet.BoolVar(&args.serialize_reads, "serialize_reads", false, "Try to serialize read operations")
|
||||||
flagSet.BoolVar(&args.forcedecode, "forcedecode", false, "Force decode of files even if integrity check fails."+
|
flagSet.BoolVar(&args.forcedecode, "forcedecode", false, "Force decode of files even if integrity check fails."+
|
||||||
" Requires gocryptfs to be compiled with openssl support and implies -openssl true")
|
" Requires gocryptfs to be compiled with openssl support and implies -openssl true")
|
||||||
|
flagSet.BoolVar(&args.hh, "hh", false, "Show this long help text")
|
||||||
flagSet.StringVar(&args.masterkey, "masterkey", "", "Mount with explicit master key")
|
flagSet.StringVar(&args.masterkey, "masterkey", "", "Mount with explicit master key")
|
||||||
flagSet.StringVar(&args.cpuprofile, "cpuprofile", "", "Write cpu profile to specified file")
|
flagSet.StringVar(&args.cpuprofile, "cpuprofile", "", "Write cpu profile to specified file")
|
||||||
flagSet.StringVar(&args.memprofile, "memprofile", "", "Write memory profile to specified file")
|
flagSet.StringVar(&args.memprofile, "memprofile", "", "Write memory profile to specified file")
|
||||||
|
@ -145,7 +146,7 @@ func parseCliOpts() (args argContainer) {
|
||||||
flagSet.BoolVar(&dummyBool, "nosuid", false, ignoreText)
|
flagSet.BoolVar(&dummyBool, "nosuid", false, ignoreText)
|
||||||
flagSet.BoolVar(&dummyBool, "nodev", false, ignoreText)
|
flagSet.BoolVar(&dummyBool, "nodev", false, ignoreText)
|
||||||
var dummyString string
|
var dummyString string
|
||||||
flagSet.StringVar(&dummyString, "o", "", "For compatibility, all options can be also passed as a comma-separated list to -o.")
|
flagSet.StringVar(&dummyString, "o", "", "For compatibility with mount(1), options can be also passed as a comma-separated list to -o on the end.")
|
||||||
// Actual parsing
|
// Actual parsing
|
||||||
err = flagSet.Parse(os.Args[1:])
|
err = flagSet.Parse(os.Args[1:])
|
||||||
if err == flag.ErrHelp {
|
if err == flag.ErrHelp {
|
||||||
|
|
|
@ -0,0 +1,53 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/rfjakob/gocryptfs/internal/tlog"
|
||||||
|
)
|
||||||
|
|
||||||
|
const tUsage = "" +
|
||||||
|
"Usage: " + tlog.ProgramName + " -init|-passwd [OPTIONS] CIPHERDIR\n" +
|
||||||
|
" or " + tlog.ProgramName + " [OPTIONS] CIPHERDIR MOUNTPOINT\n"
|
||||||
|
|
||||||
|
// helpShort is what gets displayed when passed "-h" or on syntax error.
|
||||||
|
func helpShort() {
|
||||||
|
printVersion()
|
||||||
|
fmt.Printf("\n")
|
||||||
|
fmt.Printf(tUsage)
|
||||||
|
fmt.Printf(`
|
||||||
|
Common Options (use -hh to show all):
|
||||||
|
-aessiv Use AES-SIV encryption (with -init)
|
||||||
|
-allow_other Allow other users to access the mount
|
||||||
|
-config Custom path to config file
|
||||||
|
-ctlsock Create control socket at location
|
||||||
|
-extpass Call external program to prompt for the password
|
||||||
|
-fg Stay in the foreground
|
||||||
|
-fusedebug Debug FUSE calls
|
||||||
|
-h, -help This short help text
|
||||||
|
-hh Long help text with all options
|
||||||
|
-init Initialize encrypted directory
|
||||||
|
-masterkey Mount with explicit master key instead of password
|
||||||
|
-nonempty Allow mounting over non-empty directory
|
||||||
|
-nosyslog Do not redirect log messages to syslog
|
||||||
|
-passfile Read password from file
|
||||||
|
-passwd Change password
|
||||||
|
-plaintextnames Do not encrypt file names (with -init)
|
||||||
|
-q, -quiet Silence informational messages
|
||||||
|
-reverse Enable reverse mode
|
||||||
|
-ro Mount read-only
|
||||||
|
-speed Run crypto speed test
|
||||||
|
-version Print version information
|
||||||
|
-- Stop option parsing
|
||||||
|
`)
|
||||||
|
}
|
||||||
|
|
||||||
|
// helpLong gets only displayed on "-hh"
|
||||||
|
func helpLong() {
|
||||||
|
printVersion()
|
||||||
|
fmt.Printf("\n")
|
||||||
|
fmt.Printf(tUsage)
|
||||||
|
fmt.Printf("\nOptions:\n")
|
||||||
|
flagSet.PrintDefaults()
|
||||||
|
fmt.Printf(" --\n Stop option parsing\n")
|
||||||
|
}
|
22
main.go
22
main.go
|
@ -31,21 +31,6 @@ var BuildTime = "0"
|
||||||
// raceDetector is set to true by race.go if we are compiled with "go build -race"
|
// raceDetector is set to true by race.go if we are compiled with "go build -race"
|
||||||
var raceDetector bool
|
var raceDetector bool
|
||||||
|
|
||||||
func usageText() {
|
|
||||||
printVersion()
|
|
||||||
fmt.Printf(`
|
|
||||||
Usage: %s -init|-passwd [OPTIONS] CIPHERDIR
|
|
||||||
or %s [OPTIONS] CIPHERDIR MOUNTPOINT [-o COMMA-SEPARATED-OPTIONS]
|
|
||||||
|
|
||||||
Options:
|
|
||||||
`, tlog.ProgramName, tlog.ProgramName)
|
|
||||||
|
|
||||||
flagSet.PrintDefaults()
|
|
||||||
fmt.Print(` --
|
|
||||||
Stop option parsing
|
|
||||||
`)
|
|
||||||
}
|
|
||||||
|
|
||||||
// loadConfig loads the config file "args.config", prompting the user for the password
|
// loadConfig loads the config file "args.config", prompting the user for the password
|
||||||
func loadConfig(args *argContainer) (masterkey []byte, confFile *configfile.ConfFile, err error) {
|
func loadConfig(args *argContainer) (masterkey []byte, confFile *configfile.ConfFile, err error) {
|
||||||
// Check if the file can be opened at all before prompting for a password
|
// Check if the file can be opened at all before prompting for a password
|
||||||
|
@ -145,6 +130,11 @@ func main() {
|
||||||
printVersion()
|
printVersion()
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
|
// "-hh"
|
||||||
|
if args.hh {
|
||||||
|
helpLong()
|
||||||
|
os.Exit(0)
|
||||||
|
}
|
||||||
// "-speed"
|
// "-speed"
|
||||||
if args.speed {
|
if args.speed {
|
||||||
speed.Run()
|
speed.Run()
|
||||||
|
@ -163,7 +153,7 @@ func main() {
|
||||||
os.Exit(exitcodes.CipherDir)
|
os.Exit(exitcodes.CipherDir)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
usageText()
|
helpShort()
|
||||||
os.Exit(exitcodes.Usage)
|
os.Exit(exitcodes.Usage)
|
||||||
}
|
}
|
||||||
// "-q"
|
// "-q"
|
||||||
|
|
Loading…
Reference in New Issue