Github user martincgg commented on a diff in the pull request:
https://github.com/apache/cordova-mobile-spec/pull/55#discussion_r11855414
--- Diff: createmobilespec/createmobilespec.js ---
@@ -17,99 +16,197 @@
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'),
+var fs = require("fs"),
+ path = require("path"),
+ child_process = require("child_process"),
shelljs,
optimist;
+
+// Dependencies requirements check
try {
- shelljs = require('shelljs');
- optimist = require('optimist');
+ shelljs = require("shelljs");
+ optimist = require("optimist");
} catch (e) {
- console.error('Missing module. Please run "npm install" from this
directory:\n\t' +
+ console.error('Missing module. Please run \"npm install\" from this
directory:\n\t' +
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;
+// Print relevant information
+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
+
+// 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.
+var mainModDir = process.cwd(),
+ 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(coho_dir, "mobilespec"),
+ platforms = [],
+//Setting up optimist features
+ tokens = process.argv.slice(2),
+ argv = optimist(tokens)
+ .usage("Usage: $0 [--platform].")
+ .argv;
+
+// 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')) {
- console.log('Please run this script from the directory that contains
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');
+// No arguments throws error
+if (tokens.length === 0) {
+ throw new Error('No arguments found');
+}
+if (argv.help) {console.log("Usage: createmobilespec --platformName");
return;}
+if (argv.android) { platforms.push("android");}
+if (argv.ios) { platforms.push("ios");}
+if (argv.blackberry10) { platforms.push("blackberry10");}
+if (argv.wp8) { platforms.push("wp8");}
+if (argv.windows8) { platforms.push("windows8");}
+
+if (platforms.length === 0){
+ throw new Error ('No supported platforms');
+}
-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) {
+ //The project directory after an android build and emulation is locked
by ADB.exe (Android Debug Bridge).
+ //Kill the process & restart folder deletion
+ console.log("Not all files were deleted, killing Adb.exe process
to unlock project folder ...");
+ if (/^win/.test(process.platform)) {
+ shelljs.exec("TASKKILL /F /IM ADB.exe /T");
+ delFileSync(ms_project_dir);
+ }else
+ throw new Error("Error during folder deletion, try to remove
mobilespec project folder manually");
+ }
-shelljs.pushd('cordova-js');
-shelljs.exec('grunt');
-shelljs.popd();
+// Creating the project, linked to cordova-mobile-spec library
+shelljs.pushd(coho_dir);
+shelljs.exec(cordova_cli + " create mobilespec
org.apache.cordova.mobilespec MobileSpec_Tests --link-to cordova-mobile-spec");
-shelljs.pushd('mobilespec');
+// Executing grunt task, to generate updated js files for each platform
+shelljs.pushd(cordova_js);
+shelljs.exec("grunt");
+
+shelljs.pushd(ms_project_dir);
--- End diff --
mobilespec project is created at cordova-coho/mobilespec.
In order to use --link-to(only works with local paths), instead of copy.
Nothing is created inside createmobilespec
---
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 [email protected] or file a JIRA ticket
with INFRA.
---