aboutsummaryrefslogtreecommitdiff
path: root/go/weed/mount.go
diff options
context:
space:
mode:
Diffstat (limited to 'go/weed/mount.go')
-rw-r--r--go/weed/mount.go108
1 files changed, 1 insertions, 107 deletions
diff --git a/go/weed/mount.go b/go/weed/mount.go
index 51b5e6919..23f85f567 100644
--- a/go/weed/mount.go
+++ b/go/weed/mount.go
@@ -1,16 +1,6 @@
package main
import (
- "bazil.org/fuse"
- "bazil.org/fuse/fs"
- "code.google.com/p/weed-fs/go/filer"
- "code.google.com/p/weed-fs/go/glog"
- "code.google.com/p/weed-fs/go/storage"
- "code.google.com/p/weed-fs/go/util"
- "fmt"
- "os"
- "os/signal"
- "runtime"
)
type MountOptions struct {
@@ -40,105 +30,9 @@ var cmdMount = &Command{
These 2 requirements can be achieved with one command "weed server -filer=true"
This uses bazil.org/fuse, whichenables writing FUSE file systems on
- FreeBSD, Linux, and OS X.
+ Linux, and OS X.
On OS X, it requires OSXFUSE (http://osxfuse.github.com/).
`,
}
-
-func runMount(cmd *Command, args []string) bool {
- fmt.Printf("This is Weed File System version %s %s %s\n", util.VERSION, runtime.GOOS, runtime.GOARCH)
- if *mountOptions.dir == "" {
- fmt.Printf("Please specify the mount directory via \"-dir\"")
- return false
- }
-
- c, err := fuse.Mount(*mountOptions.dir)
- if err != nil {
- glog.Fatal(err)
- return false
- }
-
- signalChan := make(chan os.Signal, 1)
- signal.Notify(signalChan, os.Interrupt)
- go func() {
- for _ = range signalChan {
- // sig is a ^C, handle it
- fuse.Unmount(*mountOptions.dir)
- c.Close()
- os.Exit(0)
- }
- }()
-
- err = fs.Serve(c, WFS{})
- if err != nil {
- fuse.Unmount(*mountOptions.dir)
- }
-
- // check if the mount process has an error to report
- <-c.Ready
- if err := c.MountError; err != nil {
- glog.Fatal(err)
- }
-
- return true
-}
-
-type File struct {
- FileId filer.FileId
- Name string
-}
-
-func (File) Attr() fuse.Attr {
- return fuse.Attr{Mode: 0444}
-}
-func (File) ReadAll(intr fs.Intr) ([]byte, fuse.Error) {
- return []byte("hello, world\n"), nil
-}
-
-type Dir struct {
- DirectoryId filer.DirectoryId
- Name string
-}
-
-func (dir Dir) Attr() fuse.Attr {
- return fuse.Attr{Inode: 1, Mode: os.ModeDir | 0555}
-}
-
-func (dir Dir) Lookup(name string, intr fs.Intr) (fs.Node, fuse.Error) {
- files_result, e := filer.ListFiles(*mountOptions.filer, dir.DirectoryId, name)
- if e != nil {
- return nil, fuse.ENOENT
- }
- if len(files_result.Files) > 0 {
- return File{files_result.Files[0].Id, files_result.Files[0].Name}, nil
- }
- return nil, fmt.Errorf("File Not Found for %s", name)
-}
-
-type WFS struct{}
-
-func (WFS) Root() (fs.Node, fuse.Error) {
- return Dir{}, nil
-}
-
-func (dir *Dir) ReadDir(intr fs.Intr) ([]fuse.Dirent, fuse.Error) {
- ret := make([]fuse.Dirent, 0)
- if dirs, e := filer.ListDirectories(*mountOptions.filer, dir.DirectoryId); e == nil {
- for _, d := range dirs.Directories {
- dirId := uint64(d.Id)
- ret = append(ret, fuse.Dirent{Inode: dirId, Name: d.Name, Type: fuse.DT_Dir})
- }
- }
- if files, e := filer.ListFiles(*mountOptions.filer, dir.DirectoryId, ""); e == nil {
- for _, f := range files.Files {
- if fileId, e := storage.ParseFileId(string(f.Id)); e == nil {
- fileInode := uint64(fileId.VolumeId)<<32 + fileId.Key
- ret = append(ret, fuse.Dirent{Inode: fileInode, Name: f.Name, Type: fuse.DT_File})
- }
-
- }
- }
- return ret, nil
-}