| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 io; | 6 library io; |
| 7 | 7 |
| 8 import 'dart:async'; | 8 import 'dart:async'; |
| 9 import 'dart:io'; | 9 import 'dart:io'; |
| 10 import 'dart:isolate'; | 10 import 'dart:isolate'; |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 181 } | 181 } |
| 182 } | 182 } |
| 183 }, | 183 }, |
| 184 onDone: () { | 184 onDone: () { |
| 185 // TODO(rnystrom): May need to sort here if it turns out | 185 // TODO(rnystrom): May need to sort here if it turns out |
| 186 // onDir and onFile aren't guaranteed to be called in a | 186 // onDir and onFile aren't guaranteed to be called in a |
| 187 // certain order. So far, they seem to. | 187 // certain order. So far, they seem to. |
| 188 log.fine("Listed directory $dir:\n${contents.join('\n')}"); | 188 log.fine("Listed directory $dir:\n${contents.join('\n')}"); |
| 189 completer.complete(contents); | 189 completer.complete(contents); |
| 190 }, | 190 }, |
| 191 onError: (error) => completer.completeError(error, stackTrace)); | 191 onError: (error) => completer.completeError(error)); |
| 192 | 192 |
| 193 return completer.future.then((contents) { | 193 return completer.future.then((contents) { |
| 194 return Future.wait(children).then((childContents) { | 194 return Future.wait(children).then((childContents) { |
| 195 contents.addAll(flatten(childContents)); | 195 contents.addAll(flatten(childContents)); |
| 196 return contents; | 196 return contents; |
| 197 }); | 197 }); |
| 198 }); | 198 }); |
| 199 } | 199 } |
| 200 | 200 |
| 201 return doList(dir, new Set<String>()); | 201 return doList(dir, new Set<String>()); |
| (...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 598 completer.completeError(new TimeoutException( | 598 completer.completeError(new TimeoutException( |
| 599 'Timed out while $description.')); | 599 'Timed out while $description.')); |
| 600 }); | 600 }); |
| 601 input.then((value) { | 601 input.then((value) { |
| 602 if (completed) return; | 602 if (completed) return; |
| 603 timer.cancel(); | 603 timer.cancel(); |
| 604 completer.complete(value); | 604 completer.complete(value); |
| 605 }).catchError((e) { | 605 }).catchError((e) { |
| 606 if (completed) return; | 606 if (completed) return; |
| 607 timer.cancel(); | 607 timer.cancel(); |
| 608 completer.completeError(e.error, e.stackTrace); | 608 completer.completeError(e); |
| 609 }); | 609 }); |
| 610 return completer.future; | 610 return completer.future; |
| 611 } | 611 } |
| 612 | 612 |
| 613 /// Creates a temporary directory and passes its path to [fn]. Once the [Future] | 613 /// Creates a temporary directory and passes its path to [fn]. Once the [Future] |
| 614 /// returned by [fn] completes, the temporary directory and all its contents | 614 /// returned by [fn] completes, the temporary directory and all its contents |
| 615 /// will be deleted. | 615 /// will be deleted. |
| 616 /// | 616 /// |
| 617 /// Returns a future that completes to the value that the future returned from | 617 /// Returns a future that completes to the value that the future returned from |
| 618 /// [fn] completes to. | 618 /// [fn] completes to. |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 709 }); | 709 }); |
| 710 }); | 710 }); |
| 711 } | 711 } |
| 712 | 712 |
| 713 /// Create a .tar.gz archive from a list of entries. Each entry can be a | 713 /// Create a .tar.gz archive from a list of entries. Each entry can be a |
| 714 /// [String], [Directory], or [File] object. The root of the archive is | 714 /// [String], [Directory], or [File] object. The root of the archive is |
| 715 /// considered to be [baseDir], which defaults to the current working directory. | 715 /// considered to be [baseDir], which defaults to the current working directory. |
| 716 /// Returns a [ByteStream] that will emit the contents of the archive. | 716 /// Returns a [ByteStream] that will emit the contents of the archive. |
| 717 ByteStream createTarGz(List contents, {baseDir}) { | 717 ByteStream createTarGz(List contents, {baseDir}) { |
| 718 var buffer = new StringBuffer(); | 718 var buffer = new StringBuffer(); |
| 719 buffer.add('Creating .tag.gz stream containing:\n'); | 719 buffer.write('Creating .tag.gz stream containing:\n'); |
| 720 contents.forEach((file) => buffer.add('$file\n')); | 720 contents.forEach((file) => buffer.write('$file\n')); |
| 721 log.fine(buffer.toString()); | 721 log.fine(buffer.toString()); |
| 722 | 722 |
| 723 var controller = new StreamController<List<int>>(); | 723 var controller = new StreamController<List<int>>(); |
| 724 | 724 |
| 725 if (baseDir == null) baseDir = path.current; | 725 if (baseDir == null) baseDir = path.current; |
| 726 baseDir = path.absolute(baseDir); | 726 baseDir = path.absolute(baseDir); |
| 727 contents = contents.map((entry) { | 727 contents = contents.map((entry) { |
| 728 entry = path.absolute(entry); | 728 entry = path.absolute(entry); |
| 729 if (!isBeneath(entry, baseDir)) { | 729 if (!isBeneath(entry, baseDir)) { |
| 730 throw 'Entry $entry is not inside $baseDir.'; | 730 throw 'Entry $entry is not inside $baseDir.'; |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 804 const PubProcessResult(this.stdout, this.stderr, this.exitCode); | 804 const PubProcessResult(this.stdout, this.stderr, this.exitCode); |
| 805 | 805 |
| 806 bool get success => exitCode == 0; | 806 bool get success => exitCode == 0; |
| 807 } | 807 } |
| 808 | 808 |
| 809 /// Gets a [Uri] for [uri], which can either already be one, or be a [String]. | 809 /// Gets a [Uri] for [uri], which can either already be one, or be a [String]. |
| 810 Uri _getUri(uri) { | 810 Uri _getUri(uri) { |
| 811 if (uri is Uri) return uri; | 811 if (uri is Uri) return uri; |
| 812 return Uri.parse(uri); | 812 return Uri.parse(uri); |
| 813 } | 813 } |
| OLD | NEW |