diff options
| author | Chris Lu <chris.lu@gmail.com> | 2019-04-03 00:20:00 -0700 |
|---|---|---|
| committer | Chris Lu <chris.lu@gmail.com> | 2019-04-03 00:20:00 -0700 |
| commit | 715a38da1e4fce05631f230ccf09ce92c99a4fd4 (patch) | |
| tree | dc443bbe30b2178f24c67c19ef732013b8cabd0f /weed/shell/commands.go | |
| parent | 20dcb44077bcb8164b8351ee506af8385e8fd6ef (diff) | |
| download | seaweedfs-715a38da1e4fce05631f230ccf09ce92c99a4fd4.tar.xz seaweedfs-715a38da1e4fce05631f230ccf09ce92c99a4fd4.zip | |
weed shell: add fs.cd, fs.pwd to change to a directory and print current directory
Diffstat (limited to 'weed/shell/commands.go')
| -rw-r--r-- | weed/shell/commands.go | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/weed/shell/commands.go b/weed/shell/commands.go index 280900c80..2a262d913 100644 --- a/weed/shell/commands.go +++ b/weed/shell/commands.go @@ -1,14 +1,23 @@ package shell import ( + "fmt" "github.com/chrislusf/seaweedfs/weed/wdclient" "google.golang.org/grpc" "io" + "net/url" + "path/filepath" + "strconv" + "strings" ) type ShellOptions struct { Masters *string GrpcDialOption grpc.DialOption + // shell transient context + FilerHost string + FilerPort int64 + Directory string } type commandEnv struct { @@ -26,3 +35,32 @@ type command interface { var ( commands = []command{} ) + +func (ce *commandEnv) parseUrl(input string) (filerServer string, filerPort int64, path string, err error) { + if strings.HasPrefix(input, "http") { + return parseFilerUrl(input) + } + if !strings.HasPrefix(input, "/") { + input = filepath.ToSlash(filepath.Join(ce.option.Directory, input)) + } + return ce.option.FilerHost, ce.option.FilerPort, input, err +} + +func parseFilerUrl(entryPath string) (filerServer string, filerPort int64, path string, err error) { + if strings.HasPrefix(entryPath, "http") { + var u *url.URL + u, err = url.Parse(entryPath) + if err != nil { + return + } + filerServer = u.Hostname() + portString := u.Port() + if portString != "" { + filerPort, err = strconv.ParseInt(portString, 10, 32) + } + path = u.Path + } else { + err = fmt.Errorf("path should have full url http://<filer_server>:<port>/path/to/dirOrFile : %s", entryPath) + } + return +} |
