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 2016/05/04 09:22:17 UTC
cordova-windows git commit: CB-11139 Use PluginManager from common to
install/uninstall plugins
Repository: cordova-windows
Updated Branches:
refs/heads/master 58895ee4c -> 033956d1f
CB-11139 Use PluginManager from common to install/uninstall plugins
This closes #171
Project: http://git-wip-us.apache.org/repos/asf/cordova-windows/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-windows/commit/033956d1
Tree: http://git-wip-us.apache.org/repos/asf/cordova-windows/tree/033956d1
Diff: http://git-wip-us.apache.org/repos/asf/cordova-windows/diff/033956d1
Branch: refs/heads/master
Commit: 033956d1f561a0d3321199115d7b556ea6ed7d8e
Parents: 58895ee
Author: Vladimir Kotikov <ko...@gmail.com>
Authored: Fri Apr 22 15:38:15 2016 +0300
Committer: Vladimir Kotikov <ko...@gmail.com>
Committed: Wed May 4 10:21:47 2016 +0300
----------------------------------------------------------------------
spec/unit/pluginHandler/common.spec.js | 4 +-
template/cordova/Api.js | 207 ++--------------------------
template/cordova/lib/JsprojManager.js | 9 ++
template/cordova/lib/prepare.js | 8 +-
4 files changed, 31 insertions(+), 197 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/033956d1/spec/unit/pluginHandler/common.spec.js
----------------------------------------------------------------------
diff --git a/spec/unit/pluginHandler/common.spec.js b/spec/unit/pluginHandler/common.spec.js
index cfc92f7..c0db124 100644
--- a/spec/unit/pluginHandler/common.spec.js
+++ b/spec/unit/pluginHandler/common.spec.js
@@ -41,8 +41,8 @@ var removeFileAndParents = common.__get__('removeFileAndParents');
describe('common platform handler', function() {
describe('copyFile', function() {
it('should throw if source path not found', function(){
- expect(function(){copyFile('/some/dir', src, project_dir, dest);})
- .toThrow(new Error('"' + src + '" not found!'));
+ expect(function(){copyFile('/some/dir', 'foo', project_dir, dest);})
+ .toThrow(new Error('"' + path.resolve('/some/dir', 'foo') + '" not found!'));
});
it('should throw if src not in plugin directory', function(){
http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/033956d1/template/cordova/Api.js
----------------------------------------------------------------------
diff --git a/template/cordova/Api.js b/template/cordova/Api.js
index eea4db3..1a15c73 100644
--- a/template/cordova/Api.js
+++ b/template/cordova/Api.js
@@ -17,20 +17,11 @@
under the License.
*/
-var Q = require('q');
-var fs = require('fs');
var path = require('path');
-var shell = require('shelljs');
-
-var JsprojManager = require('./lib/JsprojManager');
-var PluginHandler = require('./lib/PluginHandler');
var events = require('cordova-common').events;
-var ActionStack = require('cordova-common').ActionStack;
-var CordovaError = require('cordova-common').CordovaError;
+var JsprojManager = require('./lib/JsprojManager');
+var PluginManager = require('cordova-common').PluginManager;
var CordovaLogger = require('cordova-common').CordovaLogger;
-var PlatformJson = require('cordova-common').PlatformJson;
-var PlatformMunger = require('./lib/ConfigChanges').PlatformMunger;
-var PluginInfoProvider = require('cordova-common').PluginInfoProvider;
var PLATFORM = 'windows';
@@ -63,12 +54,7 @@ function Api(platform, platformRootDir, eventEmitter) {
setupEvents(eventEmitter);
- this._platformJson = PlatformJson.load(this.root, platform);
- this._pluginInfoProvider = new PluginInfoProvider();
- this._munger = new PlatformMunger(this.platform, this.root, this._platformJson, this._pluginInfoProvider);
-
var self = this;
-
this.locations = {
root: self.root,
www: path.join(self.root, 'www'),
@@ -193,50 +179,19 @@ Api.prototype.prepare = function (cordovaProject) {
*/
Api.prototype.addPlugin = function (plugin, installOptions) {
- if (!plugin || plugin.constructor.name !== 'PluginInfo')
- return Q.reject(new CordovaError('The parameter is incorrect. The first parameter ' +
- 'should be valid PluginInfo instance'));
-
+ var jsProject = JsprojManager.getProject(this.root);
installOptions = installOptions || {};
installOptions.variables = installOptions.variables || {};
-
- var self = this;
- var actions = new ActionStack();
- var jsProject = JsprojManager.getProject(this.root);
-
// Add PACKAGE_NAME variable into vars
if (!installOptions.variables.PACKAGE_NAME) {
installOptions.variables.PACKAGE_NAME = jsProject.getPackageName();
}
- // gather all files needs to be handled during install
- plugin.getFilesAndFrameworks(this.platform)
- .concat(plugin.getAssets(this.platform))
- .concat(plugin.getJsModules(this.platform))
- .forEach(function(item) {
- actions.push(actions.createAction(
- PluginHandler.getInstaller(item.itemType), [item, plugin, jsProject, installOptions],
- PluginHandler.getUninstaller(item.itemType), [item, plugin, jsProject, installOptions]));
- });
-
- // run through the action stack
- return actions.process(this.platform)
- .then(function () {
- jsProject.write();
-
- self._munger
- // Ignore passed `is_top_level` option since platform itself doesn't know
- // anything about managing dependencies - it's responsibility of caller.
- .add_plugin_changes(plugin, installOptions.variables, /*is_top_level=*/true, /*should_increment=*/true)
- .save_all();
-
- var targetDirs = [self.getPlatformInfo().locations.www];
- if (installOptions.usePlatformWww) targetDirs.push(self.getPlatformInfo().locations.platformWww);
- self._addModulesInfo(plugin, targetDirs);
-
- // CB-11022 return non-falsy value to indicate that there is no need to run prepare after that
- return true;
- });
+ return PluginManager.get(this.platform, this.locations, jsProject)
+ .addPlugin(plugin, installOptions)
+ // CB-11022 return non-falsy value to indicate
+ // that there is no need to run prepare after
+ .thenResolve(true);
};
/**
@@ -253,44 +208,14 @@ Api.prototype.addPlugin = function (plugin, installOptions) {
* CordovaError instance.
*/
Api.prototype.removePlugin = function (plugin, uninstallOptions) {
-
- var self = this;
- var actions = new ActionStack();
- var projectFile = JsprojManager.getProject(this.root);
-
- // queue up plugin files
- plugin.getFilesAndFrameworks(this.platform)
- .concat(plugin.getAssets(this.platform))
- .concat(plugin.getJsModules(this.platform))
- .forEach(function(item) {
- actions.push(actions.createAction(
- PluginHandler.getUninstaller(item.itemType), [item, plugin, projectFile, uninstallOptions],
- PluginHandler.getInstaller(item.itemType), [item, plugin, projectFile, uninstallOptions]));
- });
-
- // run through the action stack
- return actions.process(this.platform)
- .then(function() {
- projectFile.write();
-
- self._munger
- // Ignore passed `is_top_level` option since platform itself doesn't know
- // anything about managing dependencies - it's responsibility of caller.
- .remove_plugin_changes(plugin, /*is_top_level=*/true)
- .save_all();
-
- var targetDirs = [self.getPlatformInfo().locations.www];
- if (uninstallOptions.usePlatformWww) targetDirs.push(self.getPlatformInfo().locations.platformWww);
- self._removeModulesInfo(plugin, targetDirs);
- // Remove stale plugin directory
- shell.rm('-rf', path.resolve(self.root, 'Plugins', plugin.id));
-
- // CB-11022 return non-falsy value to indicate that there is no need to run prepare after that
- return true;
- });
+ var jsProject = JsprojManager.getProject(this.root);
+ return PluginManager.get(this.platform, this.locations, jsProject)
+ .removePlugin(plugin, uninstallOptions)
+ // CB-11022 return non-falsy value to indicate
+ // that there is no need to run prepare after
+ .thenResolve(true);
};
-
/**
* Builds an application package for current platform.
*
@@ -385,107 +310,3 @@ Api.prototype.requirements = function() {
};
module.exports = Api;
-
-/**
- * Removes the specified modules from list of installed modules and updates
- * platform_json and cordova_plugins.js on disk.
- *
- * @param {PluginInfo} plugin PluginInfo instance for plugin, which modules
- * needs to be added.
- * @param {String[]} targetDirs The directories, where updated cordova_plugins.js
- * should be written to.
- */
-Api.prototype._addModulesInfo = function(plugin, targetDirs) {
- var installedModules = this._platformJson.root.modules || [];
-
- var installedPaths = installedModules.map(function (installedModule) {
- return installedModule.file;
- });
-
- var modulesToInstall = plugin.getJsModules(this.platform)
- .filter(function (moduleToInstall) {
- return installedPaths.indexOf(moduleToInstall.file) === -1;
- }).map(function (moduleToInstall) {
- var moduleName = plugin.id + '.' + ( moduleToInstall.name || moduleToInstall.src.match(/([^\/]+)\.js/)[1] );
- var obj = {
- file: ['plugins', plugin.id, moduleToInstall.src].join('/'),
- id: moduleName,
- pluginId: plugin.id
- };
- if (moduleToInstall.clobbers.length > 0) {
- obj.clobbers = moduleToInstall.clobbers.map(function(o) { return o.target; });
- }
- if (moduleToInstall.merges.length > 0) {
- obj.merges = moduleToInstall.merges.map(function(o) { return o.target; });
- }
- if (moduleToInstall.runs) {
- obj.runs = true;
- }
-
- return obj;
- });
-
- this._platformJson.root.modules = installedModules.concat(modulesToInstall);
- if (!this._platformJson.root.plugin_metadata) {
- this._platformJson.root.plugin_metadata = {};
- }
- this._platformJson.root.plugin_metadata[plugin.id] = plugin.version;
-
- this._writePluginModules(targetDirs);
- this._platformJson.save();
-};
-
-/**
- * Removes the specified modules from list of installed modules and updates
- * platform_json and cordova_plugins.js on disk.
- *
- * @param {PluginInfo} plugin PluginInfo instance for plugin, which modules
- * needs to be removed.
- * @param {String[]} targetDirs The directory, where updated cordova_plugins.js
- * should be written to.
- */
-Api.prototype._removeModulesInfo = function(plugin, targetDirs) {
- var installedModules = this._platformJson.root.modules || [];
- var modulesToRemove = plugin.getJsModules(this.platform)
- .map(function (jsModule) {
- return ['plugins', plugin.id, jsModule.src].join('/');
- });
-
- var updatedModules = installedModules
- .filter(function (installedModule) {
- return (modulesToRemove.indexOf(installedModule.file) === -1);
- });
-
- this._platformJson.root.modules = updatedModules;
- if (this._platformJson.root.plugin_metadata) {
- delete this._platformJson.root.plugin_metadata[plugin.id];
- }
-
- this._writePluginModules(targetDirs);
- this._platformJson.save();
-};
-
-/**
- * Fetches all installed modules, generates cordova_plugins contents and writes
- * it to file.
- *
- * @param {String[]} targetDirs Directory, where write cordova_plugins.js to.
- * Ususally it is either <platform>/www or <platform>/platform_www
- * directories.
- */
-Api.prototype._writePluginModules = function (targetDirs) {
- // Write out moduleObjects as JSON wrapped in a cordova module to cordova_plugins.js
- var final_contents = 'cordova.define(\'cordova/plugin_list\', function(require, exports, module) {\n';
- final_contents += 'module.exports = ' + JSON.stringify(this._platformJson.root.modules, null, ' ') + ';\n';
- final_contents += 'module.exports.metadata = \n';
- final_contents += '// TOP OF METADATA\n';
-
- final_contents += JSON.stringify(this._platformJson.root.plugin_metadata, null, 4) + ';\n';
- final_contents += '// BOTTOM OF METADATA\n';
- final_contents += '});'; // Close cordova.define.
-
- targetDirs.forEach(function (targetDir) {
- shell.mkdir('-p', targetDir);
- fs.writeFileSync(path.join(targetDir, 'cordova_plugins.js'), final_contents, 'utf-8');
- });
-};
http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/033956d1/template/cordova/lib/JsprojManager.js
----------------------------------------------------------------------
diff --git a/template/cordova/lib/JsprojManager.js b/template/cordova/lib/JsprojManager.js
index c823314..01b35d5 100644
--- a/template/cordova/lib/JsprojManager.js
+++ b/template/cordova/lib/JsprojManager.js
@@ -30,6 +30,7 @@ var util = require('util');
var semver = require('semver');
var shell = require('shelljs');
var AppxManifest = require('./AppxManifest');
+var PluginHandler = require('./PluginHandler');
var events = require('cordova-common').events;
var CordovaError = require('cordova-common').CordovaError;
var xml_helpers = require('cordova-common').xmlHelpers;
@@ -343,6 +344,14 @@ jsprojManager.prototype = {
}
};
+jsprojManager.prototype.getInstaller = function (type) {
+ return PluginHandler.getInstaller(type);
+};
+
+jsprojManager.prototype.getUninstaller = function (type) {
+ return PluginHandler.getUninstaller(type);
+};
+
function getProjectReferencePreInsertRegExp(projectGuid) {
projectGuid = escapeRegExpString(projectGuid);
return new RegExp("\\s*ProjectSection\\(ProjectDependencies\\)\\s*=\\s*postProject\\s*" + projectGuid + "\\s*=\\s*" + projectGuid + "\\s*EndProjectSection", "gi");
http://git-wip-us.apache.org/repos/asf/cordova-windows/blob/033956d1/template/cordova/lib/prepare.js
----------------------------------------------------------------------
diff --git a/template/cordova/lib/prepare.js b/template/cordova/lib/prepare.js
index 9869e06..f4f8550 100644
--- a/template/cordova/lib/prepare.js
+++ b/template/cordova/lib/prepare.js
@@ -29,6 +29,9 @@ var MSBuildTools = require('./MSBuildTools');
var ConfigParser = require('./ConfigParser');
var events = require('cordova-common').events;
var xmlHelpers = require('cordova-common').xmlHelpers;
+var PlatformJson = require('cordova-common').PlatformJson;
+var PlatformMunger = require('cordova-common').ConfigChanges.PlatformMunger;
+var PluginInfoProvider = require('cordova-common').PluginInfoProvider;
// Default value for VisualElements' Description attribute.
// This is equal to the value that comes with default App template
@@ -412,8 +415,9 @@ function getUAPVersions(config) {
module.exports.prepare = function (cordovaProject) {
var self = this;
- this._config = updateConfigFilesFrom(cordovaProject.projectConfig,
- this._munger, this.locations);
+ var platformJson = PlatformJson.load(this.root, this.platform);
+ var munger = new PlatformMunger(this.platform, this.root, platformJson, new PluginInfoProvider());
+ this._config = updateConfigFilesFrom(cordovaProject.projectConfig, munger, this.locations);
// CB-10845 avoid using cached appxmanifests since they could be
// previously modififed outside of AppxManifest class
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org