
* Remove the workaround that pinned args to v0.13.6 This reverts most of the changes in commit 6331b6c8b5d964ec0dbf2cd9bb84c60c650a0878 * throw exception if exit code is not an integer * rework command infrastructure to throw ToolExit when non-zero exitCode * convert commands to return Future<Null> * cleanup remaining commands to use throwToolExit for non-zero exit code * remove isUnusual exception message * add type annotations for updated args package
43 lines
1.2 KiB
Dart
43 lines
1.2 KiB
Dart
// Copyright 2015 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
import 'dart:async';
|
|
import 'dart:io';
|
|
|
|
import '../globals.dart';
|
|
import 'common.dart';
|
|
|
|
const int kNetworkProblemExitCode = 50;
|
|
|
|
/// Download a file from the given URL and return the bytes.
|
|
Future<List<int>> fetchUrl(Uri url) async {
|
|
printTrace('Downloading $url.');
|
|
|
|
HttpClient httpClient = new HttpClient();
|
|
HttpClientRequest request = await httpClient.getUrl(url);
|
|
HttpClientResponse response = await request.close();
|
|
|
|
printTrace('Received response statusCode=${response.statusCode}');
|
|
if (response.statusCode != 200) {
|
|
throwToolExit(
|
|
'Download failed: $url\n'
|
|
' because (${response.statusCode}) ${response.reasonPhrase}',
|
|
exitCode: kNetworkProblemExitCode,
|
|
);
|
|
}
|
|
|
|
try {
|
|
BytesBuilder responseBody = new BytesBuilder(copy: false);
|
|
await for (List<int> chunk in response)
|
|
responseBody.add(chunk);
|
|
|
|
return responseBody.takeBytes();
|
|
} on IOException catch (e) {
|
|
throw new ToolExit(
|
|
'Download failed: $url\n $e',
|
|
exitCode: kNetworkProblemExitCode,
|
|
);
|
|
}
|
|
}
|