downloadProtocGenDart function
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.');
}
}
}