2018-01-29 20:39:20 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"os"
|
|
|
|
"path"
|
|
|
|
"path/filepath"
|
|
|
|
|
|
|
|
"github.com/ipfs/go-ipfs-cmdkit/files"
|
|
|
|
)
|
|
|
|
|
2018-01-29 22:11:23 +00:00
|
|
|
func parseFileArgs(paths []string) (*files.MultiFileReader, error) {
|
2018-01-29 20:39:20 +00:00
|
|
|
// logic largely drawn from go-ipfs-cmds/cli/parse.go: parseArgs
|
2018-01-29 22:11:23 +00:00
|
|
|
parsedFiles := make([]files.File, len(paths), len(paths))
|
2018-01-29 20:39:20 +00:00
|
|
|
for _, path := range paths {
|
|
|
|
file, err := appendFile(path)
|
|
|
|
if err != nil {
|
2018-01-29 22:11:23 +00:00
|
|
|
return nil, err
|
2018-01-29 20:39:20 +00:00
|
|
|
}
|
2018-01-29 22:11:23 +00:00
|
|
|
parsedFiles = append(parsedFiles, file)
|
2018-01-29 20:39:20 +00:00
|
|
|
}
|
2018-01-29 22:11:23 +00:00
|
|
|
sliceFile := files.NewSliceFile("", "", parsedFiles)
|
|
|
|
return files.NewMultiFileReader(sliceFile, true), nil
|
2018-01-29 20:39:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
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)
|
|
|
|
}
|