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 /** | 5 /** |
6 * Helper functionality to make working with IO easier. | 6 * Helper functionality to make working with IO easier. |
7 */ | 7 */ |
8 #library('io'); | 8 #library('io'); |
9 | 9 |
10 #import('dart:io'); | 10 #import('dart:io'); |
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
273 args = ['/c', 'mklink', '/j', to, from]; | 273 args = ['/c', 'mklink', '/j', to, from]; |
274 } | 274 } |
275 | 275 |
276 return runProcess(command, args).transform((result) { | 276 return runProcess(command, args).transform((result) { |
277 // TODO(rnystrom): Check exit code and output? | 277 // TODO(rnystrom): Check exit code and output? |
278 return new File(to); | 278 return new File(to); |
279 }); | 279 }); |
280 } | 280 } |
281 | 281 |
282 /** | 282 /** |
283 * Creates a new symlink that creates an alias from the package [from] to [to], | |
284 * both of which can be a [String], [File], or [Directory]. Returns a [Future] | |
285 * which completes to the symlink file (i.e. [to]). | |
286 * | |
287 * Unlike [createSymlink], this has heuristics to detect if [from] is using | |
288 * the old or new style of package layout. If it's using the new style, then | |
289 * it will create a symlink to the "lib" directory contained inside that | |
290 * package directory. Otherwise, it just symlinks to the package directory | |
291 * itself. | |
292 */ | |
293 // TODO(rnystrom): Remove this when old style packages are no longer supported. | |
294 // See: http://code.google.com/p/dart/issues/detail?id=4964. | |
295 Future<File> createPackageSymlink(String name, from, to, | |
nweiz
2012/09/11 21:07:47
Can't you infer the name from "from"?
Bob Nystrom
2012/09/11 21:39:01
I could, but every callsite knew the name so I fig
| |
296 [bool isSelfLink = false]) { | |
297 // If from contains any Dart files at the top level (aside from build.dart) | |
298 // we assume that means it's an old style package. | |
299 return listDir(from).chain((contents) { | |
300 var isOldStyle = contents.some( | |
301 (file) => file.endsWith('.dart') && basename(file) != 'build.dart'); | |
302 | |
303 if (isOldStyle) { | |
304 if (isSelfLink) { | |
305 printError('Warning: Package "$name" is using a deprecated layout.'); | |
306 printError('See http://www.dartlang.org/docs/pub-package-manager/' | |
307 'package-layout.html for details.'); | |
308 | |
309 // Do not create self-links on old style packages. | |
310 return new Future.immediate(to); | |
311 } else { | |
312 return createSymlink(from, to); | |
313 } | |
314 } | |
315 | |
316 // It's a new style package, so symlink to the 'lib' directory. But only | |
317 // if the package actually *has* one. Otherwise, we won't create a | |
318 // symlink at all. | |
319 from = join(from, 'lib'); | |
320 return dirExists(from).chain((exists) { | |
321 if (exists) { | |
322 return createSymlink(from, to); | |
323 } else { | |
324 printError('Warning: Package "$name" does not have a "lib" directory.'); | |
325 return new Future.immediate(to); | |
326 } | |
327 }); | |
328 }); | |
329 } | |
330 | |
331 /** | |
283 * Given [entry] which may be a [String], [File], or [Directory] relative to | 332 * Given [entry] which may be a [String], [File], or [Directory] relative to |
284 * the current working directory, returns its full canonicalized path. | 333 * the current working directory, returns its full canonicalized path. |
285 */ | 334 */ |
286 // TODO(rnystrom): Should this be async? | 335 // TODO(rnystrom): Should this be async? |
287 String getFullPath(entry) => new File(_getPath(entry)).fullPathSync(); | 336 String getFullPath(entry) => new File(_getPath(entry)).fullPathSync(); |
288 | 337 |
289 // TODO(nweiz): make this configurable | 338 // TODO(nweiz): make this configurable |
290 /** | 339 /** |
291 * The amount of time in milliseconds to allow HTTP requests before assuming | 340 * The amount of time in milliseconds to allow HTTP requests before assuming |
292 * they've failed. | 341 * they've failed. |
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
574 return new Directory(entry); | 623 return new Directory(entry); |
575 } | 624 } |
576 | 625 |
577 /** | 626 /** |
578 * Gets a [Uri] for [uri], which can either already be one, or be a [String]. | 627 * Gets a [Uri] for [uri], which can either already be one, or be a [String]. |
579 */ | 628 */ |
580 Uri _getUri(uri) { | 629 Uri _getUri(uri) { |
581 if (uri is Uri) return uri; | 630 if (uri is Uri) return uri; |
582 return new Uri.fromString(uri); | 631 return new Uri.fromString(uri); |
583 } | 632 } |
OLD | NEW |