From ad0a63e4422375102d00b1f10503261090540a2a Mon Sep 17 00:00:00 2001 From: Dimitar Kerezov Date: Thu, 28 Jan 2016 09:50:59 +0200 Subject: [PATCH 1/2] Fix `this.root` null reference parseOpts function referenced this.root but the this object is not the new Api as expected. This leads to an exception upon calling path.relative(this.root, ...). --- bin/templates/cordova/lib/build.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bin/templates/cordova/lib/build.js b/bin/templates/cordova/lib/build.js index bbf4bd961..e1a30c82c 100644 --- a/bin/templates/cordova/lib/build.js +++ b/bin/templates/cordova/lib/build.js @@ -31,7 +31,7 @@ var events = require('cordova-common').events; var spawn = require('cordova-common').superspawn.spawn; var CordovaError = require('cordova-common').CordovaError; -function parseOpts(options, resolvedTarget) { +function parseOpts(options, resolvedTarget, projectRoot) { options = options || {}; options.argv = nopt({ gradle: Boolean, @@ -72,7 +72,7 @@ function parseOpts(options, resolvedTarget) { var packageArgs = {}; if (options.argv.keystore) - packageArgs.keystore = path.relative(this.root, path.resolve(options.argv.keystore)); + packageArgs.keystore = path.relative(projectRoot, path.resolve(options.argv.keystore)); ['alias','storePassword','password','keystoreType'].forEach(function (flagName) { if (options.argv[flagName]) @@ -120,7 +120,7 @@ function parseOpts(options, resolvedTarget) { * Returns a promise. */ module.exports.runClean = function(options) { - var opts = parseOpts(options); + var opts = parseOpts(options, null, this.root); var builder = builders.getBuilder(opts.buildMethod); return builder.prepEnv(opts) .then(function() { @@ -141,7 +141,7 @@ module.exports.runClean = function(options) { * information. */ module.exports.run = function(options, optResolvedTarget) { - var opts = parseOpts(options, optResolvedTarget); + var opts = parseOpts(options, optResolvedTarget, this.root); var builder = builders.getBuilder(opts.buildMethod); var self = this; return builder.prepEnv(opts) From bcc3fe4e9c9acb337c8ee6f5c61144e98f6b5980 Mon Sep 17 00:00:00 2001 From: Dimitar Kerezov Date: Thu, 28 Jan 2016 09:51:50 +0200 Subject: [PATCH 2/2] Pass original options instead of remaining Nopt parses all options regardless of what is passed as "knownOpts". This leaves the remain property an emtpy array. This ultimately leads to a bug in the parseOpts function where the options undergo a second parsing from nopt. The end result is - this options are not respected at all. --- bin/templates/cordova/build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/templates/cordova/build b/bin/templates/cordova/build index da44783f5..de86a36aa 100755 --- a/bin/templates/cordova/build +++ b/bin/templates/cordova/build @@ -39,7 +39,7 @@ var buildOpts = nopt({ }, { 'd' : '--verbose' }); // Make buildOptions compatible with PlatformApi build method spec -buildOpts.argv = buildOpts.argv.remain; +buildOpts.argv = buildOpts.argv.original; new Api().build(buildOpts) .catch(function(err) {