downloadProtocGenDart function

Future<String> downloadProtocGenDart(
  1. String protocGenDartVersion
)

Implementation

Future<String> downloadProtocGenDart(String protocGenDartVersion) async {
  final Directory protocGenDartTmpDir = Directory(
      path.join(_builderTmpDir, "protoc_gen_dart", "v$protocGenDartVersion"));

  final protocGenDart = File(
    path.join(protocGenDartTmpDir.path, "bin",
        Platform.isWindows ? "protoc-gen-dart.bat" : "protoc-gen-dart"),
  );

  if (protocGenDart.existsSync()) {
    return protocGenDart.path;
  } else {
    if (!protocGenDartTmpDir.existsSync()) {
      await protocGenDartTmpDir.create(recursive: true);
    }

    Uri url = Uri.parse(
        "https://storage.googleapis.com/dartlang-pub-public-packages/packages/protoc_plugin-$protocGenDartVersion.tar.gz");
    final gzData = GZipDecoder().decodeBytes(await http.readBytes(url));
    final archive = TarDecoder().decodeBytes(gzData);
    for (final file in archive) {
      if (file.isFile) {
        final outFile = File(path.join(protocGenDartTmpDir.path, file.name));
        await outFile.create(recursive: true);
        await outFile.writeAsBytes(file.content);
      }
    }

    if (protocGenDart.existsSync()) {
      if (!Platform.isWindows) {
        await ProcessUtil.runCommand("chmod", ["+x", protocGenDart.path]);
      }
      await ProcessUtil.runCommand("dart", ["pub", "get"],
          workingDirectory: protocGenDartTmpDir.path);
      return protocGenDart.path;
    } else {
      throw AssertionError('protoc-gen-dart is not exist.');
    }
  }
}