OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 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. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library source; | 5 library source; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 |
| 9 import '../../pkg/path/lib/path.dart' as path; |
| 10 |
8 import 'io.dart'; | 11 import 'io.dart'; |
9 import 'package.dart'; | 12 import 'package.dart'; |
10 import 'pubspec.dart'; | 13 import 'pubspec.dart'; |
11 import 'system_cache.dart'; | 14 import 'system_cache.dart'; |
12 import 'utils.dart'; | 15 import 'utils.dart'; |
13 import 'version.dart'; | 16 import 'version.dart'; |
14 | 17 |
15 /// A source from which to install packages. | 18 /// A source from which to install packages. |
16 /// | 19 /// |
17 /// Each source has many packages that it looks up using [PackageId]s. The | 20 /// Each source has many packages that it looks up using [PackageId]s. The |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
98 Future<bool> install(PackageId id, String path) { | 101 Future<bool> install(PackageId id, String path) { |
99 throw "Either install or installToSystemCache must be implemented for " | 102 throw "Either install or installToSystemCache must be implemented for " |
100 "source $name."; | 103 "source $name."; |
101 } | 104 } |
102 | 105 |
103 /// Installs the package identified by [id] to the system cache. This is only | 106 /// Installs the package identified by [id] to the system cache. This is only |
104 /// called for sources with [shouldCache] set to true. | 107 /// called for sources with [shouldCache] set to true. |
105 /// | 108 /// |
106 /// By default, this uses [systemCacheDirectory] and [install]. | 109 /// By default, this uses [systemCacheDirectory] and [install]. |
107 Future<Package> installToSystemCache(PackageId id) { | 110 Future<Package> installToSystemCache(PackageId id) { |
108 var path; | 111 var packageDir; |
109 return systemCacheDirectory(id).then((p) { | 112 return systemCacheDirectory(id).then((p) { |
110 path = p; | 113 packageDir = p; |
111 if (dirExists(path)) return true; | 114 if (dirExists(packageDir)) return true; |
112 ensureDir(dirname(path)); | 115 ensureDir(path.dirname(packageDir)); |
113 return install(id, path); | 116 return install(id, packageDir); |
114 }).then((found) { | 117 }).then((found) { |
115 if (!found) throw 'Package $id not found.'; | 118 if (!found) throw 'Package $id not found.'; |
116 return new Package.load(id.name, path, systemCache.sources); | 119 return new Package.load(id.name, packageDir, systemCache.sources); |
117 }); | 120 }); |
118 } | 121 } |
119 | 122 |
120 /// Returns the directory in the system cache that the package identified by | 123 /// Returns the directory in the system cache that the package identified by |
121 /// [id] should be installed to. This should return a path to a subdirectory | 124 /// [id] should be installed to. This should return a path to a subdirectory |
122 /// of [systemCacheRoot]. | 125 /// of [systemCacheRoot]. |
123 /// | 126 /// |
124 /// This doesn't need to be implemented if [shouldCache] is false. | 127 /// This doesn't need to be implemented if [shouldCache] is false. |
125 Future<String> systemCacheDirectory(PackageId id) { | 128 Future<String> systemCacheDirectory(PackageId id) { |
126 return new Future.immediateError( | 129 return new Future.immediateError( |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
163 /// according to [validateDescription], although it must still be serializable | 166 /// according to [validateDescription], although it must still be serializable |
164 /// to JSON and YAML. It must also be equal to [id] according to | 167 /// to JSON and YAML. It must also be equal to [id] according to |
165 /// [descriptionsEqual]. | 168 /// [descriptionsEqual]. |
166 /// | 169 /// |
167 /// By default, this just returns [id]. | 170 /// By default, this just returns [id]. |
168 Future<PackageId> resolveId(PackageId id) => new Future.immediate(id); | 171 Future<PackageId> resolveId(PackageId id) => new Future.immediate(id); |
169 | 172 |
170 /// Returns the source's name. | 173 /// Returns the source's name. |
171 String toString() => name; | 174 String toString() => name; |
172 } | 175 } |
OLD | NEW |