@cryptotaxi247 / kubo / commits / d29930c03

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