aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lu <chris.lu@gmail.com>2019-04-04 19:27:51 -0700
committerChris Lu <chris.lu@gmail.com>2019-04-04 19:27:51 -0700
commitaf37b374cbe915f033058abad98d648ccce70d5c (patch)
treedeb4704677e0ac8c660bb81e6e991c38aa22f5f0
parent766396d249652c1b29771fa1fce65250f9707d1d (diff)
downloadseaweedfs-af37b374cbe915f033058abad98d648ccce70d5c.tar.xz
seaweedfs-af37b374cbe915f033058abad98d648ccce70d5c.zip
weed shell: fs.cd change current directory
-rw-r--r--weed/command/shell.go2
-rw-r--r--weed/shell/command_fs_cd.go54
-rw-r--r--weed/shell/command_fs_du.go16
-rw-r--r--weed/shell/command_fs_ls.go38
-rw-r--r--weed/shell/command_fs_tree.go9
-rw-r--r--weed/shell/commands.go54
6 files changed, 84 insertions, 89 deletions
diff --git a/weed/command/shell.go b/weed/command/shell.go
index 3216d5d48..95b62f0b5 100644
--- a/weed/command/shell.go
+++ b/weed/command/shell.go
@@ -33,7 +33,7 @@ func runShell(command *Command, args []string) bool {
shellOptions.FilerHost = "localhost"
shellOptions.FilerPort = 8888
- shellOptions.Directory = ""
+ shellOptions.Directory = "/"
shell.RunShell(shellOptions)
diff --git a/weed/shell/command_fs_cd.go b/weed/shell/command_fs_cd.go
index 13208a3f8..f14350f02 100644
--- a/weed/shell/command_fs_cd.go
+++ b/weed/shell/command_fs_cd.go
@@ -2,11 +2,7 @@ package shell
import (
"context"
- "fmt"
- "github.com/chrislusf/seaweedfs/weed/filer2"
- "github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
"io"
- "strings"
)
func init() {
@@ -35,59 +31,23 @@ func (c *commandFsCd) Help() string {
func (c *commandFsCd) Do(args []string, commandEnv *commandEnv, writer io.Writer) (err error) {
- input := ""
- if len(args) > 0 {
- input = args[len(args)-1]
- }
+ input := findInputDirectory(args)
filerServer, filerPort, path, err := commandEnv.parseUrl(input)
if err != nil {
return err
}
- dir, name := filer2.FullPath(path).DirAndName()
- if strings.HasSuffix(path, "/") {
- if path == "/" {
- dir, name = "/", ""
- } else {
- dir, name = filer2.FullPath(path[0:len(path)-1]).DirAndName()
- }
+ if path == "/" {
+ commandEnv.option.FilerHost = filerServer
+ commandEnv.option.FilerPort = filerPort
+ commandEnv.option.Directory = "/"
+ return nil
}
ctx := context.Background()
- err = commandEnv.withFilerClient(ctx, filerServer, filerPort, func(client filer_pb.SeaweedFilerClient) error {
-
- resp, listErr := client.ListEntries(ctx, &filer_pb.ListEntriesRequest{
- Directory: dir,
- Prefix: name,
- StartFromFileName: name,
- InclusiveStartFrom: true,
- Limit: 1,
- })
- if listErr != nil {
- return listErr
- }
-
- if path == "" || path == "/" {
- return nil
- }
-
- if len(resp.Entries) == 0 {
- return fmt.Errorf("entry not found")
- }
-
- if resp.Entries[0].Name != name {
- println("path", path, "dir", dir, "name", name, "found", resp.Entries[0].Name)
- return fmt.Errorf("not a valid directory, found %s", resp.Entries[0].Name)
- }
-
- if !resp.Entries[0].IsDirectory {
- return fmt.Errorf("not a directory")
- }
-
- return nil
- })
+ err = commandEnv.checkDirectory(ctx, filerServer, filerPort, path)
if err == nil {
commandEnv.option.FilerHost = filerServer
diff --git a/weed/shell/command_fs_du.go b/weed/shell/command_fs_du.go
index 98e2eebd1..f305cabdc 100644
--- a/weed/shell/command_fs_du.go
+++ b/weed/shell/command_fs_du.go
@@ -8,7 +8,6 @@ import (
"github.com/chrislusf/seaweedfs/weed/util"
"google.golang.org/grpc"
"io"
- "strings"
)
func init() {
@@ -33,21 +32,18 @@ func (c *commandFsDu) Help() string {
func (c *commandFsDu) Do(args []string, commandEnv *commandEnv, writer io.Writer) (err error) {
- filerServer, filerPort, path, err := commandEnv.parseUrl(args[0])
+ filerServer, filerPort, path, err := commandEnv.parseUrl(findInputDirectory(args))
if err != nil {
return err
}
- dir, name := filer2.FullPath(path).DirAndName()
- if strings.HasSuffix(path, "/") {
- if path == "/" {
- dir, name = "/", ""
- } else {
- dir, name = path[0 : len(path)-1], ""
- }
+ ctx := context.Background()
+
+ if commandEnv.isDirectory(ctx, filerServer, filerPort, path) {
+ path = path + "/"
}
- ctx := context.Background()
+ dir, name := filer2.FullPath(path).DirAndName()
return commandEnv.withFilerClient(ctx, filerServer, filerPort, func(client filer_pb.SeaweedFilerClient) error {
diff --git a/weed/shell/command_fs_ls.go b/weed/shell/command_fs_ls.go
index 7b8d1d0cc..93b86fa9f 100644
--- a/weed/shell/command_fs_ls.go
+++ b/weed/shell/command_fs_ls.go
@@ -36,41 +36,33 @@ func (c *commandFsLs) Do(args []string, commandEnv *commandEnv, writer io.Writer
var isLongFormat, showHidden bool
for _, arg := range args {
- switch arg {
- case "-a":
- showHidden = true
- case "-l":
- isLongFormat = true
+ if !strings.HasPrefix(arg, "-") {
+ break
}
- }
-
- input := ""
- if len(args) > 0 {
- input = args[len(args)-1]
- if strings.HasPrefix(input, "-") {
- input = ""
+ for _, t := range arg {
+ switch t {
+ case 'a':
+ showHidden = true
+ case 'l':
+ isLongFormat = true
+ }
}
}
+ input := findInputDirectory(args)
+
filerServer, filerPort, path, err := commandEnv.parseUrl(input)
if err != nil {
return err
}
- if input == "" && !strings.HasSuffix(path, "/") {
+
+ ctx := context.Background()
+
+ if commandEnv.isDirectory(ctx, filerServer, filerPort, path) {
path = path + "/"
}
dir, name := filer2.FullPath(path).DirAndName()
- // println("path", path, "dir", dir, "name", name)
- if strings.HasSuffix(path, "/") {
- if path == "/" {
- dir, name = "/", ""
- } else {
- dir, name = path[0 : len(path)-1], ""
- }
- }
-
- ctx := context.Background()
return commandEnv.withFilerClient(ctx, filerServer, filerPort, func(client filer_pb.SeaweedFilerClient) error {
diff --git a/weed/shell/command_fs_tree.go b/weed/shell/command_fs_tree.go
index 805b17d2a..5bc3c57b4 100644
--- a/weed/shell/command_fs_tree.go
+++ b/weed/shell/command_fs_tree.go
@@ -29,19 +29,12 @@ func (c *commandFsTree) Help() string {
func (c *commandFsTree) Do(args []string, commandEnv *commandEnv, writer io.Writer) (err error) {
- filerServer, filerPort, path, err := parseFilerUrl(args[len(args)-1])
+ filerServer, filerPort, path, err := commandEnv.parseUrl(findInputDirectory(args))
if err != nil {
return err
}
dir, name := filer2.FullPath(path).DirAndName()
- if strings.HasSuffix(path, "/") {
- if path == "/" {
- dir, name = "/", ""
- } else {
- dir, name = path[0:len(path)-1], ""
- }
- }
ctx := context.Background()
diff --git a/weed/shell/commands.go b/weed/shell/commands.go
index 2a262d913..50b70498d 100644
--- a/weed/shell/commands.go
+++ b/weed/shell/commands.go
@@ -1,7 +1,10 @@
package shell
import (
+ "context"
"fmt"
+ "github.com/chrislusf/seaweedfs/weed/filer2"
+ "github.com/chrislusf/seaweedfs/weed/pb/filer_pb"
"github.com/chrislusf/seaweedfs/weed/wdclient"
"google.golang.org/grpc"
"io"
@@ -46,6 +49,46 @@ func (ce *commandEnv) parseUrl(input string) (filerServer string, filerPort int6
return ce.option.FilerHost, ce.option.FilerPort, input, err
}
+func (ce *commandEnv) isDirectory(ctx context.Context, filerServer string, filerPort int64, path string) bool {
+
+ return ce.checkDirectory(ctx,filerServer,filerPort,path) == nil
+
+}
+
+func (ce *commandEnv) checkDirectory(ctx context.Context, filerServer string, filerPort int64, path string) error {
+
+ dir, name := filer2.FullPath(path).DirAndName()
+
+ return ce.withFilerClient(ctx, filerServer, filerPort, func(client filer_pb.SeaweedFilerClient) error {
+
+ resp, listErr := client.ListEntries(ctx, &filer_pb.ListEntriesRequest{
+ Directory: dir,
+ Prefix: name,
+ StartFromFileName: name,
+ InclusiveStartFrom: true,
+ Limit: 1,
+ })
+ if listErr != nil {
+ return listErr
+ }
+
+ if len(resp.Entries) == 0 {
+ return fmt.Errorf("entry not found")
+ }
+
+ if resp.Entries[0].Name != name {
+ return fmt.Errorf("not a valid directory, found %s", resp.Entries[0].Name)
+ }
+
+ if !resp.Entries[0].IsDirectory {
+ return fmt.Errorf("not a directory")
+ }
+
+ return nil
+ })
+
+}
+
func parseFilerUrl(entryPath string) (filerServer string, filerPort int64, path string, err error) {
if strings.HasPrefix(entryPath, "http") {
var u *url.URL
@@ -64,3 +107,14 @@ func parseFilerUrl(entryPath string) (filerServer string, filerPort int64, path
}
return
}
+
+func findInputDirectory(args []string) (input string) {
+ input = "."
+ if len(args) > 0 {
+ input = args[len(args)-1]
+ if strings.HasPrefix(input, "-") {
+ input = "."
+ }
+ }
+ return input
+}