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: lib/src/io.dart

Issue 1235013002: Remove the timeout for downloading packages. (Closed) Base URL: git@github.com:dart-lang/pub.git@master
Patch Set: Code review changes Created 5 years, 5 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 | « lib/src/http.dart ('k') | lib/src/source/hosted.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/src/io.dart
diff --git a/lib/src/io.dart b/lib/src/io.dart
index d24ede0203bd1b4c4aaebdd722e5bd904515ce3e..2ec22ffc0d1c49cb0cd276fc7d9966ce4a1f6123 100644
--- a/lib/src/io.dart
+++ b/lib/src/io.dart
@@ -829,47 +829,6 @@ _doProcess(Function fn, String executable, List<String> args,
environment: environment);
}
-/// Wraps [input], an asynchronous network operation to provide a timeout.
-///
-/// If [input] completes before [milliseconds] have passed, then the return
-/// value completes in the same way. However, if [milliseconds] pass before
-/// [input] has completed, it completes with a [TimeoutException] with
-/// [description] (which should be a fragment describing the action that timed
-/// out).
-///
-/// [url] is the URL being accessed asynchronously.
-///
-/// Note that timing out will not cancel the asynchronous operation behind
-/// [input].
-Future timeout(Future input, int milliseconds, Uri url, String description) {
- // TODO(nwiez): Replace this with [Future.timeout].
- var completer = new Completer();
- var duration = new Duration(milliseconds: milliseconds);
- var timer = new Timer(duration, () {
- // Include the duration ourselves in the message instead of passing it to
- // TimeoutException since we show nicer output.
- var message = 'Timed out after ${niceDuration(duration)} while '
- '$description.';
-
- if (url.host == "pub.dartlang.org" ||
- url.host == "storage.googleapis.com") {
- message += "\nThis is likely a transient error. Please try again later.";
- }
-
- completer.completeError(new TimeoutException(message), new Chain.current());
- });
- input.then((value) {
- if (completer.isCompleted) return;
- timer.cancel();
- completer.complete(value);
- }).catchError((e, stackTrace) {
- if (completer.isCompleted) return;
- timer.cancel();
- completer.completeError(e, stackTrace);
- });
- return completer.future;
-}
-
/// Creates a temporary directory and passes its path to [fn].
///
/// Once the [Future] returned by [fn] completes, the temporary directory and
@@ -896,13 +855,11 @@ Future<HttpServer> bindServer(String host, int port) {
}
/// Extracts a `.tar.gz` file from [stream] to [destination].
-///
-/// Returns whether or not the extraction was successful.
-Future<bool> extractTarGz(Stream<List<int>> stream, String destination) {
+Future extractTarGz(Stream<List<int>> stream, String destination) async {
log.fine("Extracting .tar.gz stream to $destination.");
if (Platform.operatingSystem == "windows") {
- return _extractTarGzWindows(stream, destination);
+ return await _extractTarGzWindows(stream, destination);
}
var args = ["--extract", "--gunzip", "--directory", destination];
@@ -914,24 +871,24 @@ Future<bool> extractTarGz(Stream<List<int>> stream, String destination) {
args.insert(0, "--warning=no-unknown-keyword");
}
- return startProcess("tar", args).then((process) {
- // Ignore errors on process.std{out,err}. They'll be passed to
- // process.exitCode, and we don't want them being top-levelled by
- // std{out,err}Sink.
- store(process.stdout.handleError((_) {}), stdout, closeSink: false);
- store(process.stderr.handleError((_) {}), stderr, closeSink: false);
- return Future.wait([
- store(stream, process.stdin),
- process.exitCode
- ]);
- }).then((results) {
- var exitCode = results[1];
- if (exitCode != exit_codes.SUCCESS) {
- throw new Exception("Failed to extract .tar.gz stream to $destination "
- "(exit code $exitCode).");
- }
- log.fine("Extracted .tar.gz stream to $destination. Exit code $exitCode.");
- });
+ var process = await startProcess("tar", args);
+
+ // Ignore errors on process.std{out,err}. They'll be passed to
+ // process.exitCode, and we don't want them being top-levelled by
+ // std{out,err}Sink.
+ store(process.stdout.handleError((_) {}), stdout, closeSink: false);
+ store(process.stderr.handleError((_) {}), stderr, closeSink: false);
+ var results = await Future.wait([
+ store(stream, process.stdin),
+ process.exitCode
+ ]);
+
+ var exitCode = results[1];
+ if (exitCode != exit_codes.SUCCESS) {
+ throw new Exception("Failed to extract .tar.gz stream to $destination "
+ "(exit code $exitCode).");
+ }
+ log.fine("Extracted .tar.gz stream to $destination. Exit code $exitCode.");
}
/// Whether to include "--warning=no-unknown-keyword" when invoking tar.
@@ -961,8 +918,7 @@ final String pathTo7zip = (() {
return path.join(dartRepoRoot, 'third_party', '7zip', '7za.exe');
})();
-Future<bool> _extractTarGzWindows(Stream<List<int>> stream,
- String destination) {
+Future _extractTarGzWindows(Stream<List<int>> stream, String destination) {
// TODO(rnystrom): In the repo's history, there is an older implementation of
// this that does everything in memory by piping streams directly together
// instead of writing out temp files. The code is simpler, but unfortunately,
@@ -970,41 +926,41 @@ Future<bool> _extractTarGzWindows(Stream<List<int>> stream,
// read from stdin instead of a file. Consider resurrecting that version if
// we can figure out why it fails.
- return withTempDir((tempDir) {
+ return withTempDir((tempDir) async {
// Write the archive to a temp file.
var dataFile = path.join(tempDir, 'data.tar.gz');
- return createFileFromStream(stream, dataFile).then((_) {
- // 7zip can't unarchive from gzip -> tar -> destination all in one step
- // first we un-gzip it to a tar file.
- // Note: Setting the working directory instead of passing in a full file
- // path because 7zip says "A full path is not allowed here."
- return runProcess(pathTo7zip, ['e', 'data.tar.gz'], workingDir: tempDir);
- }).then((result) {
- if (result.exitCode != exit_codes.SUCCESS) {
- throw new Exception('Could not un-gzip (exit code ${result.exitCode}). '
- 'Error:\n'
- '${result.stdout.join("\n")}\n'
- '${result.stderr.join("\n")}');
- }
+ await createFileFromStream(stream, dataFile);
+
+ // 7zip can't unarchive from gzip -> tar -> destination all in one step
+ // first we un-gzip it to a tar file.
+ // Note: Setting the working directory instead of passing in a full file
+ // path because 7zip says "A full path is not allowed here."
+ var unzipResult = await runProcess(pathTo7zip, ['e', 'data.tar.gz'],
+ workingDir: tempDir);
+
+ if (unzipResult.exitCode != exit_codes.SUCCESS) {
+ throw new Exception(
+ 'Could not un-gzip (exit code ${unzipResult.exitCode}). Error:\n'
+ '${unzipResult.stdout.join("\n")}\n'
+ '${unzipResult.stderr.join("\n")}');
+ }
- // Find the tar file we just created since we don't know its name.
- var tarFile = listDir(tempDir).firstWhere(
- (file) => path.extension(file) == '.tar',
- orElse: () {
- throw new FormatException('The gzip file did not contain a tar file.');
- });
-
- // Untar the archive into the destination directory.
- return runProcess(pathTo7zip, ['x', tarFile], workingDir: destination);
- }).then((result) {
- if (result.exitCode != exit_codes.SUCCESS) {
- throw new Exception('Could not un-tar (exit code ${result.exitCode}). '
- 'Error:\n'
- '${result.stdout.join("\n")}\n'
- '${result.stderr.join("\n")}');
- }
- return true;
+ // Find the tar file we just created since we don't know its name.
+ var tarFile = listDir(tempDir).firstWhere(
+ (file) => path.extension(file) == '.tar',
+ orElse: () {
+ throw new FormatException('The gzip file did not contain a tar file.');
});
+
+ // Untar the archive into the destination directory.
+ var untarResult = await runProcess(pathTo7zip, ['x', tarFile],
+ workingDir: destination);
+ if (untarResult.exitCode != exit_codes.SUCCESS) {
+ throw new Exception(
+ 'Could not un-tar (exit code ${untarResult.exitCode}). Error:\n'
+ '${untarResult.stdout.join("\n")}\n'
+ '${untarResult.stderr.join("\n")}');
+ }
});
}
« no previous file with comments | « lib/src/http.dart ('k') | lib/src/source/hosted.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698