Small non-breaking UX changes to keys {list,delete} commands (#5366)

Add --list-names flag to keys command for short listing.

Make keys delete accept multiple key names at once.

Usage example:
 gaiacli keys list -n | xargs gaiacli keys delete
This commit is contained in:
Alessio Treglia
2019-12-05 16:07:29 +01:00
committed by GitHub
parent 722a633f54
commit 0300a6f6d7
4 changed files with 57 additions and 28 deletions
+26 -24
View File
@@ -18,27 +18,26 @@ const (
func deleteKeyCommand() *cobra.Command {
cmd := &cobra.Command{
Use: "delete <name>",
Short: "Delete the given key",
Long: `Delete a key from the store.
Use: "delete <name>...",
Short: "Delete the given keys",
Long: `Delete keys from the Keybase backend.
Note that removing offline or ledger keys will remove
only the public key references stored locally, i.e.
private keys stored in a ledger device cannot be deleted with the CLI.
`,
RunE: runDeleteCmd,
Args: cobra.ExactArgs(1),
Args: cobra.MinimumNArgs(1),
}
cmd.Flags().BoolP(flagYes, "y", false,
"Skip confirmation prompt when deleting offline or ledger key references")
cmd.Flags().BoolP(flagForce, "f", false,
"Remove the key unconditionally without asking for the passphrase")
"Remove the key unconditionally without asking for the passphrase. Deprecated.")
return cmd
}
func runDeleteCmd(cmd *cobra.Command, args []string) error {
name := args[0]
buf := bufio.NewReader(cmd.InOrStdin())
kb, err := NewKeyringFromHomeFlag(buf)
@@ -46,31 +45,34 @@ func runDeleteCmd(cmd *cobra.Command, args []string) error {
return err
}
info, err := kb.Get(name)
if err != nil {
return err
}
if info.GetType() == keys.TypeLedger || info.GetType() == keys.TypeOffline {
// confirm deletion, unless -y is passed
if !viper.GetBool(flagYes) {
if err := confirmDeletion(buf); err != nil {
return err
}
for _, name := range args {
info, err := kb.Get(name)
if err != nil {
return err
}
if info.GetType() == keys.TypeLedger || info.GetType() == keys.TypeOffline {
// confirm deletion, unless -y is passed
if !viper.GetBool(flagYes) {
if err := confirmDeletion(buf); err != nil {
return err
}
}
if err := kb.Delete(name, "", true); err != nil {
return err
}
cmd.PrintErrln("Public key reference deleted")
return nil
}
// old password and skip flag arguments are ignored
if err := kb.Delete(name, "", true); err != nil {
return err
}
cmd.PrintErrln("Public key reference deleted")
return nil
cmd.PrintErrln("Key deleted forever (uh oh!)")
}
// old password and skip flag arguments are ignored
if err := kb.Delete(name, "", true); err != nil {
return err
}
cmd.PrintErrln("Key deleted forever (uh oh!)")
return nil
}
+19 -4
View File
@@ -2,10 +2,13 @@ package keys
import (
"github.com/spf13/cobra"
"github.com/spf13/viper"
"github.com/cosmos/cosmos-sdk/client/flags"
)
const flagListNames = "list-names"
func listKeysCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "list",
@@ -15,18 +18,30 @@ along with their associated name and address.`,
RunE: runListCmd,
}
cmd.Flags().Bool(flags.FlagIndentResponse, false, "Add indent to JSON response")
cmd.Flags().BoolP(flagListNames, "n", false, "List names only")
return cmd
}
func runListCmd(cmd *cobra.Command, args []string) error {
func runListCmd(cmd *cobra.Command, _ []string) error {
kb, err := NewKeyringFromHomeFlag(cmd.InOrStdin())
if err != nil {
return err
}
infos, err := kb.List()
if err == nil {
printInfos(infos)
if err != nil {
return err
}
return err
if !viper.GetBool(flagListNames) {
printInfos(infos)
return nil
}
cmd.SetOut(cmd.OutOrStdout())
for _, info := range infos {
cmd.Println(info.GetName())
}
return nil
}
+9
View File
@@ -57,10 +57,19 @@ func Test_runListCmd(t *testing.T) {
if runningUnattended {
mockIn.Reset("testpass1\ntestpass1\n")
}
viper.Set(flagListNames, false)
viper.Set(flags.FlagHome, tt.kbDir)
if err := runListCmd(tt.args.cmd, tt.args.args); (err != nil) != tt.wantErr {
t.Errorf("runListCmd() error = %v, wantErr %v", err, tt.wantErr)
}
if runningUnattended {
mockIn.Reset("testpass1\ntestpass1\n")
}
viper.Set(flagListNames, true)
if err := runListCmd(tt.args.cmd, tt.args.args); (err != nil) != tt.wantErr {
t.Errorf("runListCmd() error = %v, wantErr %v", err, tt.wantErr)
}
})
}
}