ipfs-cluster/ipfs-cluster-ctl/files.go

53 lines
1.1 KiB
Go
Raw Normal View History

package main
import (
"fmt"
"os"
"path"
"path/filepath"
"github.com/ipfs/go-ipfs-cmdkit/files"
)
func parseFileArgs(paths []string) (*files.MultiFileReader, error) {
// logic largely drawn from go-ipfs-cmds/cli/parse.go: parseArgs
parsedFiles := make([]files.File, len(paths), len(paths))
for _, path := range paths {
file, err := appendFile(path)
if err != nil {
return nil, err
}
parsedFiles = append(parsedFiles, file)
}
sliceFile := files.NewSliceFile("", "", parsedFiles)
return files.NewMultiFileReader(sliceFile, true), nil
}
func appendFile(fpath string) (files.File, error) {
// logic drawn from go-ipfs-cmds/cli/parse.go: appendFile
if fpath == "." {
cwd, err := os.Getwd()
if err != nil {
return nil, err
}
cwd, err = filepath.EvalSymlinks(cwd)
if err != nil {
return nil, err
}
fpath = cwd
}
fpath = filepath.ToSlash(filepath.Clean(fpath))
stat, err := os.Lstat(fpath)
if err != nil {
return nil, err
}
if stat.IsDir() {
return nil, fmt.Errorf("path: %s points to dir, adding dirs not yet supported", fpath)
}
return files.NewSerialFile(path.Base(fpath), fpath, false, stat)
}