From cf6e3219b63ae335679b87377e8795d2e8e570e2 Mon Sep 17 00:00:00 2001 From: Jeromy Date: Wed, 7 Dec 2016 16:36:00 -0800 Subject: [PATCH] cmd/block: add selection of multihash parameters to block put command License: MIT Signed-off-by: Jeromy --- core/commands/block.go | 22 +++++++++++++++++++--- test/sharness/t0050-block.sh | 13 +++++++++++++ 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/core/commands/block.go b/core/commands/block.go index b5081d9414d..149ad0b6d3c 100644 --- a/core/commands/block.go +++ b/core/commands/block.go @@ -117,6 +117,8 @@ It reads from stdin, and is a base58 encoded multihash. }, Options: []cmds.Option{ cmds.StringOption("format", "f", "cid format for blocks to be created with.").Default("v0"), + cmds.StringOption("mhtype", "multihash hash function").Default("sha2-256"), + cmds.IntOption("mhlen", "multihash hash length").Default(-1), }, Run: func(req cmds.Request, res cmds.Response) { n, err := req.InvocContext().GetNode() @@ -143,11 +145,10 @@ It reads from stdin, and is a base58 encoded multihash. return } - format, _, _ := req.Option("format").String() var pref cid.Prefix - pref.MhType = mh.SHA2_256 - pref.MhLength = -1 pref.Version = 1 + + format, _, _ := req.Option("format").String() switch format { case "cbor": pref.Codec = cid.DagCBOR @@ -163,6 +164,21 @@ It reads from stdin, and is a base58 encoded multihash. return } + mhtype, _, _ := req.Option("mhtype").String() + mhtval, ok := mh.Names[mhtype] + if !ok { + res.SetError(fmt.Errorf("unrecognized multihash function: %s", mhtype), cmds.ErrNormal) + return + } + pref.MhType = mhtval + + mhlen, _, err := req.Option("mhlen").Int() + if err != nil { + res.SetError(err, cmds.ErrNormal) + return + } + pref.MhLength = mhlen + bcid, err := pref.Sum(data) if err != nil { res.SetError(err, cmds.ErrNormal) diff --git a/test/sharness/t0050-block.sh b/test/sharness/t0050-block.sh index af5a5e1e58f..7939edc5ab2 100755 --- a/test/sharness/t0050-block.sh +++ b/test/sharness/t0050-block.sh @@ -184,6 +184,19 @@ test_expect_success "block get output looks right" ' test_cmp pb_block_out ../t0051-object-data/testPut.pb ' +test_expect_success "can set multihash type and length on block put" ' + HASH=$(echo "foooo" | ipfs block put --format=raw --mhtype=sha3 --mhlen=16) +' + +test_expect_success "output looks good" ' + test "z25ScPysKoxJBcPxczn9NvuHiZU5" = "$HASH" +' + +test_expect_success "can read block with different hash" ' + ipfs block get $HASH > blk_get_out && + echo "foooo" > blk_get_exp && + test_cmp blk_get_exp blk_get_out +' # # Misc tests #