Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(317)

Side by Side Diff: lib/packages_file.dart

Issue 1227283002: Don't allow package:-URIs as package locations when creating .packages file. (Closed) Base URL: https://github.com/dart-lang/package_config.git@master
Patch Set: Fix unrelated typo. Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « lib/discovery.dart ('k') | pubspec.yaml » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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);
OLDNEW
« no previous file with comments | « lib/discovery.dart ('k') | pubspec.yaml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698