coreapi unixfs: cleanup options
License: MIT Signed-off-by: Łukasz Magiera <magik6k@gmail.com>
Łukasz Magiera committed
Sep 20, 2018 at 23:15 UTC
679d60993d7b6782d5e68d20bc73aa3d2fbbff0c
2 files changed
+39
-37
core/coreapi/interface/options/unixfs.go
+38
-3
@@ -1,7 +1,12 @@
1
package options
2
3
import (
4
+ "errors"
5
+ "fmt"
6
+
7
+ cid "gx/ipfs/QmPSQnBKM9g7BaUcZCvswUJVscQ1ipjmwxN5PXCjkp9EQ7/go-cid"
8
mh "gx/ipfs/QmPnFwZ2JXKnXgMw8CdBPxn7FWh6LLdjUjxV1fKHuJnkr8/go-multihash"
9
+ dag "gx/ipfs/QmcBoNcAP6qDjgRBew7yjvCqHq7p5jMstE44jPUBWBxzsV/go-merkledag"
10
)
11
12
type Layout int
@@ -29,7 +34,7 @@ type UnixfsAddSettings struct {
34
35
type UnixfsAddOption func(*UnixfsAddSettings) error
36
32
-func UnixfsAddOptions(opts ...UnixfsAddOption) (*UnixfsAddSettings, error) {
37
+func UnixfsAddOptions(opts ...UnixfsAddOption) (*UnixfsAddSettings, cid.Prefix, error) {
38
options := &UnixfsAddSettings{
39
CidVersion: -1,
40
MhType: mh.SHA2_256,
@@ -49,11 +54,41 @@ func UnixfsAddOptions(opts ...UnixfsAddOption) (*UnixfsAddSettings, error) {
54
for _, opt := range opts {
55
err := opt(options)
56
if err != nil {
52
- return nil, err
57
+ return nil, cid.Prefix{}, err
58
+ }
59
+ }
60
+
61
+ // (hash != "sha2-256") -> CIDv1
62
+ if options.MhType != mh.SHA2_256 {
63
+ switch options.CidVersion {
64
+ case 0:
65
+ return nil, cid.Prefix{}, errors.New("CIDv0 only supports sha2-256")
66
+ case 1, -1:
67
+ options.CidVersion = 1
68
+ default:
69
+ return nil, cid.Prefix{}, fmt.Errorf("unknown CID version: %d", options.CidVersion)
70
+ }
71
+ } else {
72
+ if options.CidVersion < 0 {
73
+ // Default to CIDv0
74
+ options.CidVersion = 0
75
}
76
}
77
56
- return options, nil
78
+ // cidV1 -> raw blocks (by default)
79
+ if options.CidVersion > 0 && !options.RawLeavesSet {
80
+ options.RawLeaves = true
81
+ }
82
+
83
+ prefix, err := dag.PrefixForCidVersion(options.CidVersion)
84
+ if err != nil {
85
+ return nil, cid.Prefix{}, err
86
+ }
87
+
88
+ prefix.MhType = options.MhType
89
+ prefix.MhLength = -1
90
+
91
+ return options, prefix, nil
92
}
93
94
type unixfsOpts struct{}
core/coreapi/unixfs.go
+1
-34
@@ -2,7 +2,6 @@ package coreapi
2
3
import (
4
"context"
5
- "errors"
5
"fmt"
6
"github.com/ipfs/go-ipfs/core"
7
"io"
@@ -11,7 +10,6 @@ import (
10
"github.com/ipfs/go-ipfs/core/coreapi/interface/options"
11
"github.com/ipfs/go-ipfs/core/coreunix"
12
14
- mh "gx/ipfs/QmPnFwZ2JXKnXgMw8CdBPxn7FWh6LLdjUjxV1fKHuJnkr8/go-multihash"
13
cidutil "gx/ipfs/QmQJSeE3CX4zos9qeaG8EhecEK9zvrTEfTG84J8C5NVRwt/go-cidutil"
14
offline "gx/ipfs/QmR5miWuikPxWyUrzMYJVmFUcD44pGdtc98h9Qsbp4YcJw/go-ipfs-exchange-offline"
15
"gx/ipfs/QmSP88ryZkHSRn1fnngAaV2Vcn63WUJzAavnRM9CVdU1Ky/go-ipfs-cmdkit/files"
@@ -30,42 +28,11 @@ type UnixfsAPI CoreAPI
28
// Add builds a merkledag node from a reader, adds it to the blockstore,
29
// and returns the key representing that node.
30
func (api *UnixfsAPI) Add(ctx context.Context, r io.ReadCloser, opts ...options.UnixfsAddOption) (coreiface.ResolvedPath, error) {
33
- settings, err := options.UnixfsAddOptions(opts...)
31
+ settings, prefix, err := options.UnixfsAddOptions(opts...)
32
if err != nil {
33
return nil, err
34
}
35
38
- // TODO: move to options
39
- // (hash != "sha2-256") -> CIDv1
40
- if settings.MhType != mh.SHA2_256 {
41
- switch settings.CidVersion {
42
- case 0:
43
- return nil, errors.New("CIDv0 only supports sha2-256")
44
- case 1, -1:
45
- settings.CidVersion = 1
46
- default:
47
- return nil, fmt.Errorf("unknown CID version: %d", settings.CidVersion)
48
- }
49
- } else {
50
- if settings.CidVersion < 0 {
51
- // Default to CIDv0
52
- settings.CidVersion = 0
53
- }
54
- }
55
-
56
- // cidV1 -> raw blocks (by default)
57
- if settings.CidVersion > 0 && !settings.RawLeavesSet {
58
- settings.RawLeaves = true
59
- }
60
-
61
- prefix, err := dag.PrefixForCidVersion(settings.CidVersion)
62
- if err != nil {
63
- return nil, err
64
- }
65
-
66
- prefix.MhType = settings.MhType
67
- prefix.MhLength = -1
68
-
36
n := api.node
37
if settings.OnlyHash {
38
nilnode, err := core.NewNode(ctx, &core.BuildCfg{