You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by fi...@apache.org on 2013/05/15 08:50:50 UTC
git commit: uninstallation with dependents should now work.
Updated Branches:
refs/heads/dependencies ef1dd3acc -> b77a05710
uninstallation with dependents should now work.
Project: http://git-wip-us.apache.org/repos/asf/cordova-plugman/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugman/commit/b77a0571
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugman/tree/b77a0571
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugman/diff/b77a0571
Branch: refs/heads/dependencies
Commit: b77a0571022b3f1f4d29c1a66e59c5c000df7df9
Parents: ef1dd3a
Author: Fil Maj <ma...@gmail.com>
Authored: Tue May 14 23:50:43 2013 -0700
Committer: Fil Maj <ma...@gmail.com>
Committed: Tue May 14 23:50:43 2013 -0700
----------------------------------------------------------------------
src/install.js | 5 +++--
src/uninstall.js | 34 ++++++++++++++++++++--------------
2 files changed, 23 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/b77a0571/src/install.js
----------------------------------------------------------------------
diff --git a/src/install.js b/src/install.js
index f3829d6..a65de7e 100644
--- a/src/install.js
+++ b/src/install.js
@@ -146,8 +146,8 @@ function handleInstall(plugin_id, plugin_et, platform, project_dir, plugins_dir,
// run through the action stack
action_stack.process(platform, project_dir, function(err) {
if (err) {
- console.error(err.message, err.stack);
- console.error('Plugin installation failed :(');
+ if (callback) callback(err);
+ else throw err;
} else {
// WIN!
// Log out plugin INFO element contents in case additional install steps are necessary
@@ -161,6 +161,7 @@ function handleInstall(plugin_id, plugin_et, platform, project_dir, plugins_dir,
// call prepare after a successful install
require('./../plugman').prepare(project_dir, platform, plugins_dir);
+ console.log(plugin_id + ' installed.');
if (callback) callback();
}
});
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/b77a0571/src/uninstall.js
----------------------------------------------------------------------
diff --git a/src/uninstall.js b/src/uninstall.js
index ee0cd62..986e7c1 100644
--- a/src/uninstall.js
+++ b/src/uninstall.js
@@ -1,8 +1,10 @@
var path = require('path'),
fs = require('fs'),
et = require('elementtree'),
+ shell= require('shelljs'),
config_changes = require('./util/config-changes'),
action_stack = require('./util/action-stack'),
+ n = require('ncallbacks'),
dependencies = require('./util/dependencies'),
underscore = require('underscore'),
platform_modules = require('./platforms');
@@ -44,26 +46,27 @@ function runUninstall(platform, project_dir, plugin_dir, plugins_dir, cli_variab
if (tlp != plugin_id) {
var ds = graph.getChain(tlp);
if (is_top_level && ds.indexOf(plugin_id) > -1) {
- // Another top-level plugin depends on this one
- // Cannot uninstall then.
- console.log('Another top-level plugin (' + tlp + ') relies on plugin ' + plugin_id + ', therefore, aborting uninstallation.');
- if (callback) callback();
+ var err = new Error('Another top-level plugin (' + tlp + ') relies on plugin ' + plugin_id + ', therefore aborting uninstallation.');
+ if (callback) callback(err);
+ else throw err;
return;
}
diff_arr.push(ds);
}
});
- if (dependents.length) {
- // this plugin has dependencies
- diff_arr.unshift(dependents);
- // do a set difference to determine which dependencies are not required by other existing plugins
- var danglers = underscore.difference.apply(null, diff_arr);
- danglers && danglers.forEach(function(dangle) {
- // TODO: fire off an uninstall for each danglin' dep
+ // if this plugin has dependencies, do a set difference to determine which dependencies are not required by other existing plugins
+ diff_arr.unshift(dependents);
+ var danglers = underscore.difference.apply(null, diff_arr);
+ if (dependents.length && danglers && danglers.length) {
+ var end = n(danglers.length, function() {
+ handleUninstall(platform, plugin_id, plugin_et, project_dir, www_dir, plugins_dir, plugin_dir, is_top_level, callback);
+ });
+ danglers.forEach(function(dangler) {
+ module.exports(platform, project_dir, dangler, plugins_dir, cli_variables, www_dir, false /* TODO: should this "is_top_level" param be false for dependents? */, end);
});
} else {
- // this plugin is bare, uninstall it!
+ // this plugin can get axed by itself, gogo!
handleUninstall(platform, plugin_id, plugin_et, project_dir, www_dir, plugins_dir, plugin_dir, is_top_level, callback);
}
}
@@ -109,14 +112,17 @@ function handleUninstall(platform, plugin_id, plugin_et, project_dir, www_dir, p
// run through the action stack
action_stack.process(platform, project_dir, function(err) {
if (err) {
- console.error(err.message, err.stack);
- console.error('Plugin uninstallation failed :(');
+ if (callback) callback(err);
+ else throw err;
} else {
// WIN!
// queue up the plugin so prepare can remove the config changes
config_changes.add_uninstalled_plugin_to_prepare_queue(plugins_dir, path.basename(plugin_dir), platform, is_top_level);
// call prepare after a successful uninstall
require('./../plugman').prepare(project_dir, platform, plugins_dir);
+ // axe the directory
+ shell.rm('-rf', plugin_dir);
+ console.log(plugin_id + ' uninstalled.');
if (callback) callback();
}
});