aboutsummaryrefslogtreecommitdiffstats
path: root/cmd/geth/usage.go
diff options
context:
space:
mode:
authorPéter Szilágyi <peterke@gmail.com>2015-10-30 01:53:24 +0800
committerPéter Szilágyi <peterke@gmail.com>2015-10-30 17:33:12 +0800
commit3c6e285d3bfa03935f4f346a2cb32236143e2fca (patch)
treeb433f27f43ebfab6efb06cfbb0d4d8db039fbefc /cmd/geth/usage.go
parentfd27f074feecec2f1e4c8041ff04ddac8d0ab6a3 (diff)
downloadgo-tangerine-3c6e285d3bfa03935f4f346a2cb32236143e2fca.tar
go-tangerine-3c6e285d3bfa03935f4f346a2cb32236143e2fca.tar.gz
go-tangerine-3c6e285d3bfa03935f4f346a2cb32236143e2fca.tar.bz2
go-tangerine-3c6e285d3bfa03935f4f346a2cb32236143e2fca.tar.lz
go-tangerine-3c6e285d3bfa03935f4f346a2cb32236143e2fca.tar.xz
go-tangerine-3c6e285d3bfa03935f4f346a2cb32236143e2fca.tar.zst
go-tangerine-3c6e285d3bfa03935f4f346a2cb32236143e2fca.zip
cmd/geth, cmd/utils, eth: group CLI flags by purpose
Diffstat (limited to 'cmd/geth/usage.go')
-rw-r--r--cmd/geth/usage.go212
1 files changed, 212 insertions, 0 deletions
diff --git a/cmd/geth/usage.go b/cmd/geth/usage.go
new file mode 100644
index 000000000..9223b7cd6
--- /dev/null
+++ b/cmd/geth/usage.go
@@ -0,0 +1,212 @@
+// Copyright 2015 The go-ethereum Authors
+// This file is part of go-ethereum.
+//
+// go-ethereum is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// go-ethereum is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with go-ethereum. If not, see <http://www.gnu.org/licenses/>.
+
+// Contains the geth command usage template and generator.
+
+package main
+
+import (
+ "io"
+
+ "github.com/codegangsta/cli"
+ "github.com/ethereum/go-ethereum/cmd/utils"
+)
+
+// AppHelpTemplate is the test template for the default, global app help topic.
+var AppHelpTemplate = `NAME:
+ {{.App.Name}} - {{.App.Usage}}
+
+USAGE:
+ {{.App.HelpName}} [options]{{if .App.Commands}} command [command options]{{end}} {{if .App.ArgsUsage}}{{.App.ArgsUsage}}{{else}}[arguments...]{{end}}
+ {{if .App.Version}}
+VERSION:
+ {{.App.Version}}
+ {{end}}{{if len .App.Authors}}
+AUTHOR(S):
+ {{range .App.Authors}}{{ . }}{{end}}
+ {{end}}{{if .App.Commands}}
+COMMANDS:
+ {{range .App.Commands}}{{join .Names ", "}}{{ "\t" }}{{.Usage}}
+ {{end}}{{end}}{{if .FlagGroups}}
+{{range .FlagGroups}}{{.Name}} OPTIONS:
+ {{range .Flags}}{{.}}
+ {{end}}
+{{end}}{{end}}{{if .App.Copyright }}
+COPYRIGHT:
+ {{.App.Copyright}}
+ {{end}}
+`
+
+// flagGroup is a collection of flags belonging to a single topic.
+type flagGroup struct {
+ Name string
+ Flags []cli.Flag
+}
+
+// AppHelpFlagGroups is the application flags, grouped by functionality.
+var AppHelpFlagGroups = []flagGroup{
+ {
+ Name: "ETHEREUM",
+ Flags: []cli.Flag{
+ utils.DataDirFlag,
+ utils.NetworkIdFlag,
+ utils.OlympicFlag,
+ utils.TestNetFlag,
+ utils.DevModeFlag,
+ utils.GenesisFileFlag,
+ utils.IdentityFlag,
+ utils.FastSyncFlag,
+ utils.CacheFlag,
+ utils.BlockchainVersionFlag,
+ },
+ },
+ {
+ Name: "ACCOUNT",
+ Flags: []cli.Flag{
+ utils.UnlockedAccountFlag,
+ utils.PasswordFileFlag,
+ },
+ },
+ {
+ Name: "API AND CONSOLE",
+ Flags: []cli.Flag{
+ utils.RPCEnabledFlag,
+ utils.RPCListenAddrFlag,
+ utils.RPCPortFlag,
+ utils.RpcApiFlag,
+ utils.IPCDisabledFlag,
+ utils.IPCApiFlag,
+ utils.IPCPathFlag,
+ utils.RPCCORSDomainFlag,
+ utils.JSpathFlag,
+ utils.ExecFlag,
+ },
+ },
+ {
+ Name: "NETWORKING",
+ Flags: []cli.Flag{
+ utils.BootnodesFlag,
+ utils.ListenPortFlag,
+ utils.MaxPeersFlag,
+ utils.MaxPendingPeersFlag,
+ utils.NATFlag,
+ utils.NoDiscoverFlag,
+ utils.NodeKeyFileFlag,
+ utils.NodeKeyHexFlag,
+ },
+ },
+ {
+ Name: "MINER",
+ Flags: []cli.Flag{
+ utils.MiningEnabledFlag,
+ utils.MinerThreadsFlag,
+ utils.MiningGPUFlag,
+ utils.AutoDAGFlag,
+ utils.EtherbaseFlag,
+ utils.GasPriceFlag,
+ utils.ExtraDataFlag,
+ },
+ },
+ {
+ Name: "GAS PRICE ORACLE",
+ Flags: []cli.Flag{
+ utils.GpoMinGasPriceFlag,
+ utils.GpoMaxGasPriceFlag,
+ utils.GpoFullBlockRatioFlag,
+ utils.GpobaseStepDownFlag,
+ utils.GpobaseStepUpFlag,
+ utils.GpobaseCorrectionFactorFlag,
+ },
+ },
+ {
+ Name: "VIRTUAL MACHINE",
+ Flags: []cli.Flag{
+ utils.VMDebugFlag,
+ utils.VMEnableJitFlag,
+ utils.VMForceJitFlag,
+ utils.VMJitCacheFlag,
+ },
+ },
+ {
+ Name: "LOGGING AND DEBUGGING",
+ Flags: []cli.Flag{
+ utils.VerbosityFlag,
+ utils.LogVModuleFlag,
+ utils.BacktraceAtFlag,
+ utils.LogFileFlag,
+ utils.PProfEanbledFlag,
+ utils.PProfPortFlag,
+ utils.MetricsEnabledFlag,
+ },
+ },
+ {
+ Name: "EXPERIMENTAL",
+ Flags: []cli.Flag{
+ utils.WhisperEnabledFlag,
+ utils.NatspecEnabledFlag,
+ },
+ },
+ {
+ Name: "MISCELLANEOUS",
+ Flags: []cli.Flag{
+ utils.SolcPathFlag,
+ },
+ },
+}
+
+func init() {
+ // Override the default app help template
+ cli.AppHelpTemplate = AppHelpTemplate
+
+ // Define a one shot struct to pass to the usage template
+ type helpData struct {
+ App interface{}
+ FlagGroups []flagGroup
+ }
+ // Override the default app help printer, but only for the global app help
+ originalHelpPrinter := cli.HelpPrinter
+ cli.HelpPrinter = func(w io.Writer, tmpl string, data interface{}) {
+ if tmpl == AppHelpTemplate {
+ // Iterate over all the flags and add any uncategorized ones
+ categorized := make(map[string]struct{})
+ for _, group := range AppHelpFlagGroups {
+ for _, flag := range group.Flags {
+ categorized[flag.String()] = struct{}{}
+ }
+ }
+ uncategorized := []cli.Flag{}
+ for _, flag := range data.(*cli.App).Flags {
+ if _, ok := categorized[flag.String()]; !ok {
+ uncategorized = append(uncategorized, flag)
+ }
+ }
+ if len(uncategorized) > 0 {
+ // Append all ungategorized options to the misc group
+ miscs := len(AppHelpFlagGroups[len(AppHelpFlagGroups)-1].Flags)
+ AppHelpFlagGroups[len(AppHelpFlagGroups)-1].Flags = append(AppHelpFlagGroups[len(AppHelpFlagGroups)-1].Flags, uncategorized...)
+
+ // Make sure they are removed afterwards
+ defer func() {
+ AppHelpFlagGroups[len(AppHelpFlagGroups)-1].Flags = AppHelpFlagGroups[len(AppHelpFlagGroups)-1].Flags[:miscs]
+ }()
+ }
+ // Render out custom usage screen
+ originalHelpPrinter(w, tmpl, helpData{data, AppHelpFlagGroups})
+ } else {
+ originalHelpPrinter(w, tmpl, data)
+ }
+ }
+}