This commit is contained in:
Alex Yatskov 2015-05-29 20:40:40 +09:00
parent a4d81518d6
commit 463afa5216
4 changed files with 60 additions and 14 deletions

4
dir.go
View File

@ -58,7 +58,7 @@ func (this *versionedDir) createDir(name string) (*versionedDir, error) {
return nil, err return nil, err
} }
node, err := newVersionedNode(childPath, this.node.parent, this.node.ver) node, err := newVersionedNode(childPath, this.node.ver)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -77,7 +77,7 @@ func (this *versionedDir) createFile(name string, flags int) (*versionedFile, er
return nil, err return nil, err
} }
node, err := newVersionedNode(childPath, this.node.parent, this.node.ver) node, err := newVersionedNode(childPath, this.node.ver)
if err != nil { if err != nil {
return nil, err return nil, err
} }

16
node.go
View File

@ -34,26 +34,24 @@ import (
// //
type versionedNode struct { type versionedNode struct {
path string path string
info os.FileInfo info os.FileInfo
parent *versionedNode ver *version
prev *versionedNode
ver *version
} }
type versionedNodeMap map[string]*versionedNode type versionedNodeMap map[string]*versionedNode
func newVersionedNode(path string, parent *versionedNode, ver *version) (*versionedNode, error) { func newVersionedNode(path string, ver *version) (*versionedNode, error) {
info, err := os.Stat(ver.rebasePath(path)) info, err := os.Stat(ver.rebasePath(path))
if err != nil { if err != nil {
return nil, err return nil, err
} }
return newVersionedNodeStat(path, parent, ver, info), nil return newVersionedNodeStat(path, ver, info), nil
} }
func newVersionedNodeStat(path string, parent *versionedNode, ver *version, info os.FileInfo) *versionedNode { func newVersionedNodeStat(path string, ver *version, info os.FileInfo) *versionedNode {
return &versionedNode{path, info, parent, nil, ver} return &versionedNode{path, info, ver}
} }
func (this *versionedNode) setAttr(req *fuse.SetattrRequest, resp *fuse.SetattrResponse) error { func (this *versionedNode) setAttr(req *fuse.SetattrRequest, resp *fuse.SetattrResponse) error {

49
node_group.go Normal file
View File

@ -0,0 +1,49 @@
/*
* Copyright (c) 2015 Alex Yatskov <alex@foosoft.net>
* Author: Alex Yatskov <alex@foosoft.net>
*
* 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
//
// versionNodeGroup
//
type versionNodeGroup struct {
nodes []*versionedNode
}
func (this *versionNodeGroup) latest() *versionedNode {
if length := len(this.nodes); length > 0 {
return this.nodes[length-1]
}
return nil
}
func (this *versionNodeGroup) version(path string, ver *version) error {
node, err := newVersionedNode(path, ver)
if err != nil {
return err
}
this.nodes = append(this.nodes, node)
return nil
}

View File

@ -88,7 +88,7 @@ func (this *version) scanNode(node *versionedNode) (versionedNodeMap, error) {
for _, info := range infos { for _, info := range infos {
childName := info.Name() childName := info.Name()
childPath := filepath.Join(node.path, childName) childPath := filepath.Join(node.path, childName)
ownNodes[childName] = newVersionedNodeStat(childPath, node, this, info) ownNodes[childName] = newVersionedNodeStat(childPath, this, info)
} }
} }
@ -100,7 +100,6 @@ func (this *version) scanNode(node *versionedNode) (versionedNodeMap, error) {
} }
for ownName, ownNode := range ownNodes { for ownName, ownNode := range ownNodes {
ownNode.prev = baseNodes[ownName]
baseNodes[ownName] = ownNode baseNodes[ownName] = ownNode
} }
@ -130,7 +129,7 @@ func (this *version) buildVerDir(dir *versionedDir) error {
} }
func (this *version) resolve() error { func (this *version) resolve() error {
node, err := newVersionedNode("/", nil, this) node, err := newVersionedNode("/", this)
if err != nil { if err != nil {
return err return err
} }