From e932d36a813aa51a16256b14f33fc9a88baeff7e Mon Sep 17 00:00:00 2001 From: Pedro Teixeira Date: Mon, 30 Jan 2017 18:34:48 +0000 Subject: [PATCH 1/3] fix: case for empty file --- src/builder/balanced/balanced-reducer.js | 4 +++- src/builder/builder.js | 14 ++++++++------ src/builder/flat/index.js | 12 ++++++++---- src/builder/trickle/trickle-reducer.js | 4 +++- test/test-importer.js | 14 ++++++++++++++ 5 files changed, 36 insertions(+), 12 deletions(-) diff --git a/src/builder/balanced/balanced-reducer.js b/src/builder/balanced/balanced-reducer.js index 2bd45cd0..9b35ed6d 100644 --- a/src/builder/balanced/balanced-reducer.js +++ b/src/builder/balanced/balanced-reducer.js @@ -20,7 +20,9 @@ module.exports = function balancedReduceToRoot (reduce, options) { result.push(roots[0]) result.end() } else if (roots.length > 1) { - result.end(new Error('expected a maximum of 0 roots and got ' + roots.length)) + result.end(new Error('expected a maximum of 1 roots and got ' + roots.length)) + } else { + result.end() } }) diff --git a/src/builder/builder.js b/src/builder/builder.js index d85025ab..54bfda67 100644 --- a/src/builder/builder.js +++ b/src/builder/builder.js @@ -1,7 +1,6 @@ 'use strict' const extend = require('deep-extend') -const assert = require('assert') const UnixFS = require('ipfs-unixfs') const pull = require('pull-stream') const through = require('pull-through') @@ -32,8 +31,10 @@ module.exports = function (createChunker, ipldResolver, createReducer, _options) if (err) { return cb(err) } - source.push(node) - files.push(node) + if (node) { + source.push(node) + files.push(node) + } cb() }) } @@ -43,8 +44,10 @@ module.exports = function (createChunker, ipldResolver, createReducer, _options) if (err) { return cb(err) } - source.push(node) - files.push(node) + if (node) { + source.push(node) + files.push(node) + } cb() }) }), cb) @@ -141,7 +144,6 @@ module.exports = function (createChunker, ipldResolver, createReducer, _options) if (err) { callback(err) } else { - assert.equal(roots.length, 1, 'should result in exactly one root') callback(null, roots[0]) } }) diff --git a/src/builder/flat/index.js b/src/builder/flat/index.js index 7a4e9cbb..a3952d77 100644 --- a/src/builder/flat/index.js +++ b/src/builder/flat/index.js @@ -1,6 +1,5 @@ 'use strict' -const assert = require('assert') const pull = require('pull-stream') const pushable = require('pull-pushable') const pullPair = require('pull-pair') @@ -20,9 +19,14 @@ module.exports = function (reduce, options) { result.end(err) return // early } - assert.equal(roots.length, 1, 'need one root') - result.push(roots[0]) - result.end() + if (roots.length === 1) { + result.push(roots[0]) + result.end() + } else if (roots.length > 1) { + result.end(new Error('expected a maximum of 1 roots and got ' + roots.length)) + } else { + result.end() + } }) ) diff --git a/src/builder/trickle/trickle-reducer.js b/src/builder/trickle/trickle-reducer.js index ebc34753..00751b04 100644 --- a/src/builder/trickle/trickle-reducer.js +++ b/src/builder/trickle/trickle-reducer.js @@ -28,7 +28,9 @@ module.exports = function trickleReduceToRoot (reduce, options) { result.push(roots[0]) result.end() } else if (roots.length > 1) { - result.end(new Error('expected a maximum of 0 roots and got ' + roots.length)) + result.end(new Error('expected a maximum of 1 roots and got ' + roots.length)) + } else { + result.end() } } }) diff --git a/test/test-importer.js b/test/test-importer.js index 8b072767..4ad2bde0 100644 --- a/test/test-importer.js +++ b/test/test-importer.js @@ -195,6 +195,20 @@ module.exports = (repo) => { })) }) + it('doesn\'t yield anything on empty file', (done) => { + pull( + pull.values([{ + path: 'emptyfile', + content: pull.empty() + }]), + importer(ipldResolver, options), + pull.collect((err, nodes) => { + expect(err).to.not.exist + expect(nodes.length).to.be.eql(0) + done() + })) + }) + it('fails on more than one root', (done) => { pull( pull.values([ From c2adf05dcc931c40118f8d23602cd84e28576fc0 Mon Sep 17 00:00:00 2001 From: Pedro Teixeira Date: Tue, 31 Jan 2017 10:00:42 +0000 Subject: [PATCH 2/3] always yield empty file --- src/chunker/fixed-size.js | 2 +- test/test-importer.js | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/chunker/fixed-size.js b/src/chunker/fixed-size.js index d737a8fb..33d71b49 100644 --- a/src/chunker/fixed-size.js +++ b/src/chunker/fixed-size.js @@ -4,5 +4,5 @@ const pullBlock = require('pull-block') module.exports = (options) => { let maxSize = (typeof options === 'number') ? options : options.maxChunkSize - return pullBlock(maxSize, { zeroPadding: false }) + return pullBlock(maxSize, { zeroPadding: false, emitEmpty: true }) } diff --git a/test/test-importer.js b/test/test-importer.js index 4ad2bde0..f768082d 100644 --- a/test/test-importer.js +++ b/test/test-importer.js @@ -204,7 +204,9 @@ module.exports = (repo) => { importer(ipldResolver, options), pull.collect((err, nodes) => { expect(err).to.not.exist - expect(nodes.length).to.be.eql(0) + expect(nodes.length).to.be.eql(1) + // always yield empty node + expect(mh.toB58String(nodes[0].multihash)).to.be.eql('QmfJMCvenrj4SKKRc48DYPxwVdS44qCUCqqtbqhJuSTWXP') done() })) }) From 67eb4dc1c85c1d8f1c2204c836dc5460a2c2cd7f Mon Sep 17 00:00:00 2001 From: Pedro Teixeira Date: Tue, 31 Jan 2017 10:52:49 +0000 Subject: [PATCH 3/3] updated dep version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6f171cda..39079c89 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "lodash": "^4.17.4", "multihashes": "^0.3.2", "pull-batch": "^1.0.0", - "pull-block": "^1.0.2", + "pull-block": "^1.1.0", "pull-pair": "^1.1.0", "pull-paramap": "^1.2.1", "pull-pause": "0.0.0",