diff options
author | Samy Pesse <samypesse@gmail.com> | 2016-06-10 22:04:19 +0200 |
---|---|---|
committer | Samy Pesse <samypesse@gmail.com> | 2016-06-10 22:04:19 +0200 |
commit | 94a4310c1e4b9ee71def9cbd9efd8a4c491f4444 (patch) | |
tree | 5f221cb283e5f4591a3764112569ee62220e6da2 /lib/plugins/loadForBook.js | |
parent | e8ee57be83adf3de2933373e7969c7675bf5372d (diff) | |
download | gitbook-94a4310c1e4b9ee71def9cbd9efd8a4c491f4444.zip gitbook-94a4310c1e4b9ee71def9cbd9efd8a4c491f4444.tar.gz gitbook-94a4310c1e4b9ee71def9cbd9efd8a4c491f4444.tar.bz2 |
Adapt Plugins.loadForBook to use correct order
Diffstat (limited to 'lib/plugins/loadForBook.js')
-rw-r--r-- | lib/plugins/loadForBook.js | 83 |
1 files changed, 40 insertions, 43 deletions
diff --git a/lib/plugins/loadForBook.js b/lib/plugins/loadForBook.js index a3f9dd0..757677e 100644 --- a/lib/plugins/loadForBook.js +++ b/lib/plugins/loadForBook.js @@ -1,6 +1,7 @@ -var Promise = require('../utils/promise'); +var Immutable = require('immutable'); -var listForBook = require('./listForBook'); +var Promise = require('../utils/promise'); +var listDepsForBook = require('./listDepsForBook'); var findForBook = require('./findForBook'); var loadPlugin = require('./loadPlugin'); @@ -13,60 +14,56 @@ var loadPlugin = require('./loadPlugin'); */ function loadForBook(book) { var logger = book.getLogger(); - var requirements = listForBook(book); - var requirementsKeys = requirements.keySeq().toList(); - - return findForBook(book) - .then(function(installed) { - // Filter out plugins not listed of first level - // (aka pre-installed plugins) - /*installed = installed.filter(function(plugin) { - return ( - // Plugin is a dependency of another one - plugin.getDepth() > 0 || - - // Plugin is specified in "book.json" - requirements.has(plugin.getName()) - ); - });*/ - // Insert installed plugins not listed in required - var pluginsToLoad = installed.reduce(function(pluginSeq, plugin) { - var name = plugin.getName(); + // List the dependencies + var requirements = listDepsForBook(book); - if (requirements.has(name)) { - return pluginSeq; + // List all plugins installed in the book + return findForBook(book) + .then(function(installedMap) { + var missing = []; + var plugins = requirements.reduce(function(result, dep) { + var name = dep.getName(); + var installed = installedMap.get(name); + + if (installed) { + var deps = installedMap + .filter(function(plugin) { + return plugin.getParent() === name; + }) + .toArray(); + + result = result.concat(deps); + result.push(installed); + } else { + missing.push(name); } - var parentName = plugin.getParent(); - - - pluginSeq = pluginSeq.push([ - name, - plugin - ]); - - return pluginSeq; - }, requirements.entrySeq()); - + return result; + }, []); + // Convert plugins list to a map + plugins = Immutable.List(plugins) + .map(function(plugin) { + return [ + plugin.getName(), + plugin + ]; + }); + plugins = Immutable.OrderedMap(plugins); // Log state - logger.info.ln(installed.size + ' plugins are installed'); - if (requirements.size != installed.size) { + logger.info.ln(installedMap.size + ' plugins are installed'); + if (requirements.size != installedMap.size) { logger.info.ln(requirements.size + ' explicitly listed'); } // Verify that all plugins are present - var notInstalled = requirementsKeys.filter(function(name) { - return !installed.has(name); - }); - - if (notInstalled.size > 0) { - throw new Error('Couldn\'t locate plugins "' + notInstalled.join(', ') + '", Run \'gitbook install\' to install plugins from registry.'); + if (missing.length > 0) { + throw new Error('Couldn\'t locate plugins "' + missing.join(', ') + '", Run \'gitbook install\' to install plugins from registry.'); } - return Promise.map(installed, function(plugin) { + return Promise.map(plugins, function(plugin) { return loadPlugin(book, plugin); }); }); |