[ 
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]

Reply via email to