You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by ma...@apache.org on 2014/10/01 21:27:31 UTC

spec commit: CB-7686 add check of npm-link when using master of tools

Repository: cordova-mobile-spec
Updated Branches:
  refs/heads/master 59f4b8325 -> e0f753036


CB-7686 add check of npm-link when using master of tools


Project: http://git-wip-us.apache.org/repos/asf/cordova-mobile-spec/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-mobile-spec/commit/e0f75303
Tree: http://git-wip-us.apache.org/repos/asf/cordova-mobile-spec/tree/e0f75303
Diff: http://git-wip-us.apache.org/repos/asf/cordova-mobile-spec/diff/e0f75303

Branch: refs/heads/master
Commit: e0f7530366e945b232ada3bf7bc189d5ec0090db
Parents: 59f4b83
Author: Marcel Kinard <cm...@gmail.com>
Authored: Wed Oct 1 15:26:20 2014 -0400
Committer: Marcel Kinard <cm...@gmail.com>
Committed: Wed Oct 1 15:27:09 2014 -0400

----------------------------------------------------------------------
 createmobilespec/createmobilespec.js | 75 ++++++++++++++++++++++++++++++-
 1 file changed, 73 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cordova-mobile-spec/blob/e0f75303/createmobilespec/createmobilespec.js
----------------------------------------------------------------------
diff --git a/createmobilespec/createmobilespec.js b/createmobilespec/createmobilespec.js
index d8913fc..b532995 100755
--- a/createmobilespec/createmobilespec.js
+++ b/createmobilespec/createmobilespec.js
@@ -102,7 +102,7 @@ var top_dir =             process.cwd() + path.sep,
                            "windows8": ["www"],
                            "windows": ["www"],
                            "wp8": ["www"]},
-    argv = optimist.usage("\nUsage: $0 PLATFORM... [--help] [--plugman] [--global] [--globalplugins] [--skipjs] [directoryName]\n" +
+    argv = optimist.usage("\nUsage: $0 PLATFORM... [--help] [--plugman] [--global] [--globalplugins] [--skipjs] [--skiplink] [directoryName]\n" +
                           "A project will be created with the mobile-spec app and all the core plugins.\n" +
                           "At least one platform must be specified. See the included README.md.\n" +
                           "\tPLATFORM: [--<amazon|android|blackberry10|ios|windows|windows8|wp8>]\n" +
@@ -127,6 +127,8 @@ var top_dir =             process.cwd() + path.sep,
                    .boolean("skipjs").describe("skipjs", "Do not update the platform's cordova.js from the js git repo, use the one already present in the platform.\n" +
                                                "\t\t\tRarely used, generally to test RC releases.\n" +
                                                "\t\t\tCannot be used with --global because it is implied when --global is used.")
+                   .boolean("skiplink").describe("skiplink", "Do not check 'npm link' of our own dependent modules such as cordova-lib when on master.\n" +
+                                                 "\t\t\tUse only when you know what you are doing, this should be very rare.")
                    .alias("h", "help")
                    .argv;
 
@@ -158,7 +160,12 @@ if (argv.skipjs && argv.global) {
     quit();
 }
 if (argv.globalplugins && argv.global) {
-    console.log("This --globalplugins option can not be used with the --global option.");
+    console.log("The --globalplugins option can not be used with the --global option.");
+    optimist.showHelp();
+    quit();
+}
+if (argv.skiplink && argv.global) {
+    console.log("The --skiplink option can not be used with the --global option.");
     optimist.showHelp();
     quit();
 }
@@ -230,6 +237,70 @@ if (argv.global || argv.globalplugins) {
     shelljs.rm("-rf", path.join(home_dir, ".plugman"));
 }
 
+function getPathFromModuleName(moduleName) {
+    if (moduleName == "cordova-lib") {
+        return(moduleName + path.sep + moduleName);
+    } else {
+        return(moduleName);
+    }
+}
+
+function cdInto(moduleName) {
+    var myPath = getPathFromModuleName(moduleName);
+    pushd(myPath);
+}
+
+function cdOutOf() {
+    popd();
+}
+
+function getBranchName(moduleName) {
+    cdInto(moduleName);
+    // output should look like: refs/head/master
+    var gitOutput = shelljs.exec("git symbolic-ref HEAD").output;
+    var match = /refs\/heads\/(.*)/.exec(gitOutput);
+    if (!match) {
+        throw new Error('Could not parse branch name from: ' + gitOutput);
+    }
+    cdOutOf();
+    return match[1];
+}
+
+function verifyNpmLinkOf(linkedModule, installedModule) {
+    cdInto(installedModule);
+    var linkedPath = shelljs.pwd() + path.sep + "node_modules" + path.sep + linkedModule;
+    if (fs.existsSync(linkedPath)) {
+        var myStat = fs.lstatSync(linkedPath);
+        if (!myStat.isSymbolicLink()) {
+            throw new Error('Module ' + linkedModule + ' installed in ' + installedModule + ' is not npm-linked. I recommend you run "coho npm-link".');
+        }
+    } else {
+        throw new Error('Module ' + linkedModule + ' is not installed at all (direct or npm-linked) in ' + installedModule);
+    }
+    cdOutOf();
+}
+
+if (!argv.skiplink) {
+    console.log("Checking if you are using master branch of tools");
+    // if js, lib, plugman, and cli have master checked out, should npm link.
+    var jsBranch = getBranchName("cordova-js");
+    var libBranch = getBranchName("cordova-lib");
+    var plugmanBranch = getBranchName("cordova-plugman");
+    var cliBranch = getBranchName("cordova-cli");
+    if ((jsBranch == "master") && (libBranch == "master") && (plugmanBranch == "master") && (cliBranch == "master")) {
+        // make sure the dependent modules are 'npm link'ed to each other,
+        // so they actually get tested instead of downloading the last published
+        // one from the npm registry. Fail if they are not.
+        console.log("You are on master branch of tools, checking npm links");
+        verifyNpmLinkOf("cordova-js", "cordova-lib");
+        verifyNpmLinkOf("cordova-lib", "cordova-plugman");
+        verifyNpmLinkOf("cordova-lib", "cordova-cli");
+        console.log("npm links are OK");
+    } else {
+        console.log("Using non-master of one or more tools.");
+    }
+}
+
 ////////////////////// create the project for each platform
 
 function myDelete(myDir) {