Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(16)

Unified Diff: tools/apps/update_homebrew/bin/update_homebrew.dart

Issue 1156473004: update_homebrew: use async/await (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: nits Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | tools/apps/update_homebrew/pubspec.yaml » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/apps/update_homebrew/bin/update_homebrew.dart
diff --git a/tools/apps/update_homebrew/bin/update_homebrew.dart b/tools/apps/update_homebrew/bin/update_homebrew.dart
index 5e72f9ca04d3179aeb3f8a9cd6e82b6e3268eedd..dfdf41fff81c18931e754654978db7f5dea23f6c 100644
--- a/tools/apps/update_homebrew/bin/update_homebrew.dart
+++ b/tools/apps/update_homebrew/bin/update_homebrew.dart
@@ -4,59 +4,74 @@
library update_homebrew;
-import 'dart:io';
-import 'dart:convert';
import 'dart:async';
-import 'package:http/http.dart' as http;
+import 'dart:convert';
+import 'dart:io';
+
import 'package:args/args.dart';
-import 'package:googleapis/storage/v1.dart' as storage;
import 'package:googleapis/common/common.dart' show DownloadOptions, Media;
+import 'package:googleapis/storage/v1.dart' as storage;
+import 'package:http/http.dart' as http;
+import 'package:stack_trace/stack_trace.dart';
-String repository; // The path to the temporary git checkout of dart-homebrew.
-Map gitEnvironment; // Pass a wrapper script for SSH to git in the environment.
+String repository; // The path to the temporary git checkout of dart-homebrew.
+Map gitEnvironment; // Pass a wrapper script for SSH to git in the environment.
-final CHANNELS = ['dev', 'stable'];
+const GITHUB_REPO = 'dart-lang/homebrew-dart';
-final SDK_FILES = ['sdk/dartsdk-macos-x64-release.zip',
- 'sdk/dartsdk-macos-ia32-release.zip' ];
-final DARTIUM_FILES = ['dartium/dartium-macos-ia32-release.zip',
- 'dartium/content_shell-macos-ia32-release.zip'];
-final FILES = []..addAll(SDK_FILES)..addAll(DARTIUM_FILES);
+const CHANNELS = const ['dev', 'stable'];
+
+const SDK_FILES = const [
+ 'sdk/dartsdk-macos-x64-release.zip',
+ 'sdk/dartsdk-macos-ia32-release.zip'
+];
+
+const DARTIUM_FILES = const [
+ 'dartium/dartium-macos-ia32-release.zip',
+ 'dartium/content_shell-macos-ia32-release.zip'
+];
+final FILES = []..addAll(SDK_FILES)..addAll(DARTIUM_FILES);
-Future<String> getHash256(String channel, int revision, String download) {
+Future<String> getHash256(String channel, int revision, String download) async {
var client = new http.Client();
- var api = new storage.StorageApi(client);
- return
- api.objects.get('dart-archive',
- 'channels/$channel/release/$revision/$download.sha256sum',
- downloadOptions: DownloadOptions.FullMedia)
- .then((Media media) => ASCII.decodeStream(media.stream))
- .then((hashLine) => new RegExp('[0-9a-fA-F]*').stringMatch(hashLine))
- .whenComplete(client.close);
+ try {
+ var api = new storage.StorageApi(client);
+ var media = await api.objects.get('dart-archive',
+ 'channels/$channel/release/$revision/$download.sha256sum',
+ downloadOptions: DownloadOptions.FullMedia);
+
+ var hashLine = await ASCII.decodeStream(media.stream);
+ return new RegExp('[0-9a-fA-F]*').stringMatch(hashLine);
+ } finally {
+ client.close();
+ }
}
-Future<String> getVersion(String channel, int revision) {
+Future<String> getVersion(String channel, int revision) async {
var client = new http.Client();
- var api = new storage.StorageApi(client);
- return api.objects.get('dart-archive',
- 'channels/$channel/release/$revision/VERSION',
- downloadOptions: DownloadOptions.FullMedia)
- .then((Media media) => JSON.fuse(ASCII).decoder.bind(media.stream).first)
- .then((versionObject) => versionObject['version'])
- .whenComplete(client.close);
+ try {
+ var api = new storage.StorageApi(client);
+
+ var media = await api.objects.get(
+ 'dart-archive', 'channels/$channel/release/$revision/VERSION',
+ downloadOptions: DownloadOptions.FullMedia);
+
+ var versionObject = await JSON.fuse(ASCII).decoder.bind(media.stream).first;
+ return versionObject['version'];
+ } finally {
+ client.close();
+ }
}
-Future setCurrentRevisions(Map revisions) {
- return new File('$repository/dart.rb')
- .readAsLines()
- .then((lines) {
- for (var channel in CHANNELS) {
- final regExp = new RegExp('channels/$channel/release/(\\d*)/sdk');
- revisions[channel] =
- regExp.firstMatch(lines.firstWhere(regExp.hasMatch)).group(1);
- }
- });
+Future setCurrentRevisions(Map revisions) async {
+ var lines = await (new File('$repository/dart.rb')).readAsLines();
+
+ for (var channel in CHANNELS) {
+ final regExp = new RegExp('channels/$channel/release/(\\d*)/sdk');
+ revisions[channel] =
+ regExp.firstMatch(lines.firstWhere(regExp.hasMatch)).group(1);
+ }
}
Future setHashes(Map revisions, Map hashes) {
@@ -72,39 +87,30 @@ Future setHashes(Map revisions, Map hashes) {
return Future.wait(waitOn);
}
-Future writeHomebrewInfo(String channel, int revision) {
+Future writeHomebrewInfo(String channel, int revision) async {
var revisions = {};
var hashes = {};
- var devVersion;
- var stableVersion;
- return setCurrentRevisions(revisions).then((_) {
- if (revisions[channel] == revision) {
- print("Channel $channel is already at revision $revision in homebrew.");
- exit(0);
- }
- revisions[channel] = revision;
- return setHashes(revisions, hashes);
- }).then((_) {
- return getVersion('dev', revisions['dev']);
- }).then((version) {
- devVersion = version;
- return getVersion('stable', revisions['stable']);
- }).then((version) {
- stableVersion = version;
- return (new File('$repository/dartium.rb').openWrite()
- ..write(DartiumFile(revisions, hashes, devVersion, stableVersion)))
- .close();
- }).then((_) {
- return (new File('$repository/dart.rb').openWrite()
- ..write(DartFile(revisions, hashes, devVersion, stableVersion)))
- .close();
- });
+
+ await setCurrentRevisions(revisions);
+
+ if (revisions[channel] == revision) {
+ print("Channel $channel is already at revision $revision in homebrew.");
+ exit(0);
+ }
+ revisions[channel] = revision;
+ await setHashes(revisions, hashes);
+ var devVersion = await getVersion('dev', revisions['dev']);
+
+ var stableVersion = await getVersion('stable', revisions['stable']);
+
+ await (new File('$repository/dartium.rb').openWrite()
+ ..write(DartiumFile(revisions, hashes, devVersion, stableVersion))).close();
+ await (new File('$repository/dart.rb').openWrite()
+ ..write(DartFile(revisions, hashes, devVersion, stableVersion))).close();
}
-String DartiumFile(Map revisions,
- Map hashes,
- String devVersion,
- String stableVersion) {
+String DartiumFile(
+ Map revisions, Map hashes, String devVersion, String stableVersion) {
final urlBase = 'https://storage.googleapis.com/dart-archive/channels';
final dartiumFile = 'dartium/dartium-macos-ia32-release.zip';
final contentShellFile = 'dartium/content_shell-macos-ia32-release.zip';
@@ -167,10 +173,8 @@ end
''';
}
-String DartFile(Map revisions,
- Map hashes,
- String devVersion,
- String stableVersion) {
+String DartFile(
+ Map revisions, Map hashes, String devVersion, String stableVersion) {
final urlBase = 'https://storage.googleapis.com/dart-archive/channels';
final x64File = 'sdk/dartsdk-macos-x64-release.zip';
final ia32File = 'sdk/dartsdk-macos-ia32-release.zip';
@@ -226,42 +230,54 @@ end
''';
}
-Future runGit(List<String> args) {
+Future runGit(List<String> args) async {
print("git ${args.join(' ')}");
- return Process.run('git', args, workingDirectory: repository,
- environment: gitEnvironment)
- .then((result) {
- print(result.stdout);
- print(result.stderr);
- });
+
+ var result = await Process.run('git', args,
+ workingDirectory: repository, environment: gitEnvironment);
+
+ print(result.stdout);
+ print(result.stderr);
}
-main(args) {
+main(args) async {
final parser = new ArgParser()
- ..addOption('revision', abbr: 'r')
- ..addOption('channel', abbr: 'c', allowed: ['dev', 'stable'])
- ..addOption('key', abbr: 'k');
+ ..addOption('revision', abbr: 'r')
+ ..addOption('channel', abbr: 'c', allowed: ['dev', 'stable'])
+ ..addOption('key', abbr: 'k');
final options = parser.parse(args);
final revision = options['revision'];
final channel = options['channel'];
- if ([revision, channel, options['key']].contains(null)) {
+ final key = options['key'];
+ if ([revision, channel, key].contains(null)) {
print("Usage: update_homebrew.dart -r revision -c channel -k ssh_key\n"
- " ssh_key should allow pushes to dart-lang/homebrew-dart on github");
+ " ssh_key should allow pushes to ${GITHUB_REPO} on github");
return;
}
final sshWrapper = Platform.script.resolve('ssh_with_key').toFilePath();
- gitEnvironment = {'GIT_SSH': sshWrapper,
- 'SSH_KEY_PATH': options['key']};
-
- Directory.systemTemp.createTemp('update_homebrew')
- .then((tempDir) {
- repository = tempDir.path;
- })
- .then((_) => runGit(
- ['clone', 'git@github.com:dart-lang/homebrew-dart.git', '.']))
- .then((_) => writeHomebrewInfo(channel, revision))
- .then((_) => runGit(['commit', '-a', '-m',
- 'Updated $channel branch to revision $revision']))
- .then((_) => runGit(['push']))
- .whenComplete(() => new Directory(repository).delete(recursive: true));
+ gitEnvironment = {'GIT_SSH': sshWrapper, 'SSH_KEY_PATH': key};
+
+ Chain.capture(() async {
+ var tempDir = await Directory.systemTemp.createTemp('update_homebrew');
+
+ try {
+ repository = tempDir.path;
+
+ await runGit(['clone', 'git@github.com:${GITHUB_REPO}.git', '.']);
+ await writeHomebrewInfo(channel, revision);
+ await runGit([
+ 'commit',
+ '-a',
+ '-m',
+ 'Updated $channel branch to revision $revision'
+ ]);
+
+ await runGit(['push']);
+ } finally {
+ await tempDir.delete(recursive: true);
+ }
+ }, onError: (error, chain) {
+ print(error);
+ print(chain.terse);
+ });
}
« no previous file with comments | « no previous file | tools/apps/update_homebrew/pubspec.yaml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698