| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 package_config.packages_file; | 5 library package_config.packages_file; |
| 6 | 6 |
| 7 import "package:charcode/ascii.dart"; | 7 import "package:charcode/ascii.dart"; |
| 8 import "src/util.dart" show isValidPackageName; | 8 import "src/util.dart" show isValidPackageName; |
| 9 | 9 |
| 10 /// Parses a `.packages` file into a map from package name to base URI. | 10 /// Parses a `.packages` file into a map from package name to base URI. |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 73 | 73 |
| 74 /// Writes the mapping to a [StringSink]. | 74 /// Writes the mapping to a [StringSink]. |
| 75 /// | 75 /// |
| 76 /// If [comment] is provided, the output will contain this comment | 76 /// If [comment] is provided, the output will contain this comment |
| 77 /// with `# ` in front of each line. | 77 /// with `# ` in front of each line. |
| 78 /// Lines are defined as ending in line feed (`'\n'`). If the final | 78 /// Lines are defined as ending in line feed (`'\n'`). If the final |
| 79 /// line of the comment doesn't end in a line feed, one will be added. | 79 /// line of the comment doesn't end in a line feed, one will be added. |
| 80 /// | 80 /// |
| 81 /// If [baseUri] is provided, package locations will be made relative | 81 /// If [baseUri] is provided, package locations will be made relative |
| 82 /// to the base URI, if possible, before writing. | 82 /// to the base URI, if possible, before writing. |
| 83 /// |
| 84 /// All the keys of [packageMapping] must be valid package names, |
| 85 /// and the values must be URIs that do not have the `package:` scheme. |
| 83 void write(StringSink output, Map<String, Uri> packageMapping, | 86 void write(StringSink output, Map<String, Uri> packageMapping, |
| 84 {Uri baseUri, String comment}) { | 87 {Uri baseUri, String comment}) { |
| 85 if (baseUri != null && !baseUri.isAbsolute) { | 88 if (baseUri != null && !baseUri.isAbsolute) { |
| 86 throw new ArgumentError.value(baseUri, "baseUri", "Must be absolute"); | 89 throw new ArgumentError.value(baseUri, "baseUri", "Must be absolute"); |
| 87 } | 90 } |
| 88 | 91 |
| 89 if (comment != null) { | 92 if (comment != null) { |
| 90 var lines = comment.split('\n'); | 93 var lines = comment.split('\n'); |
| 91 if (lines.last.isEmpty) lines.removeLast(); | 94 if (lines.last.isEmpty) lines.removeLast(); |
| 92 for (var commentLine in lines) { | 95 for (var commentLine in lines) { |
| 93 output.write('# '); | 96 output.write('# '); |
| 94 output.writeln(commentLine); | 97 output.writeln(commentLine); |
| 95 } | 98 } |
| 96 } else { | 99 } else { |
| 97 output.write("# generated by package:package_config at "); | 100 output.write("# generated by package:package_config at "); |
| 98 output.write(new DateTime.now()); | 101 output.write(new DateTime.now()); |
| 99 output.writeln(); | 102 output.writeln(); |
| 100 } | 103 } |
| 101 | 104 |
| 102 packageMapping.forEach((String packageName, Uri uri) { | 105 packageMapping.forEach((String packageName, Uri uri) { |
| 103 // Validate packageName. | 106 // Validate packageName. |
| 104 if (!isValidPackageName(packageName)) { | 107 if (!isValidPackageName(packageName)) { |
| 105 throw new ArgumentError('"$packageName" is not a valid package name'); | 108 throw new ArgumentError('"$packageName" is not a valid package name'); |
| 106 } | 109 } |
| 110 if (uri.scheme == "package") { |
| 111 throw new ArgumentError.value( |
| 112 "Package location must not be a package: URI", uri); |
| 113 } |
| 107 output.write(packageName); | 114 output.write(packageName); |
| 108 output.write(':'); | 115 output.write(':'); |
| 109 // If baseUri provided, make uri relative. | 116 // If baseUri provided, make uri relative. |
| 110 if (baseUri != null) { | 117 if (baseUri != null) { |
| 111 uri = _relativize(uri, baseUri); | 118 uri = _relativize(uri, baseUri); |
| 112 } | 119 } |
| 113 output.write(uri); | 120 output.write(uri); |
| 114 if (!uri.path.endsWith('/')) { | 121 if (!uri.path.endsWith('/')) { |
| 115 output.write('/'); | 122 output.write('/'); |
| 116 } | 123 } |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 174 } else if (index > 0) { | 181 } else if (index > 0) { |
| 175 return new Uri( | 182 return new Uri( |
| 176 path: '../' * (base.length - index) + target.skip(index).join('/')); | 183 path: '../' * (base.length - index) + target.skip(index).join('/')); |
| 177 } else { | 184 } else { |
| 178 return uri; | 185 return uri; |
| 179 } | 186 } |
| 180 } | 187 } |
| 181 | 188 |
| 182 // TODO: inline to uri.normalizePath() when we move to 1.11 | 189 // TODO: inline to uri.normalizePath() when we move to 1.11 |
| 183 Uri _normalizePath(Uri uri) => new Uri().resolveUri(uri); | 190 Uri _normalizePath(Uri uri) => new Uri().resolveUri(uri); |
| OLD | NEW |