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/03/04 20:32:51 UTC
[60/91] [abbrv] git commit: Issue #16 first test
Issue #16 first test
Project: http://git-wip-us.apache.org/repos/asf/cordova-plugman/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugman/commit/604c7713
Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugman/tree/604c7713
Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugman/diff/604c7713
Branch: refs/heads/master
Commit: 604c7713b6dd9a99f04b715ce466e9dad13b5d52
Parents: 3f6a4f6
Author: Anis Kadri <an...@gmail.com>
Authored: Mon Jan 7 10:43:43 2013 -0800
Committer: Anis Kadri <an...@gmail.com>
Committed: Mon Jan 7 10:43:43 2013 -0800
----------------------------------------------------------------------
plugman.js | 62 ++++++++++++++++++++++++++++---------------------
util/plugins.js | 54 +++++++++++++++++++++++++++++++++++++++++++
2 files changed, 89 insertions(+), 27 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/604c7713/plugman.js
----------------------------------------------------------------------
diff --git a/plugman.js b/plugman.js
index 556b5c6..a69521d 100755
--- a/plugman.js
+++ b/plugman.js
@@ -1,13 +1,13 @@
#!/usr/bin/env node
-// copyright (c) 2012 Andrew Lunny, Adobe Systems
-var shell = require('shelljs')
- , osenv = require('osenv')
- , fs = require('fs')
+// copyright (c) 2013 Andrew Lunny, Adobe Systems
+var fs = require('fs')
, path = require('path')
+ , url = require('url')
, package = require(path.join(__dirname, 'package'))
, et = require('elementtree')
, nopt = require('nopt')
+ , plugins = require('./util/plugins')
, platform_modules = {
'android': require('./platforms/android'),
'ios': require('./platforms/ios'),
@@ -16,7 +16,7 @@ var shell = require('shelljs')
var known_opts = { 'platform' : [ 'ios', 'android', 'www' ]
, 'project' : path
- , 'plugin' : path
+ , 'plugin' : [String, path, url]
, 'remove' : Boolean
, 'v' : Boolean
, 'debug' : Boolean
@@ -51,40 +51,48 @@ function printUsage() {
console.log('Usage\n---------');
console.log('Add a plugin:\n\t' + package.name + ' --platform <'+ platforms +'> --project <directory> --plugin <directory>\n');
console.log('Remove a plugin:\n\t' + package.name + ' --remove --platform <'+ platforms +'> --project <directory> --plugin <directory>\n');
-}
+}
+
+function execAction(action, platform, project_dir, plugin_dir) {
+ var xml_path = path.join(plugin_dir, 'plugin.xml')
+ , xml_text = fs.readFileSync(xml_path, 'utf-8')
+ , plugin_et = new et.ElementTree(et.XML(xml_text));
+
+ // run the platform-specific function
+ platform_modules[platform].handlePlugin(action, project_dir, plugin_dir, plugin_et);
+
+ console.log('plugin ' + action + 'ed');
+}
function handlePlugin(action, platform, project_dir, plugin_dir) {
- var plugin_git_url, plugin_xml_path;
+ var plugin_xml_path, async = false;
// clone from git repository
if(plugin_dir.indexOf('https://') == 0 || plugin_dir.indexOf('git://') == 0) {
- if(!shell.which('git')) {
- throw new Error('git command line is not installed');
- }
- // use osenv to get a temp directory in a portable way
- plugin_git_url = plugin_dir;
- plugin_dir = path.join(osenv.tmpdir(), 'plugin');
-
- if(shell.exec('git clone ' + plugin_url + ' ' + plugin_dir).code != 0) {
- throw new Error('failed to get the plugin via git URL', plugin_url);
- }
+ plugin_dir = plugins.clonePluginGitRepo(plugin_dir);
}
plugin_xml_path = path.join(plugin_dir, 'plugin.xml');
if (!fs.existsSync(plugin_xml_path)) {
- throw new Error(action + ' failed. "' + plugin_xml_path + '" not found');
+ // try querying the plugin database
+ async = true;
+ plugins.getPluginInfo(plugin_dir,
+ function(plugin_dir) {
+ execAction(action, platform, project_dir, plugin_dir);
+ },
+ function(e) {
+ throw new Error(action + ' failed. "' + plugin_xml_path + '" not found');
+ }
+ );
}
- if (!platform_modules[platform])
+ if (!platform_modules[platform]) {
throw { name: "Platform Error", message: platform + " not supported" }
+ }
// check arguments and resolve file paths
- var xml_path = path.join(plugin_dir, 'plugin.xml')
- , xml_text = fs.readFileSync(xml_path, 'utf-8')
- , plugin_et = new et.ElementTree(et.XML(xml_text));
-
- // run the platform-specific function
- platform_modules[platform].handlePlugin(action, project_dir, plugin_dir, plugin_et);
-
- console.log('plugin ' + action + 'ed');
+ if(!async) {
+ execAction(action, platform, project_dir, plugin_dir);
+ }
}
+
http://git-wip-us.apache.org/repos/asf/cordova-plugman/blob/604c7713/util/plugins.js
----------------------------------------------------------------------
diff --git a/util/plugins.js b/util/plugins.js
new file mode 100644
index 0000000..ce6ab7a
--- /dev/null
+++ b/util/plugins.js
@@ -0,0 +1,54 @@
+#!/usr/bin/env node
+// FIXME: change this quickly
+var url = "http://ec2-184-72-173-33.compute-1.amazonaws.com:5984";
+var http = require('http'),
+ osenv = require('osenv'),
+ path = require('path'),
+ fs = require('fs'),
+ shell = require('shelljs');
+
+// Fetches plugin information from remote server
+exports.getPluginInfo = function(plugin_name, success, error) {
+ http.get(url + "/cordova_plugins/_design/cordova_plugins/_view/by_name?key=\""+plugin_name+"\"", function(res) {
+ var str = '';
+ res.on('data', function (chunk) {
+ str += chunk;
+ });
+ res.on('end', function () {
+ var response, plugin_info;
+ if((response = JSON.parse(str)).rows.length == 1) {
+ plugin_info = response.rows[0].value;
+ success(exports.clonePluginGitRepo(plugin_info.url));
+ } else {
+ error("Could not find information on "+plugin_dir+" plugin");
+ }
+ });
+
+ }).on('error', function(e) {
+ console.log("Got error: " + e.message);
+ error(e.message);
+ });
+}
+
+exports.clonePluginGitRepo = function(plugin_dir) {
+ if(!shell.which('git')) {
+ throw new Error('git command line is not installed');
+ }
+ // use osenv to get a temp directory in a portable way
+ plugin_git_url = plugin_dir;
+ plugin_dir = path.join(osenv.tmpdir(), 'plugin');
+
+ if(shell.exec('git clone ' + plugin_git_url + ' ' + plugin_dir + ' 2>&1 1>/dev/null').code != 0) {
+ throw new Error('failed to get the plugin via git URL', plugin_git_url);
+ }
+
+ process.on('exit', function() {
+ console.log('cleaning up...');
+ // clean up
+ if(fs.existsSync(plugin_dir)) {
+ shell.rm('-rf', plugin_dir);
+ }
+ });
+
+ return plugin_dir;
+}