@cryptotaxi247 / kubo / commits / 00a56a14e

serialfile: localize os.Open into NewSerialFile

License: MIT Signed-off-by: rht <rhtbot@gmail.com>

rht committed Aug 31, 2015 at 11:29 UTC 00a56a14ece8e7f283e220db5b717906632b20d3
3 files changed +17 -24
commands/cli/parse.go
+1 -16
@@ -356,21 +356,6 @@ func appendFile(args []files.File, inputs []string, argDef *cmds.Argument, recur
356 return nil, nil, err
357 }
358
359 - if stat.Mode()&os.ModeSymlink != 0 {
360 - target, err := os.Readlink(fpath)
361 - if err != nil {
362 - return nil, nil, err
363 - }
364 -
365 - arg := files.NewLinkFile("", fpath, target, stat)
366 - return append(args, arg), inputs[1:], nil
367 - }
368 -
369 - file, err := os.Open(fpath)
370 - if err != nil {
371 - return nil, nil, err
372 - }
373 -
359 if stat.IsDir() {
360 if !argDef.Recursive {
361 err = fmt.Errorf("Invalid path '%s', argument '%s' does not support directories",
@@ -384,7 +369,7 @@ func appendFile(args []files.File, inputs []string, argDef *cmds.Argument, recur
369 }
370 }
371
387 - arg, err := files.NewSerialFile(path.Base(fpath), fpath, file)
372 + arg, err := files.NewSerialFile(path.Base(fpath), fpath, stat)
373 if err != nil {
374 return nil, nil, err
375 }
commands/files/serialfile.go
+12 -4
@@ -25,8 +25,17 @@ type serialFile struct {
25 current *os.File
26 }
27
28 -func NewSerialFile(name, path string, file *os.File) (File, error) {
29 - stat, err := file.Stat()
28 +func NewSerialFile(name, path string, stat os.FileInfo) (File, error) {
29 + if stat.Mode()&os.ModeSymlink != 0 {
30 + target, err := os.Readlink(path)
31 + if err != nil {
32 + return nil, err
33 + }
34 +
35 + return NewLinkFile("", path, target, stat), nil
36 + }
37 +
38 + file, err := os.Open(path)
39 if err != nil {
40 return nil, err
41 }
@@ -49,8 +58,7 @@ func newSerialFile(name, path string, file *os.File, stat os.FileInfo) (File, er
58
59 // we no longer need our root directory file (we already statted the contents),
60 // so close it
52 - err = file.Close()
53 - if err != nil {
61 + if err := file.Close(); err != nil {
62 return nil, err
63 }
64
core/coreunix/add.go
+4 -4
@@ -43,18 +43,18 @@ func Add(n *core.IpfsNode, r io.Reader) (string, error) {
43
44 // AddR recursively adds files in |path|.
45 func AddR(n *core.IpfsNode, root string) (key string, err error) {
46 - f, err := os.Open(root)
46 + stat, err := os.Lstat(root)
47 if err != nil {
48 return "", err
49 }
50 - defer f.Close()
50
52 - ff, err := files.NewSerialFile(root, root, f)
51 + f, err := files.NewSerialFile(root, root, stat)
52 if err != nil {
53 return "", err
54 }
55 + defer f.Close()
56
57 - dagnode, err := addFile(n, ff)
57 + dagnode, err := addFile(n, f)
58 if err != nil {
59 return "", err
60 }