Cleanup
This commit is contained in:
parent
3ab3960a6d
commit
7b8911cdd0
4
dir.go
4
dir.go
@ -31,11 +31,11 @@ import (
|
|||||||
type versionedDir struct {
|
type versionedDir struct {
|
||||||
dirs map[string]*versionedDir
|
dirs map[string]*versionedDir
|
||||||
files map[string]*versionedFile
|
files map[string]*versionedFile
|
||||||
node versionedNode
|
node *versionedNode
|
||||||
inode uint64
|
inode uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
func newVersionedDir(node versionedNode, inode uint64) *versionedDir {
|
func newVersionedDir(node *versionedNode, inode uint64) *versionedDir {
|
||||||
return &versionedDir{
|
return &versionedDir{
|
||||||
dirs: make(map[string]*versionedDir),
|
dirs: make(map[string]*versionedDir),
|
||||||
files: make(map[string]*versionedFile),
|
files: make(map[string]*versionedFile),
|
||||||
|
4
file.go
4
file.go
@ -28,11 +28,11 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type versionedFile struct {
|
type versionedFile struct {
|
||||||
node versionedNode
|
node *versionedNode
|
||||||
inode uint64
|
inode uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
func newVersionedFile(node versionedNode, inode uint64) *versionedFile {
|
func newVersionedFile(node *versionedNode, inode uint64) *versionedFile {
|
||||||
return &versionedFile{node: node, inode: inode}
|
return &versionedFile{node: node, inode: inode}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
2
meta.go
2
meta.go
@ -43,7 +43,7 @@ func newVersionMetadata(path string) (*versionMetadata, error) {
|
|||||||
return meta, nil
|
return meta, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *versionMetadata) filter(nodes map[string]versionedNode) {
|
func (this *versionMetadata) filter(nodes versionedNodeMap) {
|
||||||
for _, delPath := range this.Deleted {
|
for _, delPath := range this.Deleted {
|
||||||
for name, node := range nodes {
|
for name, node := range nodes {
|
||||||
if strings.HasPrefix(node.path, delPath) {
|
if strings.HasPrefix(node.path, delPath) {
|
||||||
|
37
node.go
Normal file
37
node.go
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
* 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
|
||||||
|
|
||||||
|
import "os"
|
||||||
|
|
||||||
|
type versionedNode struct {
|
||||||
|
path string
|
||||||
|
info os.FileInfo
|
||||||
|
ver *version
|
||||||
|
}
|
||||||
|
|
||||||
|
type versionedNodeMap map[string]*versionedNode
|
||||||
|
|
||||||
|
func (this *versionedNode) rebasedPath() string {
|
||||||
|
return this.ver.rebasePath(this.path)
|
||||||
|
}
|
25
version.go
25
version.go
@ -34,16 +34,6 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
type versionedNode struct {
|
|
||||||
path string
|
|
||||||
info os.FileInfo
|
|
||||||
ver *version
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *versionedNode) rebasedPath() string {
|
|
||||||
return this.ver.rebasePath(this.path)
|
|
||||||
}
|
|
||||||
|
|
||||||
type version struct {
|
type version struct {
|
||||||
base string
|
base string
|
||||||
parent *version
|
parent *version
|
||||||
@ -82,8 +72,12 @@ func newVersion(base string, parent *version) (*version, error) {
|
|||||||
return ver, nil
|
return ver, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *version) scanDir(path string) (map[string]versionedNode, error) {
|
func (this *version) newVersionedNode(path string, info os.FileInfo) *versionedNode {
|
||||||
var baseNodes map[string]versionedNode
|
return &versionedNode{path, info, this}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *version) scanDir(path string) (versionedNodeMap, error) {
|
||||||
|
var baseNodes versionedNodeMap
|
||||||
if this.parent != nil {
|
if this.parent != nil {
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
@ -95,7 +89,7 @@ func (this *version) scanDir(path string) (map[string]versionedNode, error) {
|
|||||||
this.meta.filter(baseNodes)
|
this.meta.filter(baseNodes)
|
||||||
}
|
}
|
||||||
|
|
||||||
ownNodes := make(map[string]versionedNode)
|
ownNodes := make(versionedNodeMap)
|
||||||
{
|
{
|
||||||
nodes, err := ioutil.ReadDir(this.rebasePath(path))
|
nodes, err := ioutil.ReadDir(this.rebasePath(path))
|
||||||
if !os.IsNotExist(err) {
|
if !os.IsNotExist(err) {
|
||||||
@ -104,8 +98,7 @@ func (this *version) scanDir(path string) (map[string]versionedNode, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, node := range nodes {
|
for _, node := range nodes {
|
||||||
name := node.Name()
|
ownNodes[node.Name()] = this.newVersionedNode(filepath.Join(path, node.Name()), node)
|
||||||
ownNodes[name] = versionedNode{filepath.Join(path, name), node, this}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -152,7 +145,7 @@ func (this *version) resolve() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.root = newVersionedDir(
|
this.root = newVersionedDir(
|
||||||
versionedNode{"/", node, this},
|
this.newVersionedNode("/", node),
|
||||||
this.allocInode())
|
this.allocInode())
|
||||||
|
|
||||||
return this.buildVerDir(this.root)
|
return this.buildVerDir(this.root)
|
||||||
|
Loading…
Reference in New Issue
Block a user