a97d622588
It got broken in some update of the cli library, and thus bootnodes weren't being configured automatically for some of the discovery commands.
102 lines
2.4 KiB
Go
102 lines
2.4 KiB
Go
// Copyright 2019 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/>.
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/ethereum/go-ethereum/internal/debug"
|
|
"github.com/ethereum/go-ethereum/internal/flags"
|
|
"github.com/ethereum/go-ethereum/p2p/enode"
|
|
"github.com/urfave/cli/v2"
|
|
)
|
|
|
|
var app = flags.NewApp("go-ethereum devp2p tool")
|
|
|
|
func init() {
|
|
app.Flags = append(app.Flags, debug.Flags...)
|
|
app.Before = func(ctx *cli.Context) error {
|
|
flags.MigrateGlobalFlags(ctx)
|
|
return debug.Setup(ctx)
|
|
}
|
|
app.After = func(ctx *cli.Context) error {
|
|
debug.Exit()
|
|
return nil
|
|
}
|
|
app.CommandNotFound = func(ctx *cli.Context, cmd string) {
|
|
fmt.Fprintf(os.Stderr, "No such command: %s\n", cmd)
|
|
os.Exit(1)
|
|
}
|
|
|
|
// Add subcommands.
|
|
app.Commands = []*cli.Command{
|
|
enrdumpCommand,
|
|
keyCommand,
|
|
discv4Command,
|
|
discv5Command,
|
|
dnsCommand,
|
|
nodesetCommand,
|
|
rlpxCommand,
|
|
}
|
|
}
|
|
|
|
func main() {
|
|
exit(app.Run(os.Args))
|
|
}
|
|
|
|
// commandHasFlag returns true if the current command supports the given flag.
|
|
func commandHasFlag(ctx *cli.Context, flag cli.Flag) bool {
|
|
names := flag.Names()
|
|
set := make(map[string]struct{}, len(names))
|
|
for _, name := range names {
|
|
set[name] = struct{}{}
|
|
}
|
|
for _, ctx := range ctx.Lineage() {
|
|
if ctx.Command != nil {
|
|
for _, f := range ctx.Command.Flags {
|
|
for _, name := range f.Names() {
|
|
if _, ok := set[name]; ok {
|
|
return true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
// getNodeArg handles the common case of a single node descriptor argument.
|
|
func getNodeArg(ctx *cli.Context) *enode.Node {
|
|
if ctx.NArg() < 1 {
|
|
exit("missing node as command-line argument")
|
|
}
|
|
n, err := parseNode(ctx.Args().First())
|
|
if err != nil {
|
|
exit(err)
|
|
}
|
|
return n
|
|
}
|
|
|
|
func exit(err interface{}) {
|
|
if err == nil {
|
|
os.Exit(0)
|
|
}
|
|
fmt.Fprintln(os.Stderr, err)
|
|
os.Exit(1)
|
|
}
|