You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by br...@apache.org on 2013/05/08 23:19:43 UTC
git commit: Fix `cordova prepare` now that plugin assets are copied
on (un)install
Updated Branches:
refs/heads/future 655776cf5 -> 2a5407e8b
Fix `cordova prepare` now that plugin assets are copied on (un)install
This change introduces a new platform/foo/.staging/www directory, into
which plugin assets are installed by plugman. cordova prepare copies
these on top of the platform-specific www directory.
The platform-specific www directories are still deleted and recreated on
every prepare.
Uninstallation is working, plugman tests are passing, CLI tests are
broken but this change isn't the problem.
Project: http://git-wip-us.apache.org/repos/asf/cordova-cli/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-cli/commit/2a5407e8
Tree: http://git-wip-us.apache.org/repos/asf/cordova-cli/tree/2a5407e8
Diff: http://git-wip-us.apache.org/repos/asf/cordova-cli/diff/2a5407e8
Branch: refs/heads/future
Commit: 2a5407e8bf840c9f004eab7a147fd69824409167
Parents: 655776c
Author: Braden Shepherdson <br...@gmail.com>
Authored: Wed May 8 15:26:31 2013 -0400
Committer: Braden Shepherdson <br...@gmail.com>
Committed: Wed May 8 17:17:41 2013 -0400
----------------------------------------------------------------------
src/metadata/android_parser.js | 14 ++++++++++++++
src/metadata/blackberry_parser.js | 14 ++++++++++++++
src/metadata/ios_parser.js | 14 ++++++++++++++
src/platform.js | 10 +++++-----
src/plugin.js | 19 +++++++++++++------
src/prepare.js | 9 +--------
6 files changed, 61 insertions(+), 19 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/2a5407e8/src/metadata/android_parser.js
----------------------------------------------------------------------
diff --git a/src/metadata/android_parser.js b/src/metadata/android_parser.js
index 70e952a..be3015c 100644
--- a/src/metadata/android_parser.js
+++ b/src/metadata/android_parser.js
@@ -126,6 +126,10 @@ module.exports.prototype = {
return path.join(this.path, 'assets', 'www');
},
+ staging_dir: function() {
+ return path.join(this.path, '.staging', 'www');
+ },
+
update_www:function() {
var projectRoot = util.isCordova(this.path);
var www = util.projectWww(projectRoot);
@@ -151,11 +155,21 @@ module.exports.prototype = {
}
},
+ // update the overrides folder into the www folder
+ update_staging:function() {
+ var projectRoot = util.isCordova(this.path);
+ if (fs.existsSync(this.staging_dir())) {
+ var staging = path.join(this.staging_dir(), '*');
+ shell.cp('-rf', staging, this.www_dir());
+ }
+ },
+
update_project:function(cfg, callback) {
var platformWww = path.join(this.path, 'assets');
this.update_from_config(cfg);
this.update_www();
this.update_overrides();
+ this.update_staging();
// delete any .svn folders copied over
util.deleteSvnFolders(platformWww);
if (callback) callback();
http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/2a5407e8/src/metadata/blackberry_parser.js
----------------------------------------------------------------------
diff --git a/src/metadata/blackberry_parser.js b/src/metadata/blackberry_parser.js
index 5bd6d84..16fcbad 100644
--- a/src/metadata/blackberry_parser.js
+++ b/src/metadata/blackberry_parser.js
@@ -64,6 +64,7 @@ module.exports.prototype = {
self.update_from_config(cfg);
self.update_www();
self.update_overrides();
+ self.update_staging();
util.deleteSvnFolders(this.www_dir());
// Do we have BB config?
@@ -89,6 +90,10 @@ module.exports.prototype = {
return path.join(this.path, 'www');
},
+ staging_dir: function() {
+ return path.join(this.path, '.staging', 'www');
+ },
+
update_www:function() {
var projectRoot = util.isCordova(this.path);
var www = util.projectWww(projectRoot);
@@ -129,6 +134,15 @@ module.exports.prototype = {
}
},
+ // update the overrides folder into the www folder
+ update_staging:function() {
+ var projectRoot = util.isCordova(this.path);
+ if (fs.existsSync(this.staging_dir())) {
+ var staging = path.join(this.staging_dir(), '*');
+ shell.cp('-rf', staging, this.www_dir());
+ }
+ },
+
write_project_properties:function() {
// TODO: eventually support all blackberry sub-platforms
var projectRoot = util.isCordova(this.path);
http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/2a5407e8/src/metadata/ios_parser.js
----------------------------------------------------------------------
diff --git a/src/metadata/ios_parser.js b/src/metadata/ios_parser.js
index e3b19fd..5e83ed3 100644
--- a/src/metadata/ios_parser.js
+++ b/src/metadata/ios_parser.js
@@ -137,6 +137,10 @@ module.exports.prototype = {
return path.join(this.path, 'www');
},
+ staging_dir: function() {
+ return path.join(this.path, '.staging', 'www');
+ },
+
update_www:function() {
var projectRoot = util.isCordova(this.path);
var www = util.projectWww(projectRoot);
@@ -163,11 +167,21 @@ module.exports.prototype = {
}
},
+ // update the overrides folder into the www folder
+ update_staging:function() {
+ var projectRoot = util.isCordova(this.path);
+ if (fs.existsSync(this.staging_dir())) {
+ var staging = path.join(this.staging_dir(), '*');
+ shell.cp('-rf', staging, this.www_dir());
+ }
+ },
+
update_project:function(cfg, callback) {
var self = this;
this.update_from_config(cfg, function() {
self.update_www();
self.update_overrides();
+ self.update_staging();
util.deleteSvnFolders(self.www_dir());
if (callback) callback();
});
http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/2a5407e8/src/platform.js
----------------------------------------------------------------------
diff --git a/src/platform.js b/src/platform.js
index 587e687..1e51c6c 100644
--- a/src/platform.js
+++ b/src/platform.js
@@ -26,6 +26,7 @@ var config_parser = require('./config_parser'),
android_parser = require('./metadata/android_parser'),
ios_parser = require('./metadata/ios_parser'),
blackberry_parser = require('./metadata/blackberry_parser'),
+ plugman = require('plugman'),
shell = require('shelljs');
var parsers = {
@@ -107,12 +108,11 @@ module.exports = function platform(command, targets, callback) {
var pluginsDir = path.join(projectRoot, 'plugins');
var plugins = fs.readdirSync(pluginsDir);
plugins && plugins.forEach(function(plugin) {
- var cli = path.join(__dirname, '..', 'node_modules', 'plugman', 'main.js');
- var cmd = util.format('"%s" --platform "%s" --project "%s" --plugin "%s" --plugins_dir "%s"', cli, target, output, path.basename(plugin), pluginsDir);
- var result = shell.exec(cmd, { silent: true });
- if (result.code > 0) {
- throw new Error('An error occurred while installing the ' + path.basename(plugin) + ' plugin: ' + result.output);
+ if (!fs.statSync(path.join(projectRoot, 'plugins', plugin)).isDirectory()) {
+ return;
}
+
+ plugman.install(target, output, path.basename(plugin), pluginsDir, {}, parser.staging_dir());
});
end();
});
http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/2a5407e8/src/plugin.js
----------------------------------------------------------------------
diff --git a/src/plugin.js b/src/plugin.js
index 9f3138d..355157d 100644
--- a/src/plugin.js
+++ b/src/plugin.js
@@ -24,12 +24,16 @@ var cordova_util = require('./util'),
shell = require('shelljs'),
config_parser = require('./config_parser'),
hooker = require('./hooker'),
- core_platforms= require('../platforms'),
- platform = require('./platform'),
plugin_parser = require('./plugin_parser'),
ls = fs.readdirSync,
plugman = require('plugman');
+var parsers = {
+ "android": require('./metadata/android_parser'),
+ "ios": require('./metadata/ios_parser'),
+ "blackberry": require('./metadata/blackberry_parser')
+};
+
module.exports = function plugin(command, targets, callback) {
var projectRoot = cordova_util.isCordova(process.cwd());
@@ -84,10 +88,11 @@ module.exports = function plugin(command, targets, callback) {
plugman.fetch(target, pluginsDir, false);
// Iterate over all platforms in the project and install the plugin.
- // TODO add cli_variables if it's important (last argument) ?
platforms.forEach(function(platform) {
- plugman.install(platform, path.join(projectRoot, 'platforms', platform),
- names[index], pluginsDir, {});
+ var platformRoot = path.join(projectRoot, 'platforms', platform);
+ var parser = new parsers[platform](platformRoot);
+ plugman.install(platform, platformRoot,
+ names[index], pluginsDir, {}, parser.staging_dir());
});
hooks.fire('after_plugin_add');
@@ -118,7 +123,9 @@ module.exports = function plugin(command, targets, callback) {
// If this is a web-only plugin with no platform tags, this step
// is not needed and we just --remove the plugin below.
intersection.forEach(function(platform) {
- plugman.uninstall(platform, path.join(projectRoot, 'platforms', platform), targetName, path.join(projectRoot, 'plugins'));
+ var platformRoot = path.join(projectRoot, 'platforms', platform);
+ var parser = new parsers[platform](platformRoot);
+ plugman.uninstall(platform, platformRoot, targetName, path.join(projectRoot, 'plugins'), {}, parser.staging_dir());
});
// Finally remove the plugin dir from plugins/
http://git-wip-us.apache.org/repos/asf/cordova-cli/blob/2a5407e8/src/prepare.js
----------------------------------------------------------------------
diff --git a/src/prepare.js b/src/prepare.js
index 0b6d060..06a6a18 100644
--- a/src/prepare.js
+++ b/src/prepare.js
@@ -75,13 +75,6 @@ module.exports = function prepare(platforms, callback) {
platforms.forEach(function(platform) {
var platformPath = path.join(projectRoot, 'platforms', platform);
var parser = new parsers[platform](platformPath);
- parser.update_project(cfg, function() {
- // Call plugman --prepare for each platform.
- var cmd = util.format('%s --prepare --platform "%s" --project "%s" --www "%s" --plugins_dir "%s"', cli, platform, platformPath, parser.www_dir(), path.join(projectRoot, 'plugins'));
- var plugman_call = shell.exec(cmd, {silent:true});
- if (plugman_call.code > 0) throw new Error('An error occurred during plugman --prepare for ' + platform + ': ' + plugman_call.output);
-
- end();
- });
+ parser.update_project(cfg, end);
});
};