Index: utils/pub/io.dart |
diff --git a/utils/pub/io.dart b/utils/pub/io.dart |
index db049c4b3a0e3881bb66caa12277ac0262fea5bf..ab0b1efe892a198c497f6c59a7b4e7f3d53242eb 100644 |
--- a/utils/pub/io.dart |
+++ b/utils/pub/io.dart |
@@ -2,9 +2,7 @@ |
// for details. All rights reserved. Use of this source code is governed by a |
// BSD-style license that can be found in the LICENSE file. |
-/** |
- * Helper functionality to make working with IO easier. |
- */ |
+/// Helper functionality to make working with IO easier. |
library io; |
import 'dart:io'; |
@@ -23,11 +21,9 @@ String _gitCommandCache; |
final NEWLINE_PATTERN = new RegExp("\r\n?|\n\r?"); |
-/** |
- * Joins a number of path string parts into a single path. Handles |
- * platform-specific path separators. Parts can be [String], [Directory], or |
- * [File] objects. |
- */ |
+/// Joins a number of path string parts into a single path. Handles |
+/// platform-specific path separators. Parts can be [String], [Directory], or |
+/// [File] objects. |
String join(part1, [part2, part3, part4, part5, part6, part7, part8]) { |
var parts = [part1, part2, part3, part4, part5, part6, part7, part8] |
.map((part) => part == null ? null : _getPath(part)); |
@@ -57,11 +53,9 @@ bool isBeneath(entry, dir) { |
/// Returns the path to [target] from [base]. |
String relativeTo(target, base) => path.relative(target, from: base); |
-/** |
- * Asynchronously determines if [path], which can be a [String] file path, a |
- * [File], or a [Directory] exists on the file system. Returns a [Future] that |
- * completes with the result. |
- */ |
+/// Asynchronously determines if [path], which can be a [String] file path, a |
+/// [File], or a [Directory] exists on the file system. Returns a [Future] that |
+/// completes with the result. |
Future<bool> exists(path) { |
path = _getPath(path); |
return Futures.wait([fileExists(path), dirExists(path)]).transform((results) { |
@@ -69,11 +63,9 @@ Future<bool> exists(path) { |
}); |
} |
-/** |
- * Asynchronously determines if [file], which can be a [String] file path or a |
- * [File], exists on the file system. Returns a [Future] that completes with |
- * the result. |
- */ |
+/// Asynchronously determines if [file], which can be a [String] file path or a |
+/// [File], exists on the file system. Returns a [Future] that completes with |
+/// the result. |
Future<bool> fileExists(file) { |
var path = _getPath(file); |
return log.ioAsync("Seeing if file $path exists.", |
@@ -81,10 +73,8 @@ Future<bool> fileExists(file) { |
(exists) => "File $path ${exists ? 'exists' : 'does not exist'}."); |
} |
-/** |
- * Reads the contents of the text file [file], which can either be a [String] or |
- * a [File]. |
- */ |
+/// Reads the contents of the text file [file], which can either be a [String] |
+/// or a [File]. |
Future<String> readTextFile(file) { |
var path = _getPath(file); |
return log.ioAsync("Reading text file $path.", |
@@ -99,12 +89,10 @@ Future<String> readTextFile(file) { |
}); |
} |
-/** |
- * Creates [file] (which can either be a [String] or a [File]), and writes |
- * [contents] to it. Completes when the file is written and closed. |
- * |
- * If [dontLogContents] is true, the contents of the file will never be logged. |
- */ |
+/// Creates [file] (which can either be a [String] or a [File]), and writes |
+/// [contents] to it. Completes when the file is written and closed. |
+/// |
+/// If [dontLogContents] is true, the contents of the file will never be logged. |
Future<File> writeTextFile(file, String contents, {dontLogContents: false}) { |
var path = _getPath(file); |
file = new File(path); |
@@ -125,10 +113,8 @@ Future<File> writeTextFile(file, String contents, {dontLogContents: false}) { |
}); |
} |
-/** |
- * Asynchronously deletes [file], which can be a [String] or a [File]. Returns a |
- * [Future] that completes when the deletion is done. |
- */ |
+/// Asynchronously deletes [file], which can be a [String] or a [File]. Returns |
+/// a [Future] that completes when the deletion is done. |
Future<File> deleteFile(file) { |
var path = _getPath(file); |
return log.ioAsync("delete file $path", |
@@ -175,21 +161,17 @@ Future<File> createFileFromStream(InputStream stream, path) { |
return completer.future; |
} |
-/** |
- * Creates a directory [dir]. Returns a [Future] that completes when the |
- * directory is created. |
- */ |
+/// Creates a directory [dir]. Returns a [Future] that completes when the |
+/// directory is created. |
Future<Directory> createDir(dir) { |
dir = _getDirectory(dir); |
return log.ioAsync("create directory ${dir.path}", |
dir.create()); |
} |
-/** |
- * Ensures that [path] and all its parent directories exist. If they don't |
- * exist, creates them. Returns a [Future] that completes once all the |
- * directories are created. |
- */ |
+/// Ensures that [path] and all its parent directories exist. If they don't |
+/// exist, creates them. Returns a [Future] that completes once all the |
+/// directories are created. |
Future<Directory> ensureDir(path) { |
path = _getPath(path); |
log.fine("Ensuring directory $path exists."); |
@@ -222,22 +204,18 @@ Future<Directory> ensureDir(path) { |
}); |
} |
-/** |
- * Creates a temp directory whose name will be based on [dir] with a unique |
- * suffix appended to it. If [dir] is not provided, a temp directory will be |
- * created in a platform-dependent temporary location. Returns a [Future] that |
- * completes when the directory is created. |
- */ |
+/// Creates a temp directory whose name will be based on [dir] with a unique |
+/// suffix appended to it. If [dir] is not provided, a temp directory will be |
+/// created in a platform-dependent temporary location. Returns a [Future] that |
+/// completes when the directory is created. |
Future<Directory> createTempDir([dir = '']) { |
dir = _getDirectory(dir); |
return log.ioAsync("create temp directory ${dir.path}", |
dir.createTemp()); |
} |
-/** |
- * Asynchronously recursively deletes [dir], which can be a [String] or a |
- * [Directory]. Returns a [Future] that completes when the deletion is done. |
- */ |
+/// Asynchronously recursively deletes [dir], which can be a [String] or a |
+/// [Directory]. Returns a [Future] that completes when the deletion is done. |
Future<Directory> deleteDir(dir) { |
dir = _getDirectory(dir); |
@@ -315,11 +293,9 @@ Future<List<String>> listDir(dir, |
return doList(_getDirectory(dir), new Set<String>()); |
} |
-/** |
- * Asynchronously determines if [dir], which can be a [String] directory path |
- * or a [Directory], exists on the file system. Returns a [Future] that |
- * completes with the result. |
- */ |
+/// Asynchronously determines if [dir], which can be a [String] directory path |
+/// or a [Directory], exists on the file system. Returns a [Future] that |
+/// completes with the result. |
Future<bool> dirExists(dir) { |
dir = _getDirectory(dir); |
return log.ioAsync("Seeing if directory ${dir.path} exists.", |
@@ -328,11 +304,9 @@ Future<bool> dirExists(dir) { |
"${exists ? 'exists' : 'does not exist'}."); |
} |
-/** |
- * "Cleans" [dir]. If that directory already exists, it will be deleted. Then a |
- * new empty directory will be created. Returns a [Future] that completes when |
- * the new clean directory is created. |
- */ |
+/// "Cleans" [dir]. If that directory already exists, it will be deleted. Then a |
+/// new empty directory will be created. Returns a [Future] that completes when |
+/// the new clean directory is created. |
Future<Directory> cleanDir(dir) { |
return dirExists(dir).chain((exists) { |
if (exists) { |
@@ -387,11 +361,9 @@ Future _attemptRetryable(Future callback()) { |
return makeAttempt(null); |
} |
-/** |
- * Creates a new symlink that creates an alias from [from] to [to], both of |
- * which can be a [String], [File], or [Directory]. Returns a [Future] which |
- * completes to the symlink file (i.e. [to]). |
- */ |
+/// Creates a new symlink that creates an alias from [from] to [to], both of |
+/// which can be a [String], [File], or [Directory]. Returns a [Future] which |
+/// completes to the symlink file (i.e. [to]). |
Future<File> createSymlink(from, to) { |
from = _getPath(from); |
to = _getPath(to); |
@@ -417,13 +389,11 @@ Future<File> createSymlink(from, to) { |
}); |
} |
-/** |
- * Creates a new symlink that creates an alias from the `lib` directory of |
- * package [from] to [to], both of which can be a [String], [File], or |
- * [Directory]. Returns a [Future] which completes to the symlink file (i.e. |
- * [to]). If [from] does not have a `lib` directory, this shows a warning if |
- * appropriate and then does nothing. |
- */ |
+/// Creates a new symlink that creates an alias from the `lib` directory of |
+/// package [from] to [to], both of which can be a [String], [File], or |
+/// [Directory]. Returns a [Future] which completes to the symlink file (i.e. |
+/// [to]). If [from] does not have a `lib` directory, this shows a warning if |
+/// appropriate and then does nothing. |
Future<File> createPackageSymlink(String name, from, to, |
{bool isSelfLink: false}) { |
// See if the package has a "lib" directory. |
@@ -524,11 +494,9 @@ Future<String> readLine([StringInputStream stream]) { |
return completer.future; |
} |
-/** |
- * Takes all input from [source] and writes it to [sink]. |
- * |
- * Returns a future that completes when [source] is closed. |
- */ |
+/// Takes all input from [source] and writes it to [sink]. |
+/// |
+/// Returns a future that completes when [source] is closed. |
Future pipeInputToInput(InputStream source, ListInputStream sink) { |
var completer = new Completer(); |
source.onClosed = () { |
@@ -552,9 +520,7 @@ Future pipeInputToInput(InputStream source, ListInputStream sink) { |
return completer.future; |
} |
-/** |
- * Buffers all input from an InputStream and returns it as a future. |
- */ |
+/// Buffers all input from an InputStream and returns it as a future. |
Future<List<int>> consumeInputStream(InputStream stream) { |
if (stream.closed) return new Future.immediate(<int>[]); |
@@ -694,16 +660,14 @@ Future _doProcess(Function fn, String executable, List<String> args, workingDir, |
return fn(executable, args, options); |
} |
-/** |
- * Wraps [input] 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). |
- * |
- * Note that timing out will not cancel the asynchronous operation behind |
- * [input]. |
- */ |
+/// Wraps [input] 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). |
+/// |
+/// Note that timing out will not cancel the asynchronous operation behind |
+/// [input]. |
Future timeout(Future input, int milliseconds, String description) { |
var completer = new Completer(); |
var timer = new Timer(milliseconds, (_) { |
@@ -803,10 +767,8 @@ Future<bool> _tryGitCommand(String command) { |
return completer.future; |
} |
-/** |
- * Extracts a `.tar.gz` file from [stream] to [destination], which can be a |
- * directory or a path. Returns whether or not the extraction was successful. |
- */ |
+/// Extracts a `.tar.gz` file from [stream] to [destination], which can be a |
+/// directory or a path. Returns whether or not the extraction was successful. |
Future<bool> extractTarGz(InputStream stream, destination) { |
destination = _getPath(destination); |
@@ -972,9 +934,7 @@ InputStream createTarGz(List contents, {baseDir}) { |
return stream; |
} |
-/** |
- * Exception thrown when an operation times out. |
- */ |
+/// Exception thrown when an operation times out. |
class TimeoutException implements Exception { |
final String message; |
@@ -983,9 +943,7 @@ class TimeoutException implements Exception { |
String toString() => message; |
} |
-/** |
- * Contains the results of invoking a [Process] and waiting for it to complete. |
- */ |
+/// Contains the results of invoking a [Process] and waiting for it to complete. |
class PubProcessResult { |
final List<String> stdout; |
final List<String> stderr; |
@@ -996,11 +954,9 @@ class PubProcessResult { |
bool get success => exitCode == 0; |
} |
-/** |
- * Gets the path string for [entry], which can either already be a path string, |
- * or be a [File] or [Directory]. Allows working generically with "file-like" |
- * objects. |
- */ |
+/// Gets the path string for [entry], which can either already be a path string, |
+/// or be a [File] or [Directory]. Allows working generically with "file-like" |
+/// objects. |
String _getPath(entry) { |
if (entry is String) return entry; |
if (entry is File) return entry.name; |
@@ -1008,18 +964,14 @@ String _getPath(entry) { |
throw 'Entry $entry is not a supported type.'; |
} |
-/** |
- * Gets a [Directory] for [entry], which can either already be one, or be a |
- * [String]. |
- */ |
+/// Gets a [Directory] for [entry], which can either already be one, or be a |
+/// [String]. |
Directory _getDirectory(entry) { |
if (entry is Directory) return entry; |
return new Directory(entry); |
} |
-/** |
- * Gets a [Uri] for [uri], which can either already be one, or be a [String]. |
- */ |
+/// Gets a [Uri] for [uri], which can either already be one, or be a [String]. |
Uri _getUri(uri) { |
if (uri is Uri) return uri; |
return new Uri.fromString(uri); |