From c2440625483855371854dc90af214c27fdda38cd Mon Sep 17 00:00:00 2001 From: Alex Yatskov Date: Thu, 14 May 2015 13:39:42 +0900 Subject: [PATCH] Moving directory and file related functionality out of version.go --- dir.go | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ file.go | 43 ++++++++++++++++++++++++++++++++++ version.go | 57 -------------------------------------------- 3 files changed, 112 insertions(+), 57 deletions(-) create mode 100644 dir.go create mode 100644 file.go diff --git a/dir.go b/dir.go new file mode 100644 index 0000000..3731905 --- /dev/null +++ b/dir.go @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2015 Alex Yatskov + * Author: Alex Yatskov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +package main + +import ( + "bazil.org/fuse" + "bazil.org/fuse/fs" + "golang.org/x/net/context" +) + +type versionedDir struct { + dirs map[string]versionedDir + files map[string]versionedFile + node versionedNode + inode uint64 +} + +func (this versionedDir) Attr(attr *fuse.Attr) { + attr.Mode = this.node.info.Mode() + attr.Inode = this.inode +} + +func (this versionedDir) ReadDirAll(ctx context.Context) ([]fuse.Dirent, error) { + var entries []fuse.Dirent + + for name, dir := range this.dirs { + entry := fuse.Dirent{Inode: dir.inode, Name: name, Type: fuse.DT_File} + entries = append(entries, entry) + } + + for name, file := range this.files { + entry := fuse.Dirent{Inode: file.inode, Name: name, Type: fuse.DT_Dir} + entries = append(entries, entry) + } + + return nil, nil +} + +func (this versionedDir) Lookup(ctx context.Context, name string) (fs.Node, error) { + if dir, ok := this.dirs[name]; ok { + return dir, nil + } + + if file, ok := this.files[name]; ok { + return file, nil + } + + return nil, fuse.ENOENT +} diff --git a/file.go b/file.go new file mode 100644 index 0000000..a105469 --- /dev/null +++ b/file.go @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2015 Alex Yatskov + * Author: Alex Yatskov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +package main + +import ( + "bazil.org/fuse" + "golang.org/x/net/context" +) + +type versionedFile struct { + node versionedNode + inode uint64 +} + +func (this versionedFile) Attr(attr *fuse.Attr) { + attr.Mode = this.node.info.Mode() + attr.Inode = this.inode + attr.Size = uint64(this.node.info.Size()) +} + +func (versionedFile) ReadAll(ctx context.Context) ([]byte, error) { + return nil, nil +} diff --git a/version.go b/version.go index fe70714..653228f 100644 --- a/version.go +++ b/version.go @@ -23,11 +23,9 @@ package main import ( - "bazil.org/fuse" "bazil.org/fuse/fs" "encoding/json" "fmt" - "golang.org/x/net/context" "io/ioutil" "os" "path/filepath" @@ -45,61 +43,6 @@ type versionedNode struct { info os.FileInfo } -type versionedFile struct { - node versionedNode - inode uint64 -} - -func (this versionedFile) Attr(attr *fuse.Attr) { - attr.Mode = this.node.info.Mode() - attr.Inode = this.inode - attr.Size = uint64(this.node.info.Size()) -} - -func (versionedFile) ReadAll(ctx context.Context) ([]byte, error) { - return nil, nil -} - -type versionedDir struct { - dirs map[string]versionedDir - files map[string]versionedFile - node versionedNode - inode uint64 -} - -func (this versionedDir) Attr(attr *fuse.Attr) { - attr.Mode = this.node.info.Mode() - attr.Inode = this.inode -} - -func (this versionedDir) ReadDirAll(ctx context.Context) ([]fuse.Dirent, error) { - var entries []fuse.Dirent - - for name, dir := range this.dirs { - entry := fuse.Dirent{Inode: dir.inode, Name: name, Type: fuse.DT_File} - entries = append(entries, entry) - } - - for name, file := range this.files { - entry := fuse.Dirent{Inode: file.inode, Name: name, Type: fuse.DT_Dir} - entries = append(entries, entry) - } - - return nil, nil -} - -func (this versionedDir) Lookup(ctx context.Context, name string) (fs.Node, error) { - if dir, ok := this.dirs[name]; ok { - return dir, nil - } - - if file, ok := this.files[name]; ok { - return file, nil - } - - return nil, fuse.ENOENT -} - type version struct { base string parent *version