diff --git a/etcdctlv3/README.md b/etcdctlv3/README.md index 8d21e2dc8..ac5fa662f 100644 --- a/etcdctlv3/README.md +++ b/etcdctlv3/README.md @@ -42,3 +42,30 @@ Insert '--' for workaround: ./etcdctl put -- ``` +### DEL [options] \ [range_end] + +Removes the specified key or range of keys [key, range_end) if `range-end` is given. + +#### Options + +TODO: --prefix, --from + +#### Return value + +Simple reply + +- The number of keys that were removed in decimal if DEL executed correctly. Exit code is zero. + +- Error string if DEL failed. Exit code is non-zero. + +TODO: probably json and binary encoded proto + +#### Examples + +``` bash +./etcdctl put foo bar +OK +./etcdctl del foo +1 +./etcdctl range foo +``` diff --git a/etcdctlv3/command/del_command.go b/etcdctlv3/command/del_command.go new file mode 100644 index 000000000..dca38bb3d --- /dev/null +++ b/etcdctlv3/command/del_command.go @@ -0,0 +1,55 @@ +// Copyright 2015 CoreOS, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package command + +import ( + "fmt" + + "github.com/coreos/etcd/Godeps/_workspace/src/github.com/spf13/cobra" + "github.com/coreos/etcd/Godeps/_workspace/src/golang.org/x/net/context" + "github.com/coreos/etcd/clientv3" +) + +// NewDelCommand returns the cobra command for "del". +func NewDelCommand() *cobra.Command { + return &cobra.Command{ + Use: "del [options] [range_end]", + Short: "Removes the specified key or range of keys [key, range_end).", + Run: delCommandFunc, + } +} + +// delCommandFunc executes the "del" command. +func delCommandFunc(cmd *cobra.Command, args []string) { + if len(args) == 0 || len(args) > 2 { + ExitWithError(ExitBadArgs, fmt.Errorf("del command needs one argument as key and an optional argument as range_end.")) + } + + opts := []clientv3.OpOption{} + key := args[0] + if len(args) > 1 { + opts = append(opts, clientv3.WithRange(args[1])) + } + + c := mustClientFromCmd(cmd) + kvapi := clientv3.NewKV(c) + _, err := kvapi.Delete(context.TODO(), key, opts...) + if err != nil { + ExitWithError(ExitError, err) + } + // TODO: add number of key removed into the response of delete. + // TODO: print out the number of removed keys. + fmt.Println(0) +} diff --git a/etcdctlv3/command/delete_range_command.go b/etcdctlv3/command/delete_range_command.go deleted file mode 100644 index 320f02ebb..000000000 --- a/etcdctlv3/command/delete_range_command.go +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2015 CoreOS, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package command - -import ( - "fmt" - - "github.com/coreos/etcd/Godeps/_workspace/src/github.com/spf13/cobra" - "github.com/coreos/etcd/Godeps/_workspace/src/golang.org/x/net/context" - pb "github.com/coreos/etcd/etcdserver/etcdserverpb" -) - -// NewDeleteRangeCommand returns the cobra command for "deleteRange". -func NewDeleteRangeCommand() *cobra.Command { - return &cobra.Command{ - Use: "delete-range", - Short: "DeleteRange deletes the given range from the store.", - Run: deleteRangeCommandFunc, - } -} - -// deleteRangeCommandFunc executes the "deleteRange" command. -func deleteRangeCommandFunc(cmd *cobra.Command, args []string) { - if len(args) == 0 { - ExitWithError(ExitBadArgs, fmt.Errorf("delete-range command needs arguments.")) - } - - var rangeEnd []byte - key := []byte(args[0]) - if len(args) > 1 { - rangeEnd = []byte(args[1]) - } - - req := &pb.DeleteRangeRequest{Key: key, RangeEnd: rangeEnd} - mustClientFromCmd(cmd).KV.DeleteRange(context.Background(), req) - - if rangeEnd != nil { - fmt.Printf("range [%s, %s) is deleted\n", string(key), string(rangeEnd)) - } else { - fmt.Printf("key %s is deleted\n", string(key)) - } -} diff --git a/etcdctlv3/main.go b/etcdctlv3/main.go index 6bcbb0743..a00f5354a 100644 --- a/etcdctlv3/main.go +++ b/etcdctlv3/main.go @@ -50,7 +50,7 @@ func init() { rootCmd.AddCommand( command.NewRangeCommand(), command.NewPutCommand(), - command.NewDeleteRangeCommand(), + command.NewDelCommand(), command.NewTxnCommand(), command.NewCompactionCommand(), command.NewWatchCommand(),