You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by an...@apache.org on 2013/07/11 23:50:23 UTC

[23/43] git commit: 0.9.1. [CB-3499] Uninstalled plugins have their js-module www assets properly removed now.

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 <ma...@gmail.com>
Authored: Wed Jul 10 12:44:16 2013 -0700
Committer: Fil Maj <ma...@gmail.com>
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 <al...@gmail.com>",
   "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);