diff options
author | Samy Pessé <samypesse@gmail.com> | 2016-05-27 09:27:11 +0200 |
---|---|---|
committer | Samy Pessé <samypesse@gmail.com> | 2016-05-27 09:27:11 +0200 |
commit | 6def174b845d6dd392c2f1ef41e94b025b774bf8 (patch) | |
tree | c2c2825fbf2e504202367c4843fa8c63e5cc4d4e | |
parent | 346a18b4446060eeb53a0a697fa82f1d13ba6cd2 (diff) | |
parent | 465e8d6c0adfe69f696fafa7486541aac55298fe (diff) | |
download | gitbook-6def174b845d6dd392c2f1ef41e94b025b774bf8.zip gitbook-6def174b845d6dd392c2f1ef41e94b025b774bf8.tar.gz gitbook-6def174b845d6dd392c2f1ef41e94b025b774bf8.tar.bz2 |
Merge pull request #1334 from ryanswanson/master
Fixed two issues for handling git URLs for plugins
-rw-r--r-- | lib/models/__tests__/pluginDependency.js | 48 | ||||
-rw-r--r-- | lib/models/pluginDependency.js | 4 | ||||
-rw-r--r-- | lib/plugins/__tests__/resolveVersion.js | 14 | ||||
-rw-r--r-- | lib/plugins/installPlugins.js | 67 | ||||
-rw-r--r-- | lib/plugins/resolveVersion.js | 71 |
5 files changed, 121 insertions, 83 deletions
diff --git a/lib/models/__tests__/pluginDependency.js b/lib/models/__tests__/pluginDependency.js index 0b105e9..cb04cf2 100644 --- a/lib/models/__tests__/pluginDependency.js +++ b/lib/models/__tests__/pluginDependency.js @@ -42,21 +42,39 @@ describe('PluginDependency', function() { expect(plugin.getVersion()).toBe('git+ssh://samy@github.com/GitbookIO/plugin-ga.git'); }); }); - }); - describe('listToArray', function() { - var list = PluginDependency.listToArray(Immutable.List([ - PluginDependency.createFromString('hello@1.0.0'), - PluginDependency.createFromString('noversion'), - PluginDependency.createFromString('-disabled') - ])); - - expect(list).toEqual([ - 'hello@1.0.0', - 'noversion', - '-disabled' - ]); - }); -}); + describe('listToArray', function() { + it('must create an array from a list of plugin dependencies', function() { + var list = PluginDependency.listToArray(Immutable.List([ + PluginDependency.createFromString('hello@1.0.0'), + PluginDependency.createFromString('noversion'), + PluginDependency.createFromString('-disabled') + ])); + + expect(list).toEqual([ + 'hello@1.0.0', + 'noversion', + '-disabled' + ]); + }); + }); + describe('listFromArray', function() { + it('must create an array from a list of plugin dependencies', function() { + var arr = Immutable.fromJS([ + 'hello@1.0.0', + { + 'name': 'plugin-ga', + 'version': 'git+ssh://samy@github.com/GitbookIO/plugin-ga.git' + } + ]); + var list = PluginDependency.listFromArray(arr); + expect(list.first().getName()).toBe('hello'); + expect(list.first().getVersion()).toBe('1.0.0'); + expect(list.last().getName()).toBe('plugin-ga'); + expect(list.last().getVersion()).toBe('git+ssh://samy@github.com/GitbookIO/plugin-ga.git'); + }); + }); + }); +}); diff --git a/lib/models/pluginDependency.js b/lib/models/pluginDependency.js index 3502468..99f6f91 100644 --- a/lib/models/pluginDependency.js +++ b/lib/models/pluginDependency.js @@ -95,8 +95,8 @@ PluginDependency.listFromArray = function(arr) { return PluginDependency.createFromString(entry); } else { return PluginDependency({ - name: entry.name, - version: entry.version + name: entry.get('name'), + version: entry.get('version') }); } }) diff --git a/lib/plugins/__tests__/resolveVersion.js b/lib/plugins/__tests__/resolveVersion.js new file mode 100644 index 0000000..164611f --- /dev/null +++ b/lib/plugins/__tests__/resolveVersion.js @@ -0,0 +1,14 @@ +var PluginDependency = require('../../models/pluginDependency'); +var resolveVersion = require('../resolveVersion'); + +describe('resolveVersion', function() { + it('must skip resolving and return non-semver versions', function(done) { + var plugin = PluginDependency.createFromString('plugin-ga@git+ssh://samy@github.com/GitbookIO/plugin-ga.git'); + + resolveVersion(plugin) + .then(function(version) { + expect(version).toBe('git+ssh://samy@github.com/GitbookIO/plugin-ga.git'); + done(); + }); + }); +}); diff --git a/lib/plugins/installPlugins.js b/lib/plugins/installPlugins.js index 5adae04..ed9316c 100644 --- a/lib/plugins/installPlugins.js +++ b/lib/plugins/installPlugins.js @@ -1,75 +1,10 @@ -var npm = require('npm'); 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; - -/** - Initialize and prepare NPM - - @return {Promise} -*/ -function initNPM() { - if (npmIsReady) return npmIsReady; - - npmIsReady = Promise.nfcall(npm.load, { - silent: true, - loglevel: 'silent' - }); - - return npmIsReady; -} - - - -/** - Resolve a plugin to a version - - @param {Plugin} - @return {Promise<String>} -*/ -function resolveVersion(plugin) { - var npmId = Plugin.nameToNpmID(plugin.getName()); - var requiredVersion = plugin.getVersion(); - - return initNPM() - .then(function() { - return Promise.nfcall(npm.commands.view, [npmId + '@' + requiredVersion, 'engines'], true); - }) - .then(function(versions) { - versions = Immutable.Map(versions).entrySeq(); - - var result = versions - .map(function(entry) { - return { - version: entry[0], - gitbook: (entry[1].engines || {}).gitbook - }; - }) - .filter(function(v) { - return v.gitbook && gitbook.satisfies(v.gitbook); - }) - .sort(function(v1, v2) { - return semver.lt(v1.version, v2.version)? 1 : -1; - }) - .get(0); - - if (!result) { - return undefined; - } else { - return result.version; - } - }); -} - +var resolveVersion = require('./resolveVersion'); /** Install a plugin for a book diff --git a/lib/plugins/resolveVersion.js b/lib/plugins/resolveVersion.js new file mode 100644 index 0000000..a24c8a0 --- /dev/null +++ b/lib/plugins/resolveVersion.js @@ -0,0 +1,71 @@ +var npm = require('npm'); +var semver = require('semver'); +var Immutable = require('immutable'); + +var Promise = require('../utils/promise'); +var Plugin = require('../models/plugin'); +var gitbook = require('../gitbook'); + +var npmIsReady; + +/** + Initialize and prepare NPM + + @return {Promise} +*/ +function initNPM() { + if (npmIsReady) return npmIsReady; + + npmIsReady = Promise.nfcall(npm.load, { + silent: true, + loglevel: 'silent' + }); + + return npmIsReady; +} + +/** + Resolve a plugin to a version + + @param {Plugin} + @return {Promise<String>} +*/ +function resolveVersion(plugin) { + var npmId = Plugin.nameToNpmID(plugin.getName()); + var requiredVersion = plugin.getVersion(); + + if (!semver.validRange(requiredVersion)) { + return Promise.resolve(requiredVersion); + } + + return initNPM() + .then(function() { + return Promise.nfcall(npm.commands.view, [npmId + '@' + requiredVersion, 'engines'], true); + }) + .then(function(versions) { + versions = Immutable.Map(versions).entrySeq(); + + var result = versions + .map(function(entry) { + return { + version: entry[0], + gitbook: (entry[1].engines || {}).gitbook + }; + }) + .filter(function(v) { + return v.gitbook && gitbook.satisfies(v.gitbook); + }) + .sort(function(v1, v2) { + return semver.lt(v1.version, v2.version)? 1 : -1; + }) + .get(0); + + if (!result) { + return undefined; + } else { + return result.version; + } + }); +} + +module.exports = resolveVersion; |