doWork function

Future<void> doWork(
  1. Set<String> processed,
  2. List<String> baseArguments
)

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();
  }
}