cordova-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From agrieve <...@git.apache.org>
Subject [GitHub] cordova-cli pull request: CB-6329 improve 'cordova info' command
Date Thu, 03 Apr 2014 23:52:04 GMT
Github user agrieve commented on a diff in the pull request:

    https://github.com/apache/cordova-cli/pull/151#discussion_r11278577
  
    --- Diff: src/info.js ---
    @@ -16,123 +16,99 @@
         specific language governing permissions and limitations
         under the License.
     */
    -var cordova_util  = require('./util'),
    -    shell         = require('shelljs'),
    -    path          = require('path'),
    -    fs            = require('fs'),
    -    Q             = require('q'),
    -    events        = require('./events');
    -
    -/*
    -    A utility funciton to help output the information needed
    -    when submitting a help request.
    -
    -    Outputs to a file
    -*/
    +    var cordova_util  = require('./util'),
    +        path          = require('path'),
    +        fs            = require('fs'),
    +        child_process = require('child_process'),
    +        Q             = require('q'),
    +        info_utils 	  = require('./info-utils');
    +
    +    /*
    +        A utility funciton to help output the information needed
    +        when submitting a help request.
    +
    +        Outputs to a file
    +    */
     module.exports = function info() {
    -
    -    //Get the template
    -    var projectRoot = cordova_util.cdProjectRoot();
    -
    -    var raw = fs.readFileSync(path.join(__dirname, '..', 'doc', 'info.txt'), 'utf-8').split("\n"),
    +        //Get projectRoot 
    +        var projectRoot = cordova_util.cdProjectRoot(),
             output;
    -
    -    output = raw.map(function(line) {
    -        if(line.match('    %') ) {
    -            var type = (line.substr(5)).replace("\r",""),
    -                out = "";
    -
    -            switch(type) {
    -            case "Node":
    -                out = shell.exec('node --version',{silent:true}).output;
    -                break;
    -            case "Cordova":
    -                out = require('../package').version;
    -                break;
    -            case "Config":
    -                out = fs.readFileSync( cordova_util.projectConfig(projectRoot) );
    -                break;
    -            case "Platforms":
    -                out = doPlatforms( projectRoot );
    -                break;
    -            case "Plugins":
    -                out = doPlugins( projectRoot );
    -                break;
    -            default:
    -                break;
    -            }
    -            return line.replace( "%"+type, out );
    -        } else {
    -            return line;
    +        if (!projectRoot) {
    +            return Q.reject( new Error('Current working directory is not a Cordova-based
project.') );
             }
    -    }).join("\n");
     
    -    // /*
    -    //     Write to File;
    -    // */
    -    events.emit('results', output);
    -    fs.writeFileSync('info.txt', output );
    -    return Q();
    +        delLog(projectRoot);
    +        //Array of functions, Q.allSettled
    +        return Q.allSettled([ (function (){
    +            console.log("Collecting Data...");
    +            //Get Node version
    +            return (Q.denodeify (info_utils.getNodeInfo)());
    +        }()), (function (){
    +            //Get Cordova version
    +            return (Q.denodeify (info_utils.getCordovaInfo)());
    +        }()), (function (){
    +           //Get project config.xml file
    +           return 'Config.xml File: \n\n'+ (fs.readFileSync(cordova_util.projectConfig(projectRoot),
'utf-8')) +'\n\n\n'
    +        }()), (function (){
    +             //Get list of plugins
    +            return 'Plugins: \n\n' + doPlugins( projectRoot ) +'\n\n\n';
    +        }()), (function (){
    +            //Get Platforms information
    +            return (Q.denodeify (doPlatforms)(projectRoot));
    +        }())]).then(function (promises){
    +            for(var t in promises)
    +            print_SaveMsg( projectRoot, (function (){ return promises[t].state==='fulfilled'
? promises[t].value : promises[t].state==='rejected' ? promises[t].reason : 'Still working'
}()) );
    +       });
     };
     
    -function doPlatform( currentPlatform ) {
    -    var output = "";
    -    switch( currentPlatform ){
    -    case "ios":
    -        output = shell.exec('xcodebuild -version',{silent:true} ).output;
    -        break;
    -    case "android":
    -        output = shell.exec('android list target',{silent:true} ).output;
    +    function delLog(projectRoot){
    +        if(fs.existsSync(path.join(projectRoot,'info.txt'))){
    +            fs.unlink(path.join(projectRoot,'info.txt'), function (err) {
    +                if (err) {throw err; console.log("Unable to delete info.txt file \n");}
    +                writeLog(projectRoot, '');
    +            });
    +        }else{writeLog(projectRoot, '');}
         }
    +    function writeLog (projectRoot, data){
    +        //Successfully deleted, writing new one
    +        fs.writeFile(path.join(projectRoot,'info.txt'), data, 'utf-8', function (err)
{
    +            if (err) throw err;
    +        });
    +    }
    +    function print_SaveMsg(projectRoot, data){
    +        console.info(data);
    +        appendLog(projectRoot,data)
    +    }
    +    function appendLog(projectRoot, data){
    --- End diff --
    
    If you wait for them all before doing any writing, then there's no point in appending
each time.
    
    I think maybe the problem is that you should use Q.all() instead of Q.allSettled().


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

Mime
View raw message