|
|
@ -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 |
|
|
|