a bit of cleanup
Jeromy committed
Mar 12, 2015 at 13:34 UTC
4f76e473d06409aaf24c221a2d2a23f352e14c4b
3 files changed
+15
-27
ipnsfs/dir.go
+12
-5
@@ -11,6 +11,9 @@ import (
11
ufspb "github.com/jbenet/go-ipfs/unixfs/pb"
12
)
13
14
+var ErrNotYetImplemented = errors.New("not yet implemented")
15
+var ErrInvalidChild = errors.New("invalid child node")
16
+
17
type Directory struct {
18
fs *Filesystem
19
parent childCloser
@@ -128,9 +131,9 @@ func (d *Directory) childFile(name string) (*file, error) {
131
d.files[name] = nfi
132
return nfi, nil
133
case ufspb.Data_Metadata:
131
- panic("NOT YET IMPLEMENTED")
134
+ return nil, ErrNotYetImplemented
135
default:
133
- panic("NO!")
136
+ return nil, ErrInvalidChild
137
}
138
}
139
}
@@ -162,9 +165,9 @@ func (d *Directory) childDir(name string) (*Directory, error) {
165
case ufspb.Data_File:
166
return nil, fmt.Errorf("%s is not a directory", name)
167
case ufspb.Data_Metadata:
165
- panic("NOT YET IMPLEMENTED")
168
+ return nil, ErrNotYetImplemented
169
default:
167
- panic("NO!")
170
+ return nil, ErrInvalidChild
171
}
172
}
173
@@ -247,7 +250,9 @@ func (d *Directory) Unlink(name string) error {
250
return d.parent.closeChild(d.name, d.node)
251
}
252
253
+// RenameEntry renames the child by 'oldname' of this directory to 'newname'
254
func (d *Directory) RenameEntry(oldname, newname string) error {
255
+ // Is the child a directory?
256
dir, err := d.childDir(oldname)
257
if err == nil {
258
dir.name = newname
@@ -266,6 +271,7 @@ func (d *Directory) RenameEntry(oldname, newname string) error {
271
return d.parent.closeChild(d.name, d.node)
272
}
273
274
+ // Is the child a file?
275
fi, err := d.childFile(oldname)
276
if err == nil {
277
fi.name = newname
@@ -292,6 +298,7 @@ func (d *Directory) RenameEntry(oldname, newname string) error {
298
return ErrNoSuch
299
}
300
301
+// AddChild adds the node 'nd' under this directory giving it the name 'name'
302
func (d *Directory) AddChild(name string, nd *dag.Node) error {
303
pbn, err := ft.FromBytes(nd.Data)
304
if err != nil {
@@ -318,7 +325,7 @@ func (d *Directory) AddChild(name string, nd *dag.Node) error {
325
}
326
d.files[name] = nfi
327
default:
321
- panic("invalid unixfs node")
328
+ return ErrInvalidChild
329
}
330
return d.parent.closeChild(d.name, d.node)
331
}
ipnsfs/file.go
+1
-22
@@ -4,7 +4,6 @@ import (
4
"errors"
5
"io"
6
"os"
7
- "sync"
7
8
chunk "github.com/jbenet/go-ipfs/importer/chunk"
9
dag "github.com/jbenet/go-ipfs/merkledag"
@@ -30,13 +29,11 @@ type file struct {
29
name string
30
hasChanges bool
31
33
- // TODO: determine whether or not locking here is actually required...
34
- lk sync.Mutex
32
mod *mod.DagModifier
33
}
34
35
func NewFile(name string, node *dag.Node, parent childCloser, fs *Filesystem) (*file, error) {
39
- dmod, err := mod.NewDagModifier(context.TODO(), node, fs.dserv, fs.pins.GetManual(), chunk.DefaultSplitter)
36
+ dmod, err := mod.NewDagModifier(context.Background(), node, fs.dserv, fs.pins.GetManual(), chunk.DefaultSplitter)
37
if err != nil {
38
return nil, err
39
}
@@ -50,21 +47,15 @@ func NewFile(name string, node *dag.Node, parent childCloser, fs *Filesystem) (*
47
}
48
49
func (fi *file) Write(b []byte) (int, error) {
53
- fi.lk.Lock()
54
- defer fi.lk.Unlock()
50
fi.hasChanges = true
51
return fi.mod.Write(b)
52
}
53
54
func (fi *file) Read(b []byte) (int, error) {
60
- fi.lk.Lock()
61
- defer fi.lk.Unlock()
55
return fi.mod.Read(b)
56
}
57
58
func (fi *file) Close() error {
66
- fi.lk.Lock()
67
- defer fi.lk.Unlock()
59
if fi.hasChanges {
60
err := fi.mod.Flush()
61
if err != nil {
@@ -88,8 +79,6 @@ func (fi *file) Close() error {
79
}
80
81
func (fi *file) Flush() error {
91
- fi.lk.Lock()
92
- defer fi.lk.Unlock()
82
return fi.mod.Flush()
83
}
84
@@ -101,33 +90,23 @@ func (fi *file) withMode(mode int) File {
90
}
91
92
func (fi *file) Seek(offset int64, whence int) (int64, error) {
104
- fi.lk.Lock()
105
- defer fi.lk.Unlock()
93
return fi.mod.Seek(offset, whence)
94
}
95
96
func (fi *file) WriteAt(b []byte, at int64) (int, error) {
110
- fi.lk.Lock()
111
- defer fi.lk.Unlock()
97
fi.hasChanges = true
98
return fi.mod.WriteAt(b, at)
99
}
100
101
func (fi *file) Size() (int64, error) {
117
- fi.lk.Lock()
118
- defer fi.lk.Unlock()
102
return fi.mod.Size()
103
}
104
105
func (fi *file) GetNode() (*dag.Node, error) {
123
- fi.lk.Lock()
124
- defer fi.lk.Unlock()
106
return fi.mod.GetNode()
107
}
108
109
func (fi *file) Truncate(size int64) error {
129
- fi.lk.Lock()
130
- defer fi.lk.Unlock()
110
fi.hasChanges = true
111
return fi.mod.Truncate(size)
112
}
ipnsfs/system_test.go
+2
@@ -21,6 +21,8 @@ func testFS(t *testing.T, nd *core.IpfsNode) *Filesystem {
21
return fs
22
}
23
24
+// Test some basic operations
25
+// testing in fuse/ipns is sufficient to prove this code works properly
26
func TestBasic(t *testing.T) {
27
mock, err := core.NewMockNode()
28
if err != nil {