Index: utils/pub/io.dart |
diff --git a/utils/pub/io.dart b/utils/pub/io.dart |
index 28a9cf2b2dd557578bf6e3a76149e178cc32e3b8..5bb01cdc7c785b1431aad2198996220735c67c35 100644 |
--- a/utils/pub/io.dart |
+++ b/utils/pub/io.dart |
@@ -131,12 +131,14 @@ Future<File> createFileFromStream(InputStream stream, path) { |
log.io("Creating $path from stream."); |
var completer = new Completer<File>(); |
+ var completed = false; |
var file = new File(path); |
var outputStream = file.openOutputStream(); |
stream.pipe(outputStream); |
outputStream.onClosed = () { |
log.fine("Created $path from stream."); |
+ completed = true; |
completer.complete(file); |
}; |
@@ -149,8 +151,9 @@ Future<File> createFileFromStream(InputStream stream, path) { |
} |
completeError(error) { |
- if (!completer.isComplete) { |
- completer.completeException(error, stackTrace); |
+ if (!completed) { |
+ completed = true; |
+ completer.completeError(error, stackTrace); |
} else { |
log.fine("Got error after stream was closed: $error"); |
} |
@@ -263,7 +266,7 @@ Future<List<String>> listDir(dir, |
} |
var children = []; |
- lister.onError = (error) => completer.completeException(error, stackTrace); |
+ lister.onError = (error) => completer.completeError(error, stackTrace); |
lister.onDir = (file) { |
if (!includeHiddenFiles && basename(file).startsWith('.')) return; |
file = join(dir, basename(file)); |
@@ -487,7 +490,7 @@ Future<String> readLine([StringInputStream stream]) { |
stream.onError = (e) { |
removeCallbacks(); |
- completer.completeException(e, stackTrace); |
+ completer.completeError(e, stackTrace); |
}; |
return completer.future; |
@@ -535,7 +538,7 @@ Future<List<int>> consumeInputStream(InputStream stream) { |
var buffer = <int>[]; |
stream.onClosed = () => completer.complete(buffer); |
stream.onData = () => buffer.addAll(stream.read()); |
- stream.onError = (e) => completer.completeException(e, stackTrace); |
+ stream.onError = (e) => completer.completeError(e, stackTrace); |
return completer.future; |
} |
@@ -555,7 +558,7 @@ Future<String> consumeStringInputStream(StringInputStream stream) { |
var buffer = new StringBuffer(); |
stream.onClosed = () => completer.complete(buffer.toString()); |
stream.onData = () => buffer.add(stream.read()); |
- stream.onError = (e) => completer.completeException(e, stackTrace); |
+ stream.onError = (e) => completer.completeError(e, stackTrace); |
return completer.future; |
} |
@@ -671,7 +674,7 @@ Future timeout(Future input, int milliseconds, String description) { |
bool completed = false; |
var completer = new Completer(); |
var timer = new Timer(milliseconds, (_) { |
- completer = true; |
+ completed = true; |
completer.completeError(new TimeoutException( |
'Timed out while $description.')); |
}); |