CB-11652 Update run and emulate to skip build We need to add this conditional logic to cordova's `run` and `emulate` methods to skip build when `--nobuild` option is specified. CLI previously has delegated this logic to platform's `run` method but since introducing `before_deploy` hook we call platform's `build` and `run` separately and so we need to handle this option in CLI
Project: http://git-wip-us.apache.org/repos/asf/cordova-lib/repo Commit: http://git-wip-us.apache.org/repos/asf/cordova-lib/commit/9b023d1b Tree: http://git-wip-us.apache.org/repos/asf/cordova-lib/tree/9b023d1b Diff: http://git-wip-us.apache.org/repos/asf/cordova-lib/diff/9b023d1b Branch: refs/heads/6.3.x Commit: 9b023d1bdd4c26bb94da751d3bc270dab3ae1ceb Parents: 647852e Author: Vladimir Kotikov <v-vlk...@microsoft.com> Authored: Tue Aug 2 15:08:24 2016 +0300 Committer: Vladimir Kotikov <v-vlk...@microsoft.com> Committed: Mon Aug 8 10:46:02 2016 +0300 ---------------------------------------------------------------------- cordova-lib/spec-cordova/emulate.spec.js | 24 ++++++++++++++++++++++ cordova-lib/spec-cordova/run.spec.js | 25 +++++++++++++++++++++++ cordova-lib/src/cordova/emulate.js | 29 ++++++++++++++------------- cordova-lib/src/cordova/run.js | 29 ++++++++++++++------------- 4 files changed, 79 insertions(+), 28 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/9b023d1b/cordova-lib/spec-cordova/emulate.spec.js ---------------------------------------------------------------------- diff --git a/cordova-lib/spec-cordova/emulate.spec.js b/cordova-lib/spec-cordova/emulate.spec.js index c04c16d..94b2ab9 100644 --- a/cordova-lib/spec-cordova/emulate.spec.js +++ b/cordova-lib/spec-cordova/emulate.spec.js @@ -131,6 +131,30 @@ describe('emulate command', function() { }).fin(done); }); }); + + it('should call platform\'s build method', function (done) { + cordova.raw.emulate({platforms: ['blackberry10']}) + .then(function() { + expect(prepare_spy).toHaveBeenCalled(); + expect(platformApi.build).toHaveBeenCalledWith({device: false, emulator: true}); + expect(platformApi.run).toHaveBeenCalledWith(jasmine.objectContaining({nobuild: true})); + }, function(err) { + expect(err).toBeUndefined(); + }) + .fin(done); + }); + + it('should not call build if --nobuild option is passed', function (done) { + cordova.raw.emulate({platforms: ['blackberry10'], options: { nobuild: true }}) + .then(function() { + expect(prepare_spy).toHaveBeenCalled(); + expect(platformApi.build).not.toHaveBeenCalled(); + expect(platformApi.run).toHaveBeenCalledWith(jasmine.objectContaining({nobuild: true})); + }, function(err) { + expect(err).toBeUndefined(); + }) + .fin(done); + }); }); describe('hooks', function() { http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/9b023d1b/cordova-lib/spec-cordova/run.spec.js ---------------------------------------------------------------------- diff --git a/cordova-lib/spec-cordova/run.spec.js b/cordova-lib/spec-cordova/run.spec.js index b1dedd3..2b09e04 100644 --- a/cordova-lib/spec-cordova/run.spec.js +++ b/cordova-lib/spec-cordova/run.spec.js @@ -107,6 +107,31 @@ describe('run command', function() { done(); }); }); + + it('should call platform\'s build method', function (done) { + cordova.raw.run({platforms: ['blackberry10']}) + .then(function() { + expect(prepare_spy).toHaveBeenCalled(); + expect(platformApi.build).toHaveBeenCalledWith({}); + expect(platformApi.run).toHaveBeenCalledWith(jasmine.objectContaining({nobuild: true})); + }, function(err) { + expect(err).toBeUndefined(); + }) + .fin(done); + }); + + it('should not call build if --nobuild option is passed', function (done) { + cordova.raw.run({platforms: ['blackberry10'], options: { nobuild: true }}) + .then(function() { + expect(prepare_spy).toHaveBeenCalled(); + expect(platformApi.build).not.toHaveBeenCalled(); + expect(platformApi.run).toHaveBeenCalledWith(jasmine.objectContaining({nobuild: true})); + }, function(err) { + expect(err).toBeUndefined(); + }) + .fin(done); + }); + describe('run parameters should not be altered by intermediate build command', function() { var originalBuildSpy; beforeEach(function() { http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/9b023d1b/cordova-lib/src/cordova/emulate.js ---------------------------------------------------------------------- diff --git a/cordova-lib/src/cordova/emulate.js b/cordova-lib/src/cordova/emulate.js index 642e55c..fdb0f13 100644 --- a/cordova-lib/src/cordova/emulate.js +++ b/cordova-lib/src/cordova/emulate.js @@ -32,6 +32,10 @@ module.exports = function emulate(options) { options.options.device = false; options.options.emulator = true; + var optsClone = _.clone(options.options); + // This is needed as .build modifies opts + optsClone.nobuild = true; + var hooksRunner = new HooksRunner(projectRoot); return hooksRunner.fire('before_emulate', options) .then(function() { @@ -42,20 +46,17 @@ module.exports = function emulate(options) { }).then(function() { // Deploy in parallel (output gets intermixed though...) return Q.all(options.platforms.map(function(platform) { - // This is needed as .build modifies opts - var optsClone = _.clone(options.options); - return platform_lib - .getPlatformApi(platform) - .build(options.options) - .then(function() { - return hooksRunner.fire('before_deploy', options); - }) - .then(function() { - optsClone.nobuild = true; - return platform_lib - .getPlatformApi(platform) - .run(optsClone); - }); + + var buildPromise = options.options.nobuild ? Q() : + platform_lib.getPlatformApi(platform).build(options.options); + + return buildPromise + .then(function() { + return hooksRunner.fire('before_deploy', options); + }) + .then(function() { + return platform_lib.getPlatformApi(platform).run(optsClone); + }); })); }).then(function() { return hooksRunner.fire('after_emulate', options); http://git-wip-us.apache.org/repos/asf/cordova-lib/blob/9b023d1b/cordova-lib/src/cordova/run.js ---------------------------------------------------------------------- diff --git a/cordova-lib/src/cordova/run.js b/cordova-lib/src/cordova/run.js index 74fe8f5..34a76da 100644 --- a/cordova-lib/src/cordova/run.js +++ b/cordova-lib/src/cordova/run.js @@ -30,6 +30,10 @@ module.exports = function run(options) { var projectRoot = cordova_util.cdProjectRoot(); options = cordova_util.preProcessOptions(options); + // This is needed as .build modifies opts + var optsClone = _.clone(options.options); + optsClone.nobuild = true; + var hooksRunner = new HooksRunner(projectRoot); return hooksRunner.fire('before_run', options) .then(function() { @@ -40,20 +44,17 @@ module.exports = function run(options) { }).then(function() { // Deploy in parallel (output gets intermixed though...) return Q.all(options.platforms.map(function(platform) { - // This is needed as .build modifies opts - var optsClone = _.clone(options.options); - return platform_lib - .getPlatformApi(platform) - .build(options.options) - .then(function() { - return hooksRunner.fire('before_deploy', options); - }) - .then(function() { - optsClone.nobuild = true; - return platform_lib - .getPlatformApi(platform) - .run(optsClone); - }); + + var buildPromise = options.options.nobuild ? Q() : + platform_lib.getPlatformApi(platform).build(options.options); + + return buildPromise + .then(function() { + return hooksRunner.fire('before_deploy', options); + }) + .then(function() { + return platform_lib.getPlatformApi(platform).run(optsClone); + }); })); }).then(function() { return hooksRunner.fire('after_run', options); --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cordova.apache.org For additional commands, e-mail: commits-h...@cordova.apache.org