| // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| // 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. |
| |
| library descriptor.tar; |
| |
| import 'dart:async'; |
| |
| import 'package:path/path.dart' as path; |
| import 'package:scheduled_test/scheduled_test.dart'; |
| import 'package:scheduled_test/descriptor.dart'; |
| |
| import '../../lib/src/io.dart'; |
| |
| /// Describes a tar file and its contents. |
| class TarFileDescriptor extends DirectoryDescriptor |
| implements ReadableDescriptor { |
| TarFileDescriptor(String name, List<Descriptor> contents) |
| : super(name, contents); |
| |
| /// Creates the files and directories within this tar file, then archives |
| /// them, compresses them, and saves the result to [parentDir]. |
| Future<String> create([String parent]) => schedule(() { |
| if (parent == null) parent = defaultRoot; |
| return withTempDir((tempDir) { |
| return Future.wait(contents.map((entry) { |
| return entry.create(tempDir); |
| })).then((_) { |
| var createdContents = listDir(tempDir, |
| recursive: true, |
| includeHidden: true); |
| return createTarGz(createdContents, baseDir: tempDir).toBytes(); |
| }).then((bytes) { |
| var file = path.join(parent, name); |
| writeBinaryFile(file, bytes); |
| return file; |
| }); |
| }); |
| }, 'creating tar file:\n${describe()}'); |
| |
| /// Validates that the `.tar.gz` file at [path] contains the expected |
| /// contents. |
| Future validate([String parent]) { |
| throw new UnimplementedError("TODO(nweiz): implement this"); |
| } |
| |
| Stream<List<int>> read() { |
| return new Stream<List<int>>.fromFuture(withTempDir((tempDir) { |
| return create(tempDir).then((_) => |
| readBinaryFile(path.join(tempDir, name))); |
| })); |
| } |
| } |