func (adder *Adder) addDir(dir files.File) error { log.Infof("adding directory: %s", dir.FileName()) err := mfs.Mkdir(adder.mr, dir.FileName(), true, false) if err != nil { return err } for { file, err := dir.NextFile() if err != nil && err != io.EOF { return err } if file == nil { break } // Skip hidden files when adding recursively, unless Hidden is enabled. if files.IsHidden(file) && !adder.Hidden { log.Infof("%s is hidden, skipping", file.FileName()) continue } err = adder.addFile(file) if err != nil { return err } } return nil }
// Add the given file while respecting the params. func (params *adder) addFile(file files.File) (*dag.Node, error) { // Check if file is hidden if fileIsHidden := files.IsHidden(file); fileIsHidden && !params.hidden { log.Debugf("%s is hidden, skipping", file.FileName()) return nil, &hiddenFileError{file.FileName()} } // Check if "file" is actually a directory if file.IsDirectory() { return params.addDir(file) } // if the progress flag was specified, wrap the file so that we can send // progress updates to the client (over the output channel) var reader io.Reader = file if params.progress { reader = &progressReader{file: file, out: params.out} } dagnode, err := add(params.node, reader, params.trickle) if err != nil { return nil, err } log.Infof("adding file: %s", file.FileName()) if err := outputDagnode(params.out, file.FileName(), dagnode); err != nil { return nil, err } return dagnode, nil }
func (adder *Adder) addFile(file files.File) error { err := adder.maybePauseForGC() if err != nil { return err } switch { case files.IsHidden(file) && !adder.Hidden: log.Infof("%s is hidden, skipping", file.FileName()) return &hiddenFileError{file.FileName()} case file.IsDirectory(): return adder.addDir(file) } // case for symlink if s, ok := file.(*files.Symlink); ok { sdata, err := unixfs.SymlinkData(s.Target) if err != nil { return err } dagnode := &dag.Node{Data: sdata} _, err = adder.node.DAG.Add(dagnode) if err != nil { return err } return adder.addNode(dagnode, s.FileName()) } // case for regular file // if the progress flag was specified, wrap the file so that we can send // progress updates to the client (over the output channel) var reader io.Reader = file if adder.Progress { reader = &progressReader{file: file, out: adder.out} } dagnode, err := adder.add(reader) if err != nil { return err } // patch it into the root return adder.addNode(dagnode, file.FileName()) }
// Add the given file while respecting the params. func (params *adder) addFile(file files.File) (*dag.Node, error) { // Check if file is hidden if fileIsHidden := files.IsHidden(file); fileIsHidden && !params.hidden { log.Debugf("%s is hidden, skipping", file.FileName()) return nil, &hiddenFileError{file.FileName()} } // Check if "file" is actually a directory if file.IsDirectory() { return params.addDir(file) } if s, ok := file.(*files.Symlink); ok { sdata, err := ft.SymlinkData(s.Target) if err != nil { return nil, err } dagnode := &dag.Node{Data: sdata} _, err = params.node.DAG.Add(dagnode) if err != nil { return nil, err } err = params.addNode(dagnode, s.FileName()) return dagnode, err } // if the progress flag was specified, wrap the file so that we can send // progress updates to the client (over the output channel) var reader io.Reader = file if params.progress { reader = &progressReader{file: file, out: params.out} } dagnode, err := add(params.node, reader, params.trickle, params.chunker) if err != nil { return nil, err } // patch it into the root log.Infof("adding file: %s", file.FileName()) err = params.addNode(dagnode, file.FileName()) return dagnode, err }