func addFile(n *core.IpfsNode, file cmds.File, added *AddOutput) (*dag.Node, error) { if file.IsDirectory() { return addDir(n, file, added) } dns, err := add(n, []io.Reader{file}) if err != nil { return nil, err } log.Infof("adding file: %s", file.FileName()) if err := addDagnode(added, file.FileName(), dns[len(dns)-1]); err != nil { return nil, err } return dns[len(dns)-1], nil // last dag node is the file. }
func addDir(n *core.IpfsNode, dir cmds.File, added *AddOutput) (*dag.Node, error) { log.Infof("adding directory: %s", dir.FileName()) tree := &dag.Node{Data: ft.FolderPBData()} for { file, err := dir.NextFile() if err != nil && err != io.EOF { return nil, err } if file == nil { break } node, err := addFile(n, file, added) if err != nil { return nil, err } _, name := path.Split(file.FileName()) err = tree.AddNodeLink(name, node) if err != nil { return nil, err } } err := addDagnode(added, dir.FileName(), tree) if err != nil { return nil, err } err = addNode(n, tree) if err != nil { return nil, err } return tree, nil }