Updated Branches: refs/heads/master ba9d4b0cb -> 12db64101
0.9.1. [CB-3499] Uninstalled plugins have their js-module www assets properly removed now. Project: http://git-wip-us.apache.org/repos/asf/cordova-plugman/repo Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugman/commit/12db6410 Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugman/tree/12db6410 Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugman/diff/12db6410 Branch: refs/heads/master Commit: 12db64101364df6ada5be56ef86c2f309ec29276 Parents: ba9d4b0 Author: Fil Maj <[email protected]> Authored: Wed Jul 10 12:44:16 2013 -0700 Committer: Fil Maj <[email protected]> Committed: Wed Jul 10 12:44:16 2013 -0700 ---------------------------------------------------------------------- package.json | 2 +- spec/prepare.spec.js | 22 +++++++++++++++++++--- src/prepare.js | 28 +++++++++++++++++++++++----- 3 files changed, 43 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/12db6410/package.json ---------------------------------------------------------------------- diff --git a/package.json b/package.json index 1229831..2453a4f 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "author": "Andrew Lunny <[email protected]>", "name": "plugman", "description": "install/uninstall Cordova plugins", - "version": "0.9.0", + "version": "0.9.1", "repository": { "type": "git", "url": "git://git-wip-us.apache.org/repos/asf/cordova-plugman.git" http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/12db6410/spec/prepare.spec.js ---------------------------------------------------------------------- diff --git a/spec/prepare.spec.js b/spec/prepare.spec.js index 5bf51ff..791023d 100644 --- a/spec/prepare.spec.js +++ b/spec/prepare.spec.js @@ -15,12 +15,13 @@ var json = path.join(temp, 'assets', 'www', 'cordova_plugins.json'); var js = path.join(temp, 'assets', 'www', 'cordova_plugins.js'); describe('prepare', function() { - var proc, platform_json, write, stat, read, parseET, mkdir; + var proc, platform_json, write, stat, read, parseET, mkdir, rm; var root, findall, find; beforeEach(function() { + rm = spyOn(shell, 'rm'); mkdir = spyOn(shell, 'mkdir'); proc = spyOn(config_changes, 'process'); - platform_json = spyOn(config_changes, 'get_platform_json').andReturn({installed_plugins:{},dependent_plugins:{}}); + platform_json = spyOn(config_changes, 'get_platform_json').andReturn({installed_plugins:{},dependent_plugins:{},prepare_queue:{uninstalled:[]}}); write = spyOn(fs, 'writeFileSync'); stat = spyOn(fs, 'statSync').andReturn({isDirectory:function() { return true; }}); root = jasmine.createSpy('ElementTree getroot').andReturn({ @@ -49,7 +50,7 @@ describe('prepare', function() { beforeEach(function() { child_one = jasmine.createSpy('getchildren').andReturn([]); read = spyOn(fs, 'readFileSync').andReturn('JAVASCRIPT!'); - platform_json.andReturn({installed_plugins:{plugin_one:'',plugin_two:''},dependent_plugins:{}}); + platform_json.andReturn({installed_plugins:{plugin_one:'',plugin_two:''},dependent_plugins:{},prepare_queue:{uninstalled:[]}}); findall.andReturn([ {attrib:{src:'somedir', name:'NAME'}, getchildren:child_one}, {attrib:{src:'someotherdir', name:'NAME'}, getchildren:child_one} @@ -64,6 +65,21 @@ describe('prepare', function() { expect(write).toHaveBeenCalledWith(path.join(temp, 'assets', 'www', 'plugins', 'someid', 'somedir'), jasmine.any(String), 'utf-8'); expect(write).toHaveBeenCalledWith(path.join(temp, 'assets', 'www', 'plugins', 'someid', 'someotherdir'), jasmine.any(String), 'utf-8'); }); + describe('uninstallation/removal', function() { + var existsSync; + beforeEach(function() { + existsSync = spyOn(fs, 'existsSync').andReturn(true); + platform_json.andReturn({installed_plugins:{},dependent_plugins:{},prepare_queue:{uninstalled:[{ + plugin:'nickelback', + id:'nickelback', + topLevel:true + }]}}); + }); + it('should remove any www/plugins directories related to plugins being queued for removal', function() { + prepare(temp, 'android', plugins_dir); + expect(rm).toHaveBeenCalledWith('-rf', path.join(temp, 'assets', 'www', 'plugins', 'nickelback')); + }); + }); }); it('should call into config-changes\' process method to do config processing', function() { prepare(temp, 'android', plugins_dir); http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/12db6410/src/prepare.js ---------------------------------------------------------------------- diff --git a/src/prepare.js b/src/prepare.js index f898b84..3e95437 100644 --- a/src/prepare.js +++ b/src/prepare.js @@ -41,15 +41,33 @@ module.exports = function handlePrepare(project_dir, platform, plugins_dir) { // - For each js-module (general first, then platform) build up an object storing the path and any clobbers, merges and runs for it. // - Write this object into www/cordova_plugins.json. // - Cordova.js contains code to load them at runtime from that file. + require('../plugman').emit('log', 'Preparing ' + platform + ' project...'); + var platform_json = config_changes.get_platform_json(plugins_dir, platform); + var wwwDir = platform_modules[platform].www_dir(project_dir); - require('../plugman').emit('log', 'Preparing ' + platform + ' project, starting with processing of config changes...'); - config_changes.process(plugins_dir, project_dir, platform); + // Check if there are any plugins queued for uninstallation, and if so, remove any of their plugin web assets loaded in + // via <js-module> elements + var plugins_to_uninstall = platform_json.prepare_queue.uninstalled; + if (plugins_to_uninstall && plugins_to_uninstall.length) { + var plugins_www = path.join(wwwDir, 'plugins'); + if (fs.existsSync(plugins_www)) { + plugins_to_uninstall.forEach(function(plug) { + var id = plug.id; + var plugin_modules = path.join(plugins_www, id); + if (fs.existsSync(plugin_modules)) { + require('../plugman').emit('log', 'Removing plugins directory from www "'+plugin_modules+'"'); + shell.rm('-rf', plugin_modules); + } + }); + } + } - var wwwDir = platform_modules[platform].www_dir(project_dir); - var platform_json = config_changes.get_platform_json(plugins_dir, platform); - var plugins = Object.keys(platform_json.installed_plugins).concat(Object.keys(platform_json.dependent_plugins)); + require('../plugman').emit('log', 'Processing configuration changes for plugins.'); + config_changes.process(plugins_dir, project_dir, platform); + platform_json = config_changes.get_platform_json(plugins_dir, platform); // This array holds all the metadata for each module and ends up in cordova_plugins.json + var plugins = Object.keys(platform_json.installed_plugins).concat(Object.keys(platform_json.dependent_plugins)); var moduleObjects = []; require('../plugman').emit('log', 'Iterating over installed plugins:', plugins);
