aboutsummaryrefslogtreecommitdiff
path: root/weed/shell/commands.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/shell/commands.go')
-rw-r--r--weed/shell/commands.go38
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
+}