| 
									
										
										
										
											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" | 
					
						
							| 
									
										
										
										
											2017-05-25 09:15:51 +02:00
										 |  |  | 	"sort" | 
					
						
							| 
									
										
										
										
											2015-10-29 19:53:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-05 18:40:32 +02:00
										 |  |  | 	"strings" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-29 19:53:24 +02:00
										 |  |  | 	"github.com/ethereum/go-ethereum/cmd/utils" | 
					
						
							| 
									
										
										
										
											2016-01-26 14:39:21 +01:00
										 |  |  | 	"github.com/ethereum/go-ethereum/internal/debug" | 
					
						
							| 
									
										
										
										
											2016-06-09 11:44:42 +02:00
										 |  |  | 	"gopkg.in/urfave/cli.v1" | 
					
						
							| 
									
										
										
										
											2015-10-29 19:53:24 +02:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // AppHelpTemplate is the test template for the default, global app help topic. | 
					
						
							|  |  |  | var AppHelpTemplate = `NAME: | 
					
						
							|  |  |  |    {{.App.Name}} - {{.App.Usage}} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-23 18:45:43 +08:00
										 |  |  |    Copyright 2013-2018 The go-ethereum Authors | 
					
						
							| 
									
										
										
										
											2016-08-21 23:51:42 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-29 19:53:24 +02:00
										 |  |  | 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{ | 
					
						
							| 
									
										
										
										
											2017-04-13 17:12:37 +03:00
										 |  |  | 			configFileFlag, | 
					
						
							| 
									
										
										
										
											2015-10-29 19:53:24 +02:00
										 |  |  | 			utils.DataDirFlag, | 
					
						
							| 
									
										
										
										
											2016-03-07 14:38:56 -08:00
										 |  |  | 			utils.KeyStoreDirFlag, | 
					
						
							| 
									
										
										
										
											2017-04-20 14:01:51 +03:00
										 |  |  | 			utils.NoUSBFlag, | 
					
						
							| 
									
										
										
										
											2015-10-29 19:53:24 +02:00
										 |  |  | 			utils.NetworkIdFlag, | 
					
						
							| 
									
										
										
										
											2017-05-04 12:36:20 +03:00
										 |  |  | 			utils.TestnetFlag, | 
					
						
							|  |  |  | 			utils.RinkebyFlag, | 
					
						
							| 
									
										
										
										
											2017-04-13 17:12:37 +03:00
										 |  |  | 			utils.SyncModeFlag, | 
					
						
							| 
									
										
										
										
											2018-02-05 18:40:32 +02:00
										 |  |  | 			utils.GCModeFlag, | 
					
						
							| 
									
										
										
										
											2017-04-13 17:12:37 +03:00
										 |  |  | 			utils.EthStatsURLFlag, | 
					
						
							| 
									
										
										
										
											2015-10-29 19:53:24 +02:00
										 |  |  | 			utils.IdentityFlag, | 
					
						
							| 
									
										
										
										
											2016-01-13 19:35:48 +01:00
										 |  |  | 			utils.LightServFlag, | 
					
						
							|  |  |  | 			utils.LightPeersFlag, | 
					
						
							| 
									
										
										
										
											2015-11-10 15:47:19 +02:00
										 |  |  | 			utils.LightKDFFlag, | 
					
						
							| 
									
										
										
										
											2016-10-19 14:55:13 +03:00
										 |  |  | 		}, | 
					
						
							|  |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2018-07-09 16:41:28 +08:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 		Name: "DEVELOPER CHAIN", | 
					
						
							| 
									
										
										
										
											2017-10-24 13:40:42 +03:00
										 |  |  | 		Flags: []cli.Flag{ | 
					
						
							|  |  |  | 			utils.DeveloperFlag, | 
					
						
							|  |  |  | 			utils.DeveloperPeriodFlag, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2017-03-06 11:37:32 +02:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 		Name: "ETHASH", | 
					
						
							|  |  |  | 		Flags: []cli.Flag{ | 
					
						
							|  |  |  | 			utils.EthashCacheDirFlag, | 
					
						
							|  |  |  | 			utils.EthashCachesInMemoryFlag, | 
					
						
							|  |  |  | 			utils.EthashCachesOnDiskFlag, | 
					
						
							|  |  |  | 			utils.EthashDatasetDirFlag, | 
					
						
							| 
									
										
										
										
											2017-03-06 17:20:25 +02:00
										 |  |  | 			utils.EthashDatasetsInMemoryFlag, | 
					
						
							| 
									
										
										
										
											2017-03-06 11:37:32 +02:00
										 |  |  | 			utils.EthashDatasetsOnDiskFlag, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2017-11-14 19:34:00 +02:00
										 |  |  | 	//{ | 
					
						
							|  |  |  | 	//	Name: "DASHBOARD", | 
					
						
							|  |  |  | 	//	Flags: []cli.Flag{ | 
					
						
							|  |  |  | 	//		utils.DashboardEnabledFlag, | 
					
						
							|  |  |  | 	//		utils.DashboardAddrFlag, | 
					
						
							|  |  |  | 	//		utils.DashboardPortFlag, | 
					
						
							|  |  |  | 	//		utils.DashboardRefreshFlag, | 
					
						
							|  |  |  | 	//		utils.DashboardAssetsFlag, | 
					
						
							|  |  |  | 	//	}, | 
					
						
							|  |  |  | 	//}, | 
					
						
							| 
									
										
										
										
											2017-05-26 13:40:47 +03:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 		Name: "TRANSACTION POOL", | 
					
						
							|  |  |  | 		Flags: []cli.Flag{ | 
					
						
							| 
									
										
										
										
											2018-08-21 20:30:06 +03:00
										 |  |  | 			utils.TxPoolLocalsFlag, | 
					
						
							| 
									
										
										
										
											2017-07-05 17:06:05 +03:00
										 |  |  | 			utils.TxPoolNoLocalsFlag, | 
					
						
							| 
									
										
										
										
											2017-07-28 15:09:39 +02:00
										 |  |  | 			utils.TxPoolJournalFlag, | 
					
						
							|  |  |  | 			utils.TxPoolRejournalFlag, | 
					
						
							| 
									
										
										
										
											2017-05-26 13:40:47 +03:00
										 |  |  | 			utils.TxPoolPriceLimitFlag, | 
					
						
							|  |  |  | 			utils.TxPoolPriceBumpFlag, | 
					
						
							|  |  |  | 			utils.TxPoolAccountSlotsFlag, | 
					
						
							|  |  |  | 			utils.TxPoolGlobalSlotsFlag, | 
					
						
							|  |  |  | 			utils.TxPoolAccountQueueFlag, | 
					
						
							|  |  |  | 			utils.TxPoolGlobalQueueFlag, | 
					
						
							|  |  |  | 			utils.TxPoolLifetimeFlag, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2016-10-19 14:55:13 +03:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 		Name: "PERFORMANCE TUNING", | 
					
						
							|  |  |  | 		Flags: []cli.Flag{ | 
					
						
							| 
									
										
										
										
											2015-10-29 19:53:24 +02:00
										 |  |  | 			utils.CacheFlag, | 
					
						
							| 
									
										
										
										
											2018-02-05 18:40:32 +02:00
										 |  |  | 			utils.CacheDatabaseFlag, | 
					
						
							|  |  |  | 			utils.CacheGCFlag, | 
					
						
							| 
									
										
										
										
											2016-10-19 14:55:13 +03:00
										 |  |  | 			utils.TrieCacheGenFlag, | 
					
						
							| 
									
										
										
										
											2015-10-29 19:53:24 +02:00
										 |  |  | 		}, | 
					
						
							|  |  |  | 	}, | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		Name: "ACCOUNT", | 
					
						
							|  |  |  | 		Flags: []cli.Flag{ | 
					
						
							|  |  |  | 			utils.UnlockedAccountFlag, | 
					
						
							|  |  |  | 			utils.PasswordFileFlag, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 	}, | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		Name: "API AND CONSOLE", | 
					
						
							|  |  |  | 		Flags: []cli.Flag{ | 
					
						
							|  |  |  | 			utils.RPCEnabledFlag, | 
					
						
							|  |  |  | 			utils.RPCListenAddrFlag, | 
					
						
							|  |  |  | 			utils.RPCPortFlag, | 
					
						
							| 
									
										
										
										
											2015-12-16 10:58:01 +01:00
										 |  |  | 			utils.RPCApiFlag, | 
					
						
							|  |  |  | 			utils.WSEnabledFlag, | 
					
						
							|  |  |  | 			utils.WSListenAddrFlag, | 
					
						
							|  |  |  | 			utils.WSPortFlag, | 
					
						
							|  |  |  | 			utils.WSApiFlag, | 
					
						
							| 
									
										
										
										
											2016-03-14 09:38:54 +01:00
										 |  |  | 			utils.WSAllowedOriginsFlag, | 
					
						
							| 
									
										
										
										
											2015-10-29 19:53:24 +02:00
										 |  |  | 			utils.IPCDisabledFlag, | 
					
						
							|  |  |  | 			utils.IPCPathFlag, | 
					
						
							|  |  |  | 			utils.RPCCORSDomainFlag, | 
					
						
							| 
									
										
										
										
											2018-02-12 13:52:07 +01:00
										 |  |  | 			utils.RPCVirtualHostsFlag, | 
					
						
							| 
									
										
										
										
											2015-10-29 19:53:24 +02:00
										 |  |  | 			utils.JSpathFlag, | 
					
						
							|  |  |  | 			utils.ExecFlag, | 
					
						
							| 
									
										
										
										
											2016-05-06 12:40:23 +03:00
										 |  |  | 			utils.PreloadJSFlag, | 
					
						
							| 
									
										
										
										
											2015-10-29 19:53:24 +02:00
										 |  |  | 		}, | 
					
						
							|  |  |  | 	}, | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		Name: "NETWORKING", | 
					
						
							|  |  |  | 		Flags: []cli.Flag{ | 
					
						
							|  |  |  | 			utils.BootnodesFlag, | 
					
						
							| 
									
										
										
										
											2017-05-10 17:51:52 +03:00
										 |  |  | 			utils.BootnodesV4Flag, | 
					
						
							|  |  |  | 			utils.BootnodesV5Flag, | 
					
						
							| 
									
										
										
										
											2015-10-29 19:53:24 +02:00
										 |  |  | 			utils.ListenPortFlag, | 
					
						
							|  |  |  | 			utils.MaxPeersFlag, | 
					
						
							|  |  |  | 			utils.MaxPendingPeersFlag, | 
					
						
							|  |  |  | 			utils.NATFlag, | 
					
						
							|  |  |  | 			utils.NoDiscoverFlag, | 
					
						
							| 
									
										
										
										
											2016-10-19 13:04:55 +02:00
										 |  |  | 			utils.DiscoveryV5Flag, | 
					
						
							| 
									
										
										
										
											2017-04-13 17:12:37 +03:00
										 |  |  | 			utils.NetrestrictFlag, | 
					
						
							| 
									
										
										
										
											2015-10-29 19:53:24 +02:00
										 |  |  | 			utils.NodeKeyFileFlag, | 
					
						
							|  |  |  | 			utils.NodeKeyHexFlag, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 	}, | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		Name: "MINER", | 
					
						
							|  |  |  | 		Flags: []cli.Flag{ | 
					
						
							|  |  |  | 			utils.MiningEnabledFlag, | 
					
						
							|  |  |  | 			utils.MinerThreadsFlag, | 
					
						
							| 
									
										
										
										
											2018-08-08 12:15:08 +03:00
										 |  |  | 			utils.MinerNotifyFlag, | 
					
						
							| 
									
										
										
										
											2018-08-15 11:01:49 +03:00
										 |  |  | 			utils.MinerGasPriceFlag, | 
					
						
							|  |  |  | 			utils.MinerGasTargetFlag, | 
					
						
							| 
									
										
										
										
											2018-08-29 12:21:12 +03:00
										 |  |  | 			utils.MinerGasLimitFlag, | 
					
						
							| 
									
										
										
										
											2018-08-15 11:01:49 +03:00
										 |  |  | 			utils.MinerEtherbaseFlag, | 
					
						
							|  |  |  | 			utils.MinerExtraDataFlag, | 
					
						
							| 
									
										
										
										
											2018-08-22 03:56:54 +08:00
										 |  |  | 			utils.MinerRecommitIntervalFlag, | 
					
						
							| 
									
										
										
										
											2018-08-28 21:59:05 +08:00
										 |  |  | 			utils.MinerNoVerfiyFlag, | 
					
						
							| 
									
										
										
										
											2015-10-29 19:53:24 +02:00
										 |  |  | 		}, | 
					
						
							|  |  |  | 	}, | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		Name: "GAS PRICE ORACLE", | 
					
						
							|  |  |  | 		Flags: []cli.Flag{ | 
					
						
							| 
									
										
										
										
											2017-04-06 16:20:42 +02:00
										 |  |  | 			utils.GpoBlocksFlag, | 
					
						
							|  |  |  | 			utils.GpoPercentileFlag, | 
					
						
							| 
									
										
										
										
											2015-10-29 19:53:24 +02:00
										 |  |  | 		}, | 
					
						
							|  |  |  | 	}, | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		Name: "VIRTUAL MACHINE", | 
					
						
							|  |  |  | 		Flags: []cli.Flag{ | 
					
						
							| 
									
										
										
										
											2017-01-17 11:19:50 +00:00
										 |  |  | 			utils.VMEnableDebugFlag, | 
					
						
							| 
									
										
										
										
											2015-10-29 19:53:24 +02:00
										 |  |  | 		}, | 
					
						
							|  |  |  | 	}, | 
					
						
							|  |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2016-04-21 12:14:57 +03:00
										 |  |  | 		Name: "LOGGING AND DEBUGGING", | 
					
						
							|  |  |  | 		Flags: append([]cli.Flag{ | 
					
						
							|  |  |  | 			utils.FakePoWFlag, | 
					
						
							| 
									
										
										
										
											2017-04-13 17:12:37 +03:00
										 |  |  | 			utils.NoCompactionFlag, | 
					
						
							| 
									
										
										
										
											2016-04-21 12:14:57 +03:00
										 |  |  | 		}, debug.Flags...), | 
					
						
							| 
									
										
										
										
											2015-10-29 19:53:24 +02:00
										 |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2018-07-02 14:51:02 +02:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 		Name: "METRICS AND STATS", | 
					
						
							|  |  |  | 		Flags: []cli.Flag{ | 
					
						
							|  |  |  | 			utils.MetricsEnabledFlag, | 
					
						
							|  |  |  | 			utils.MetricsEnableInfluxDBFlag, | 
					
						
							|  |  |  | 			utils.MetricsInfluxDBEndpointFlag, | 
					
						
							|  |  |  | 			utils.MetricsInfluxDBDatabaseFlag, | 
					
						
							|  |  |  | 			utils.MetricsInfluxDBUsernameFlag, | 
					
						
							|  |  |  | 			utils.MetricsInfluxDBPasswordFlag, | 
					
						
							|  |  |  | 			utils.MetricsInfluxDBHostTagFlag, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2017-06-13 11:49:07 +02:00
										 |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2017-06-26 13:40:43 +03:00
										 |  |  | 		Name:  "WHISPER (EXPERIMENTAL)", | 
					
						
							| 
									
										
										
										
											2017-06-21 10:49:14 +02:00
										 |  |  | 		Flags: whisperFlags, | 
					
						
							| 
									
										
										
										
											2017-06-13 11:49:07 +02:00
										 |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2017-04-13 17:12:37 +03:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 		Name: "DEPRECATED", | 
					
						
							|  |  |  | 		Flags: []cli.Flag{ | 
					
						
							| 
									
										
										
										
											2018-08-15 11:01:49 +03:00
										 |  |  | 			utils.MinerLegacyThreadsFlag, | 
					
						
							|  |  |  | 			utils.MinerLegacyGasTargetFlag, | 
					
						
							|  |  |  | 			utils.MinerLegacyGasPriceFlag, | 
					
						
							|  |  |  | 			utils.MinerLegacyEtherbaseFlag, | 
					
						
							|  |  |  | 			utils.MinerLegacyExtraDataFlag, | 
					
						
							| 
									
										
										
										
											2017-04-13 17:12:37 +03:00
										 |  |  | 		}, | 
					
						
							|  |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2015-10-29 19:53:24 +02:00
										 |  |  | 	{ | 
					
						
							| 
									
										
										
										
											2017-06-13 11:49:07 +02:00
										 |  |  | 		Name: "MISC", | 
					
						
							| 
									
										
										
										
											2015-10-29 19:53:24 +02:00
										 |  |  | 	}, | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-25 09:15:51 +02:00
										 |  |  | // byCategory sorts an array of flagGroup by Name in the order | 
					
						
							|  |  |  | // defined in AppHelpFlagGroups. | 
					
						
							|  |  |  | type byCategory []flagGroup | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (a byCategory) Len() int      { return len(a) } | 
					
						
							|  |  |  | func (a byCategory) Swap(i, j int) { a[i], a[j] = a[j], a[i] } | 
					
						
							|  |  |  | func (a byCategory) Less(i, j int) bool { | 
					
						
							|  |  |  | 	iCat, jCat := a[i].Name, a[j].Name | 
					
						
							|  |  |  | 	iIdx, jIdx := len(AppHelpFlagGroups), len(AppHelpFlagGroups) // ensure non categorized flags come last | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	for i, group := range AppHelpFlagGroups { | 
					
						
							|  |  |  | 		if iCat == group.Name { | 
					
						
							|  |  |  | 			iIdx = i | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		if jCat == group.Name { | 
					
						
							|  |  |  | 			jIdx = i | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return iIdx < jIdx | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func flagCategory(flag cli.Flag) string { | 
					
						
							|  |  |  | 	for _, category := range AppHelpFlagGroups { | 
					
						
							|  |  |  | 		for _, flg := range category.Flags { | 
					
						
							|  |  |  | 			if flg.GetName() == flag.GetName() { | 
					
						
							|  |  |  | 				return category.Name | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return "MISC" | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-29 19:53:24 +02:00
										 |  |  | 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 | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-05-25 09:15:51 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-29 19:53:24 +02:00
										 |  |  | 	// 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 { | 
					
						
							| 
									
										
										
										
											2017-11-14 19:34:00 +02:00
										 |  |  | 					if strings.HasPrefix(flag.GetName(), "dashboard") { | 
					
						
							|  |  |  | 						continue | 
					
						
							|  |  |  | 					} | 
					
						
							| 
									
										
										
										
											2015-10-29 19:53:24 +02:00
										 |  |  | 					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}) | 
					
						
							| 
									
										
										
										
											2017-05-25 09:15:51 +02:00
										 |  |  | 		} else if tmpl == utils.CommandHelpTemplate { | 
					
						
							|  |  |  | 			// Iterate over all command specific flags and categorize them | 
					
						
							|  |  |  | 			categorized := make(map[string][]cli.Flag) | 
					
						
							|  |  |  | 			for _, flag := range data.(cli.Command).Flags { | 
					
						
							|  |  |  | 				if _, ok := categorized[flag.String()]; !ok { | 
					
						
							|  |  |  | 					categorized[flagCategory(flag)] = append(categorized[flagCategory(flag)], flag) | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			// sort to get a stable ordering | 
					
						
							|  |  |  | 			sorted := make([]flagGroup, 0, len(categorized)) | 
					
						
							|  |  |  | 			for cat, flgs := range categorized { | 
					
						
							|  |  |  | 				sorted = append(sorted, flagGroup{cat, flgs}) | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			sort.Sort(byCategory(sorted)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			// add sorted array to data and render with default printer | 
					
						
							|  |  |  | 			originalHelpPrinter(w, tmpl, map[string]interface{}{ | 
					
						
							|  |  |  | 				"cmd":              data, | 
					
						
							|  |  |  | 				"categorizedFlags": sorted, | 
					
						
							|  |  |  | 			}) | 
					
						
							| 
									
										
										
										
											2015-10-29 19:53:24 +02:00
										 |  |  | 		} else { | 
					
						
							|  |  |  | 			originalHelpPrinter(w, tmpl, data) | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } |