[ https://issues.apache.org/jira/browse/CB-6437?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13968822#comment-13968822 ]
ASF GitHub Bot commented on CB-6437: ------------------------------------ Github user martincgg commented on a diff in the pull request: https://github.com/apache/cordova-mobile-spec/pull/55#discussion_r11607297 --- Diff: createmobilespec/createmobilespec.js --- @@ -17,99 +16,215 @@ KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -*/ + */ var fs = require('fs'), path = require('path'), - shelljs, - optimist; + child_process = require('child_process'), + shelljs; + +// Dependencies requirements check try { shelljs = require('shelljs'); - optimist = require('optimist'); } catch (e) { console.error('Missing module. Please run "npm install" from this directory:\n\t' + - path.dirname(__dirname)); + path.dirname(__dirname)); process.exit(2); } -var tokens = process.argv.slice(2); -var argv = optimist(tokens) - .default('android', false) - .default('ios', false) - .usage('Usage: $0 [--android] [--ios]\nDefault is to use Android and iOS.') - .argv; -// preserve the original behavior when there are no args -if (tokens.length === 0) { - argv.android = true; - argv.ios = true; +console.log('Creating mobilespec project. If you have any errors, it may be from missing repositories.'); +console.log('To clone needed repositories:'); +console.log(' ./cordova-coho/coho repo-clone -r plugins -r mobile-spec -r android -r ios -r cli'); +console.log('To update all repositories:'); +console.log(' ./cordova-coho/coho repo-update'); + +// Setting up vars, folders and libraries, to ensure full compatibility cross platform, absolute paths are used instead of relative paths +var mainModDir = process.cwd(), +// Cordova Coho dir, it should contain all libraries and required repositories +// [cordova-cli, cordova-android, cordova-blackberry, cordova-ios, cordova-windows, cordova-windows8, all plugins libraries, cordova-mobile-spec, cordova-js] +// searchDir function it was added, to look for cordova-coho folder backwards, for cases like absolute/path/cordova-coho/cordova-coho/...All libraries +// This is to make sure that cordova-coho exists and it's the right one. +coho_dir = searchDir(mainModDir, 'cordova-coho'), +cordova_cli = path.join(coho_dir, 'cordova-cli', 'bin', 'cordova'), +cordova_ms = (path.join(coho_dir, 'cordova-mobile-spec')), +cordova_js = (path.join(coho_dir, 'cordova-js')), +ms_project_dir = (path.join(mainModDir, 'mobilespec')); + +// Main libraries and path's requirements check +if (!fs.existsSync(coho_dir)) { + console.log('Please run this script from the directory that contains cordova-coho'); + shelljs.exit(1); } -var platforms = []; -if (argv.android) { platforms.push('android'); } -if (argv.ios) { platforms.push('ios'); } -if (!fs.existsSync('cordova-mobile-spec')) { +if (!fs.existsSync(cordova_ms)) { console.log('Please run this script from the directory that contains cordova-mobile-spec'); shelljs.exit(1); } -if (fs.existsSync('mobilespec')) { - console.log('Directory "mobilespec" already exists. Delete it first then re-run.'); +if (!fs.existsSync(cordova_js)) { + console.log('Please run this script from the directory that contains cordova-js'); shelljs.exit(1); } -console.log('Creating mobilespec project. If you have any errors, it may be from missing repositories.'); -console.log('To clone needed repositories:'); -console.log(" ./cordova-coho/coho repo-clone -r plugins -r mobile-spec -r cli -r " + platforms.join(' -r ')); -console.log('To update all repositories:'); -console.log(' ./cordova-coho/coho repo-update'); +//Determine which platforms are available +// Default platforms [Android, Blackberry], both platforms works under Windows, Linux and Mac OS +cordovaPlatforms = ['android', 'blackberry10']; +if (/^win/.test(process.platform)) { + //Determine windows 8 platform + child_process.exec('wmic os get caption', function (error, stdout, stderr) { + if (error !== null) { + callback = 'Error performing command: ' + error + "\n" + stderr; + } else { + // If Windows 8, add Windows Phone 8 and Windows8 platform to the array + if ((/.*(Windows 8).*/gi).test(((stdout.replace(/\r\r\n/i, ': ')).replace(/\s\s+/g, '')).replace((/\n|\r/gi), ''))) { + cordovaPlatforms.push('wp8', 'windows8'); + } + } + }); +} else { + //If Mac Os, add iOS platform + if (/^darwin/.test(process.platform)) + cordovaPlatforms.push('ios'); +} -var repoParent = process.cwd(); +// Setting up config.fatal as true, if something goes wrong the program it will terminate shelljs.config.fatal = true; -shelljs.exec('./cordova-cli/bin/cordova create mobilespec --link-to cordova-mobile-spec'); +// Custom function to delete project folder, using recursive actions +try { + delFileSync(ms_project_dir); +} catch (e) { + //Why this?, well during tests, trying to delete the project directory after make an android build and emulation, the folder is locked by ADB.exe (Android Debug Bridge). + //Cordova allows project creation in an empty folder. + //It just locks the project folder, not the files under, so catching up the exception, allows to continue. + console.log("Not all files were deleted"); --- End diff -- Well, I had some logic to kill the adb.exe, using shelljs.exec, but well adb.exe is part of the Android SDK, if this process is working with other files or in another process. But I can add logic, to kill the process if the exception is caught. > [Mobilespec] improve and add support for blackberry, wp8, windows8 > ------------------------------------------------------------------ > > Key: CB-6437 > URL: https://issues.apache.org/jira/browse/CB-6437 > Project: Apache Cordova > Issue Type: Improvement > Components: BlackBerry, mobile-spec, Windows 8, WP8 > Affects Versions: 3.4.0 > Reporter: Martin Gonzalez > Assignee: Martin Gonzalez > Labels: blackberry10, mobilespec,, module, node, support, > windows8, wp8 > Fix For: 3.5.0 > > > The new node module for Mobilespecs can be improved. > -Adding more functionality > -Supporting platforms as blackberry10, windows phone 8 and windows 8. > -Add functionality to automate some process as well. > -Add functionality to add platforms according to the development environment > --- Android, Blackberry, iOS ---> Mac. > --- Android, Blackberry, Windows 8, Windows Phone 8 ---> Windows 8. > --- Android, Blackberry ---> Linux or any other Windows OS. -- This message was sent by Atlassian JIRA (v6.2#6252)