Eliminate Prefix field from MFS root, use MkdirOpts.
License: MIT Signed-off-by: Kevin Atkinson <k@kevina.org>
Kevin Atkinson committed
Sep 8, 2017 at 21:00 UTC
d29930c03193291a51fcae56f8cfde404018ff76
5 files changed
+35
-25
core/commands/files/files.go
+5
-8
@@ -746,15 +746,12 @@ Examples:
746
return
747
}
748
root := n.FilesRoot
749
- if prefix != nil {
750
- // FIXME: This is ugly and may not be correct either
751
- // -- kevina
752
- newRoot := *root
753
- root = &newRoot
754
- root.Prefix = prefix
755
- }
749
757
- err = mfs.Mkdir(root, dirtomake, dashp, flush)
750
+ err = mfs.Mkdir(root, dirtomake, mfs.MkdirOpts{
751
+ Mkparents: dashp,
752
+ Flush: flush,
753
+ Prefix: prefix,
754
+ })
755
if err != nil {
756
res.SetError(err, cmds.ErrNormal)
757
return
core/coreunix/add.go
+11
-3
@@ -119,7 +119,6 @@ func (adder *Adder) mfsRoot() (*mfs.Root, error) {
119
rnode := unixfs.EmptyDirNode()
120
rnode.SetPrefix(adder.Prefix)
121
mr, err := mfs.NewRoot(adder.ctx, adder.dagService, rnode, nil)
122
- mr.Prefix = adder.Prefix
122
if err != nil {
123
return nil, err
124
}
@@ -398,7 +397,12 @@ func (adder *Adder) addNode(node node.Node, path string) error {
397
}
398
dir := gopath.Dir(path)
399
if dir != "." {
401
- if err := mfs.Mkdir(mr, dir, true, false); err != nil {
400
+ opts := mfs.MkdirOpts{
401
+ Mkparents: true,
402
+ Flush: false,
403
+ Prefix: adder.Prefix,
404
+ }
405
+ if err := mfs.Mkdir(mr, dir, opts); err != nil {
406
return err
407
}
408
}
@@ -496,7 +500,11 @@ func (adder *Adder) addDir(dir files.File) error {
500
if err != nil {
501
return err
502
}
499
- err = mfs.Mkdir(mr, dir.FileName(), true, false)
503
+ err = mfs.Mkdir(mr, dir.FileName(), mfs.MkdirOpts{
504
+ Mkparents: true,
505
+ Flush: false,
506
+ Prefix: adder.Prefix,
507
+ })
508
if err != nil {
509
return err
510
}
mfs/mfs_test.go
+2
-2
@@ -735,7 +735,7 @@ func TestMfsHugeDir(t *testing.T) {
735
_, rt := setupRoot(ctx, t)
736
737
for i := 0; i < 10000; i++ {
738
- err := Mkdir(rt, fmt.Sprintf("/dir%d", i), false, false)
738
+ err := Mkdir(rt, fmt.Sprintf("/dir%d", i), MkdirOpts{Mkparents: false, Flush: false})
739
if err != nil {
740
t.Fatal(err)
741
}
@@ -747,7 +747,7 @@ func TestMkdirP(t *testing.T) {
747
defer cancel()
748
_, rt := setupRoot(ctx, t)
749
750
- err := Mkdir(rt, "/a/b/c/d/e/f", true, true)
750
+ err := Mkdir(rt, "/a/b/c/d/e/f", MkdirOpts{Mkparents: true, Flush: true})
751
if err != nil {
752
t.Fatal(err)
753
}
mfs/ops.go
+17
-9
@@ -9,6 +9,7 @@ import (
9
10
path "github.com/ipfs/go-ipfs/path"
11
12
+ cid "gx/ipfs/QmNp85zy9RLrQ5oQD4hPyS39ezrrXpcaa7R4Y9kxdWQLLQ/go-cid"
13
node "gx/ipfs/QmPN7cwmpcc4DWXb4KTB9dNAJgjuPY69h3npsMfhRrQL9c/go-ipld-format"
14
)
15
@@ -97,9 +98,16 @@ func PutNode(r *Root, path string, nd node.Node) error {
98
return pdir.AddChild(filename, nd)
99
}
100
101
+// MkdirOpts is used by Mkdir
102
+type MkdirOpts struct {
103
+ Mkparents bool
104
+ Flush bool
105
+ Prefix *cid.Prefix
106
+}
107
+
108
// Mkdir creates a directory at 'path' under the directory 'd', creating
109
// intermediary directories as needed if 'mkparents' is set to true
102
-func Mkdir(r *Root, pth string, mkparents bool, flush bool) error {
110
+func Mkdir(r *Root, pth string, opts MkdirOpts) error {
111
if pth == "" {
112
return fmt.Errorf("no path given to Mkdir")
113
}
@@ -115,7 +123,7 @@ func Mkdir(r *Root, pth string, mkparents bool, flush bool) error {
123
124
if len(parts) == 0 {
125
// this will only happen on 'mkdir /'
118
- if mkparents {
126
+ if opts.Mkparents {
127
return nil
128
}
129
return fmt.Errorf("cannot create directory '/': Already exists")
@@ -124,13 +132,13 @@ func Mkdir(r *Root, pth string, mkparents bool, flush bool) error {
132
cur := r.GetValue().(*Directory)
133
for i, d := range parts[:len(parts)-1] {
134
fsn, err := cur.Child(d)
127
- if err == os.ErrNotExist && mkparents {
135
+ if err == os.ErrNotExist && opts.Mkparents {
136
mkd, err := cur.Mkdir(d)
137
if err != nil {
138
return err
139
}
132
- if r.Prefix != nil {
133
- mkd.SetPrefix(r.Prefix)
140
+ if opts.Prefix != nil {
141
+ mkd.SetPrefix(opts.Prefix)
142
}
143
fsn = mkd
144
} else if err != nil {
@@ -146,15 +154,15 @@ func Mkdir(r *Root, pth string, mkparents bool, flush bool) error {
154
155
final, err := cur.Mkdir(parts[len(parts)-1])
156
if err != nil {
149
- if !mkparents || err != os.ErrExist || final == nil {
157
+ if !opts.Mkparents || err != os.ErrExist || final == nil {
158
return err
159
}
160
}
153
- if r.Prefix != nil {
154
- final.SetPrefix(r.Prefix)
161
+ if opts.Prefix != nil {
162
+ final.SetPrefix(opts.Prefix)
163
}
164
157
- if flush {
165
+ if opts.Flush {
166
err := final.Flush()
167
if err != nil {
168
return err
mfs/system.go
-3
@@ -61,9 +61,6 @@ type Root struct {
61
dserv dag.DAGService
62
63
Type string
64
-
65
- // Prefix to use for any children created
66
- Prefix *cid.Prefix
64
}
65
66
type PubFunc func(context.Context, *cid.Cid) error