diff --git a/bin/muntar b/bin/muntar index 613ceee..5827b21 100755 --- a/bin/muntar +++ b/bin/muntar @@ -17,7 +17,7 @@ var manta = require('../lib'); var http = require('http'); var https = require('https'); -var tar = require('tar'); +var tar = require('tar-stream'); ///--- Globals @@ -188,7 +188,7 @@ function worker(client, tarball, callback) { var entry = 0; var inflight = 1; var stream = fs.createReadStream(tarball.file); - var pipe = stream.pipe(tar.Parse()); + var pipe = stream.pipe(tar.extract()); var options = tarball.options; callback = once(callback); @@ -228,7 +228,6 @@ function worker(client, tarball, callback) { LOG.debug({ err: err, num: tarball.retry[_entry] }, 'put to ' + path + ' failed; retrying'); - e.resume(); } cb(); @@ -236,8 +235,14 @@ function worker(client, tarball, callback) { } pipe.once('end', cb); - pipe.on('entry', function (e) { - if (e.props.size === 0) + pipe.on('entry', function (header, e, next) { + e.on('end', function () { + next(); + }); + + e.resume(); + + if (header.size === 0) return; if (entry++ < tarball.next) { @@ -247,17 +252,15 @@ function worker(client, tarball, callback) { tarball.next = entry; } - e.pause(); - var headers = options.headers || {}; if (options['role-tag']) headers['role-tag'] = options['role-tag'].join(','); - var p = options.path + '/' + e.props.path; + var p = options.path + '/' + header.name; var o = { copies: options.copies, headers: headers, - size: e.props.size + size: header.size }; inflight++; diff --git a/package.json b/package.json index 69e24e4..2332a3b 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "restify-clients": "~1.4.1", "showdown": "~1.4.2", "smartdc-auth": "^2.4.1", - "tar": "~2.2.1", + "tar-stream": "~1.5.2", "uuid": "~2.0.2", "vasync": "^1.6.4", "verror": "^1.6.1",