You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by je...@apache.org on 2013/09/27 16:26:38 UTC

[34/50] [abbrv] webworks commit: [CB-4732] Re-writing build script to use async

[CB-4732] Re-writing build script to use async

Added --query flag to request keystorepass

Reviewed by Bryan Higgins <bh...@blackberry.com>
Tested by Tracy Li <tl...@blackberry.com>


Project: http://git-wip-us.apache.org/repos/asf/cordova-blackberry/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-blackberry/commit/42ed4bf8
Tree: http://git-wip-us.apache.org/repos/asf/cordova-blackberry/tree/42ed4bf8
Diff: http://git-wip-us.apache.org/repos/asf/cordova-blackberry/diff/42ed4bf8

Branch: refs/heads/3.1.x
Commit: 42ed4bf892b306131417dc8e425b37a8cc9ef8ca
Parents: 4baa515
Author: Jeffrey Heifetz <jh...@blackberry.com>
Authored: Mon Sep 9 16:11:03 2013 -0400
Committer: Bryan Higgins <bh...@blackberry.com>
Committed: Fri Sep 13 08:56:00 2013 -0400

----------------------------------------------------------------------
 .../bin/templates/project/cordova/lib/build     | 151 +++++++++----------
 1 file changed, 74 insertions(+), 77 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/42ed4bf8/blackberry10/bin/templates/project/cordova/lib/build
----------------------------------------------------------------------
diff --git a/blackberry10/bin/templates/project/cordova/lib/build b/blackberry10/bin/templates/project/cordova/lib/build
index 8b54709..d1d4af5 100755
--- a/blackberry10/bin/templates/project/cordova/lib/build
+++ b/blackberry10/bin/templates/project/cordova/lib/build
@@ -27,8 +27,9 @@ var path = require("path"),
         "-o",
         path.resolve(path.join(__dirname, "..", "..", "build"))
     ],
-    jWorkflow = require("jWorkflow"),
+    async = require("async"),
     childProcess = require("child_process"),
+    logger = require("./logger"),
     pkgrUtils = require("./packager-utils"),
     commandStr;
 
@@ -39,79 +40,11 @@ function copyArgIfExists(arg) {
     }
 }
 
-function doReleaseBuild() {
-    //Note: Packager refers to signing password as "password" not "keystorepass"
-    if (command["keystorepass"]) {
-        bbwpArgv.push("--password");
-        bbwpArgv.push(command["keystorepass"]);
-    } else if (bbProperties.keystorepass) {
-        bbwpArgv.push("--password");
-        bbwpArgv.push(bbProperties.keystorepass);
-    } else {
-        console.log("No signing password provided. Please enter a value for 'keystorepass' in %HOME%/.cordova/blackberry10.json or use --keystorepass via command-line directly from the project cordova scripts (WILL NOT WORK FROM CLI).");
-        console.log(command.helpInformation());
-        process.exit(2);
-    }
-
-    copyArgIfExists("buildId");
-
-    build();
-}
-
-function build() {
-    //enable webinspector in debug mode or if --webinspector was provided
-    if (!command.release || command.webInspector) {
-        bbwpArgv.push("-d");
-    }
-
-    copyArgIfExists("params");
-    copyArgIfExists("loglevel");
-
-    //Overwrite process.argv, before calling packager
-    process.argv = bbwpArgv;
-
-    //Delete cached commander object. It will conflict with the packagers commander
-    delete require.cache[require.resolve("commander")];
-    delete require.cache[require.resolve("commander/lib/commander")];
-
-    require("./packager").start(function() {});
-}
-
-function postClean() {
-    if (command.release) {
-        doReleaseBuild();
-    } else {
-        build();
-    }
-}
-
-function clean(previous, baton) {
-    var cleanScript,
-        execName = "./clean";
-
-    if (pkgrUtils.isWindows()) {
-        execName = "clean";
-    }
-
-    baton.take();
-
-    cleanScript = childProcess.exec(execName, {
-        "cwd": path.normalize(__dirname + "/.."),
-        "env": process.env
-    });
-
-    cleanScript.stdout.on("data", pkgrUtils.handleProcessOutput);
-    cleanScript.stderr.on("data", pkgrUtils.handleProcessOutput);
-
-    cleanScript.on("exit", function (code) {
-        baton.pass();
-    });
-}
-
 command
-    .usage('[--debug] [--release] [-k | --keystorepass] [-b | --buildId <number>] [-p | --params <json>] [-ll | --loglevel <level>]')
+    .usage('[--debug] [--release] [--query] [-k | --keystorepass] [-b | --buildId <number>] [-p | --params <json>] [-ll | --loglevel <level>]')
     .option('--debug', 'build in debug mode.')
     .option('--release', 'build in release mode. This will sign the resulting bar.')
+    .option('--query', 'query on the commandline when a password is needed')
     .option('-k, --keystorepass <password>', 'signing key password')
     .option('-b, --buildId <num>', 'specifies the build number for signing (typically incremented from previous signing).')
     .option('-d, --web-inspector', 'enables webinspector. Enabled by default in debug mode.).')
@@ -122,17 +55,81 @@ try {
     command.parse(process.argv);
 
     if (command.debug && command.release) {
-        console.log("Invalid build command: cannot specify both debug and release parameters.");
+        logger.warn("Invalid build command: cannot specify both debug and release parameters.");
         console.log(command.helpInformation());
         process.exit(2);
     }
 
-    // Implicitly call clean first
-    jWorkflow.order(clean)
-             .andThen(postClean)
-             .start();
+    async.series(
+        [
+            function clean (done) {
+                var cmd = utils.isWindows() ? "clean" : "./clean",
+                    args = [],
+                    opts = { "cwd": path.normalize(__dirname + "/..") };
+
+                utils.exec(cmd, args, opts, done);
+            },
+            function releaseBuild (allDone) {
+                var childTasks = [],
+                    err;
+
+                if (command.release) {
+                    copyArgIfExists("buildId");
+                    //Note: Packager refers to signing password as "password" not "keystorepass"
+                    bbwpArgv.push("--password");
+                    if (command.keystorepass) {
+                        bbwpArgv.push(command.keystorepass);
+                    } else if (bbProperties.keystorepass) {
+                        bbwpArgv.push(bbProperties.keystorepass);
+                    } else if (command.query) {
+                        childTasks.push(utils.prompt.bind(this, {description: "Please enter your keystore password: ", hidden: true}));
+                        childTasks.push(function (password, done) {
+                            bbwpArgv.push(password);
+                            done();
+                        });
+                    } else {
+                        err = "No signing password provided. Please enter a value for 'keystorepass' in %HOME%/.cordova/blackberry10.json or use --keystorepass via command-line";
+                    }
+                }
+
+                async.waterfall(childTasks, function (error) { allDone(error || err);});
+            },
+            function build (done) {
+                //enable weybinspector in debug mode or if --webinspector was provided
+                if (!command.release || command.webInspector) {
+                    bbwpArgv.push("-d");
+                }
+
+                copyArgIfExists("params");
+                copyArgIfExists("loglevel");
+
+                //Overwrite process.argv, before calling packager
+                process.argv = bbwpArgv;
+
+                //Delete cached commander object. It will conflict with the packagers commander
+                delete require.cache[require.resolve("commander")];
+                delete require.cache[require.resolve("commander/lib/commander")];
+
+                require("./packager").start(done);
+            }
+        ],
+        function (err, results) {
+            if (err) {
+                if (typeof err === "string") {
+                    logger.error(err);
+                    process.exit(1);
+                } else if (typeof err === "number") {
+                    process.exit(err);
+                } else {
+                    process.exit(2);
+                }
+            } else {
+                process.exit(0);
+            }
+        }
+    );
 } catch (e) {
-    console.log(e);
+    logger.error(e);
     process.exit(2);
 }