From be88cc7697878c907774848d23214866564b9c46 Mon Sep 17 00:00:00 2001 From: Caitlin Potter Date: Tue, 2 Jun 2015 13:07:36 -0500 Subject: [PATCH] chore(build): watch logger should honor `ignoreInitial` option It was confusing because the test.unit.dart task does ignore the initial, and the logger was hardcoded to always ignore the first task, leading to the appearance that a run was happening twice for no reason. Also, fixed the "fake ignoreInitial" handling to not rely on a fake event, which is not necessary. Closes #2101 --- gulpfile.js | 32 ++++---------------------------- tools/build/watch.js | 27 ++++++++++++++++++++++++--- tools/build/watch.spec.js | 10 +++++----- 3 files changed, 33 insertions(+), 36 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index 1a2777b2f7..2f74bf057e 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -335,10 +335,7 @@ function createDocsTasks(publicBuild) { gulp.task(taskPrefix, [taskPrefix + '/assets', taskPrefix + '/app', taskPrefix + '/dgeni']); gulp.task(taskPrefix + '/watch', function() { - return watch('docs/app/**/*', { - ignoreInitial: false, - log: watchLog - }, [taskPrefix + '/app']); + return watch('docs/app/**/*', [taskPrefix + '/app']); }); gulp.task(taskPrefix + '/test', function (done) { @@ -439,7 +436,7 @@ gulp.task('test.unit.dart', function (done) { return; } - watch('modules/angular2/**', { ignoreInitial: true, log: watchLog }, [ + watch('modules/angular2/**', { ignoreInitial: true }, [ '!build/tree.dart', '!test.unit.dart/karma-run' ]); @@ -488,7 +485,7 @@ gulp.task('test.unit.cjs', ['build/clean.js', 'build.tools'], function (neverDon 'test.unit.cjs/ci' ]; - watch('modules/**', { ignoreInitial: false, log: watchLog }, buildAndTest); + watch('modules/**', buildAndTest); }); @@ -506,10 +503,7 @@ gulp.task('test.unit.tools', ['build/clean.tools'], function(done) { 'test.unit.tools/ci' ]; - watch(['tools/**', '!tools/**/test-fixtures/**'], { - ignoreInitial: false, - log: watchLog - }, buildAndTest); + watch(['tools/**', '!tools/**/test-fixtures/**'], buildAndTest); }); @@ -895,21 +889,3 @@ process.on('beforeExit', function() { beforeExitRan = true; gulp.start('cleanup.builder'); }); - -function watchLog(triggerCount) { - // Ignore initial event - if (!--triggerCount) return; - - process.stdout.write([ - '', - '==================================================', - ' WATCH TRIGGERED BY FILE CHANGE #' + triggerCount, - ' On: ' + prettyTime(), - '==================================================\n', - ].join('\n')); - - function prettyTime() { - var now = new Date(); - return now.toLocaleDateString() + " at " + now.toLocaleTimeString(); - } -} diff --git a/tools/build/watch.js b/tools/build/watch.js index 1ec2516d93..cf544f127a 100644 --- a/tools/build/watch.js +++ b/tools/build/watch.js @@ -12,8 +12,6 @@ function watch(globs, opts, tasks) { var useRunSequence = typeof tasks !== 'function'; var runTasks; - var log = typeof opts.log === 'function' ? opts.log : function noop() {}; - if (useRunSequence) { if (!Array.isArray(tasks)) tasks = [tasks]; tasks = tasks.slice(); @@ -50,6 +48,28 @@ function watch(globs, opts, tasks) { throw err; }); + var log = function watchLogger(triggerCount) { + // Don't report change for initial event + if (!ignoreInitial && !--triggerCount) return; + + process.stdout.write([ + '', + '==================================================', + ' WATCH TRIGGERED BY FILE CHANGE #' + triggerCount, + ' On: ' + prettyTime(), + '==================================================\n', + ].join('\n')); + + function prettyTime() { + var now = new Date(); + return now.toLocaleDateString() + " at " + now.toLocaleTimeString(); + } + } + + if (opts.log !== undefined && !opts.log) { + log = function noopLog(triggerCount) {} + } + var close = watcher.close.bind(watcher); watcher.close = function() { if (timeoutId !== null) clearTimeout(timeoutId); @@ -60,7 +80,8 @@ function watch(globs, opts, tasks) { var timeoutId = null; // If non-null, event capture window is open if (!ignoreInitial) { - handleEvent('change', 'madeupFilePath'); // synthetic event to kick off the first task run + // synthetic event to kick off the first task run + timeoutId = setTimeout(invokeCallback, delay); } return watcher; diff --git a/tools/build/watch.spec.js b/tools/build/watch.spec.js index fa93563f8c..20a2ddd802 100644 --- a/tools/build/watch.spec.js +++ b/tools/build/watch.spec.js @@ -27,7 +27,7 @@ describe('watch()', function() { it('should fire callback once for events which occur within `delay` window', function() { var cb = jasmine.createSpy('callback'); - watcher = watch('./$$fake_path/**/*', { delay: 10 }, cb); + watcher = watch('./$$fake_path/**/*', { delay: 10, log: false }, cb); watcher._emit('add', './$$fake_path/test.txt'); timeout.flush(9); @@ -61,7 +61,7 @@ describe('watch()', function() { expect(timeout.pending).toBe(1); } - var watcher = watch('./$$fake_path/**/*', { delay: 10 }, cb); + var watcher = watch('./$$fake_path/**/*', { delay: 10, log: false }, cb); watcher._emit('change', './$$fake_path/test1.txt'); expect(timeout.pending).toBe(1); @@ -81,7 +81,7 @@ describe('watch()', function() { done(); } - var watcher = watch('./$$fake_path/**/*', { delay: 10 }, cb); + var watcher = watch('./$$fake_path/**/*', { delay: 10, log: false }, cb); watcher._emit('change', './$$fake_path/test1.txt'); timeout.flush(); @@ -96,7 +96,7 @@ describe('watch()', function() { it('should cancel pending callback if FSWatcher is closed', function() { var cb = jasmine.createSpy('callback'); - var watcher = watch('./$$fake_path/**/*', { delay: 10 }, cb); + var watcher = watch('./$$fake_path/**/*', { delay: 10, log: false }, cb); watcher._emit('change', './$$fake_path/test1.txt'); expect(timeout.pending).toBe(1); @@ -119,7 +119,7 @@ describe('watch()', function() { expect(timeout.pending).toBe(0); } - var watcher = watch('./$$fake_path/**/*', { delay: 10 }, cb); + var watcher = watch('./$$fake_path/**/*', { delay: 10, log: false }, cb); watcher._emit('change', './$$fake_path/test1.txt'); timeout.flush(10);