OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 /// Helper functionality to make working with IO easier. | 5 /// Helper functionality to make working with IO easier. |
6 library pub.io; | 6 library pub.io; |
7 | 7 |
8 import 'dart:async'; | 8 import 'dart:async'; |
9 import 'dart:collection'; | 9 import 'dart:collection'; |
10 import 'dart:convert'; | 10 import 'dart:convert'; |
(...skipping 445 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
456 /// | 456 /// |
457 /// When an error occurs on [stream], that error is passed to [sink]. If | 457 /// When an error occurs on [stream], that error is passed to [sink]. If |
458 /// [cancelOnError] is true, [Future] will be completed successfully and no | 458 /// [cancelOnError] is true, [Future] will be completed successfully and no |
459 /// more data or errors will be piped from [stream] to [sink]. If | 459 /// more data or errors will be piped from [stream] to [sink]. If |
460 /// [cancelOnError] and [closeSink] are both true, [sink] will then be | 460 /// [cancelOnError] and [closeSink] are both true, [sink] will then be |
461 /// closed. | 461 /// closed. |
462 Future store(Stream stream, EventSink sink, | 462 Future store(Stream stream, EventSink sink, |
463 {bool cancelOnError: true, bool closeSink: true}) { | 463 {bool cancelOnError: true, bool closeSink: true}) { |
464 var completer = new Completer(); | 464 var completer = new Completer(); |
465 stream.listen(sink.add, | 465 stream.listen(sink.add, |
466 onError: (e) { | 466 onError: (e, [stackTrace]) { |
| 467 // TODO(floitsch): Sink.addError without stack trace. |
467 sink.addError(e); | 468 sink.addError(e); |
468 if (cancelOnError) { | 469 if (cancelOnError) { |
469 completer.complete(); | 470 completer.complete(); |
470 if (closeSink) sink.close(); | 471 if (closeSink) sink.close(); |
471 } | 472 } |
472 }, | 473 }, |
473 onDone: () { | 474 onDone: () { |
474 if (closeSink) sink.close(); | 475 if (closeSink) sink.close(); |
475 completer.complete(); | 476 completer.complete(); |
476 }, cancelOnError: cancelOnError); | 477 }, cancelOnError: cancelOnError); |
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
833 const PubProcessResult(this.stdout, this.stderr, this.exitCode); | 834 const PubProcessResult(this.stdout, this.stderr, this.exitCode); |
834 | 835 |
835 bool get success => exitCode == 0; | 836 bool get success => exitCode == 0; |
836 } | 837 } |
837 | 838 |
838 /// Gets a [Uri] for [uri], which can either already be one, or be a [String]. | 839 /// Gets a [Uri] for [uri], which can either already be one, or be a [String]. |
839 Uri _getUri(uri) { | 840 Uri _getUri(uri) { |
840 if (uri is Uri) return uri; | 841 if (uri is Uri) return uri; |
841 return Uri.parse(uri); | 842 return Uri.parse(uri); |
842 } | 843 } |
OLD | NEW |