| 
									
										
										
										
											2015-10-29 19:53:24 +02:00
										 |  |  | // 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, | 
					
						
							| 
									
										
										
										
											2015-11-10 15:47:19 +02:00
										 |  |  | 			utils.LightKDFFlag, | 
					
						
							| 
									
										
										
										
											2015-10-29 19:53:24 +02:00
										 |  |  | 			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) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } |