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 2015/05/29 11:56:00 UTC
ios commit: CB-8954 Adds `requirements` command support to check_reqs
module
Repository: cordova-ios
Updated Branches:
refs/heads/master 27679a398 -> f9c6249f4
CB-8954 Adds `requirements` command support to check_reqs module
Project: http://git-wip-us.apache.org/repos/asf/cordova-ios/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-ios/commit/f9c6249f
Tree: http://git-wip-us.apache.org/repos/asf/cordova-ios/tree/f9c6249f
Diff: http://git-wip-us.apache.org/repos/asf/cordova-ios/diff/f9c6249f
Branch: refs/heads/master
Commit: f9c6249f45dfdf71fd5346a549318d5c9ee335d9
Parents: 27679a3
Author: Vladimir Kotikov <v-...@microsoft.com>
Authored: Thu May 28 13:28:31 2015 +0300
Committer: Vladimir Kotikov <v-...@microsoft.com>
Committed: Fri May 29 12:55:43 2015 +0300
----------------------------------------------------------------------
bin/lib/check_reqs.js | 108 ++++++++++++++++++++++++++++++++++++---------
bin/lib/create.js | 2 +-
2 files changed, 88 insertions(+), 22 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/f9c6249f/bin/lib/check_reqs.js
----------------------------------------------------------------------
diff --git a/bin/lib/check_reqs.js b/bin/lib/check_reqs.js
index 2f5897e..d1f6333 100644
--- a/bin/lib/check_reqs.js
+++ b/bin/lib/check_reqs.js
@@ -17,34 +17,30 @@
under the License.
*/
-/* jshint node:true, bitwise:true, undef:true, trailing:true, quotmark:true,
- indent:4, unused:vars, latedef:nofunc,
- sub:true, laxcomma:true, laxbreak:true
-*/
-
var Q = require('q'),
- os = require('os'),
shell = require('shelljs'),
versions = require('./versions');
var XCODEBUILD_MIN_VERSION = '4.6.0';
+var XCODEBUILD_NOT_FOUND_MESSAGE =
+ 'Please install version ' + XCODEBUILD_MIN_VERSION + ' or greater from App Store';
var IOS_SIM_MIN_VERSION = '3.0.0';
-var IOS_SIM_NOT_FOUND_MESSAGE = 'ios-sim was not found. Please download, build and install version ' + IOS_SIM_MIN_VERSION +
- ' or greater from https://github.com/phonegap/ios-sim into your path.' +
- ' Or \'npm install -g ios-sim\' using node.js: http://nodejs.org';
+var IOS_SIM_NOT_FOUND_MESSAGE =
+ 'Please download, build and install version ' + IOS_SIM_MIN_VERSION + ' or greater' +
+ ' from https://github.com/phonegap/ios-sim into your path, or do \'npm install -g ios-sim\'';
var IOS_DEPLOY_MIN_VERSION = '1.4.0';
-var IOS_DEPLOY_NOT_FOUND_MESSAGE = 'ios-deploy was not found. Please download, build and install version ' + IOS_DEPLOY_MIN_VERSION +
- ' or greater from https://github.com/phonegap/ios-deploy into your path.' +
- ' Or \'npm install -g ios-deploy\' using node.js: http://nodejs.org';
+var IOS_DEPLOY_NOT_FOUND_MESSAGE =
+ 'Please download, build and install version ' + IOS_DEPLOY_MIN_VERSION + ' or greater' +
+ ' from https://github.com/phonegap/ios-deploy into your path, or do \'npm install -g ios-deploy\'';
/**
* Checks if xcode util is available
* @return {Promise} Returns a promise either resolved with xcode version or rejected
*/
module.exports.run = module.exports.check_xcodebuild = function () {
- return checkTool('xcodebuild', XCODEBUILD_MIN_VERSION);
+ return checkTool('xcodebuild', XCODEBUILD_MIN_VERSION, XCODEBUILD_NOT_FOUND_MESSAGE);
};
/**
@@ -63,6 +59,13 @@ module.exports.check_ios_sim = function () {
return checkTool('ios-sim', IOS_SIM_MIN_VERSION, IOS_SIM_NOT_FOUND_MESSAGE);
};
+module.exports.check_os = function () {
+ // Build iOS apps available for OSX platform only, so we reject on others platforms
+ return process.platform === 'darwin' ?
+ Q.resolve(process.platform) :
+ Q.reject('Cordova tooling for iOS requires Apple OS X');
+};
+
module.exports.help = function () {
console.log('Usage: check_reqs or node check_reqs');
};
@@ -71,24 +74,87 @@ module.exports.help = function () {
* Checks if specific tool is available.
* @param {String} tool Tool name to check. Known tools are 'xcodebuild', 'ios-sim' and 'ios-deploy'
* @param {Number} minVersion Min allowed tool version.
- * @param {String} optMessage Message that will be used to reject promise.
+ * @param {String} message Message that will be used to reject promise.
* @return {Promise} Returns a promise either resolved with tool version or rejected
*/
-function checkTool (tool, minVersion, optMessage) {
- if (os.platform() !== 'darwin'){
- // Build iOS apps available for OSX platform only, so we reject on others platforms
- return Q.reject('Cordova tooling for iOS requires Apple OS X');
- }
+function checkTool (tool, minVersion, message) {
// Check whether tool command is available at all
var tool_command = shell.which(tool);
if (!tool_command) {
- return Q.reject(optMessage || (tool + 'command is unavailable.'));
+ return Q.reject(tool + ' was not found. ' + (message || ''));
}
// check if tool version is greater than specified one
return versions.get_tool_version(tool).then(function (version) {
+ version = version.trim();
return versions.compareVersions(version, minVersion) >= 0 ?
Q.resolve(version) :
Q.reject('Cordova needs ' + tool + ' version ' + minVersion +
- ' or greater, you have version ' + version + '.');
+ ' or greater, you have version ' + version + '. ' + (message || ''));
});
}
+
+/**
+ * Object that represents one of requirements for current platform.
+ * @param {String} id The unique identifier for this requirements.
+ * @param {String} name The name of requirements. Human-readable field.
+ * @param {Boolean} isFatal Marks the requirement as fatal. If such requirement will fail
+ * next requirements' checks will be skipped.
+ */
+var Requirement = function (id, name, isFatal) {
+ this.id = id;
+ this.name = name;
+ this.installed = false;
+ this.metadata = {};
+ this.isFatal = isFatal || false;
+};
+
+/**
+ * Methods that runs all checks one by one and returns a result of checks
+ * as an array of Requirement objects. This method intended to be used by cordova-lib check_reqs method
+ *
+ * @return Promise<Requirement[]> Array of requirements. Due to implementation, promise is always fulfilled.
+ */
+module.exports.check_all = function() {
+
+ var requirements = [
+ new Requirement('os', 'Apple OS X', true),
+ new Requirement('xcode', 'Xcode'),
+ new Requirement('ios-deploy', 'ios-deploy'),
+ new Requirement('ios-sim', 'ios-sim')
+ ];
+
+ var result = [];
+ var fatalIsHit = false;
+
+ var checkFns = [
+ module.exports.check_os,
+ module.exports.check_xcodebuild,
+ module.exports.check_ios_deploy,
+ module.exports.check_ios_sim
+ ];
+
+ // Then execute requirement checks one-by-one
+ return checkFns.reduce(function (promise, checkFn, idx) {
+ return promise.then(function () {
+ // If fatal requirement is failed,
+ // we don't need to check others
+ if (fatalIsHit) return Q();
+
+ var requirement = requirements[idx];
+ return checkFn()
+ .then(function (version) {
+ requirement.installed = true;
+ requirement.metadata.version = version;
+ result.push(requirement);
+ }, function (err) {
+ if (requirement.isFatal) fatalIsHit = true;
+ requirement.metadata.reason = err;
+ result.push(requirement);
+ });
+ });
+ }, Q())
+ .then(function () {
+ // When chain is completed, return requirements array to upstream API
+ return result;
+ });
+};
http://git-wip-us.apache.org/repos/asf/cordova-ios/blob/f9c6249f/bin/lib/create.js
----------------------------------------------------------------------
diff --git a/bin/lib/create.js b/bin/lib/create.js
index cbffd63..fa8dd38 100755
--- a/bin/lib/create.js
+++ b/bin/lib/create.js
@@ -83,7 +83,7 @@ function copyScripts(projectPath) {
shell.cp('-r', path.join(binDir, 'node_modules'), destScriptsDir);
// Copy the check_reqs script
- shell.cp(path.join(binDir, 'check_reqs'), destScriptsDir);
+ shell.cp(path.join(binDir, 'check_reqs*'), destScriptsDir);
shell.cp(path.join(binDir, 'lib', 'check_reqs.js'), path.join(destScriptsDir, 'lib'));
// Copy the version scripts
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org