fixing platform add with new lazy load
Project: http://git-wip-us.apache.org/repos/asf/cordova-cli/repo Commit: http://git-wip-us.apache.org/repos/asf/cordova-cli/commit/f7d66bb8 Tree: http://git-wip-us.apache.org/repos/asf/cordova-cli/tree/f7d66bb8 Diff: http://git-wip-us.apache.org/repos/asf/cordova-cli/diff/f7d66bb8 Branch: refs/heads/master2 Commit: f7d66bb834ed7324a854319539845dbb9973aaf7 Parents: 9828b9c Author: Fil Maj <[email protected]> Authored: Wed Jun 12 14:49:13 2013 -0700 Committer: Fil Maj <[email protected]> Committed: Thu Jun 13 11:13:21 2013 -0700 ---------------------------------------------------------------------- platforms.js | 2 +- src/metadata/android_parser.js | 4 +- src/metadata/blackberry_parser.js | 8 +- src/metadata/ios_parser.js | 2 +- src/metadata/wp7_parser.js | 4 +- src/metadata/wp8_parser.js | 4 +- src/platform.js | 169 ++++++++++++++++++--------------- 7 files changed, 107 insertions(+), 86 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/f7d66bb8/platforms.js ---------------------------------------------------------------------- diff --git a/platforms.js b/platforms.js index 7d894b4..0096fcb 100644 --- a/platforms.js +++ b/platforms.js @@ -24,7 +24,7 @@ module.exports = { }, 'android' : { parser : require('./src/metadata/android_parser'), - url : 'https://git-wip-us.apache.org/repos/asf?p=cordova-ios.git' + url : 'https://git-wip-us.apache.org/repos/asf?p=cordova-android.git' }, 'wp7' : { parser : require('./src/metadata/wp7_parser'), http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/f7d66bb8/src/metadata/android_parser.js ---------------------------------------------------------------------- diff --git a/src/metadata/android_parser.js b/src/metadata/android_parser.js index dce21e2..c109b1a 100644 --- a/src/metadata/android_parser.js +++ b/src/metadata/android_parser.js @@ -51,7 +51,7 @@ module.exports.check_requirements = function(callback) { if (output.indexOf('android-17') == -1) { callback('Please install Android target 17 (the Android 4.2 SDK). Make sure you have the latest Android tools installed as well. Run `android` from your command-line to install/update any missing SDKs or tools.'); } else { - var cmd = 'android update project -p ' + path.join(util.libDirectory, 'cordova-android-' + util.cordovaTag, 'framework') + ' -t android-17'; + var cmd = 'android update project -p ' + path.join(util.libDirectory, 'android', 'cordova', util.cordovaTag, 'framework') + ' -t android-17'; events.emit('log', 'Running "' + cmd + '" (output to follow)...'); shell.exec(cmd, {silent:true, async:true}, function(code, output) { events.emit('log', output); @@ -160,7 +160,7 @@ module.exports.prototype = { shell.cp('-rf', www, platformWww); // write out android lib's cordova.js - var jsPath = path.join(util.libDirectory, 'cordova-android-' + util.cordovaTag, 'framework', 'assets', 'www', 'cordova.js'); + var jsPath = path.join(util.libDirectory, 'android', 'cordova', util.cordovaTag, 'framework', 'assets', 'www', 'cordova.js'); fs.writeFileSync(path.join(this.www_dir(), 'cordova.js'), fs.readFileSync(jsPath, 'utf-8'), 'utf-8'); }, http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/f7d66bb8/src/metadata/blackberry_parser.js ---------------------------------------------------------------------- diff --git a/src/metadata/blackberry_parser.js b/src/metadata/blackberry_parser.js index 853ae03..a9b03c5 100644 --- a/src/metadata/blackberry_parser.js +++ b/src/metadata/blackberry_parser.js @@ -120,18 +120,18 @@ module.exports.prototype = { shell.cp('-rf', www, this.path); // add cordova.js - shell.cp('-f', path.join(util.libDirectory, 'cordova-blackberry-' + util.cordovaTag, 'javascript', 'cordova.blackberry10.js'), path.join(this.www_dir(), 'cordova.js')); + shell.cp('-f', path.join(util.libDirectory, 'blackberry', 'cordova', util.cordovaTag, 'javascript', 'cordova.blackberry10.js'), path.join(this.www_dir(), 'cordova.js')); // add webworks ext directories - shell.cp('-rf', path.join(util.libDirectory, 'cordova-blackberry-' + util.cordovaTag, 'framework', 'ext*'), this.www_dir()); + shell.cp('-rf', path.join(util.libDirectory, 'blackberry', 'cordova', util.cordovaTag, 'framework', 'ext*'), this.www_dir()); // add config.xml // @TODO should use project www/config.xml but it must use BBWP elements - shell.cp('-f', path.join(util.libDirectory, 'cordova-blackberry-' + util.cordovaTag, 'bin', 'templates', 'project', 'www', 'config.xml'), this.www_dir()); + shell.cp('-f', path.join(util.libDirectory, 'blackberry', 'cordova', util.cordovaTag, 'bin', 'templates', 'project', 'www', 'config.xml'), this.www_dir()); // add res/ // @TODO remove this when config.xml is generalized - shell.cp('-rf', path.join(util.libDirectory, 'cordova-blackberry-' + util.cordovaTag, 'bin', 'templates', 'project', 'www', 'res'), this.www_dir()); + shell.cp('-rf', path.join(util.libDirectory, 'blackberry', 'cordova', util.cordovaTag, 'bin', 'templates', 'project', 'www', 'res'), this.www_dir()); }, // update the overrides folder into the www folder http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/f7d66bb8/src/metadata/ios_parser.js ---------------------------------------------------------------------- diff --git a/src/metadata/ios_parser.js b/src/metadata/ios_parser.js index 7570930..99e5a5e 100644 --- a/src/metadata/ios_parser.js +++ b/src/metadata/ios_parser.js @@ -177,7 +177,7 @@ module.exports.prototype = { shell.cp('-rf', www, this.path); // write out proper cordova.js - shell.cp('-f', path.join(util.libDirectory, 'cordova-ios-' + util.cordovaTag, 'CordovaLib', 'cordova.js'), path.join(project_www, 'cordova.js')); + shell.cp('-f', path.join(util.libDirectory, 'ios', 'cordova', util.cordovaTag, 'CordovaLib', 'cordova.js'), path.join(project_www, 'cordova.js')); }, http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/f7d66bb8/src/metadata/wp7_parser.js ---------------------------------------------------------------------- diff --git a/src/metadata/wp7_parser.js b/src/metadata/wp7_parser.js index 038da5a..d5aeb51 100644 --- a/src/metadata/wp7_parser.js +++ b/src/metadata/wp7_parser.js @@ -42,7 +42,7 @@ module.exports = function wp7_parser(project) { module.exports.check_requirements = function(callback) { // TODO: requires the libraries to be available. events.emit('log', 'Checking WP7 requirements...'); - var command = '"' + path.join(util.libDirectory, 'cordova-wp7-' + util.cordovaTag, 'bin', 'check_reqs') + '"'; + var command = '"' + path.join(util.libDirectory, 'wp7', 'cordova', util.cordovaTag, 'bin', 'check_reqs') + '"'; events.emit('log', 'Running "' + command + '" (output to follow)'); shell.exec(command, {silent:true, async:true}, function(code, output) { events.emit('log', output); @@ -145,7 +145,7 @@ module.exports.prototype = { shell.cp('-rf', project_www, this.wp7_proj_dir); // copy over wp7 lib's cordova.js - var cordovajs_path = path.join(util.libDirectory, 'cordova-wp7-' + util.cordovaTag, 'templates', 'standalone', 'www', 'cordova.js'); + var cordovajs_path = path.join(util.libDirectory, 'wp7', 'cordova', util.cordovaTag, 'templates', 'standalone', 'www', 'cordova.js'); fs.writeFileSync(path.join(this.www_dir(), 'cordova.js'), fs.readFileSync(cordovajs_path, 'utf-8'), 'utf-8'); this.update_csproj(); }, http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/f7d66bb8/src/metadata/wp8_parser.js ---------------------------------------------------------------------- diff --git a/src/metadata/wp8_parser.js b/src/metadata/wp8_parser.js index 110f3be..14d5fb4 100644 --- a/src/metadata/wp8_parser.js +++ b/src/metadata/wp8_parser.js @@ -42,7 +42,7 @@ module.exports = function wp8_parser(project) { module.exports.check_requirements = function(callback) { events.emit('log', 'Checking WP8 requirements...'); // TODO: requires the libraries to be available. - var command = '"' + path.join(util.libDirectory, 'cordova-wp8-' + util.cordovaTag, 'bin', 'check_reqs') + '"'; + var command = '"' + path.join(util.libDirectory, 'wp8', 'cordova', util.cordovaTag, 'bin', 'check_reqs') + '"'; events.emit('log', 'Running "' + command + '" (output to follow)'); shell.exec(command, {silent:true, async:true}, function(code, output) { events.emit('log', output); @@ -145,7 +145,7 @@ module.exports.prototype = { shell.cp('-rf', project_www, this.wp8_proj_dir); // copy over wp8 lib's cordova.js - var cordovajs_path = path.join(util.libDirectory, 'cordova-wp8-' + util.cordovaTag, 'templates', 'standalone', 'www', 'cordova.js'); + var cordovajs_path = path.join(util.libDirectory, 'wp8', 'cordova', util.cordovaTag, 'templates', 'standalone', 'www', 'cordova.js'); fs.writeFileSync(path.join(this.www_dir(), 'cordova.js'), fs.readFileSync(cordovajs_path, 'utf-8'), 'utf-8'); this.update_csproj(); }, http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/f7d66bb8/src/platform.js ---------------------------------------------------------------------- diff --git a/src/platform.js b/src/platform.js index f0537de..58be9af 100644 --- a/src/platform.js +++ b/src/platform.js @@ -17,6 +17,7 @@ under the License. */ var config_parser = require('./config_parser'), + config = require('./config'), cordova_util = require('./util'), util = require('util'), fs = require('fs'), @@ -41,13 +42,17 @@ module.exports = function platform(command, targets, callback) { var hooks = new hooker(projectRoot); - var createOverrides = function(target) { - shell.mkdir('-p', path.join(cordova_util.appDir(projectRoot), 'merges', target)); - }; if (arguments.length === 0) command = 'ls'; if (targets) { if (!(targets instanceof Array)) targets = [targets]; + targets.forEach(function(t) { + if (!(t in platforms)) { + var err = new Error('Platform "' + t + '" not recognized as core cordova platform.'); + if (callback) return callback(err); + else throw err; + } + }); } var xml = cordova_util.projectConfig(projectRoot); @@ -86,77 +91,36 @@ module.exports = function platform(command, targets, callback) { } }); }); - var add_callback = n(targets.length, function() { - hooks.fire('before_platform_add', opts, function(err) { - if (err) { - if (callback) callback(err); - else throw err; - } else { - targets.forEach(function(target) { - var output = path.join(projectRoot, 'platforms', target); - - // Check if output directory already exists. - if (fs.existsSync(output)) { - var err = new Error('Platform "' + target + '" already exists at "' + output + '"'); - if (callback) callback(err); - else throw err; - } else { - // Make sure we have minimum requirements to work with specified platform - events.emit('log', 'Checking if platform "' + target + '" passes minimum requirements...'); - module.exports.supports(target, function(err) { - if (err) { - if (callback) callback(err); - else throw err; - } else { - // Create a platform app using the ./bin/create scripts that exist in each repo. - // Run platform's create script - var bin = path.join(cordova_util.libDirectory, 'cordova-' + target + '-' + cordova_util.cordovaTag, 'bin', 'create'); - var args = (target=='ios') ? '--arc' : ''; - var pkg = cfg.packageName().replace(/[^\w.]/g,'_'); - var name = cfg.name().replace(/\W/g,'_'); - var command = util.format('"%s" %s "%s" "%s" "%s"', bin, args, output, pkg, name); - events.emit('log', 'Running bin/create for platform "' + target + '" with command: "' + command + '" (output to follow)'); - - shell.exec(command, {silent:true,async:true}, function(code, create_output) { - events.emit('log', create_output); - if (code > 0) { - var err = new Error('An error occured during creation of ' + target + ' sub-project. ' + create_output); - if (callback) callback(err); - else throw err; - } else { - var parser = new platforms[target].parser(output); - events.emit('log', 'Updating ' + target + ' project from config.xml...'); - parser.update_project(cfg, function() { - createOverrides(target); - end(); //platform add is done by now. - // Install all currently installed plugins into this new platform. - var pluginsDir = path.join(projectRoot, 'plugins'); - var plugins = fs.readdirSync(pluginsDir); - plugins && plugins.forEach(function(plugin) { - if (fs.statSync(path.join(projectRoot, 'plugins', plugin)).isDirectory()) { - events.emit('log', 'Installing plugin "' + plugin + '" following successful platform add of ' + target); - plugman.install(target, output, path.basename(plugin), pluginsDir, { www_dir: parser.staging_dir() }); - } - }); - }); - } - }); - } - }); - } - }); - } - }); - }); - targets.forEach(function(t) { - lazy_load(t, function(err) { - if (err) { - if (callback) callback(err); - else throw err; - } else { - add_callback(); - } - }); + var config_json = config.read(projectRoot); + hooks.fire('before_platform_add', opts, function(err) { + if (err) { + if (callback) callback(err); + else throw err; + } else { + targets.forEach(function(t) { + if (config_json.lib && config_json.lib[t]) { + events.emit('log', 'Using custom cordova platform library for "' + t + '".'); + lazy_load.custom(config_json.lib[t].uri, config_json.lib[t].id, t, config_json.lib[t].version, function(err) { + if (err) { + if (callback) callback(err); + else throw err; + } else { + call_into_create(t, projectRoot, true /* is_custom */, cfg, config_json.lib[t].id, config_json.lib[t].version, callback, end); + } + }); + } else { + events.emit('log', 'Using stock cordova platform library for "' + t + '".'); + lazy_load.cordova(t, function(err) { + if (err) { + if (callback) callback(err); + else throw err; + } else { + call_into_create(t, projectRoot, false /* is_custom */, cfg, 'cordova', cordova_util.cordovaTag, callback, end); + } + }); + } + }); + } }); break; case 'rm': @@ -233,3 +197,60 @@ module.exports.supports = function(name, callback) { for (var p in platforms) { module.exports[p] = platforms[p]; } +function createOverrides(projectRoot, target) { + shell.mkdir('-p', path.join(cordova_util.appDir(projectRoot), 'merges', target)); +}; + +function call_into_create(target, projectRoot, is_custom, cfg, id, version, callback, end) { + var output = path.join(projectRoot, 'platforms', target); + + // Check if output directory already exists. + if (fs.existsSync(output)) { + var err = new Error('Platform "' + target + '" already exists at "' + output + '"'); + if (callback) callback(err); + else throw err; + } else { + // Make sure we have minimum requirements to work with specified platform + events.emit('log', 'Checking if platform "' + target + '" passes minimum requirements...'); + module.exports.supports(target, function(err) { + if (err) { + if (callback) callback(err); + else throw err; + } else { + // Create a platform app using the ./bin/create scripts that exist in each repo. + // Run platform's create script + var bin = path.join(cordova_util.libDirectory, target, id, version, 'bin', 'create'); + var args = (target=='ios') ? '--arc' : ''; + var pkg = cfg.packageName().replace(/[^\w.]/g,'_'); + var name = cfg.name().replace(/\W/g,'_'); + var command = util.format('"%s" %s "%s" "%s" "%s"', bin, args, output, pkg, name); + events.emit('log', 'Running bin/create for platform "' + target + '" with command: "' + command + '" (output to follow)'); + + shell.exec(command, {silent:true,async:true}, function(code, create_output) { + events.emit('log', create_output); + if (code > 0) { + var err = new Error('An error occured during creation of ' + target + ' sub-project. ' + create_output); + if (callback) callback(err); + else throw err; + } else { + var parser = new platforms[target].parser(output); + events.emit('log', 'Updating ' + target + ' project from config.xml...'); + parser.update_project(cfg, function() { + createOverrides(projectRoot, target); + end(); //platform add is done by now. + // Install all currently installed plugins into this new platform. + var pluginsDir = path.join(projectRoot, 'plugins'); + var plugins = fs.readdirSync(pluginsDir); + plugins && plugins.forEach(function(plugin) { + if (fs.statSync(path.join(projectRoot, 'plugins', plugin)).isDirectory()) { + events.emit('log', 'Installing plugin "' + plugin + '" following successful platform add of ' + target); + plugman.install(target, output, path.basename(plugin), pluginsDir, { www_dir: parser.staging_dir() }); + } + }); + }); + } + }); + } + }); + } +}
