From 234c903e74471033da056aa6640c3f059bab7260 Mon Sep 17 00:00:00 2001 From: Amit Gaikwad Date: Tue, 7 Jan 2025 23:56:49 +0530 Subject: [PATCH 1/4] refactor: refactoring checks --- cli/filplus.go | 4 ++-- cli/spcli/sectors.go | 2 +- cli/wallet.go | 2 +- cmd/lotus-miner/proving.go | 2 +- cmd/lotus-miner/sealing.go | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cli/filplus.go b/cli/filplus.go index ae380afa102..f50bd91b5a8 100644 --- a/cli/filplus.go +++ b/cli/filplus.go @@ -545,7 +545,7 @@ var filplusRemoveExpiredAllocationsCmd = &cli.Command{ }, }, Action: func(cctx *cli.Context) error { - if cctx.NArg() < 1 { + if cctx.NArg() != 1 { return IncorrectNumArgs(cctx) } @@ -638,7 +638,7 @@ var filplusRemoveExpiredClaimsCmd = &cli.Command{ }, }, Action: func(cctx *cli.Context) error { - if cctx.NArg() < 1 { + if cctx.NArg() != 1 { return IncorrectNumArgs(cctx) } diff --git a/cli/spcli/sectors.go b/cli/spcli/sectors.go index 07d076ad441..b85ec85ed07 100644 --- a/cli/spcli/sectors.go +++ b/cli/spcli/sectors.go @@ -1336,7 +1336,7 @@ func TerminateSectorCmd(getActorAddress ActorAddressGetter) *cli.Command { }, }, Action: func(cctx *cli.Context) error { - if cctx.NArg() < 1 { + if cctx.NArg() != 1 { return lcli.ShowHelp(cctx, fmt.Errorf("at least one sector must be specified")) } diff --git a/cli/wallet.go b/cli/wallet.go index 83349759a65..1310491a171 100644 --- a/cli/wallet.go +++ b/cli/wallet.go @@ -733,7 +733,7 @@ var walletMarketAdd = &cli.Command{ afmt := NewAppFmt(cctx.App) // Get amount param - if cctx.NArg() < 1 { + if cctx.NArg() != 1 { return IncorrectNumArgs(cctx) } f, err := types.ParseFIL(cctx.Args().First()) diff --git a/cmd/lotus-miner/proving.go b/cmd/lotus-miner/proving.go index f5e4d59c0e2..122d13a57a6 100644 --- a/cmd/lotus-miner/proving.go +++ b/cmd/lotus-miner/proving.go @@ -304,7 +304,7 @@ var provingRecoverFaultsCmd = &cli.Command{ }, }, Action: func(cctx *cli.Context) error { - if cctx.NArg() < 1 { + if cctx.NArg() != 1 { return lcli.ShowHelp(cctx, xerrors.Errorf("must pass at least 1 sector number")) } diff --git a/cmd/lotus-miner/sealing.go b/cmd/lotus-miner/sealing.go index 6d5f4ed7cbb..9d96eb6ffd5 100644 --- a/cmd/lotus-miner/sealing.go +++ b/cmd/lotus-miner/sealing.go @@ -410,7 +410,7 @@ var sealingDataCidCmd = &cli.Command{ }, }, Action: func(cctx *cli.Context) error { - if cctx.NArg() < 1 || cctx.NArg() > 2 { + if cctx.NArg() != 1 || cctx.NArg() > 2 { return lcli.ShowHelp(cctx, xerrors.Errorf("expected 1 or 2 arguments")) } From 02c0f3825f454fb5d38afe13bb7ffd486319c837 Mon Sep 17 00:00:00 2001 From: Amit Gaikwad Date: Mon, 13 Jan 2025 20:30:12 +0530 Subject: [PATCH 2/4] refactor: nargs fixes --- cli/multisig.go | 8 ++++---- cmd/lotus-shed/sectors.go | 2 +- cmd/lotus-shed/sync.go | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/cli/multisig.go b/cli/multisig.go index 4abb0c1543e..fbfccd6a3d6 100644 --- a/cli/multisig.go +++ b/cli/multisig.go @@ -89,7 +89,7 @@ var msigCreateCmd = &cli.Command{ }, }, Action: func(cctx *cli.Context) error { - if cctx.NArg() < 1 { + if cctx.NArg() != 1 { return IncorrectNumArgs(cctx) } @@ -399,7 +399,7 @@ var msigProposeCmd = &cli.Command{ }, }, Action: func(cctx *cli.Context) error { - if cctx.NArg() < 3 { + if cctx.NArg() != 3 { return ShowHelp(cctx, fmt.Errorf("must pass at least multisig address, destination, and value")) } @@ -521,7 +521,7 @@ var msigApproveCmd = &cli.Command{ }, }, Action: func(cctx *cli.Context) error { - if cctx.NArg() < 2 { + if cctx.NArg() != 2 { return ShowHelp(cctx, fmt.Errorf("must pass at least multisig address and message ID")) } @@ -658,7 +658,7 @@ var msigCancelCmd = &cli.Command{ }, }, Action: func(cctx *cli.Context) error { - if cctx.NArg() < 2 { + if cctx.NArg() != 2 { return ShowHelp(cctx, fmt.Errorf("must pass at least multisig address and message ID")) } diff --git a/cmd/lotus-shed/sectors.go b/cmd/lotus-shed/sectors.go index faa21f9d94e..2031dbd32e3 100644 --- a/cmd/lotus-shed/sectors.go +++ b/cmd/lotus-shed/sectors.go @@ -88,7 +88,7 @@ var terminateSectorPenaltyEstimationCmd = &cli.Command{ }, }, Action: func(cctx *cli.Context) error { - if cctx.NArg() < 1 { + if cctx.NArg() != 1 { return lcli.ShowHelp(cctx, fmt.Errorf("at least one sector must be specified")) } diff --git a/cmd/lotus-shed/sync.go b/cmd/lotus-shed/sync.go index eb11dea27eb..b39ec0d9be9 100644 --- a/cmd/lotus-shed/sync.go +++ b/cmd/lotus-shed/sync.go @@ -38,7 +38,7 @@ var syncValidateCmd = &cli.Command{ defer closer() ctx := lcli.ReqContext(cctx) - if cctx.NArg() < 1 { + if cctx.NArg() != 1 { return lcli.ShowHelp(cctx, fmt.Errorf("at least one block cid must be provided")) } @@ -73,7 +73,7 @@ var syncScrapePowerCmd = &cli.Command{ Usage: "given a height and a tipset, reports what percentage of mining power had a winning ticket between the tipset and height", ArgsUsage: "[height tipsetkey]", Action: func(cctx *cli.Context) error { - if cctx.NArg() < 1 { + if cctx.NArg() != 1 { fmt.Println("usage: [blockCid1 blockCid2...]") fmt.Println("Any CIDs passed after the height will be used as the tipset key") fmt.Println("If no block CIDs are provided, chain head will be used") @@ -88,7 +88,7 @@ var syncScrapePowerCmd = &cli.Command{ defer closer() ctx := lcli.ReqContext(cctx) - if cctx.NArg() < 1 { + if cctx.NArg() != 1 { return lcli.ShowHelp(cctx, fmt.Errorf("at least one block cid must be provided")) } From 3f62b8792ceb84150c6a5d4d5e7208e6e44c9d75 Mon Sep 17 00:00:00 2001 From: Amit Gaikwad Date: Fri, 24 Jan 2025 00:18:52 +0530 Subject: [PATCH 3/4] cli folder --- cli/chain.go | 8 ++++++++ cli/disputer.go | 8 ++++++++ cli/evm.go | 8 ++++---- cli/f3.go | 8 ++++---- cli/filplus.go | 8 ++++---- cli/log.go | 4 ++++ cli/multisig.go | 6 +++++- cli/net.go | 40 ++++++++++++++++++++++++++++++++++++++++ cli/spcli/actor.go | 12 ++++++++++++ cli/sync.go | 16 ++++++++++++++++ 10 files changed, 105 insertions(+), 13 deletions(-) diff --git a/cli/chain.go b/cli/chain.go index 0c25a881c6b..fca34b36b27 100644 --- a/cli/chain.go +++ b/cli/chain.go @@ -399,6 +399,10 @@ var ChainSetHeadCmd = &cli.Command{ defer closer() ctx := ReqContext(cctx) + if cctx.NArg() != 1 { + return IncorrectNumArgs(cctx) + } + if !cctx.Bool("genesis") && !cctx.IsSet("epoch") && cctx.NArg() != 1 { return IncorrectNumArgs(cctx) } @@ -1299,6 +1303,10 @@ var SlashConsensusFault = &cli.Command{ a := srv.FullNodeAPI() ctx := ReqContext(cctx) + if cctx.NArg() != 2 { + return IncorrectNumArgs(cctx) + } + c1, err := cid.Parse(cctx.Args().Get(0)) if err != nil { return xerrors.Errorf("parsing cid 1: %w", err) diff --git a/cli/disputer.go b/cli/disputer.go index f6680daec66..f66d2f88bb0 100644 --- a/cli/disputer.go +++ b/cli/disputer.go @@ -63,6 +63,10 @@ var disputerMsgCmd = &cli.Command{ ctx := ReqContext(cctx) + if cctx.NArg() != 3 { + return IncorrectNumArgs(cctx) + } + api, closer, err := GetFullNodeAPI(cctx) if err != nil { return err @@ -150,6 +154,10 @@ var disputerStartCmd = &cli.Command{ ctx := ReqContext(cctx) + if cctx.NArg() != 1 { + return IncorrectNumArgs(cctx) + } + fromAddr, err := getSender(ctx, api, cctx.String("from")) if err != nil { return err diff --git a/cli/evm.go b/cli/evm.go index 612dd5cc116..685e142a0dc 100644 --- a/cli/evm.go +++ b/cli/evm.go @@ -217,8 +217,8 @@ var EvmDeployCmd = &cli.Command{ defer closer() ctx := ReqContext(cctx) - if argc := cctx.Args().Len(); argc != 1 { - return xerrors.Errorf("must pass the contract init code") + if cctx.NArg() != 1 { + return IncorrectNumArgs(cctx) } contract, err := os.ReadFile(cctx.Args().First()) @@ -338,8 +338,8 @@ var EvmInvokeCmd = &cli.Command{ defer closer() ctx := ReqContext(cctx) - if argc := cctx.Args().Len(); argc != 2 { - return xerrors.Errorf("must pass the address and calldata") + if cctx.NArg() != 2 { + return IncorrectNumArgs(cctx) } addr, err := address.NewFromString(cctx.Args().Get(0)) diff --git a/cli/f3.go b/cli/f3.go index 966c6f3d681..edfe7d13b14 100644 --- a/cli/f3.go +++ b/cli/f3.go @@ -316,8 +316,8 @@ var f3SubCmdCerts = &cli.Command{ f3FlagOutput, }, Before: func(cctx *cli.Context) error { - if count := cctx.NArg(); count > 1 { - return fmt.Errorf("too many arguments: expected at most 1 but got %d", count) + if cctx.NArg() != 1 { + return IncorrectNumArgs(cctx) } return nil }, @@ -397,8 +397,8 @@ Examples: f3FlagReverseOrder, }, Before: func(cctx *cli.Context) error { - if count := cctx.NArg(); count > 1 { - return fmt.Errorf("too many arguments: expected at most 1 but got %d", count) + if cctx.NArg() > 1 { + return IncorrectNumArgs(cctx) } return nil }, diff --git a/cli/filplus.go b/cli/filplus.go index f50bd91b5a8..21d48c0bb6d 100644 --- a/cli/filplus.go +++ b/cli/filplus.go @@ -256,7 +256,7 @@ var filplusListAllocationsCmd = &cli.Command{ }, }, Action: func(cctx *cli.Context) error { - if cctx.NArg() > 1 { + if cctx.NArg() != 1 { return IncorrectNumArgs(cctx) } @@ -401,7 +401,7 @@ var filplusListClaimsCmd = &cli.Command{ }, }, Action: func(cctx *cli.Context) error { - if cctx.NArg() > 1 { + if cctx.NArg() != 1 { return IncorrectNumArgs(cctx) } @@ -545,7 +545,7 @@ var filplusRemoveExpiredAllocationsCmd = &cli.Command{ }, }, Action: func(cctx *cli.Context) error { - if cctx.NArg() != 1 { + if cctx.NArg() < 1 { return IncorrectNumArgs(cctx) } @@ -638,7 +638,7 @@ var filplusRemoveExpiredClaimsCmd = &cli.Command{ }, }, Action: func(cctx *cli.Context) error { - if cctx.NArg() != 1 { + if cctx.NArg() < 1 { return IncorrectNumArgs(cctx) } diff --git a/cli/log.go b/cli/log.go index 7b223aa17a6..9caaf0daf9f 100644 --- a/cli/log.go +++ b/cli/log.go @@ -81,6 +81,10 @@ var LogSetLevel = &cli.Command{ defer closer() ctx := ReqContext(cctx) + if cctx.NArg() != 1 { + return IncorrectNumArgs(cctx) + } + if !cctx.Args().Present() { return fmt.Errorf("level is required") } diff --git a/cli/multisig.go b/cli/multisig.go index fbfccd6a3d6..a4ac3523827 100644 --- a/cli/multisig.go +++ b/cli/multisig.go @@ -89,7 +89,7 @@ var msigCreateCmd = &cli.Command{ }, }, Action: func(cctx *cli.Context) error { - if cctx.NArg() != 1 { + if cctx.NArg() < 1 { return IncorrectNumArgs(cctx) } @@ -214,6 +214,10 @@ var msigInspectCmd = &cli.Command{ store := adt.WrapStore(ctx, cbor.NewCborStore(blockstore.NewAPIBlockstore(api))) + if cctx.NArg() != 1 { + return IncorrectNumArgs(cctx) + } + maddr, err := address.NewFromString(cctx.Args().First()) if err != nil { return err diff --git a/cli/net.go b/cli/net.go index 249a6c4b7db..a1774ad744a 100644 --- a/cli/net.go +++ b/cli/net.go @@ -275,6 +275,10 @@ var NetDisconnect = &cli.Command{ defer closer() ctx := ReqContext(cctx) + if cctx.NArg() != 1 { + return IncorrectNumArgs(cctx) + } + ids := cctx.Args().Slice() for _, id := range ids { pid, err := peer.Decode(id) @@ -416,6 +420,10 @@ var NetFindPeer = &cli.Command{ ctx := ReqContext(cctx) + if cctx.NArg() != 1 { + return IncorrectNumArgs(cctx) + } + addrs, err := api.NetFindPeer(ctx, pid) if err != nil { @@ -592,6 +600,10 @@ var NetBlockAddPeer = &cli.Command{ defer closer() ctx := ReqContext(cctx) + if cctx.NArg() < 1 { + return IncorrectNumArgs(cctx) + } + var peers []peer.ID for _, s := range cctx.Args().Slice() { p, err := peer.Decode(s) @@ -618,6 +630,10 @@ var NetBlockAddIP = &cli.Command{ defer closer() ctx := ReqContext(cctx) + if cctx.NArg() < 1 { + return IncorrectNumArgs(cctx) + } + return api.NetBlockAdd(ctx, atypes.NetBlockList{IPAddrs: cctx.Args().Slice()}) }, } @@ -634,6 +650,10 @@ var NetBlockAddSubnet = &cli.Command{ defer closer() ctx := ReqContext(cctx) + if cctx.NArg() < 1 { + return IncorrectNumArgs(cctx) + } + return api.NetBlockAdd(ctx, atypes.NetBlockList{IPSubnets: cctx.Args().Slice()}) }, } @@ -660,6 +680,10 @@ var NetBlockRemovePeer = &cli.Command{ defer closer() ctx := ReqContext(cctx) + if cctx.NArg() < 1 { + return IncorrectNumArgs(cctx) + } + var peers []peer.ID for _, s := range cctx.Args().Slice() { p, err := peer.Decode(s) @@ -686,6 +710,10 @@ var NetBlockRemoveIP = &cli.Command{ defer closer() ctx := ReqContext(cctx) + if cctx.NArg() < 1 { + return IncorrectNumArgs(cctx) + } + return api.NetBlockRemove(ctx, atypes.NetBlockList{IPAddrs: cctx.Args().Slice()}) }, } @@ -702,6 +730,10 @@ var NetBlockRemoveSubnet = &cli.Command{ defer closer() ctx := ReqContext(cctx) + if cctx.NArg() < 1 { + return IncorrectNumArgs(cctx) + } + return api.NetBlockRemove(ctx, atypes.NetBlockList{IPSubnets: cctx.Args().Slice()}) }, } @@ -958,6 +990,10 @@ var NetProtectAdd = &cli.Command{ defer closer() ctx := ReqContext(cctx) + if cctx.NArg() < 1 { + return IncorrectNumArgs(cctx) + } + pids, err := decodePeerIDsFromArgs(cctx) if err != nil { return err @@ -988,6 +1024,10 @@ var NetProtectRemove = &cli.Command{ defer closer() ctx := ReqContext(cctx) + if cctx.NArg() < 1 { + return IncorrectNumArgs(cctx) + } + pids, err := decodePeerIDsFromArgs(cctx) if err != nil { return err diff --git a/cli/spcli/actor.go b/cli/spcli/actor.go index 41926fe83cf..992ebabdc36 100644 --- a/cli/spcli/actor.go +++ b/cli/spcli/actor.go @@ -265,6 +265,10 @@ func ActorSetAddrsCmd(getActor ActorAddressGetter) *cli.Command { ctx := lcli.ReqContext(cctx) + if cctx.NArg() != 1 { + return lcli.IncorrectNumArgs(cctx) + } + var addrs []abi.Multiaddrs for _, a := range args { maddr, err := ma.NewMultiaddr(a) @@ -746,6 +750,10 @@ func ActorProposeChangeWorkerCmd(getActor ActorAddressGetter) *cli.Command { ctx := lcli.ReqContext(cctx) + if cctx.NArg() != 1 { + return lcli.IncorrectNumArgs(cctx) + } + na, err := address.NewFromString(cctx.Args().First()) if err != nil { return err @@ -992,6 +1000,10 @@ func ActorConfirmChangeWorkerCmd(getActor ActorAddressGetter) *cli.Command { ctx := lcli.ReqContext(cctx) + if cctx.NArg() != 1 { + return lcli.IncorrectNumArgs(cctx) + } + na, err := address.NewFromString(cctx.Args().First()) if err != nil { return err diff --git a/cli/sync.go b/cli/sync.go index 8e4c3d889f7..01e2c4baf36 100644 --- a/cli/sync.go +++ b/cli/sync.go @@ -118,6 +118,10 @@ var SyncMarkBadCmd = &cli.Command{ defer closer() ctx := ReqContext(cctx) + if cctx.NArg() != 1 { + return IncorrectNumArgs(cctx) + } + if !cctx.Args().Present() { return fmt.Errorf("must specify block cid to mark") } @@ -149,6 +153,10 @@ var SyncUnmarkBadCmd = &cli.Command{ defer closer() ctx := ReqContext(cctx) + if cctx.NArg() != 1 { + return IncorrectNumArgs(cctx) + } + if cctx.Bool("all") { return napi.SyncUnmarkAllBad(ctx) } @@ -180,6 +188,10 @@ var SyncCheckBadCmd = &cli.Command{ defer closer() ctx := ReqContext(cctx) + if cctx.NArg() != 1 { + return IncorrectNumArgs(cctx) + } + if !cctx.Args().Present() { return fmt.Errorf("must specify block cid to check") } @@ -222,6 +234,10 @@ var SyncCheckpointCmd = &cli.Command{ defer closer() ctx := ReqContext(cctx) + if cctx.NArg() != 1 { + return IncorrectNumArgs(cctx) + } + var ts *types.TipSet if cctx.IsSet("epoch") { From ee2e114405de7b4002d273c7fd057ebde6cef479 Mon Sep 17 00:00:00 2001 From: Amit Gaikwad Date: Wed, 5 Feb 2025 01:27:26 +0530 Subject: [PATCH 4/4] fixes --- cli/chain.go | 4 --- cli/disputer.go | 25 +++++++++++--- cli/evm.go | 4 +-- cli/f3.go | 6 ++-- cli/filplus.go | 4 +-- cli/helper.go | 4 +++ cli/log.go | 6 +--- cli/multisig.go | 14 +++----- cli/net.go | 67 +++++++++++++++----------------------- cli/spcli/actor.go | 20 +++--------- cli/spcli/sectors.go | 2 +- cli/sync.go | 40 +++++++---------------- cmd/lotus-miner/proving.go | 2 +- cmd/lotus-miner/sealing.go | 2 +- cmd/lotus-shed/sectors.go | 2 +- cmd/lotus-shed/sync.go | 6 ++-- 16 files changed, 88 insertions(+), 120 deletions(-) diff --git a/cli/chain.go b/cli/chain.go index fca34b36b27..d48c56730de 100644 --- a/cli/chain.go +++ b/cli/chain.go @@ -399,10 +399,6 @@ var ChainSetHeadCmd = &cli.Command{ defer closer() ctx := ReqContext(cctx) - if cctx.NArg() != 1 { - return IncorrectNumArgs(cctx) - } - if !cctx.Bool("genesis") && !cctx.IsSet("epoch") && cctx.NArg() != 1 { return IncorrectNumArgs(cctx) } diff --git a/cli/disputer.go b/cli/disputer.go index f66d2f88bb0..d24e1b2ff8e 100644 --- a/cli/disputer.go +++ b/cli/disputer.go @@ -55,7 +55,16 @@ var disputerMsgCmd = &cli.Command{ Name: "dispute", Usage: "Send a specific DisputeWindowedPoSt message", ArgsUsage: "[minerAddress index postIndex]", - Flags: []cli.Flag{}, + Flags: []cli.Flag{ + &cli.Uint64Flag{ + Name: "max-fee", + Usage: "maximum fees to spend on a dispute message", + }, + &cli.StringFlag{ + Name: "from", + Usage: "the address to send dispute messages from if not the default wallet address", + }, + }, Action: func(cctx *cli.Context) error { if cctx.NArg() != 3 { return IncorrectNumArgs(cctx) @@ -141,8 +150,16 @@ var disputerStartCmd = &cli.Command{ ArgsUsage: "[minerAddress]", Flags: []cli.Flag{ &cli.Uint64Flag{ - Name: "start-epoch", - Usage: "only start disputing PoSts after this epoch ", + Name: "height", + Usage: "only start disputing PoSts after this height ", + }, + &cli.Uint64Flag{ + Name: "max-fee", + Usage: "maximum fees to spend on a dispute message", + }, + &cli.StringFlag{ + Name: "from", + Usage: "the address to send dispute messages from if not the default wallet address", }, }, Action: func(cctx *cli.Context) error { @@ -154,7 +171,7 @@ var disputerStartCmd = &cli.Command{ ctx := ReqContext(cctx) - if cctx.NArg() != 1 { + if cctx.NArg() != 0 { return IncorrectNumArgs(cctx) } diff --git a/cli/evm.go b/cli/evm.go index 685e142a0dc..f0dbec7e3b3 100644 --- a/cli/evm.go +++ b/cli/evm.go @@ -218,7 +218,7 @@ var EvmDeployCmd = &cli.Command{ ctx := ReqContext(cctx) if cctx.NArg() != 1 { - return IncorrectNumArgs(cctx) + return IncorrectNumArgsWithHint(cctx, "contract init code required") } contract, err := os.ReadFile(cctx.Args().First()) @@ -339,7 +339,7 @@ var EvmInvokeCmd = &cli.Command{ ctx := ReqContext(cctx) if cctx.NArg() != 2 { - return IncorrectNumArgs(cctx) + return IncorrectNumArgsWithHint(cctx, "address and calldata requried") } addr, err := address.NewFromString(cctx.Args().Get(0)) diff --git a/cli/f3.go b/cli/f3.go index edfe7d13b14..0ffb984054f 100644 --- a/cli/f3.go +++ b/cli/f3.go @@ -316,8 +316,8 @@ var f3SubCmdCerts = &cli.Command{ f3FlagOutput, }, Before: func(cctx *cli.Context) error { - if cctx.NArg() != 1 { - return IncorrectNumArgs(cctx) + if cctx.NArg() > 1 { + return IncorrectNumArgsWithHint(cctx, "expected 1 at most") } return nil }, @@ -398,7 +398,7 @@ Examples: }, Before: func(cctx *cli.Context) error { if cctx.NArg() > 1 { - return IncorrectNumArgs(cctx) + return IncorrectNumArgsWithHint(cctx, "expected 1 at most") } return nil }, diff --git a/cli/filplus.go b/cli/filplus.go index 21d48c0bb6d..ae380afa102 100644 --- a/cli/filplus.go +++ b/cli/filplus.go @@ -256,7 +256,7 @@ var filplusListAllocationsCmd = &cli.Command{ }, }, Action: func(cctx *cli.Context) error { - if cctx.NArg() != 1 { + if cctx.NArg() > 1 { return IncorrectNumArgs(cctx) } @@ -401,7 +401,7 @@ var filplusListClaimsCmd = &cli.Command{ }, }, Action: func(cctx *cli.Context) error { - if cctx.NArg() != 1 { + if cctx.NArg() > 1 { return IncorrectNumArgs(cctx) } diff --git a/cli/helper.go b/cli/helper.go index 551422983b9..5bcdaa16c23 100644 --- a/cli/helper.go +++ b/cli/helper.go @@ -37,6 +37,10 @@ func IncorrectNumArgs(cctx *ufcli.Context) error { return ShowHelp(cctx, fmt.Errorf("incorrect number of arguments, got %d", cctx.NArg())) } +func IncorrectNumArgsWithHint(cctx *ufcli.Context, hint string) error { + return ShowHelp(cctx, fmt.Errorf("incorrect number of arguments, got %d, %s", cctx.NArg(), hint)) +} + func RunApp(app *ufcli.App) { c := make(chan os.Signal, 1) signal.Notify(c, syscall.SIGTERM, syscall.SIGINT) diff --git a/cli/log.go b/cli/log.go index 9caaf0daf9f..224a9f6a07d 100644 --- a/cli/log.go +++ b/cli/log.go @@ -82,11 +82,7 @@ var LogSetLevel = &cli.Command{ ctx := ReqContext(cctx) if cctx.NArg() != 1 { - return IncorrectNumArgs(cctx) - } - - if !cctx.Args().Present() { - return fmt.Errorf("level is required") + return IncorrectNumArgsWithHint(cctx, "level required") } systems := cctx.StringSlice("system") diff --git a/cli/multisig.go b/cli/multisig.go index a4ac3523827..13ecf6bf37e 100644 --- a/cli/multisig.go +++ b/cli/multisig.go @@ -201,8 +201,8 @@ var msigInspectCmd = &cli.Command{ }, }, Action: func(cctx *cli.Context) error { - if !cctx.Args().Present() { - return ShowHelp(cctx, fmt.Errorf("must specify address of multisig to inspect")) + if cctx.NArg() != 1 { + return IncorrectNumArgsWithHint(cctx, "specify address of multisig") } api, closer, err := GetFullNodeAPI(cctx) @@ -214,10 +214,6 @@ var msigInspectCmd = &cli.Command{ store := adt.WrapStore(ctx, cbor.NewCborStore(blockstore.NewAPIBlockstore(api))) - if cctx.NArg() != 1 { - return IncorrectNumArgs(cctx) - } - maddr, err := address.NewFromString(cctx.Args().First()) if err != nil { return err @@ -403,7 +399,7 @@ var msigProposeCmd = &cli.Command{ }, }, Action: func(cctx *cli.Context) error { - if cctx.NArg() != 3 { + if cctx.NArg() < 3 { return ShowHelp(cctx, fmt.Errorf("must pass at least multisig address, destination, and value")) } @@ -525,7 +521,7 @@ var msigApproveCmd = &cli.Command{ }, }, Action: func(cctx *cli.Context) error { - if cctx.NArg() != 2 { + if cctx.NArg() < 2 { return ShowHelp(cctx, fmt.Errorf("must pass at least multisig address and message ID")) } @@ -662,7 +658,7 @@ var msigCancelCmd = &cli.Command{ }, }, Action: func(cctx *cli.Context) error { - if cctx.NArg() != 2 { + if cctx.NArg() < 2 { return ShowHelp(cctx, fmt.Errorf("must pass at least multisig address and message ID")) } diff --git a/cli/net.go b/cli/net.go index a1774ad744a..7cffecd3666 100644 --- a/cli/net.go +++ b/cli/net.go @@ -275,8 +275,8 @@ var NetDisconnect = &cli.Command{ defer closer() ctx := ReqContext(cctx) - if cctx.NArg() != 1 { - return IncorrectNumArgs(cctx) + if cctx.NArg() == 0 { + return IncorrectNumArgsWithHint(cctx, "must provide at least one peerID") } ids := cctx.Args().Slice() @@ -403,8 +403,7 @@ var NetFindPeer = &cli.Command{ ArgsUsage: "[peerId]", Action: func(cctx *cli.Context) error { if cctx.NArg() != 1 { - fmt.Println("Usage: findpeer [peer ID]") - return nil + return IncorrectNumArgsWithHint(cctx, "must provide a peerID") } pid, err := peer.Decode(cctx.Args().First()) @@ -420,10 +419,6 @@ var NetFindPeer = &cli.Command{ ctx := ReqContext(cctx) - if cctx.NArg() != 1 { - return IncorrectNumArgs(cctx) - } - addrs, err := api.NetFindPeer(ctx, pid) if err != nil { @@ -593,6 +588,10 @@ var NetBlockAddPeer = &cli.Command{ Usage: "Block a peer", ArgsUsage: " ...", Action: func(cctx *cli.Context) error { + if cctx.NArg() < 1 { + return IncorrectNumArgs(cctx) + } + api, closer, err := GetFullNodeAPI(cctx) if err != nil { return err @@ -600,10 +599,6 @@ var NetBlockAddPeer = &cli.Command{ defer closer() ctx := ReqContext(cctx) - if cctx.NArg() < 1 { - return IncorrectNumArgs(cctx) - } - var peers []peer.ID for _, s := range cctx.Args().Slice() { p, err := peer.Decode(s) @@ -623,6 +618,10 @@ var NetBlockAddIP = &cli.Command{ Usage: "Block an IP address", ArgsUsage: " ...", Action: func(cctx *cli.Context) error { + if cctx.NArg() < 1 { + return IncorrectNumArgs(cctx) + } + api, closer, err := GetFullNodeAPI(cctx) if err != nil { return err @@ -630,10 +629,6 @@ var NetBlockAddIP = &cli.Command{ defer closer() ctx := ReqContext(cctx) - if cctx.NArg() < 1 { - return IncorrectNumArgs(cctx) - } - return api.NetBlockAdd(ctx, atypes.NetBlockList{IPAddrs: cctx.Args().Slice()}) }, } @@ -643,6 +638,10 @@ var NetBlockAddSubnet = &cli.Command{ Usage: "Block an IP subnet", ArgsUsage: " ...", Action: func(cctx *cli.Context) error { + if cctx.NArg() < 1 { + return IncorrectNumArgs(cctx) + } + api, closer, err := GetFullNodeAPI(cctx) if err != nil { return err @@ -650,10 +649,6 @@ var NetBlockAddSubnet = &cli.Command{ defer closer() ctx := ReqContext(cctx) - if cctx.NArg() < 1 { - return IncorrectNumArgs(cctx) - } - return api.NetBlockAdd(ctx, atypes.NetBlockList{IPSubnets: cctx.Args().Slice()}) }, } @@ -673,6 +668,10 @@ var NetBlockRemovePeer = &cli.Command{ Usage: "Unblock a peer", ArgsUsage: " ...", Action: func(cctx *cli.Context) error { + if cctx.NArg() < 1 { + return IncorrectNumArgs(cctx) + } + api, closer, err := GetFullNodeAPI(cctx) if err != nil { return err @@ -680,10 +679,6 @@ var NetBlockRemovePeer = &cli.Command{ defer closer() ctx := ReqContext(cctx) - if cctx.NArg() < 1 { - return IncorrectNumArgs(cctx) - } - var peers []peer.ID for _, s := range cctx.Args().Slice() { p, err := peer.Decode(s) @@ -703,6 +698,10 @@ var NetBlockRemoveIP = &cli.Command{ Usage: "Unblock an IP address", ArgsUsage: " ...", Action: func(cctx *cli.Context) error { + if cctx.NArg() < 1 { + return IncorrectNumArgs(cctx) + } + api, closer, err := GetFullNodeAPI(cctx) if err != nil { return err @@ -710,10 +709,6 @@ var NetBlockRemoveIP = &cli.Command{ defer closer() ctx := ReqContext(cctx) - if cctx.NArg() < 1 { - return IncorrectNumArgs(cctx) - } - return api.NetBlockRemove(ctx, atypes.NetBlockList{IPAddrs: cctx.Args().Slice()}) }, } @@ -723,6 +718,10 @@ var NetBlockRemoveSubnet = &cli.Command{ Usage: "Unblock an IP subnet", ArgsUsage: " ...", Action: func(cctx *cli.Context) error { + if cctx.NArg() < 1 { + return IncorrectNumArgs(cctx) + } + api, closer, err := GetFullNodeAPI(cctx) if err != nil { return err @@ -730,10 +729,6 @@ var NetBlockRemoveSubnet = &cli.Command{ defer closer() ctx := ReqContext(cctx) - if cctx.NArg() < 1 { - return IncorrectNumArgs(cctx) - } - return api.NetBlockRemove(ctx, atypes.NetBlockList{IPSubnets: cctx.Args().Slice()}) }, } @@ -990,10 +985,6 @@ var NetProtectAdd = &cli.Command{ defer closer() ctx := ReqContext(cctx) - if cctx.NArg() < 1 { - return IncorrectNumArgs(cctx) - } - pids, err := decodePeerIDsFromArgs(cctx) if err != nil { return err @@ -1024,10 +1015,6 @@ var NetProtectRemove = &cli.Command{ defer closer() ctx := ReqContext(cctx) - if cctx.NArg() < 1 { - return IncorrectNumArgs(cctx) - } - pids, err := decodePeerIDsFromArgs(cctx) if err != nil { return err diff --git a/cli/spcli/actor.go b/cli/spcli/actor.go index 992ebabdc36..525f991e0b2 100644 --- a/cli/spcli/actor.go +++ b/cli/spcli/actor.go @@ -265,10 +265,6 @@ func ActorSetAddrsCmd(getActor ActorAddressGetter) *cli.Command { ctx := lcli.ReqContext(cctx) - if cctx.NArg() != 1 { - return lcli.IncorrectNumArgs(cctx) - } - var addrs []abi.Multiaddrs for _, a := range args { maddr, err := ma.NewMultiaddr(a) @@ -738,8 +734,8 @@ func ActorProposeChangeWorkerCmd(getActor ActorAddressGetter) *cli.Command { }, }, Action: func(cctx *cli.Context) error { - if !cctx.Args().Present() { - return fmt.Errorf("must pass address of new worker address") + if cctx.NArg() != 1 { + return lcli.IncorrectNumArgsWithHint(cctx, "must pass address of the new worker address") } api, acloser, err := lcli.GetFullNodeAPI(cctx) @@ -750,10 +746,6 @@ func ActorProposeChangeWorkerCmd(getActor ActorAddressGetter) *cli.Command { ctx := lcli.ReqContext(cctx) - if cctx.NArg() != 1 { - return lcli.IncorrectNumArgs(cctx) - } - na, err := address.NewFromString(cctx.Args().First()) if err != nil { return err @@ -988,8 +980,8 @@ func ActorConfirmChangeWorkerCmd(getActor ActorAddressGetter) *cli.Command { }, }, Action: func(cctx *cli.Context) error { - if !cctx.Args().Present() { - return fmt.Errorf("must pass address of new worker address") + if cctx.NArg() != 1 { + return lcli.IncorrectNumArgsWithHint(cctx, "must pass address of new worker address") } api, acloser, err := lcli.GetFullNodeAPI(cctx) @@ -1000,10 +992,6 @@ func ActorConfirmChangeWorkerCmd(getActor ActorAddressGetter) *cli.Command { ctx := lcli.ReqContext(cctx) - if cctx.NArg() != 1 { - return lcli.IncorrectNumArgs(cctx) - } - na, err := address.NewFromString(cctx.Args().First()) if err != nil { return err diff --git a/cli/spcli/sectors.go b/cli/spcli/sectors.go index b85ec85ed07..07d076ad441 100644 --- a/cli/spcli/sectors.go +++ b/cli/spcli/sectors.go @@ -1336,7 +1336,7 @@ func TerminateSectorCmd(getActorAddress ActorAddressGetter) *cli.Command { }, }, Action: func(cctx *cli.Context) error { - if cctx.NArg() != 1 { + if cctx.NArg() < 1 { return lcli.ShowHelp(cctx, fmt.Errorf("at least one sector must be specified")) } diff --git a/cli/sync.go b/cli/sync.go index 01e2c4baf36..2eb070c3d80 100644 --- a/cli/sync.go +++ b/cli/sync.go @@ -111,6 +111,10 @@ var SyncMarkBadCmd = &cli.Command{ Usage: "Mark the given block as bad, will prevent syncing to a chain that contains it", ArgsUsage: "[blockCid]", Action: func(cctx *cli.Context) error { + if cctx.NArg() != 1 { + return IncorrectNumArgsWithHint(cctx, "must specify block cid to mark") + } + napi, closer, err := GetFullNodeAPI(cctx) if err != nil { return err @@ -118,14 +122,6 @@ var SyncMarkBadCmd = &cli.Command{ defer closer() ctx := ReqContext(cctx) - if cctx.NArg() != 1 { - return IncorrectNumArgs(cctx) - } - - if !cctx.Args().Present() { - return fmt.Errorf("must specify block cid to mark") - } - bcid, err := cid.Decode(cctx.Args().First()) if err != nil { return fmt.Errorf("failed to decode input as a cid: %s", err) @@ -146,6 +142,10 @@ var SyncUnmarkBadCmd = &cli.Command{ }, ArgsUsage: "[blockCid]", Action: func(cctx *cli.Context) error { + if cctx.NArg() != 1 { + return IncorrectNumArgsWithHint(cctx, "must specify block cid to unmark") + } + napi, closer, err := GetFullNodeAPI(cctx) if err != nil { return err @@ -153,18 +153,10 @@ var SyncUnmarkBadCmd = &cli.Command{ defer closer() ctx := ReqContext(cctx) - if cctx.NArg() != 1 { - return IncorrectNumArgs(cctx) - } - if cctx.Bool("all") { return napi.SyncUnmarkAllBad(ctx) } - if !cctx.Args().Present() { - return fmt.Errorf("must specify block cid to unmark") - } - bcid, err := cid.Decode(cctx.Args().First()) if err != nil { return fmt.Errorf("failed to decode input as a cid: %s", err) @@ -179,6 +171,10 @@ var SyncCheckBadCmd = &cli.Command{ Usage: "check if the given block was marked bad, and for what reason", ArgsUsage: "[blockCid]", Action: func(cctx *cli.Context) error { + if cctx.NArg() != 1 { + return IncorrectNumArgsWithHint(cctx, "must specify block cid to check") + } + afmt := NewAppFmt(cctx.App) napi, closer, err := GetFullNodeAPI(cctx) @@ -188,14 +184,6 @@ var SyncCheckBadCmd = &cli.Command{ defer closer() ctx := ReqContext(cctx) - if cctx.NArg() != 1 { - return IncorrectNumArgs(cctx) - } - - if !cctx.Args().Present() { - return fmt.Errorf("must specify block cid to check") - } - bcid, err := cid.Decode(cctx.Args().First()) if err != nil { return fmt.Errorf("failed to decode input as a cid: %s", err) @@ -234,10 +222,6 @@ var SyncCheckpointCmd = &cli.Command{ defer closer() ctx := ReqContext(cctx) - if cctx.NArg() != 1 { - return IncorrectNumArgs(cctx) - } - var ts *types.TipSet if cctx.IsSet("epoch") { diff --git a/cmd/lotus-miner/proving.go b/cmd/lotus-miner/proving.go index 122d13a57a6..f5e4d59c0e2 100644 --- a/cmd/lotus-miner/proving.go +++ b/cmd/lotus-miner/proving.go @@ -304,7 +304,7 @@ var provingRecoverFaultsCmd = &cli.Command{ }, }, Action: func(cctx *cli.Context) error { - if cctx.NArg() != 1 { + if cctx.NArg() < 1 { return lcli.ShowHelp(cctx, xerrors.Errorf("must pass at least 1 sector number")) } diff --git a/cmd/lotus-miner/sealing.go b/cmd/lotus-miner/sealing.go index 9d96eb6ffd5..6d5f4ed7cbb 100644 --- a/cmd/lotus-miner/sealing.go +++ b/cmd/lotus-miner/sealing.go @@ -410,7 +410,7 @@ var sealingDataCidCmd = &cli.Command{ }, }, Action: func(cctx *cli.Context) error { - if cctx.NArg() != 1 || cctx.NArg() > 2 { + if cctx.NArg() < 1 || cctx.NArg() > 2 { return lcli.ShowHelp(cctx, xerrors.Errorf("expected 1 or 2 arguments")) } diff --git a/cmd/lotus-shed/sectors.go b/cmd/lotus-shed/sectors.go index 2031dbd32e3..faa21f9d94e 100644 --- a/cmd/lotus-shed/sectors.go +++ b/cmd/lotus-shed/sectors.go @@ -88,7 +88,7 @@ var terminateSectorPenaltyEstimationCmd = &cli.Command{ }, }, Action: func(cctx *cli.Context) error { - if cctx.NArg() != 1 { + if cctx.NArg() < 1 { return lcli.ShowHelp(cctx, fmt.Errorf("at least one sector must be specified")) } diff --git a/cmd/lotus-shed/sync.go b/cmd/lotus-shed/sync.go index b39ec0d9be9..eb11dea27eb 100644 --- a/cmd/lotus-shed/sync.go +++ b/cmd/lotus-shed/sync.go @@ -38,7 +38,7 @@ var syncValidateCmd = &cli.Command{ defer closer() ctx := lcli.ReqContext(cctx) - if cctx.NArg() != 1 { + if cctx.NArg() < 1 { return lcli.ShowHelp(cctx, fmt.Errorf("at least one block cid must be provided")) } @@ -73,7 +73,7 @@ var syncScrapePowerCmd = &cli.Command{ Usage: "given a height and a tipset, reports what percentage of mining power had a winning ticket between the tipset and height", ArgsUsage: "[height tipsetkey]", Action: func(cctx *cli.Context) error { - if cctx.NArg() != 1 { + if cctx.NArg() < 1 { fmt.Println("usage: [blockCid1 blockCid2...]") fmt.Println("Any CIDs passed after the height will be used as the tipset key") fmt.Println("If no block CIDs are provided, chain head will be used") @@ -88,7 +88,7 @@ var syncScrapePowerCmd = &cli.Command{ defer closer() ctx := lcli.ReqContext(cctx) - if cctx.NArg() != 1 { + if cctx.NArg() < 1 { return lcli.ShowHelp(cctx, fmt.Errorf("at least one block cid must be provided")) }