@@ -49,25 +49,31 @@ class WatchCommand extends BuildRunnerCommand {
4949 }
5050
5151 Future <int > _run (WatchOptions options) async {
52- var handler = await watch (
53- builderApplications,
54- enableLowResourcesMode: options.enableLowResourcesMode,
55- configKey: options.configKey,
56- buildDirs: options.buildDirs,
57- outputSymlinksOnly: options.outputSymlinksOnly,
58- packageGraph: packageGraph,
59- trackPerformance: options.trackPerformance,
60- skipBuildScriptCheck: options.skipBuildScriptCheck,
61- verbose: options.verbose,
62- builderConfigOverrides: options.builderConfigOverrides,
63- isReleaseBuild: options.isReleaseBuild,
64- logPerformanceDir: options.logPerformanceDir,
65- buildFilters: options.buildFilters,
66- );
52+ while (true ) {
53+ final handler = await watch (
54+ builderApplications,
55+ enableLowResourcesMode: options.enableLowResourcesMode,
56+ configKey: options.configKey,
57+ buildDirs: options.buildDirs,
58+ outputSymlinksOnly: options.outputSymlinksOnly,
59+ packageGraph: packageGraph,
60+ trackPerformance: options.trackPerformance,
61+ skipBuildScriptCheck: options.skipBuildScriptCheck,
62+ verbose: options.verbose,
63+ builderConfigOverrides: options.builderConfigOverrides,
64+ isReleaseBuild: options.isReleaseBuild,
65+ logPerformanceDir: options.logPerformanceDir,
66+ buildFilters: options.buildFilters,
67+ );
6768
68- final completer = Completer <int >();
69- handleBuildResultsStream (handler.buildResults, completer);
70- return completer.future;
69+ final completer = Completer <int >();
70+ handleBuildResultsStream (handler.buildResults, completer);
71+ final result = await completer.future;
72+ if (result != ExitCode .tempFail.code) {
73+ return result;
74+ }
75+ buildLog.debug ('restarting wooh' );
76+ }
7177 }
7278
7379 /// Listens to [buildResults] , handling certain types of errors and completing
@@ -77,12 +83,18 @@ class WatchCommand extends BuildRunnerCommand {
7783 Completer <int > completer,
7884 ) async {
7985 var subscription = buildResults.listen ((result) {
86+ buildLog.debug ('result' );
8087 if (completer.isCompleted) return ;
8188 if (result.status == BuildStatus .failure) {
89+ buildLog.debug ('result is failure' );
8290 if (result.failureType == FailureType .buildScriptChanged) {
8391 completer.completeError (const BuildScriptChangedException ());
8492 } else if (result.failureType == FailureType .buildConfigChanged) {
8593 completer.completeError (const BuildConfigChangedException ());
94+ } else if (result.failureType == FailureType .watcherRestarted) {
95+ // TODO(davidmorgan): don't communicate using errors.
96+ buildLog.debug ('result is watcherRestarted' );
97+ completer.complete (ExitCode .tempFail.code);
8698 }
8799 }
88100 });
0 commit comments