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/plugman-registry
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);
 

Reply via email to