doWork function
Discovery and process dependencies before eventually compiling protos.
Implementation
Future<void> doWork(Set<String> processed, List<String> baseArguments) async {
final work = <String>{};
for (var proto in processed) {
work.addAll(await processDeps(proto, baseArguments));
}
stdout.writeln('processed ${processed.length} initial protos');
// work contains the starting point for compilation - it will contain
// all protos in our default zone, but maybe some protos outside (included)
//
// So we need to find more work.
//
// Loops Detection: Not implemented yet; pull requests welcomed
var todo = work.difference(processed);
final depsFuture = () async {
while (todo.isNotEmpty) {
for (var path in todo) {
// something something test for loops
processed.add(path);
work.addAll(await processDeps(path, baseArguments));
}
todo = work.difference(processed);
}
}();
try {
await waitForTask('discover dependencies', depsFuture);
stdout.writeln('compiling ${work.length} protos');
await compileProtos(work, baseArguments);
} finally {
stdout.showCursor();
}
}