Merge pull request #4717 from BigFunger/plugin-file-input

Added file protocol support to plugin installer
This commit is contained in:
Rashid Khan 2015-08-20 10:34:55 -07:00
commit 10b7e0bfb1
3 changed files with 18 additions and 11 deletions

View file

@ -1,6 +1,8 @@
var _ = require('lodash');
var zlib = require('zlib');
var Promise = require('bluebird');
var url = require('url');
var fs = require('fs');
var request = require('request');
var tar = require('tar');
var progressReporter = require('./progressReporter');
@ -17,7 +19,7 @@ module.exports = function (settings, logger) {
throw new Error('Not a valid url.');
}
logger.log('attempting to download ' + sourceUrl);
logger.log('Attempting to extract from ' + sourceUrl);
return Promise.try(function () {
return downloadSingle(sourceUrl, settings.workingPath, settings.timeout, logger)
@ -26,7 +28,7 @@ module.exports = function (settings, logger) {
return tryNext();
}
if (err.message === 'EEXTRACT') {
throw (new Error('Error extracting the plugin archive'));
throw (new Error('Error extracting the plugin archive... is this a valid tar.gz file?'));
}
throw (err);
});
@ -54,10 +56,10 @@ module.exports = function (settings, logger) {
}
return wrappedRequest(requestOptions)
.then(function (req) {
var reporter = progressReporter(logger, req);
.then(function (fileStream) {
var reporter = progressReporter(logger, fileStream);
req
fileStream
.on('response', reporter.handleResponse)
.on('data', reporter.handleData)
.on('error', _.partial(reporter.handleError, 'ENOTFOUND'))
@ -73,7 +75,12 @@ module.exports = function (settings, logger) {
function wrappedRequest(requestOptions) {
return Promise.try(function () {
return request.get(requestOptions);
let urlInfo = url.parse(requestOptions.url);
if (/^file/.test(urlInfo.protocol)) {
return fs.createReadStream(urlInfo.path);
} else {
return request.get(requestOptions);
}
})
.catch(function (err) {
if (err.message.match(/invalid uri/i)) {

View file

@ -7,7 +7,7 @@ module.exports = {
};
function install(settings, logger) {
logger.log(`installing ${settings.package}`);
logger.log(`Installing ${settings.package}`);
try {
fs.statSync(settings.pluginPath);

View file

@ -1,9 +1,9 @@
var Promise = require('bluebird');
/*
Responsible for reporting the progress of the file request stream
Responsible for reporting the progress of the file stream
*/
module.exports = function (logger, request) {
module.exports = function (logger, stream) {
var oldDotCount = 0;
var runningTotal = 0;
var totalSize = 0;
@ -22,7 +22,7 @@ module.exports = function (logger, request) {
if (err) logger.error(err);
hasError = true;
request.abort();
if (stream.abort) stream.abort();
_reject(new Error(errorMessage));
}
@ -56,7 +56,7 @@ module.exports = function (logger, request) {
function handleEnd() {
if (hasError) return;
logger.log('Download Complete');
logger.log('Extraction complete');
_resolve();
}