diff options
Diffstat (limited to 'lib/plugins/installPlugins.js')
-rw-r--r-- | lib/plugins/installPlugins.js | 35 |
1 files changed, 28 insertions, 7 deletions
diff --git a/lib/plugins/installPlugins.js b/lib/plugins/installPlugins.js index 77ecfce..05a5316 100644 --- a/lib/plugins/installPlugins.js +++ b/lib/plugins/installPlugins.js @@ -3,9 +3,12 @@ var npmi = require('npmi'); var semver = require('semver'); var Immutable = require('immutable'); +var pkg = require('../../package.json'); +var DEFAULT_PLUGINS = require('../constants/defaultPlugins'); var Promise = require('../utils/promise'); var Plugin = require('../models/plugin'); var gitbook = require('../gitbook'); +var listForBook = require('./listForBook'); var npmIsReady; @@ -42,7 +45,7 @@ function resolveVersion(plugin) { return Promise.nfcall(npm.commands.view, [npmId + '@' + requiredVersion, 'engines'], true); }) .then(function(versions) { - versions = Immutable.Map(versions).entries().toList(); + versions = Immutable.Map(versions).entrySeq(); var result = versions .map(function(entry) { @@ -62,7 +65,7 @@ function resolveVersion(plugin) { if (!result) { return undefined; } else { - return result.get('version'); + return result.version; } }); } @@ -82,7 +85,7 @@ function installPlugin(book, plugin) { var name = plugin.getName(); var requirement = plugin.getVersion(); - logger.info.ln('installing plugin', name); + logger.info.ln('installing plugin "' + name + '"'); // Find a version to install return resolveVersion(plugin) @@ -91,7 +94,7 @@ function installPlugin(book, plugin) { throw new Error('Found no satisfactory version for plugin "' + name + '" with requirement "' + requirement + '"'); } - logger.info.ln('install plugin "' + plugin +'" from NPM with version', requirement); + logger.info.ln('install plugin "' + name +'" from NPM with version', requirement); return Promise.nfcall(npmi, { 'name': plugin.getNpmID(), 'version': version, @@ -104,7 +107,7 @@ function installPlugin(book, plugin) { }); }) .then(function() { - logger.info.ok('plugin "' + plugin + '" installed with success'); + logger.info.ok('plugin "' + name + '" installed with success'); }); } @@ -113,10 +116,28 @@ function installPlugin(book, plugin) { Install plugin requirements for a book @param {Book} - @param {OrderedMap<String:Plugin>} @return {Promise} */ -function installPlugins(book, plugins) { +function installPlugins(book) { + var logger = book.getLogger(); + var plugins = listForBook(book); + + // Remove default plugins + // (only if version is same as installed) + plugins = plugins.filterNot(function(plugin) { + return ( + DEFAULT_PLUGINS.includes(plugin.getName()) && + plugin.getVersion() === pkg.dependencies[plugin.getNpmID()] + ); + }); + + if (plugins.size == 0) { + logger.info.ln('nothing to install!'); + return Promise(); + } + + logger.info.ln('installing', plugins.size, 'plugins'); + return Promise.forEach(plugins, function(plugin) { return installPlugin(book, plugin); }); |