@@ -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