CB-6776 Make project/.cordova/config.json integrate with platforms.js
Project: http://git-wip-us.apache.org/repos/asf/cordova-lib/repo Commit: http://git-wip-us.apache.org/repos/asf/cordova-lib/commit/3911876c Tree: http://git-wip-us.apache.org/repos/asf/cordova-lib/tree/3911876c Diff: http://git-wip-us.apache.org/repos/asf/cordova-lib/diff/3911876c Branch: refs/heads/master Commit: 3911876cdca2fc69f964c2e72fc7a01813ebf639 Parents: 2cc872f Author: Josh Soref <[email protected]> Authored: Thu Jun 19 15:17:17 2014 -0400 Committer: Josh Soref <[email protected]> Committed: Wed Jul 2 15:36:13 2014 -0400 ---------------------------------------------------------------------- cordova-lib/spec-cordova/create.spec.js | 4 +- .../fixtures/base/.cordova/config.json | 6 +- cordova-lib/spec-cordova/lazy_load.spec.js | 98 +++++++++++++++++--- .../metadata/windows8_parser.spec.js | 12 ++- .../spec-cordova/metadata/wp8_parser.spec.js | 12 ++- cordova-lib/spec-cordova/platform.spec.js | 4 +- cordova-lib/src/cordova/config.js | 2 +- cordova-lib/src/cordova/create.js | 14 +-- cordova-lib/src/cordova/lazy_load.js | 74 +++++++++++---- .../cordova/metadata/amazon_fireos_parser.js | 2 +- .../src/cordova/metadata/android_parser.js | 2 +- .../src/cordova/metadata/blackberry10_parser.js | 14 ++- .../src/cordova/metadata/firefoxos_parser.js | 2 +- cordova-lib/src/cordova/metadata/ios_parser.js | 2 +- .../src/cordova/metadata/ubuntu_parser.js | 2 +- .../src/cordova/metadata/windows_parser.js | 17 ++-- cordova-lib/src/cordova/metadata/wp8_parser.js | 14 +-- cordova-lib/src/cordova/platform.js | 7 +- cordova-lib/src/cordova/platforms.js | 1 + 19 files changed, 206 insertions(+), 83 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/3911876c/cordova-lib/spec-cordova/create.spec.js ---------------------------------------------------------------------- diff --git a/cordova-lib/spec-cordova/create.spec.js b/cordova-lib/spec-cordova/create.spec.js index 47bb2af..a7e5c08 100644 --- a/cordova-lib/spec-cordova/create.spec.js +++ b/cordova-lib/spec-cordova/create.spec.js @@ -50,7 +50,7 @@ var cordovaDir = path.join(project, '.cordova'); var configNormal = { lib: { www: { - uri: path.join(__dirname, 'fixtures', 'base', 'www'), + url: path.join(__dirname, 'fixtures', 'base', 'www'), version: "testCordovaCreate", id: appName } @@ -59,7 +59,7 @@ var configNormal = { var configSymlink = { lib: { www: { - uri: path.join(__dirname, 'fixtures', 'base'), // "create" should copy or link the www child of this dir and not the dir itself. + url: path.join(__dirname, 'fixtures', 'base'), // "create" should copy or link the www child of this dir and not the dir itself. link: true } } http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/3911876c/cordova-lib/spec-cordova/fixtures/base/.cordova/config.json ---------------------------------------------------------------------- diff --git a/cordova-lib/spec-cordova/fixtures/base/.cordova/config.json b/cordova-lib/spec-cordova/fixtures/base/.cordova/config.json index 662fc9d..4f52ca7 100644 --- a/cordova-lib/spec-cordova/fixtures/base/.cordova/config.json +++ b/cordova-lib/spec-cordova/fixtures/base/.cordova/config.json @@ -3,17 +3,17 @@ "name":"TestBase", "lib": { "android": { - "uri": "/some/junk/path", + "url": "/some/junk/path", "version": "dev", "id": "cordova-android-dev" }, "ios": { - "uri": "/some/junk/path", + "url": "/some/junk/path", "version": "dev", "id": "cordova-ios-dev" }, "wp8": { - "uri": "/some/junk/path", + "url": "/some/junk/path", "version": "dev", "id": "cordova-wp8-dev" } http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/3911876c/cordova-lib/spec-cordova/lazy_load.spec.js ---------------------------------------------------------------------- diff --git a/cordova-lib/spec-cordova/lazy_load.spec.js b/cordova-lib/spec-cordova/lazy_load.spec.js index 7db849d..27b5b91 100644 --- a/cordova-lib/spec-cordova/lazy_load.spec.js +++ b/cordova-lib/spec-cordova/lazy_load.spec.js @@ -32,6 +32,13 @@ describe('lazy_load module', function() { var custom_path; beforeEach(function() { custom_path = spyOn(config, 'has_custom_path').andReturn(false); + fakeLazyLoad = function(id, platform, version) { + if (platform == 'wp7' || platform == 'wp8') { + return Q(path.join('lib', 'wp', id, version, platform)); + } else { + return Q(path.join('lib', platform, id, version, platforms[platform] && platforms[platform].subdirectory ? platforms[platform].subdirectory : '')); + } + }; }); describe('cordova method (loads stock cordova libs)', function() { var custom; @@ -46,8 +53,15 @@ describe('lazy_load module', function() { }).fin(done); }); it('should invoke lazy_load.custom with appropriate url, platform, and version as specified in platforms manifest', function(done) { + var url = platforms.android.url + ';a=snapshot;h=' + platforms.android.version + ';sf=tgz'; + custom.andCallFake(function (platforms, platform) { + expect(platform).toEqual('android'); + expect(platforms[platform].url).toEqual(url); + expect(platforms[platform].id).toEqual('cordova'); + return fakeLazyLoad(platforms[platform].id, platform, platforms[platform].version); + }); lazy_load.cordova('android').then(function(dir) { - expect(custom).toHaveBeenCalledWith(platforms.android.url + ';a=snapshot;h=' + platforms.android.version + ';sf=tgz', 'cordova', 'android', platforms.android.version); + expect(custom).toHaveBeenCalled(); expect(dir).toBeDefined(); done(); }); @@ -67,7 +81,14 @@ describe('lazy_load module', function() { it('should callback with no errors and not fire event hooks if library already exists', function(done) { exists.andReturn(true); - lazy_load.custom('http://some remote url', 'some id', 'platform X', 'three point five').then(function() { + var mock_platforms = { + 'platform X': { + id: 'some id', + url: 'http://some remote url', + version: 'three point five' + } + }; + lazy_load.custom(mock_platforms, 'platform X').then(function() { expect(fire).not.toHaveBeenCalled() }, function(err) { expect(err).not.toBeDefined(); @@ -75,7 +96,14 @@ describe('lazy_load module', function() { }); it('should callback with no errors and fire event hooks even if library already exists if the lib url is a local dir', function(done) { exists.andReturn(true); - lazy_load.custom('some local dir', 'some id', 'platform X', 'three point six').then(function() { + var mock_platforms = { + 'platform X': { + id: 'some id', + url: 'some local dir', + version: 'three point six' + } + }; + lazy_load.custom(mock_platforms, 'platform X').then(function() { expect(fire).not.toHaveBeenCalled() }, function(err) { expect(err).not.toBeDefined(); @@ -109,11 +137,18 @@ describe('lazy_load module', function() { load_spy = spyOn(npmconf, 'load').andCallFake(function(cb) { cb(null, { get: function() { return npmConfProxy }}); }); }); - it('should call request with appopriate url params', function(done) { + it('should call request with appropriate url params', function(done) { var url = 'https://github.com/apache/someplugin'; - lazy_load.custom(url, 'random', 'android', '1.0').then(function() { + var with_android_platform = { + 'android': { + id: 'random', + url: url, + version: '1.0' + } + }; + lazy_load.custom(with_android_platform, 'android').then(function() { expect(req).toHaveBeenCalledWith({ - uri:url + url:url }, jasmine.any(Function)); }, function(err) { expect(err).not.toBeDefined(); @@ -123,9 +158,16 @@ describe('lazy_load module', function() { var proxy = 'https://somelocalproxy.com'; npmConfProxy = proxy; var url = 'https://github.com/apache/someplugin'; - lazy_load.custom(url, 'random', 'android', '1.0').then(function() { + var with_android_platform = { + 'android': { + id: 'random', + url: url, + version: '1.0' + } + }; + lazy_load.custom(with_android_platform, 'android').then(function() { expect(req).toHaveBeenCalledWith({ - uri:url, + url:url, proxy:proxy }, jasmine.any(Function)); }, function(err) { @@ -136,9 +178,16 @@ describe('lazy_load module', function() { var proxy = 'http://somelocalproxy.com'; npmConfProxy = proxy; var url = 'http://github.com/apache/someplugin'; - lazy_load.custom(url, 'random', 'android', '1.0').then(function() { + var with_android_platform = { + 'android': { + id: 'random', + url: url, + version: '1.0' + } + }; + lazy_load.custom(with_android_platform, 'android').then(function() { expect(req).toHaveBeenCalledWith({ - uri:url, + url:url, proxy:proxy }, jasmine.any(Function)); }, function(err) { @@ -149,14 +198,28 @@ describe('lazy_load module', function() { describe('local paths for libraries', function() { it('should return the local path, no symlink', function(done) { - lazy_load.custom('/some/random/lib', 'id', 'X', 'three point eight').then(function(dir) { + var mock_platforms = { + 'X': { + id: 'id', + url: '/some/random/lib', + version: 'three point eight' + } + }; + lazy_load.custom(mock_platforms, 'X').then(function(dir) { expect(dir).toEqual('/some/random/lib'); }, function(err) { expect(err).toBeUndefined(); }).fin(done); }); it('should not file download hook', function(done) { - lazy_load.custom('/some/random/lib', 'id', 'X', 'three point nine').then(function() { + var mock_platforms = { + 'X': { + id: 'id', + url: '/some/random/lib', + version: 'three point nine' + } + }; + lazy_load.custom(mock_platforms, 'X').then(function() { expect(fire).not.toHaveBeenCalledWith('after_library_download', {platform:'X',url:'/some/random/lib',id:'id',version:'three point nine',path:'/some/random/lib', symlink:false}); }, function(err) { expect(err).toBeUndefined(); @@ -175,7 +238,7 @@ describe('lazy_load module', function() { var read = spyOn(config, 'read').andReturn({ lib:{ maybe:{ - uri:'you or eye?', + url:'you or eye?', id:'eye dee', version:'four point twenty' } @@ -183,8 +246,15 @@ describe('lazy_load module', function() { }); var p = '/some/random/custom/path'; custom_path.andReturn(p); + custom.andCallFake(function (platforms, platform) { + expect(platform).toEqual('maybe'); + expect(platforms[platform].url).toEqual('you or eye?'); + expect(platforms[platform].id).toEqual('eye dee'); + expect(platforms[platform].version).toEqual('four point twenty'); + return fakeLazyLoad(platforms[platform].id, platform, platforms[platform].version); + }); lazy_load.based_on_config('yup', 'maybe').then(function() { - expect(custom).toHaveBeenCalledWith('you or eye?', 'eye dee', 'maybe', 'four point twenty'); + expect(custom).toHaveBeenCalled(); }, function(err) { expect(err).toBeUndefined(); }).fin(done); http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/3911876c/cordova-lib/spec-cordova/metadata/windows8_parser.spec.js ---------------------------------------------------------------------- diff --git a/cordova-lib/spec-cordova/metadata/windows8_parser.spec.js b/cordova-lib/spec-cordova/metadata/windows8_parser.spec.js index 79af143..389e9e5 100644 --- a/cordova-lib/spec-cordova/metadata/windows8_parser.spec.js +++ b/cordova-lib/spec-cordova/metadata/windows8_parser.spec.js @@ -36,7 +36,7 @@ var cfg = new ConfigParser(path.join(__dirname, '..', 'test-config.xml')); describe('windows8 project parser', function() { var proj = '/some/path'; - var exists, exec, custom, readdir, cfg_parser; + var exists, exec, custom, readdir, cfg_parser, config_read; var winXml; beforeEach(function() { exists = spyOn(fs, 'existsSync').andReturn(true); @@ -45,6 +45,16 @@ describe('windows8 project parser', function() { cb(null, '', ''); }); custom = spyOn(config, 'has_custom_path').andReturn(false); + config_read = spyOn(config, 'read').andCallFake(function() { + return custom() ? { + lib: { + windows8: { + url: custom() + } + } + } + : ({}) + }); readdir = spyOn(fs, 'readdirSync').andReturn(['test.jsproj']); winXml = null; spyOn(xmlHelpers, 'parseElementtreeSync').andCallFake(function(path) { http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/3911876c/cordova-lib/spec-cordova/metadata/wp8_parser.spec.js ---------------------------------------------------------------------- diff --git a/cordova-lib/spec-cordova/metadata/wp8_parser.spec.js b/cordova-lib/spec-cordova/metadata/wp8_parser.spec.js index 84e8777..69336cb 100644 --- a/cordova-lib/spec-cordova/metadata/wp8_parser.spec.js +++ b/cordova-lib/spec-cordova/metadata/wp8_parser.spec.js @@ -36,7 +36,7 @@ var cfg = new ConfigParser(path.join(__dirname, '..', 'test-config.xml')); describe('wp8 project parser', function() { var proj = '/some/path'; - var exists, exec, custom, readdir, cfg_parser; + var exists, exec, custom, readdir, cfg_parser, config_read; var manifestXml, projXml; beforeEach(function() { exists = spyOn(fs, 'existsSync').andReturn(true); @@ -44,6 +44,16 @@ describe('wp8 project parser', function() { (cb || opts)(0, '', ''); }); custom = spyOn(config, 'has_custom_path').andReturn(false); + config_read = spyOn(config, 'read').andCallFake(function() { + return custom() ? { + lib: { + wp8: { + url: custom() + } + } + } + : ({}) + }); readdir = spyOn(fs, 'readdirSync').andReturn(['test.csproj']); projXml = manifestXml = null; spyOn(xmlHelpers, 'parseElementtreeSync').andCallFake(function(path) { http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/3911876c/cordova-lib/spec-cordova/platform.spec.js ---------------------------------------------------------------------- diff --git a/cordova-lib/spec-cordova/platform.spec.js b/cordova-lib/spec-cordova/platform.spec.js index 76c9501..fb59ef2 100644 --- a/cordova-lib/spec-cordova/platform.spec.js +++ b/cordova-lib/spec-cordova/platform.spec.js @@ -28,6 +28,7 @@ var helpers = require('./helpers'), events = require('../src/events'), cordova = require('../src/cordova/cordova'); +var supported_platforms = Object.keys(platforms).filter(function(p) { return p != 'www'; }); var tmpDir = helpers.tmpDir('platform_test'); var project = path.join(tmpDir, 'project'); @@ -52,7 +53,6 @@ describe('platform end-to-end', function() { expect(installed[1].indexOf(helpers.testPlatform)).toBe(-1); }); } - function fullPlatformList() { return cordova.raw.platform('list').then(function() { var installed = results.match(/Installed platforms: (.*)/); @@ -75,7 +75,7 @@ describe('platform end-to-end', function() { // Now we load the config.json in the newly created project and edit the target platform's lib entry // to point at the fixture version. This is necessary so that cordova.prepare can find cordova.js there. var c = config.read(project); - c.lib[helpers.testPlatform].uri = path.join(__dirname, 'fixtures', 'platforms', helpers.testPlatform + '-lib'); + c.lib[helpers.testPlatform].url = path.join(__dirname, 'fixtures', 'platforms', helpers.testPlatform + '-lib'); config.write(project, c); // The config.json in the fixture project points at fake "local" paths. http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/3911876c/cordova-lib/src/cordova/config.js ---------------------------------------------------------------------- diff --git a/cordova-lib/src/cordova/config.js b/cordova-lib/src/cordova/config.js index a92b10a..0ab3f18 100644 --- a/cordova-lib/src/cordova/config.js +++ b/cordova-lib/src/cordova/config.js @@ -76,7 +76,7 @@ config.write = function set_config(project_root, json) { config.has_custom_path = function(project_root, platform) { var json = config.read(project_root); if (json.lib && json.lib[platform]) { - var uri = url.parse(json.lib[platform].uri); + var uri = url.parse(json.lib[platform].url || json.lib[platform].uri); if (!(uri.protocol)) return uri.path; else if (uri.protocol && uri.protocol[1] ==':') return uri.href; } http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/3911876c/cordova-lib/src/cordova/create.js ---------------------------------------------------------------------- diff --git a/cordova-lib/src/cordova/create.js b/cordova-lib/src/cordova/create.js index b2ef453..2d2b429 100644 --- a/cordova-lib/src/cordova/create.js +++ b/cordova-lib/src/cordova/create.js @@ -97,29 +97,29 @@ function create(dir, id, name, cfg) { var custom_hooks; if (config_json.lib && config_json.lib.www) { - events.emit('log', 'Using custom www assets from '+config_json.lib.www.uri); + events.emit('log', 'Using custom www assets from '+config_json.lib.www.url); // TODO (kamrik): extend lazy_load for retrieval without caching to allow net urls for --src. - var www_version = config_json.lib.www.version || 'not_versioned'; - var www_id = config_json.lib.www.id || 'dummy_id'; + config_json.lib.www.version = config_json.lib.www.version || 'not_versioned'; + config_json.lib.www.id = config_json.lib.www.id || 'dummy_id'; symlink = !!config_json.lib.www.link; // Make sure that the source www/ is not a direct ancestor of the target www/, or else we will recursively copy forever. // To do this, we make sure that the shortest relative path from source-to-target must start by going up at least one directory. - var relative_path_from_source_to_target = path.relative(config_json.lib.www.uri, www_dir); + var relative_path_from_source_to_target = path.relative(config_json.lib.www.url, www_dir); var does_relative_path_go_up_at_least_one_dir = relative_path_from_source_to_target.split(path.sep)[0] == '..'; if (!does_relative_path_go_up_at_least_one_dir) { throw new CordovaError( 'Project dir "' + dir + '" must not be created at/inside the template used to create the project "' + - config_json.lib.www.uri + '".' + config_json.lib.www.url + '".' ); } if(symlink) { - p = Q(config_json.lib.www.uri); + p = Q(config_json.lib.www.url); events.emit('verbose', 'Symlinking custom www assets into "' + www_dir + '"'); } else { - p = lazy_load.custom(config_json.lib.www.uri, www_id, 'www', www_version) + p = lazy_load.custom(config_json.lib, 'www') .then(function(d) { events.emit('verbose', 'Copying custom www assets into "' + www_dir + '"'); return d; http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/3911876c/cordova-lib/src/cordova/lazy_load.js ---------------------------------------------------------------------- diff --git a/cordova-lib/src/cordova/lazy_load.js b/cordova-lib/src/cordova/lazy_load.js index c157cc2..e8cee87 100644 --- a/cordova-lib/src/cordova/lazy_load.js +++ b/cordova-lib/src/cordova/lazy_load.js @@ -38,7 +38,22 @@ var path = require('path'), URL = require('url'), Q = require('q'), npm = require('npm'), - util = require('./util'); + util = require('./util'), + stubplatform = { + url : undefined, + version: undefined, + altplatform: undefined, + subdirectory: '' + }; + +function mixin(mix, into) { + Object.getOwnPropertyNames(mix).forEach(function (prop) { + if (Object.hasOwnProperty.call(mix, prop)) { + Object.defineProperty(into, prop, Object.getOwnPropertyDescriptor(mix, prop)); + } + }); + return into; +} exports.cordova = cordova; @@ -47,13 +62,17 @@ exports.cordova_npm = cordova_npm; exports.custom = custom; exports.based_on_config = based_on_config; - // Returns a promise for the path to the lazy-loaded directory. function based_on_config(project_root, platform, opts) { var custom_path = config.has_custom_path(project_root, platform); + if (custom_path === undefined && platform === 'windows') { + custom_path = config.has_custom_path(project_root, 'windows8'); + } if (custom_path) { - var dot_file = config.read(project_root); - return module.exports.custom(dot_file.lib[platform].uri, dot_file.lib[platform].id, platform, dot_file.lib[platform].version); + var dot_file = config.read(project_root), + mixed_platforms = mixin(platforms, {}); + mixed_platforms[platform] = mixin(dot_file.lib && dot_file.lib[platform] || {}, mixed_platforms[platform] || {}); + return module.exports.custom(mixed_platforms, platform); } else { return module.exports.cordova(platform, opts); } @@ -70,12 +89,15 @@ function cordova(platform, opts) { } function cordova_git(platform) { + var mixed_platforms = mixin(platforms, {}), + plat; if (!(platform in platforms)) { return Q.reject(new Error('Cordova library "' + platform + '" not recognized.')); } - - var url = platforms[platform].url + ';a=snapshot;h=' + platforms[platform].version + ';sf=tgz'; - return module.exports.custom(url, 'cordova', platform, platforms[platform].version); + plat = mixed_platforms[platform]; + plat.url = plat.url + ';a=snapshot;h=' + plat.version + ';sf=tgz'; + plat.id = 'cordova'; + return module.exports.custom(mixed_platforms, platform); } function cordova_npm(platform) { @@ -103,28 +125,41 @@ function cordova_npm(platform) { } // Returns a promise for the path to the lazy-loaded directory. -function custom(url, id, platform, version) { +function custom(platforms, platform) { + var plat; + var id; + var uri; + var url; + var version; + var subdir; + var platdir; var download_dir; var tmp_dir; var lib_dir; + var isUri; + if (!(platform in platforms)) { + return Q.reject(new Error('Cordova library "' + platform + '" not recognized.')); + } + plat = mixin(platforms[platform], mixin(stubplatform, {})); + version = plat.version; + url = plat.url; + id = plat.id; + subdir = plat.subdirectory; + platdir = plat.altplatform || platform; // Return early for already-cached remote URL, or for local URLs. - var uri = URL.parse(url); - var isUri = uri.protocol && uri.protocol[1] != ':'; // second part of conditional is for awesome windows support. fuuu windows + uri = URL.parse(url); + isUri = uri.protocol && uri.protocol[1] != ':'; // second part of conditional is for awesome windows support. fuuu windows if (isUri) { - download_dir = (platform == 'wp8' ? path.join(util.libDirectory, 'wp', id, version) : - path.join(util.libDirectory, platform, id, version)); - lib_dir = download_dir; - if (platforms[platform] && platforms[platform].subdirectory && platform !== 'blackberry10') { - lib_dir = path.join(download_dir, platforms[platform].subdirectory); - } + download_dir = path.join(util.libDirectory, platdir, id, version); + lib_dir = path.join(download_dir, subdir); if (fs.existsSync(download_dir)) { events.emit('verbose', id + ' library for "' + platform + '" already exists. No need to download. Continuing.'); return Q(lib_dir); } } else { // Local path. - lib_dir = platforms[platform] && platforms[platform].subdirectory ? path.join(url, platforms[platform].subdirectory) : url; + lib_dir = path.join(url, subdir); return Q(lib_dir); } return hooker.fire('before_library_download', { @@ -153,7 +188,7 @@ function custom(url, id, platform, version) { shell.mkdir('-p', tmp_dir); var size = 0; - var request_options = {uri:url}; + var request_options = {url:url}; if (proxy) { request_options.proxy = proxy; } @@ -173,7 +208,6 @@ function custom(url, id, platform, version) { size = body.length; } }); - req.pipe(zlib.createUnzip()) .pipe(tar.Extract({path:tmp_dir})) .on('error', function(err) { @@ -186,7 +220,7 @@ function custom(url, id, platform, version) { var entries = fs.readdirSync(tmp_dir); var entry = path.join(tmp_dir, entries[0]); shell.mkdir('-p', download_dir); - shell.mv('-f', path.join(entry, (platform=='blackberry10'?'blackberry10':''), '*'), download_dir); + shell.mv('-f', path.join(entry, '*'), download_dir); shell.rm('-rf', tmp_dir); d.resolve(hooker.fire('after_library_download', { platform:platform, http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/3911876c/cordova-lib/src/cordova/metadata/amazon_fireos_parser.js ---------------------------------------------------------------------- diff --git a/cordova-lib/src/cordova/metadata/amazon_fireos_parser.js b/cordova-lib/src/cordova/metadata/amazon_fireos_parser.js index 7bd0082..b3c78bb 100644 --- a/cordova-lib/src/cordova/metadata/amazon_fireos_parser.js +++ b/cordova-lib/src/cordova/metadata/amazon_fireos_parser.js @@ -43,7 +43,7 @@ module.exports = function android_parser(project) { }; // Returns a promise. -module.exports.check_requirements = function(project_root) { +module.exports.check_requirements = function(project_root, lib_path) { // Rely on platform's bin/create script to check requirements. return Q(true); }; http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/3911876c/cordova-lib/src/cordova/metadata/android_parser.js ---------------------------------------------------------------------- diff --git a/cordova-lib/src/cordova/metadata/android_parser.js b/cordova-lib/src/cordova/metadata/android_parser.js index 01d478c..5738e7b 100644 --- a/cordova-lib/src/cordova/metadata/android_parser.js +++ b/cordova-lib/src/cordova/metadata/android_parser.js @@ -43,7 +43,7 @@ module.exports = function android_parser(project) { }; // Returns a promise. -module.exports.check_requirements = function(project_root) { +module.exports.check_requirements = function(project_root, lib_path) { // Rely on platform's bin/create script to check requirements. return Q(true); }; http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/3911876c/cordova-lib/src/cordova/metadata/blackberry10_parser.js ---------------------------------------------------------------------- diff --git a/cordova-lib/src/cordova/metadata/blackberry10_parser.js b/cordova-lib/src/cordova/metadata/blackberry10_parser.js index 8d6ec1c..9535a4b 100644 --- a/cordova-lib/src/cordova/metadata/blackberry10_parser.js +++ b/cordova-lib/src/cordova/metadata/blackberry10_parser.js @@ -30,7 +30,7 @@ var fs = require('fs'), ConfigParser = require('../../configparser/ConfigParser'), CordovaError = require('../../CordovaError'), events = require('../../events'), - config = require('../config'); + lazy_load = require('../lazy_load'); module.exports = function blackberry_parser(project) { if (!fs.existsSync(path.join(project, 'www'))) { @@ -42,13 +42,11 @@ module.exports = function blackberry_parser(project) { }; // Returns a promise. -module.exports.check_requirements = function(project_root) { - var custom_path = config.has_custom_path(project_root, 'blackberry10'); - var lib_path; - if (custom_path) { - lib_path = path.join(custom_path, 'blackberry10'); - } else { - lib_path = path.join(util.libDirectory, 'blackberry10', 'cordova', require('../platforms').blackberry10.version); +module.exports.check_requirements = function(project_root, lib_path) { + if (lib_path === undefined) { + return lazy_load.based_on_config(project_root, 'blackberry10').then(function (lib_path) { + return module.exports.check_requirements(project_root, lib_path); + }); } var d = Q.defer(); child_process.exec('"' + path.join(lib_path, 'bin', 'check_reqs') + '"', function(err, output, stderr) { http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/3911876c/cordova-lib/src/cordova/metadata/firefoxos_parser.js ---------------------------------------------------------------------- diff --git a/cordova-lib/src/cordova/metadata/firefoxos_parser.js b/cordova-lib/src/cordova/metadata/firefoxos_parser.js index 0179063..b8c43ee 100644 --- a/cordova-lib/src/cordova/metadata/firefoxos_parser.js +++ b/cordova-lib/src/cordova/metadata/firefoxos_parser.js @@ -35,7 +35,7 @@ module.exports = function firefoxos_parser(project) { }; // Returns a promise. -module.exports.check_requirements = function(project_root) { +module.exports.check_requirements = function(project_root, lib_path) { return Q(); // Requirements always met. }; http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/3911876c/cordova-lib/src/cordova/metadata/ios_parser.js ---------------------------------------------------------------------- diff --git a/cordova-lib/src/cordova/metadata/ios_parser.js b/cordova-lib/src/cordova/metadata/ios_parser.js index 67a07a8..972c05a 100644 --- a/cordova-lib/src/cordova/metadata/ios_parser.js +++ b/cordova-lib/src/cordova/metadata/ios_parser.js @@ -49,7 +49,7 @@ module.exports = function ios_parser(project) { }; // Returns a promise. -module.exports.check_requirements = function(project_root) { +module.exports.check_requirements = function(project_root, lib_path) { // Rely on platform's bin/create script to check requirements. return Q(true); }; http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/3911876c/cordova-lib/src/cordova/metadata/ubuntu_parser.js ---------------------------------------------------------------------- diff --git a/cordova-lib/src/cordova/metadata/ubuntu_parser.js b/cordova-lib/src/cordova/metadata/ubuntu_parser.js index 4887fe6..df8a65d 100644 --- a/cordova-lib/src/cordova/metadata/ubuntu_parser.js +++ b/cordova-lib/src/cordova/metadata/ubuntu_parser.js @@ -43,7 +43,7 @@ function sanitize(str) { } // Returns a promise. -module.exports.check_requirements = function(project_root, callback) { +module.exports.check_requirements = function(project_root, lib_path) { // jshint quotmark:false var d = Q.defer(); http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/3911876c/cordova-lib/src/cordova/metadata/windows_parser.js ---------------------------------------------------------------------- diff --git a/cordova-lib/src/cordova/metadata/windows_parser.js b/cordova-lib/src/cordova/metadata/windows_parser.js index ce08abf..5233167 100644 --- a/cordova-lib/src/cordova/metadata/windows_parser.js +++ b/cordova-lib/src/cordova/metadata/windows_parser.js @@ -31,7 +31,7 @@ var fs = require('fs'), ConfigParser = require('../../configparser/ConfigParser'), CordovaError = require('../../CordovaError'), xml = require('../../util/xml-helpers'), - config = require('../config'), + lazy_load = require('../lazy_load'), hooker = require('../hooker'), jsproj = require('../../util/windows/jsproj'); @@ -60,16 +60,13 @@ module.exports = function windows_parser(project) { }; // Returns a promise -module.exports.check_requirements = function(project_root) { - events.emit('log', 'Checking windows requirements...'); - var lib_path = path.join(util.libDirectory, 'windows', 'cordova', - require('../platforms').windows.version, 'windows'); - - var custom_path = config.has_custom_path(project_root, 'windows8') || - config.has_custom_path(project_root, 'windows'); - if (custom_path) { - lib_path = path.join(custom_path, 'windows'); +module.exports.check_requirements = function(project_root, lib_path) { + if (lib_path === undefined) { + return lazy_load.based_on_config(project_root, 'windows8').then(function (lib_path) { + return module.exports.check_requirements(project_root, lib_path); + }); } + events.emit('log', 'Checking windows8 requirements...'); var command = '"' + path.join(lib_path, 'bin', 'check_reqs') + '"'; events.emit('verbose', 'Running "' + command + '" (output to follow)'); var d = Q.defer(); http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/3911876c/cordova-lib/src/cordova/metadata/wp8_parser.js ---------------------------------------------------------------------- diff --git a/cordova-lib/src/cordova/metadata/wp8_parser.js b/cordova-lib/src/cordova/metadata/wp8_parser.js index 991bf0f..f305209 100644 --- a/cordova-lib/src/cordova/metadata/wp8_parser.js +++ b/cordova-lib/src/cordova/metadata/wp8_parser.js @@ -31,7 +31,7 @@ var fs = require('fs'), ConfigParser = require('../../configparser/ConfigParser'), CordovaError = require('../../CordovaError'), xml = require('../../util/xml-helpers'), - config = require('../config'), + lazy_load = require('../lazy_load'), hooker = require('../hooker'), csproj = require('../../util/windows/csproj'); @@ -50,13 +50,13 @@ module.exports = function wp8_parser(project) { }; // Returns a promise. -module.exports.check_requirements = function(project_root) { - events.emit('log', 'Checking wp8 requirements...'); - var lib_path = path.join(util.libDirectory, 'wp', 'cordova', require('../platforms').wp8.version, 'wp8'); - var custom_path = config.has_custom_path(project_root, 'wp8'); - if (custom_path) { - lib_path = path.join(custom_path, 'wp8'); +module.exports.check_requirements = function(project_root, lib_path) { + if (lib_path === undefined) { + return lazy_load.based_on_config(project_root, 'wp8').then(function (lib_path) { + return module.exports.check_requirements(project_root, lib_path); + }); } + events.emit('log', 'Checking wp8 requirements...'); var command = '"' + path.join(lib_path, 'bin', 'check_reqs') + '"'; events.emit('verbose', 'Running "' + command + '" (output to follow)'); var d = Q.defer(); http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/3911876c/cordova-lib/src/cordova/platform.js ---------------------------------------------------------------------- diff --git a/cordova-lib/src/cordova/platform.js b/cordova-lib/src/cordova/platform.js index 1c9b930..06d1962 100644 --- a/cordova-lib/src/cordova/platform.js +++ b/cordova-lib/src/cordova/platform.js @@ -120,7 +120,7 @@ function add(hooks, projectRoot, targets, opts) { return p .then(function(libDir) { - var template = config_json.lib && config_json.lib[platform] && config_json.lib[platform].template || null; + var template = config_json && config_json.lib && config_json.lib[platform] && config_json.lib[platform].template || null; var copts = null; if ('spawnoutput' in opts) { copts = opts.spawnoutput; @@ -414,7 +414,10 @@ function supports(project_root, name) { } // Check for platform support. - return platformParser.check_requirements(project_root); + return lazy_load.based_on_config(project_root, name) + .then(function(libDir) { + return platformParser.check_requirements(project_root, libDir); + }); } // Returns a promise. http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/3911876c/cordova-lib/src/cordova/platforms.js ---------------------------------------------------------------------- diff --git a/cordova-lib/src/cordova/platforms.js b/cordova-lib/src/cordova/platforms.js index 9fcfac7..3bc739a 100644 --- a/cordova-lib/src/cordova/platforms.js +++ b/cordova-lib/src/cordova/platforms.js @@ -49,6 +49,7 @@ module.exports = { parser : './metadata/wp8_parser', url : 'https://git-wip-us.apache.org/repos/asf?p=cordova-wp8.git', version: '3.5.0', + altplatform: 'wp', subdirectory: 'wp8' }, 'blackberry10' : {
