[ https://issues.apache.org/jira/browse/CB-8499?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14334295#comment-14334295 ]
ASF GitHub Bot commented on CB-8499: ------------------------------------ Github user agrieve commented on a diff in the pull request: https://github.com/apache/cordova-lib/pull/170#discussion_r25224693 --- Diff: cordova-lib/src/cordova/platform_metadata.js --- @@ -0,0 +1,102 @@ +/** + 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 path = require('path'), + cordova_util = require('./util'), + fs = require('fs'), + Q = require('q'), + shelljs = require('shelljs'); + + +// Retrieves the platforms and their versions from the platforms.json file +// Returns an array of {platform: platform, version: version} ... +// ... where version could be '3.4.0', '/path/to/platform' or 'git://...' +function getVersions(projectRoot) { + var platformsDir = path.join(projectRoot, 'platforms'); + var platformsJsonFile = path.join(platformsDir, 'platforms.json'); + + // If the platforms.json file doesn't exist, retrieve versions from platforms installed on the filesystem... + // ...Note that in this case, we won't be able to know what source(folder, git-url) the platform came from, we'll just use versions + return getPlatVersionsFromFile(platformsJsonFile).fail(function(){ + return getPlatVersionsFromFileSystem(projectRoot); + }); +} + +// Returns a promise +function getPlatVersionsFromFile(platformsJsonFile){ + var platformData = require(platformsJsonFile); + var platformVersions = []; + + platformVersions = Object.keys(platformData).map(function(p){ + return {platform: p, version: platformData[p]}; + }); + + return Q(platformVersions); +} + +// Returns a promise +function getPlatVersionsFromFileSystem(projectRoot){ + var platformVersions = []; + var platforms_on_fs = cordova_util.listPlatforms(projectRoot); + platforms_on_fs.forEach(function(platform){ + var script = path.join(projectRoot, 'platforms', platform, 'cordova', 'version'); + + // Use version script to retrieve installed version of the platform + var version = shelljs.exec(script).output; --- End diff -- `shelljs.exec` is known to have poor performance and lead to EMFILE exceptions. Please use child_process.exec() instead > 'cordova platform save' : should save all installed platforms to config.xml > --------------------------------------------------------------------------- > > Key: CB-8499 > URL: https://issues.apache.org/jira/browse/CB-8499 > Project: Apache Cordova > Issue Type: New Feature > Reporter: Omar Mefire > Assignee: Omar Mefire > > In addition to using 'cordova platform add android --save' to both add and > save a platform to config.xml, It would be useful to have a way to 'mass > save' already installed platforms to config.xml. -- This message was sent by Atlassian JIRA (v6.3.4#6332) --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@cordova.apache.org For additional commands, e-mail: issues-h...@cordova.apache.org