mirror of
https://github.com/ipfs/kubo.git
synced 2026-03-10 18:57:57 +08:00
Eliminate Prefix field from MFS root, use MkdirOpts.
License: MIT Signed-off-by: Kevin Atkinson <k@kevina.org>
This commit is contained in:
parent
fd7b72fa16
commit
d29930c031
@ -746,15 +746,12 @@ Examples:
|
||||
return
|
||||
}
|
||||
root := n.FilesRoot
|
||||
if prefix != nil {
|
||||
// FIXME: This is ugly and may not be correct either
|
||||
// -- kevina
|
||||
newRoot := *root
|
||||
root = &newRoot
|
||||
root.Prefix = prefix
|
||||
}
|
||||
|
||||
err = mfs.Mkdir(root, dirtomake, dashp, flush)
|
||||
err = mfs.Mkdir(root, dirtomake, mfs.MkdirOpts{
|
||||
Mkparents: dashp,
|
||||
Flush: flush,
|
||||
Prefix: prefix,
|
||||
})
|
||||
if err != nil {
|
||||
res.SetError(err, cmds.ErrNormal)
|
||||
return
|
||||
|
||||
@ -119,7 +119,6 @@ func (adder *Adder) mfsRoot() (*mfs.Root, error) {
|
||||
rnode := unixfs.EmptyDirNode()
|
||||
rnode.SetPrefix(adder.Prefix)
|
||||
mr, err := mfs.NewRoot(adder.ctx, adder.dagService, rnode, nil)
|
||||
mr.Prefix = adder.Prefix
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@ -398,7 +397,12 @@ func (adder *Adder) addNode(node node.Node, path string) error {
|
||||
}
|
||||
dir := gopath.Dir(path)
|
||||
if dir != "." {
|
||||
if err := mfs.Mkdir(mr, dir, true, false); err != nil {
|
||||
opts := mfs.MkdirOpts{
|
||||
Mkparents: true,
|
||||
Flush: false,
|
||||
Prefix: adder.Prefix,
|
||||
}
|
||||
if err := mfs.Mkdir(mr, dir, opts); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
@ -496,7 +500,11 @@ func (adder *Adder) addDir(dir files.File) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = mfs.Mkdir(mr, dir.FileName(), true, false)
|
||||
err = mfs.Mkdir(mr, dir.FileName(), mfs.MkdirOpts{
|
||||
Mkparents: true,
|
||||
Flush: false,
|
||||
Prefix: adder.Prefix,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@ -735,7 +735,7 @@ func TestMfsHugeDir(t *testing.T) {
|
||||
_, rt := setupRoot(ctx, t)
|
||||
|
||||
for i := 0; i < 10000; i++ {
|
||||
err := Mkdir(rt, fmt.Sprintf("/dir%d", i), false, false)
|
||||
err := Mkdir(rt, fmt.Sprintf("/dir%d", i), MkdirOpts{Mkparents: false, Flush: false})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@ -747,7 +747,7 @@ func TestMkdirP(t *testing.T) {
|
||||
defer cancel()
|
||||
_, rt := setupRoot(ctx, t)
|
||||
|
||||
err := Mkdir(rt, "/a/b/c/d/e/f", true, true)
|
||||
err := Mkdir(rt, "/a/b/c/d/e/f", MkdirOpts{Mkparents: true, Flush: true})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
26
mfs/ops.go
26
mfs/ops.go
@ -9,6 +9,7 @@ import (
|
||||
|
||||
path "github.com/ipfs/go-ipfs/path"
|
||||
|
||||
cid "gx/ipfs/QmNp85zy9RLrQ5oQD4hPyS39ezrrXpcaa7R4Y9kxdWQLLQ/go-cid"
|
||||
node "gx/ipfs/QmPN7cwmpcc4DWXb4KTB9dNAJgjuPY69h3npsMfhRrQL9c/go-ipld-format"
|
||||
)
|
||||
|
||||
@ -97,9 +98,16 @@ func PutNode(r *Root, path string, nd node.Node) error {
|
||||
return pdir.AddChild(filename, nd)
|
||||
}
|
||||
|
||||
// MkdirOpts is used by Mkdir
|
||||
type MkdirOpts struct {
|
||||
Mkparents bool
|
||||
Flush bool
|
||||
Prefix *cid.Prefix
|
||||
}
|
||||
|
||||
// Mkdir creates a directory at 'path' under the directory 'd', creating
|
||||
// intermediary directories as needed if 'mkparents' is set to true
|
||||
func Mkdir(r *Root, pth string, mkparents bool, flush bool) error {
|
||||
func Mkdir(r *Root, pth string, opts MkdirOpts) error {
|
||||
if pth == "" {
|
||||
return fmt.Errorf("no path given to Mkdir")
|
||||
}
|
||||
@ -115,7 +123,7 @@ func Mkdir(r *Root, pth string, mkparents bool, flush bool) error {
|
||||
|
||||
if len(parts) == 0 {
|
||||
// this will only happen on 'mkdir /'
|
||||
if mkparents {
|
||||
if opts.Mkparents {
|
||||
return nil
|
||||
}
|
||||
return fmt.Errorf("cannot create directory '/': Already exists")
|
||||
@ -124,13 +132,13 @@ func Mkdir(r *Root, pth string, mkparents bool, flush bool) error {
|
||||
cur := r.GetValue().(*Directory)
|
||||
for i, d := range parts[:len(parts)-1] {
|
||||
fsn, err := cur.Child(d)
|
||||
if err == os.ErrNotExist && mkparents {
|
||||
if err == os.ErrNotExist && opts.Mkparents {
|
||||
mkd, err := cur.Mkdir(d)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if r.Prefix != nil {
|
||||
mkd.SetPrefix(r.Prefix)
|
||||
if opts.Prefix != nil {
|
||||
mkd.SetPrefix(opts.Prefix)
|
||||
}
|
||||
fsn = mkd
|
||||
} else if err != nil {
|
||||
@ -146,15 +154,15 @@ func Mkdir(r *Root, pth string, mkparents bool, flush bool) error {
|
||||
|
||||
final, err := cur.Mkdir(parts[len(parts)-1])
|
||||
if err != nil {
|
||||
if !mkparents || err != os.ErrExist || final == nil {
|
||||
if !opts.Mkparents || err != os.ErrExist || final == nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
if r.Prefix != nil {
|
||||
final.SetPrefix(r.Prefix)
|
||||
if opts.Prefix != nil {
|
||||
final.SetPrefix(opts.Prefix)
|
||||
}
|
||||
|
||||
if flush {
|
||||
if opts.Flush {
|
||||
err := final.Flush()
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
@ -61,9 +61,6 @@ type Root struct {
|
||||
dserv dag.DAGService
|
||||
|
||||
Type string
|
||||
|
||||
// Prefix to use for any children created
|
||||
Prefix *cid.Prefix
|
||||
}
|
||||
|
||||
type PubFunc func(context.Context, *cid.Cid) error
|
||||
|
||||
Loading…
Reference in New Issue
Block a user