提交 d64f1494 作者: Jeromy

enfastify mfs

License: MIT
Signed-off-by: 's avatarJeromy <jeromyj@gmail.com>
上级 1efbc792
......@@ -61,9 +61,6 @@ remains to be implemented.
req.SetOption(progressOptionName, true)
log.Error("SKIPPING SIZE")
return nil
sizeFile, ok := req.Files().(files.SizeFile)
if !ok {
// we don't need to error, the progress bar just won't know how big the files are
......
package coreunix
import (
"bytes"
"fmt"
"io"
"io/ioutil"
......@@ -27,6 +28,8 @@ import (
var log = logging.Logger("coreunix")
var folderData = unixfs.FolderPBData()
// how many bytes of progress to wait before sending a progress update message
const progressReaderIncrement = 1024 * 256
......@@ -118,29 +121,26 @@ func (params Adder) add(reader io.Reader) (*dag.Node, error) {
}
func (params *Adder) RootNode() (*dag.Node, error) {
return params.mr.GetValue().GetNode()
/*
// for memoizing
if params.root != nil {
return params.root, nil
}
// for memoizing
if params.root != nil {
return params.root, nil
}
root := params.editor.GetNode()
root, err := params.mr.GetValue().GetNode()
if err != nil {
return nil, err
}
// if not wrapping, AND one root file, use that hash as root.
if !params.Wrap && len(root.Links) == 1 {
var err error
root, err = root.Links[0].GetNode(params.ctx, params.editor.GetDagService())
params.root = root
// no need to output, as we've already done so.
return root, err
// if not wrapping, AND one root file, use that hash as root.
if !params.Wrap && len(root.Links) == 1 {
root, err = root.Links[0].GetNode(params.ctx, params.node.DAG)
if err != nil {
return nil, err
}
}
// otherwise need to output, as we have not.
err := outputDagnode(params.out, "", root)
params.root = root
return root, err
*/
params.root = root
return root, err
}
func (params *Adder) PinRoot() error {
......@@ -162,7 +162,51 @@ func (params *Adder) PinRoot() error {
}
func (params *Adder) Finalize() (*dag.Node, error) {
return params.mr.GetValue().GetNode()
root, err := params.mr.GetValue().GetNode()
if err != nil {
return nil, err
}
params.RootNode()
var name string
if !params.Wrap {
name = root.Links[0].Name
child, err := root.Links[0].GetNode(params.ctx, params.node.DAG)
if err != nil {
return nil, err
}
root = child
}
err = params.outputDirs(name, root)
if err != nil {
return nil, err
}
err = params.mr.Close()
if err != nil {
return nil, err
}
return root, nil
}
func (params *Adder) outputDirs(path string, nd *dag.Node) error {
for _, l := range nd.Links {
child, err := l.GetNode(params.ctx, params.node.DAG)
if err != nil {
return err
}
if bytes.Equal(child.Data, folderData) {
err := params.outputDirs(gopath.Join(path, l.Name), child)
if err != nil {
return err
}
}
}
return outputDagnode(params.out, path, nd)
}
// Add builds a merkledag from the a reader, pinning all objects to the local
......
......@@ -5,6 +5,7 @@ import (
"fmt"
"os"
"sync"
"time"
context "github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/context"
......@@ -28,6 +29,8 @@ type Directory struct {
node *dag.Node
ctx context.Context
modTime time.Time
name string
}
......@@ -40,6 +43,7 @@ func NewDirectory(ctx context.Context, name string, node *dag.Node, parent child
parent: parent,
childDirs: make(map[string]*Directory),
files: make(map[string]*File),
modTime: time.Now(),
}
}
......@@ -72,6 +76,8 @@ func (d *Directory) updateChild(name string, nd *dag.Node) error {
return err
}
d.modTime = time.Now()
return nil
}
......@@ -285,12 +291,7 @@ func (d *Directory) AddChild(name string, nd *dag.Node) error {
d.Lock()
defer d.Unlock()
pbn, err := ft.FromBytes(nd.Data)
if err != nil {
return err
}
_, err = d.childUnsync(name)
_, err := d.childUnsync(name)
if err == nil {
return ErrDirExists
}
......@@ -305,18 +306,8 @@ func (d *Directory) AddChild(name string, nd *dag.Node) error {
return err
}
switch pbn.GetType() {
case ft.TDirectory:
d.childDirs[name] = NewDirectory(d.ctx, name, nd, d, d.dserv)
case ft.TFile, ft.TMetadata, ft.TRaw:
nfi, err := NewFile(name, nd, d, d.dserv)
if err != nil {
return err
}
d.files[name] = nfi
default:
return ErrInvalidChild
}
d.modTime = time.Now()
return d.parent.closeChild(d.name, d.node)
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论