@@ -49,25 +49,31 @@ class WatchCommand extends BuildRunnerCommand {
49
49
}
50
50
51
51
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
+ );
67
68
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
+ }
71
77
}
72
78
73
79
/// Listens to [buildResults] , handling certain types of errors and completing
@@ -77,12 +83,18 @@ class WatchCommand extends BuildRunnerCommand {
77
83
Completer <int > completer,
78
84
) async {
79
85
var subscription = buildResults.listen ((result) {
86
+ buildLog.debug ('result' );
80
87
if (completer.isCompleted) return ;
81
88
if (result.status == BuildStatus .failure) {
89
+ buildLog.debug ('result is failure' );
82
90
if (result.failureType == FailureType .buildScriptChanged) {
83
91
completer.completeError (const BuildScriptChangedException ());
84
92
} else if (result.failureType == FailureType .buildConfigChanged) {
85
93
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);
86
98
}
87
99
}
88
100
});
0 commit comments