Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(115)

Unified Diff: sdk/lib/_internal/pub/lib/src/io.dart

Issue 113453005: Add stack chain support to pub. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years 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
Index: sdk/lib/_internal/pub/lib/src/io.dart
diff --git a/sdk/lib/_internal/pub/lib/src/io.dart b/sdk/lib/_internal/pub/lib/src/io.dart
index bc6ffd1edfb1b7ea2c14cb2e84411247e211f05e..440938d562babd2eecf6556d6a967b76927a1dd6 100644
--- a/sdk/lib/_internal/pub/lib/src/io.dart
+++ b/sdk/lib/_internal/pub/lib/src/io.dart
@@ -190,7 +190,7 @@ Future<String> createFileFromStream(Stream<List<int>> stream, String file) {
log.io("Creating $file from stream.");
return _descriptorPool.withResource(() {
- return stream.pipe(new File(file).openWrite()).then((_) {
+ return Chain.track(stream.pipe(new File(file).openWrite())).then((_) {
log.fine("Created $file from stream.");
return file;
});
@@ -404,7 +404,7 @@ String get repoRoot {
/// A line-by-line stream of standard input.
final Stream<String> stdinLines = streamToLines(
- new ByteStream(stdin).toStringStream());
+ new ByteStream(Chain.track(stdin)).toStringStream());
/// Displays a message and reads a yes/no confirmation from the user. Returns
/// a [Future] that completes to `true` if the user confirms or `false` if they
@@ -435,8 +435,12 @@ Future drainStream(Stream stream) {
/// This returns a Future that will never complete, since the program will have
/// exited already. This is useful to prevent Future chains from proceeding
/// after you've decided to exit.
-Future flushThenExit(int status) =>
- Future.wait([stdout.close(), stderr.close()]).then((_) => exit(status));
+Future flushThenExit(int status) {
+ return Future.wait([
+ Chain.track(stdout.close()),
+ Chain.track(stderr.close())
+ ]).then((_) => exit(status));
+}
/// Returns a [EventSink] that pipes all data to [consumer] and a [Future] that
/// will succeed when [EventSink] is closed or fail with any errors that occur
@@ -586,15 +590,16 @@ class PubProcess {
var pair = consumerToSink(process.stdin);
_stdin = pair.first;
- _stdinClosed = errorGroup.registerFuture(pair.last);
+ _stdinClosed = errorGroup.registerFuture(Chain.track(pair.last));
_stdout = new ByteStream(
- errorGroup.registerStream(process.stdout));
+ errorGroup.registerStream(Chain.track(process.stdout)));
_stderr = new ByteStream(
- errorGroup.registerStream(process.stderr));
+ errorGroup.registerStream(Chain.track(process.stderr)));
var exitCodeCompleter = new Completer();
- _exitCode = errorGroup.registerFuture(exitCodeCompleter.future);
+ _exitCode = errorGroup.registerFuture(
+ Chain.track(exitCodeCompleter.future));
_process.exitCode.then((code) => exitCodeCompleter.complete(code));
}
@@ -620,10 +625,10 @@ Future _doProcess(Function fn, String executable, List<String> args,
log.process(executable, args);
- return fn(executable,
- args,
- workingDirectory: workingDir,
- environment: environment);
+ return Chain.track(fn(executable,
+ args,
+ workingDirectory: workingDir,
+ environment: environment));
}
/// Wraps [input] to provide a timeout. If [input] completes before
@@ -641,7 +646,7 @@ Future timeout(Future input, int milliseconds, String description) {
var timer = new Timer(duration, () {
completer.completeError(new TimeoutException(
'Timed out while $description.', duration),
- new Trace.current());
+ new Chain.current());
});
input.then((value) {
if (completer.isCompleted) return;
@@ -663,9 +668,9 @@ Future timeout(Future input, int milliseconds, String description) {
/// Returns a future that completes to the value that the future returned from
/// [fn] completes to.
Future withTempDir(Future fn(String path)) {
- return new Future.sync(() {
+ return syncFuture(() {
var tempDir = createSystemTempDir();
- return new Future.sync(() => fn(tempDir))
+ return syncFuture(() => fn(tempDir))
.whenComplete(() => deleteEntry(tempDir));
});
}
@@ -757,14 +762,12 @@ Future<bool> _extractTarGzWindows(Stream<List<int>> stream,
/// considered to be [baseDir], which defaults to the current working directory.
/// Returns a [ByteStream] that will emit the contents of the archive.
ByteStream createTarGz(List contents, {baseDir}) {
- return new ByteStream(futureStream(new Future.sync(() {
+ return new ByteStream(futureStream(syncFuture(() {
var buffer = new StringBuffer();
buffer.write('Creating .tag.gz stream containing:\n');
contents.forEach((file) => buffer.write('$file\n'));
log.fine(buffer.toString());
- var controller = new StreamController<List<int>>(sync: true);
-
if (baseDir == null) baseDir = path.current;
baseDir = path.absolute(baseDir);
contents = contents.map((entry) {
@@ -788,7 +791,7 @@ ByteStream createTarGz(List contents, {baseDir}) {
// Don't use [withTempDir] here because we don't want to delete the temp
// directory until the returned stream has closed.
var tempDir = createSystemTempDir();
- return new Future.sync(() {
+ return syncFuture(() {
// Create the tar file.
var tarFile = path.join(tempDir, "intermediate.tar");
var args = ["a", "-w$baseDir", tarFile];

Powered by Google App Engine
This is Rietveld 408576698