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

Unified Diff: utils/pub/io.dart

Issue 12225085: Make createTempDir() synchronous. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 10 months 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
« no previous file with comments | « utils/pub/hosted_source.dart ('k') | utils/pub/system_cache.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: utils/pub/io.dart
diff --git a/utils/pub/io.dart b/utils/pub/io.dart
index 1ab274c3626447853ccefe0cab4382c116263f69..d3fa00bba44ceaa34cef3145fbd41c442bf17dc7 100644
--- a/utils/pub/io.dart
+++ b/utils/pub/io.dart
@@ -157,10 +157,10 @@ Directory ensureDir(path) {
/// 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());
+Directory createTempDir([dir = '']) {
+ var tempDir = _getDirectory(dir).createTempSync();
+ log.io("Created temp directory ${tempDir.path}");
+ return tempDir;
}
/// Asynchronously recursively deletes [dir], which can be a [String] or a
@@ -722,14 +722,15 @@ Future timeout(Future input, int milliseconds, String description) {
/// Creates a temporary directory and passes its path to [fn]. Once the [Future]
/// returned by [fn] completes, the temporary directory and all its contents
/// will be deleted.
+///
+/// Returns a future that completes to the value that the future returned from
+/// [fn] completes to.
Future withTempDir(Future fn(String path)) {
- var tempDir;
- return createTempDir().then((dir) {
- tempDir = dir;
- return fn(tempDir.path);
- }).whenComplete(() {
- log.fine('Cleaning up temp directory ${tempDir.path}.');
- return deleteDir(tempDir);
+ return defer(() {
+ var tempDir = createTempDir();
+ return fn(tempDir.path).whenComplete(() {
+ return deleteDir(tempDir);
+ });
});
}
@@ -779,51 +780,44 @@ Future<bool> _extractTarGzWindows(Stream<List<int>> stream,
var pathTo7zip = '../../third_party/7zip/7za.exe';
var command = relativeToPub(pathTo7zip);
- var tempDir;
-
- // TODO(rnystrom): Use withTempDir().
- return createTempDir().then((temp) {
+ return withTempDir((tempDir) {
// Write the archive to a temp file.
- tempDir = temp;
- return createFileFromStream(stream, join(tempDir, 'data.tar.gz'));
- }).then((_) {
- // 7zip can't unarchive from gzip -> tar -> destination all in one step
- // first we un-gzip it to a tar file.
- // Note: Setting the working directory instead of passing in a full file
- // path because 7zip says "A full path is not allowed here."
- return runProcess(command, ['e', 'data.tar.gz'], workingDir: tempDir);
- }).then((result) {
- if (result.exitCode != 0) {
- throw 'Could not un-gzip (exit code ${result.exitCode}). Error:\n'
- '${Strings.join(result.stdout, "\n")}\n'
- '${Strings.join(result.stderr, "\n")}';
- }
- // Find the tar file we just created since we don't know its name.
- return listDir(tempDir);
- }).then((files) {
- var tarFile;
- for (var file in files) {
- if (path.extension(file) == '.tar') {
- tarFile = file;
- break;
+ return createFileFromStream(stream, join(tempDir, 'data.tar.gz')).then((_) {
+ // 7zip can't unarchive from gzip -> tar -> destination all in one step
+ // first we un-gzip it to a tar file.
+ // Note: Setting the working directory instead of passing in a full file
+ // path because 7zip says "A full path is not allowed here."
+ return runProcess(command, ['e', 'data.tar.gz'], workingDir: tempDir);
+ }).then((result) {
+ if (result.exitCode != 0) {
+ throw 'Could not un-gzip (exit code ${result.exitCode}). Error:\n'
+ '${Strings.join(result.stdout, "\n")}\n'
+ '${Strings.join(result.stderr, "\n")}';
+ }
+ // Find the tar file we just created since we don't know its name.
+ return listDir(tempDir);
+ }).then((files) {
+ var tarFile;
+ for (var file in files) {
+ if (path.extension(file) == '.tar') {
+ tarFile = file;
+ break;
+ }
}
- }
-
- if (tarFile == null) throw 'The gzip file did not contain a tar file.';
- // Untar the archive into the destination directory.
- return runProcess(command, ['x', tarFile], workingDir: destination);
- }).then((result) {
- if (result.exitCode != 0) {
- throw 'Could not un-tar (exit code ${result.exitCode}). Error:\n'
- '${Strings.join(result.stdout, "\n")}\n'
- '${Strings.join(result.stderr, "\n")}';
- }
+ if (tarFile == null) throw 'The gzip file did not contain a tar file.';
- log.fine('Clean up 7zip temp directory ${tempDir.path}.');
- // TODO(rnystrom): Should also delete this if anything fails.
- return deleteDir(tempDir);
- }).then((_) => true);
+ // Untar the archive into the destination directory.
+ return runProcess(command, ['x', tarFile], workingDir: destination);
+ }).then((result) {
+ if (result.exitCode != 0) {
+ throw 'Could not un-tar (exit code ${result.exitCode}). Error:\n'
+ '${Strings.join(result.stdout, "\n")}\n'
+ '${Strings.join(result.stderr, "\n")}';
+ }
+ return true;
+ });
+ });
}
/// Create a .tar.gz archive from a list of entries. Each entry can be a
« no previous file with comments | « utils/pub/hosted_source.dart ('k') | utils/pub/system_cache.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698