OLD | NEW |
| (Empty) |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | |
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. | |
4 | |
5 library descriptor.tar; | |
6 | |
7 import 'dart:io'; | |
8 import 'dart:async'; | |
9 | |
10 import '../../../../pkg/pathos/lib/path.dart' as path; | |
11 import '../../../../pkg/scheduled_test/lib/scheduled_test.dart'; | |
12 import '../../../../pkg/scheduled_test/lib/descriptor.dart'; | |
13 | |
14 import '../../../pub/io.dart'; | |
15 import '../../../pub/utils.dart'; | |
16 | |
17 /// Describes a tar file and its contents. | |
18 class TarFileDescriptor extends DirectoryDescriptor { | |
19 TarFileDescriptor(String name, List<Descriptor> contents) | |
20 : super(name, contents); | |
21 | |
22 /// Creates the files and directories within this tar file, then archives | |
23 /// them, compresses them, and saves the result to [parentDir]. | |
24 Future<String> create([String parent]) => schedule(() { | |
25 if (parent == null) parent = defaultRoot; | |
26 return withTempDir((tempDir) { | |
27 return Future.wait(contents.map((entry) { | |
28 return entry.create(tempDir); | |
29 })).then((_) { | |
30 return listDir(tempDir, recursive: true, includeHiddenFiles: true); | |
31 }).then((createdContents) { | |
32 return createTarGz(createdContents, baseDir: tempDir).toBytes(); | |
33 }).then((bytes) { | |
34 var file = path.join(parent, name); | |
35 writeBinaryFile(file, bytes); | |
36 return file; | |
37 }); | |
38 }); | |
39 }, 'creating tar file:\n${describe()}'); | |
40 | |
41 /// Validates that the `.tar.gz` file at [path] contains the expected | |
42 /// contents. | |
43 Future validate([String parent]) { | |
44 throw "TODO(nweiz): implement this"; | |
45 } | |
46 | |
47 Stream<List<int>> read() { | |
48 return new Stream<List<int>>.fromFuture(withTempDir((tempDir) { | |
49 return create(tempDir).then((_) => | |
50 readBinaryFile(path.join(tempDir, name))); | |
51 })); | |
52 } | |
53 } | |
OLD | NEW |