diff options
Diffstat (limited to 'StoneIsland/platforms/ios/cordova/lib/versions.js')
| -rwxr-xr-x | StoneIsland/platforms/ios/cordova/lib/versions.js | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/StoneIsland/platforms/ios/cordova/lib/versions.js b/StoneIsland/platforms/ios/cordova/lib/versions.js new file mode 100755 index 00000000..e22e499a --- /dev/null +++ b/StoneIsland/platforms/ios/cordova/lib/versions.js @@ -0,0 +1,178 @@ +#!/usr/bin/env node + +/* + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +*/ + +var child_process = require('child_process'), + Q = require('q'); + +exports.get_apple_ios_version = function() { + var d = Q.defer(); + child_process.exec('xcodebuild -showsdks', function(error, stdout, stderr) { + if (error) { + d.reject(stderr); + } + else { + d.resolve(stdout); + } + }); + + return d.promise.then(function(output) { + var regex = /[0-9]*\.[0-9]*/, + versions = [], + regexIOS = /^iOS \d+/; + output = output.split('\n'); + for (var i = 0; i < output.length; i++) { + if (output[i].trim().match(regexIOS)) { + versions[versions.length] = parseFloat(output[i].match(regex)[0]); + } + } + versions.sort(); + console.log(versions[0]); + return Q(); + }, function(stderr) { + return Q.reject(stderr); + }); +}; + +exports.get_apple_osx_version = function() { + var d = Q.defer(); + child_process.exec('xcodebuild -showsdks', function(error, stdout, stderr) { + if (error) { + d.reject(stderr); + } + else { + d.resolve(stdout); + } + }); + + return d.promise.then(function(output) { + var regex = /[0-9]*\.[0-9]*/, + versions = [], + regexOSX = /^OS X \d+/; + output = output.split('\n'); + for (var i = 0; i < output.length; i++) { + if (output[i].trim().match(regexOSX)) { + versions[versions.length] = parseFloat(output[i].match(regex)[0]); + } + } + versions.sort(); + console.log(versions[0]); + return Q(); + }, function(stderr) { + return Q.reject(stderr); + }); +}; + +exports.get_apple_xcode_version = function() { + var d = Q.defer(); + child_process.exec('xcodebuild -version', function(error, stdout, stderr) { + var versionMatch = /Xcode (.*)/.exec(stdout); + if (error || !versionMatch) { + d.reject(stderr); + } else { + d.resolve(versionMatch[1]); + } + }); + return d.promise; +}; + +/** + * Gets ios-deploy util version + * @return {Promise} Promise that either resolved with ios-deploy version + * or rejected in case of error + */ +exports.get_ios_deploy_version = function() { + var d = Q.defer(); + child_process.exec('ios-deploy --version', function(error, stdout, stderr) { + if (error) { + d.reject(stderr); + } else { + d.resolve(stdout); + } + }); + return d.promise; +}; + +/** + * Gets ios-sim util version + * @return {Promise} Promise that either resolved with ios-sim version + * or rejected in case of error + */ +exports.get_ios_sim_version = function() { + var d = Q.defer(); + child_process.exec('ios-sim --version', function(error, stdout, stderr) { + if (error) { + d.reject(stderr); + } else { + d.resolve(stdout); + } + }); + return d.promise; +}; + +/** + * Gets specific tool version + * @param {String} toolName Tool name to check. Known tools are 'xcodebuild', 'ios-sim' and 'ios-deploy' + * @return {Promise} Promise that either resolved with tool version + * or rejected in case of error + */ +exports.get_tool_version = function (toolName) { + switch (toolName) { + case 'xcodebuild': return exports.get_apple_xcode_version(); + case 'ios-sim': return exports.get_ios_sim_version(); + case 'ios-deploy': return exports.get_ios_deploy_version(); + default: return Q.reject(toolName + ' is not valid tool name. Valid names are: \'xcodebuild\', \'ios-sim\' and \'ios-deploy\''); + } +}; + +/** + * Compares two semver-notated version strings. Returns number + * that indicates equality of provided version strings. + * @param {String} version1 Version to compare + * @param {String} version2 Another version to compare + * @return {Number} Negative number if first version is lower than the second, + * positive otherwise and 0 if versions are equal. + */ +exports.compareVersions = function (version1, version2) { + function parseVer (version) { + return version.split('.').map(function (value) { + // try to convert version segment to Number + var parsed = Number(value); + // Number constructor is strict enough and will return NaN + // if conversion fails. In this case we won't be able to compare versions properly + if (isNaN(parsed)) { + throw 'Version should contain only numbers and dots'; + } + return parsed; + }); + } + var parsedVer1 = parseVer(version1); + var parsedVer2 = parseVer(version2); + + // Compare corresponding segments of each version + for (var i = 0; i < Math.max(parsedVer1.length, parsedVer2.length); i++) { + // if segment is not specified, assume that it is 0 + // E.g. 3.1 is equal to 3.1.0 + var ret = (parsedVer1[i] || 0) - (parsedVer2[i] || 0); + // if segments are not equal, we're finished + if (ret !== 0) return ret; + } + return 0; +}; |
