[
https://issues.apache.org/jira/browse/CB-8954?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14559694#comment-14559694
]
ASF GitHub Bot commented on CB-8954:
------------------------------------
Github user TimBarham commented on a diff in the pull request:
https://github.com/apache/cordova-windows/pull/83#discussion_r31070612
--- Diff: bin/lib/check_reqs.js ---
@@ -17,17 +17,101 @@
under the License.
*/
-var Q = require('Q'),
- os = require('os'),
+/*jshint node:true*/
+
+var Q = require('Q');
+
+var MSBuildTools;
+try {
MSBuildTools = require('../../template/cordova/lib/MSBuildTools');
+} catch (ex) {
+ // If previous import fails, we probably running this script
+ // from installed platform and the module location is different.
+ MSBuildTools = require('./MSBuildTools');
+}
+
+/**
+ * Check if current OS is supports building windows platform
+ * @return {Promise} Promise either fullfilled or rejected with error
message.
+ */
+var checkOS = function () {
+ var platform = process.platform;
+ return (platform === 'win32') ?
+ Q.resolve(platform):
+ // Build Universal windows apps available for windows platform
only, so we reject on others platforms
+ Q.reject('Cordova tooling for Windows requires Windows OS to build
project');
+};
+
+/**
+ * Checks if MSBuild tools is available.
+ * @return {Promise} Promise either fullfilled with MSBuild version
+ * or rejected with error message.
+ */
+var checkMSBuild = function () {
+ return MSBuildTools.findAvailableVersion()
+ .then(function (msbuildTools) {
+ // return Q.resolve('MSBuild tools v.' + msbuildTools.version + '
found at ' + msbuildTools.path);
+ return Q.resolve(msbuildTools.version);
+ }, function () {
+ return Q.reject('MSBuild tools not found. Please install MSBuild
tools or VS 2013 from ' +
+
'https://www.visualstudio.com/downloads/download-visual-studio-vs');
+ });
+};
module.exports.run = function () {
- if (os.platform() != 'win32'){
- // Build Universal windows apps available for windows platform only,
so we reject on others platforms
- return Q.reject('ERROR: Cordova tooling for Windows requires
Windows OS');
- }
- // Check whther MSBuild Tools are available
- return MSBuildTools.findAvailableVersion();
+ return checkOS().then(function () {
+ return MSBuildTools.findAvailableVersion();
+ });
+};
+
+/**
+ * Object thar 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 {String} version The version of requirement installed. In
some cases could be an array of strings
+ * (for example, check_android_target returns
an array of android targets installed)
+ * @param {Boolean} installed Indicates whether the reuirement is
installed or not
+ */
+var Requirement = function (id, name, version, installed) {
+ this.id = id;
+ this.name = name;
+ this.installed = installed || false;
+ this.metadata = {
+ version: version,
+ };
+};
+
+/**
+ * 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', 'Windows OS'),
+ new Requirement('msbuild', 'MSBuild Tools')
+ ];
+
+ // Define list of checks needs to be performed
+ var checkFns = [checkOS, checkMSBuild];
+ // Then execute them one-by-one
+ return checkFns.reduce(function (promise, checkFn, idx) {
+ // Update each requirement with results
+ var requirement = requirements[idx];
+ return promise.then(checkFn)
+ .then(function (version) {
+ requirement.installed = true;
+ requirement.metadata.version = version;
+ }, function (err) {
+ requirement.metadata.reason = err;
+ });
+ }, Q())
+ .then(function () {
+ // When chain is completed, return requirements array to upstream
API
+ return requirements;
+ });
--- End diff --
I know it's not a lot of code, but since it will be duplicated for every
platform... it would be nice if the definition of `Requirement`, and the
`check_all` logic could be in its own module that the platforms take as a
dependency. A pain to set up now, but easier maintenance later on.
> Update platform check_reqs script to return structured result to
> 'requirements' command
> ---------------------------------------------------------------------------------------
>
> Key: CB-8954
> URL: https://issues.apache.org/jira/browse/CB-8954
> Project: Apache Cordova
> Issue Type: Bug
> Components: Android, iOS, Windows, WP8
> Reporter: Vladimir Kotikov
> Assignee: Vladimir Kotikov
>
> Since {{requirements}} LIB method assumes that underlying platform script
> will be {{require}}d instead of spawning child process and capturing output,
> we need to modify these scripts to provide method that will be called for
> getting current requirements status.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]