in webdev/lib/src/command/build_command.dart [39:115]
Future<int> run() async {
var unsupported =
argResults.rest.where((arg) => !arg.startsWith('-')).toList();
if (unsupported.isNotEmpty) {
throw UsageException(
'Arguments were provided that are not supported: '
'"${unsupported.join(' ')}".',
argParser.usage);
}
var extraArgs =
argResults.rest.where((arg) => arg.startsWith('-')).toList();
var configuration = Configuration.fromArgs(argResults);
configureLogWriter(configuration.verbose);
var pubspecLock = await readPubspecLock(configuration);
final arguments = buildRunnerArgs(pubspecLock, configuration)
..addAll(extraArgs);
try {
logWriter(logging.Level.INFO, 'Connecting to the build daemon...');
var client = await connectClient(
Directory.current.path,
arguments,
(serverLog) {
logWriter(toLoggingLevel(serverLog.level), serverLog.message,
error: serverLog.error,
loggerName: serverLog.loggerName,
stackTrace: serverLog.stackTrace);
},
);
OutputLocation outputLocation;
if (configuration.outputPath != null) {
outputLocation = OutputLocation((b) => b
..output = configuration.outputPath
..useSymlinks = false
..hoist = configuration.outputInput.isNotEmpty);
}
client.registerBuildTarget(DefaultBuildTarget((b) => b
..target = configuration.outputInput
..outputLocation = outputLocation?.toBuilder()));
client.startBuild();
var exitCode = 0;
var gotBuildStart = false;
await for (final result in client.buildResults) {
var targetResult = result.results.firstWhere(
(buildResult) => buildResult.target == configuration.outputInput,
orElse: () => null);
if (targetResult == null) continue;
// We ignore any builds that happen before we get a `started` event,
// because those could be stale (from some other client).
gotBuildStart =
gotBuildStart || targetResult.status == BuildStatus.started;
if (!gotBuildStart) continue;
// Shouldn't happen, but being a bit defensive here.
if (targetResult.status == BuildStatus.started) continue;
if (targetResult.status == BuildStatus.failed) {
exitCode = 1;
}
if (targetResult.error?.isNotEmpty == true) {
logWriter(logging.Level.SEVERE, targetResult.error);
}
break;
}
await client.close();
return exitCode;
} on OptionsSkew catch (_) {
logWriter(
logging.Level.SEVERE,
'Incompatible options with current running build daemon.\n\n'
'Please stop other WebDev instances running in this directory '
'before starting a new instance with these options.\n\n');
return 1;
}
}