@cryptotaxi247 / kubo / commits / 08c96ba07

Add support for inlining via the id-hash to the add command.

License: MIT Signed-off-by: Kevin Atkinson <k@kevina.org>

Kevin Atkinson committed Aug 21, 2018 at 21:42 UTC 08c96ba073d063c994e2637a220785c1c08f3eac
3 files changed +50 -2
core/commands/add.go
+14 -1
@@ -18,6 +18,7 @@ import (
18 cmds "gx/ipfs/QmPTfgFTo9PFr1PvPKyKoeMgBvYPh6cX3aDP7DHKVbnCbi/go-ipfs-cmds"
19 mh "gx/ipfs/QmPnFwZ2JXKnXgMw8CdBPxn7FWh6LLdjUjxV1fKHuJnkr8/go-multihash"
20 pb "gx/ipfs/QmPtj12fdwuAqj9sBSTNUxBNu8kCGNp8b3o8yUzMm5GHpq/pb"
21 + cidutil "gx/ipfs/QmPyxJ2QS7L5FhGkNYkNcXHGjDhvGHueJ4auqAstFHYxy5/go-cidutil"
22 cmdkit "gx/ipfs/QmSP88ryZkHSRn1fnngAaV2Vcn63WUJzAavnRM9CVdU1Ky/go-ipfs-cmdkit"
23 files "gx/ipfs/QmSP88ryZkHSRn1fnngAaV2Vcn63WUJzAavnRM9CVdU1Ky/go-ipfs-cmdkit/files"
24 offline "gx/ipfs/QmZxjqR9Qgompju73kakSoUj3rbVndAzky3oCDiBNCxPs1/go-ipfs-exchange-offline"
@@ -44,6 +45,8 @@ const (
45 fstoreCacheOptionName = "fscache"
46 cidVersionOptionName = "cid-version"
47 hashOptionName = "hash"
48 + inlineOptionName = "inline"
49 + idHashLimitOptionName = "id-hash-limit"
50 )
51
52 const adderOutChanSize = 8
@@ -120,6 +123,8 @@ You can now check what blocks have been created by:
123 cmdkit.BoolOption(fstoreCacheOptionName, "Check the filestore for pre-existing blocks. (experimental)"),
124 cmdkit.IntOption(cidVersionOptionName, "CID version. Defaults to 0 unless an option that depends on CIDv1 is passed. (experimental)"),
125 cmdkit.StringOption(hashOptionName, "Hash function to use. Implies CIDv1 if not sha2-256. (experimental)").WithDefault("sha2-256"),
126 + cmdkit.BoolOption(inlineOptionName, "Inline small objects using identity hash. (experimental)"),
127 + cmdkit.IntOption(idHashLimitOptionName, "Identity hash maxium size. (experimental)").WithDefault(64),
128 },
129 PreRun: func(req *cmds.Request, env cmds.Environment) error {
130 quiet, _ := req.Options[quietOptionName].(bool)
@@ -173,6 +178,8 @@ You can now check what blocks have been created by:
178 fscache, _ := req.Options[fstoreCacheOptionName].(bool)
179 cidVer, cidVerSet := req.Options[cidVersionOptionName].(int)
180 hashFunStr, _ := req.Options[hashOptionName].(string)
181 + inline, _ := req.Options[inlineOptionName].(bool)
182 + idHashLimit, _ := req.Options[idHashLimitOptionName].(int)
183
184 // The arguments are subject to the following constraints.
185 //
@@ -279,7 +286,13 @@ You can now check what blocks have been created by:
286 fileAdder.Silent = silent
287 fileAdder.RawLeaves = rawblks
288 fileAdder.NoCopy = nocopy
282 - fileAdder.CidBuilder = &prefix
289 + fileAdder.CidBuilder = prefix
290 +
291 + if inline {
292 + fileAdder.CidBuilder = cidutil.InlineBuilder{
293 + Builder: fileAdder.CidBuilder,
294 + Limit: idHashLimit}
295 + }
296
297 if hash {
298 md := dagtest.Mock()
test/sharness/t0040-add-and-cat.sh
+1 -1
@@ -590,7 +590,7 @@ test_add_cat_expensive "--cid-version=1" "zdj7WcatQrtuE4WMkS4XsfsMixuQN2po4irkYh
590 # encoded with the blake2b-256 hash funtion
591 test_add_cat_expensive '--hash=blake2b-256' "zDMZof1kwndounDzQCANUHjiE3zt1mPEgx7RE3JTHoZrRRa79xcv"
592
593 -test_add_named_pipe " Post http://$API_ADDR/api/v0/add?chunker=size-262144&encoding=json&hash=sha2-256&pin=true&progress=true&recursive=true&stream-channels=true:"
593 +test_add_named_pipe " Post http://$API_ADDR/api/v0/add?chunker=size-262144&encoding=json&hash=sha2-256&id-hash-limit=64&pin=true&progress=true&recursive=true&stream-channels=true:"
594
595 test_add_pwd_is_symlink
596
test/sharness/t0046-id-hash.sh
+35
@@ -43,6 +43,41 @@ test_expect_success "can still fetch it" '
43 test_cmp junk.txt actual
44 '
45
46 +test_expect_success "ipfs add --inline works as expected" '
47 + echo $ID_HASH0_CONTENTS > afile &&
48 + HASH=$(ipfs add -q --inline afile)
49 +'
50 +
51 +test_expect_success "ipfs add --inline uses id multihash" '
52 + MHTYPE=`cid-fmt %h $HASH`
53 + echo "mhtype is $MHTYPE"
54 + test "$MHTYPE" = id
55 +'
56 +
57 +test_expect_success "ipfs add --inline --raw-leaves works as expected" '
58 + echo $ID_HASH0_CONTENTS > afile &&
59 + HASH=$(ipfs add -q --inline --raw-leaves afile)
60 +'
61 +
62 +test_expect_success "ipfs add --inline --raw-leaves outputs the correct hash" '
63 + echo "$ID_HASH0" = "$HASH" &&
64 + test "$ID_HASH0" = "$HASH"
65 +'
66 +
67 +test_expect_success "create 1000 bytes file and get its hash" '
68 + random 1000 2 > 1000bytes &&
69 + HASH0=$(ipfs add -q --raw-leaves --only-hash 1000bytes)
70 +'
71 +
72 +test_expect_success "ipfs add --inline --raw-leaves works as expected on large file" '
73 + HASH=$(ipfs add -q --inline --raw-leaves 1000bytes)
74 +'
75 +
76 +test_expect_success "ipfs add --inline --raw-leaves outputs the correct hash on large file" '
77 + echo "$HASH0" = "$HASH" &&
78 + test "$HASH0" = "$HASH"
79 +'
80 +
81 test_expect_success "enable filestore" '
82 ipfs config --json Experimental.FilestoreEnabled true
83 '