coreapi unixfs: cleanup options
License: MIT Signed-off-by: Łukasz Magiera <magik6k@gmail.com> This commit was moved from ipfs/interface-go-ipfs-core@e62f26507f22f00426172384461c53c7d14b702f This commit was moved from ipfs/boxo@c3289a5e7d437768d5f1ea158a9e093034097c17
Łukasz Magiera committed
Sep 20, 2018 at 23:15 UTC
7546c9386701ca6931a8bc0ac3fb202cace91015
1 file changed
+38
-3
core/coreiface/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{}