From be25dee55dd2d7d1ac2e8ba1890a4cd4650966c2 Mon Sep 17 00:00:00 2001 From: Bel LaPointe Date: Thu, 13 Feb 2020 07:12:40 -0700 Subject: [PATCH] cli and ls s3 --- cli/ls_s3.sh | 5 ++++- cli/main.go | 7 +++++-- minio.go | 27 ++++++++++++++++++++++++++- 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/cli/ls_s3.sh b/cli/ls_s3.sh index bead2d6..fdba7e0 100644 --- a/cli/ls_s3.sh +++ b/cli/ls_s3.sh @@ -7,6 +7,8 @@ function main() { local pass="${AWS_PASS:-"YXlRDCKZPDMWF7qXZIa/t4aBi2WCpd8uu2LWSZwQ"}" local min="${1:-"---"}" local max="${2:-"}}}"}" + shift + shift go run main.go \ -do list \ -db minio \ @@ -15,7 +17,8 @@ function main() { -pass "$pass" \ -ns "$bucket" \ -min "$min" \ - -max "$max" + -max "$max" \ + "$@" } if [ "$0" == "$BASH_SOURCE" ]; then diff --git a/cli/main.go b/cli/main.go index a81a6c8..8f90b94 100755 --- a/cli/main.go +++ b/cli/main.go @@ -47,9 +47,11 @@ func main() { d := strings.Join(c, "\n\t") b = []byte(fmt.Sprintf("%s", d)) case "get": - b, err = db.Get(as.Get("k").GetString()) + ns := strings.Split(as.Get("ns").GetString(), " ") + b, err = db.Get(as.Get("k").GetString(), ns...) case "set": - err = db.Set(as.Get("k").GetString(), []byte(as.Get("v").GetString())) + ns := strings.Split(as.Get("ns").GetString(), " ") + err = db.Set(as.Get("k").GetString(), []byte(as.Get("v").GetString()), ns...) case "cli": reader := bufio.NewReader(os.Stdin) for { @@ -80,4 +82,5 @@ func main() { } stop := time.Now() log.Printf("(%v) %v: %s", stop.Sub(start), err, b) + fmt.Printf("%s", b) } diff --git a/minio.go b/minio.go index e1c6089..0f931f6 100755 --- a/minio.go +++ b/minio.go @@ -4,6 +4,7 @@ import ( "bytes" "io/ioutil" "net/url" + "sort" "strings" minio "github.com/minio/minio-go" @@ -29,7 +30,8 @@ func (m *Minio) List(ns []string, limits ...string) ([]string, error) { done := make(chan struct{}) defer close(done) keys := []string{} - for resp := range m.db.ListObjects(namespace, "", true, done) { + prefix := commonSubstr(limits[:2]) + for resp := range m.db.ListObjects(namespace, prefix, true, done) { if resp.Err != nil { return keys, resp.Err } @@ -81,3 +83,26 @@ func (m *Minio) Close() error { func isNotExistErr(err error) bool { return err != nil && strings.Contains(err.Error(), "does not exist") } + +func commonSubstr(items []string) string { + if len(items) == 0 { + return "" + } else if len(items) == 1 { + return items[0] + } + sort.Strings(items) + min := items[0] + max := items[len(items)-1] + if len(min) == 0 || len(max) == 0 { + return "" + } + if min[0] != max[0] { + return "" + } + for i := 1; i < len(min) && i < len(max); i++ { + if min[i] != max[i] { + return min[:i-1] + } + } + return min +}