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

Side by Side Diff: utils/pub/pubspec.dart

Issue 12280019: Revert "Support relative paths in path dependencies." (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 10 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 | Annotate | Revision Log
« no previous file with comments | « utils/pub/path_source.dart ('k') | utils/pub/sdk_source.dart » ('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) 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 pubspec; 5 library pubspec;
6 6
7 import '../../pkg/yaml/lib/yaml.dart'; 7 import '../../pkg/yaml/lib/yaml.dart';
8 import '../../pkg/path/lib/path.dart' as path; 8 import '../../pkg/path/lib/path.dart' as path;
9 9
10 import 'io.dart'; 10 import 'io.dart';
(...skipping 20 matching lines...) Expand all
31 /// All pubspec fields. This includes the fields from which other properties 31 /// All pubspec fields. This includes the fields from which other properties
32 /// are derived. 32 /// are derived.
33 final Map<String, Object> fields; 33 final Map<String, Object> fields;
34 34
35 /// Loads the pubspec for a package [name] located in [packageDir]. 35 /// Loads the pubspec for a package [name] located in [packageDir].
36 factory Pubspec.load(String name, String packageDir, SourceRegistry sources) { 36 factory Pubspec.load(String name, String packageDir, SourceRegistry sources) {
37 var pubspecPath = path.join(packageDir, 'pubspec.yaml'); 37 var pubspecPath = path.join(packageDir, 'pubspec.yaml');
38 if (!fileExists(pubspecPath)) throw new PubspecNotFoundException(name); 38 if (!fileExists(pubspecPath)) throw new PubspecNotFoundException(name);
39 39
40 try { 40 try {
41 var pubspec = new Pubspec.parse(pubspecPath, readTextFile(pubspecPath), 41 var pubspec = new Pubspec.parse(readTextFile(pubspecPath), sources);
42 sources);
43 42
44 if (pubspec.name == null) { 43 if (pubspec.name == null) {
45 throw new PubspecHasNoNameException(name); 44 throw new PubspecHasNoNameException(name);
46 } 45 }
47 46
48 if (name != null && pubspec.name != name) { 47 if (name != null && pubspec.name != name) {
49 throw new PubspecNameMismatchException(name, pubspec.name); 48 throw new PubspecNameMismatchException(name, pubspec.name);
50 } 49 }
51 50
52 return pubspec; 51 return pubspec;
(...skipping 10 matching lines...) Expand all
63 : name = null, 62 : name = null,
64 version = Version.none, 63 version = Version.none,
65 dependencies = <PackageRef>[], 64 dependencies = <PackageRef>[],
66 environment = new PubspecEnvironment(), 65 environment = new PubspecEnvironment(),
67 fields = {}; 66 fields = {};
68 67
69 /// Whether or not the pubspec has no contents. 68 /// Whether or not the pubspec has no contents.
70 bool get isEmpty => 69 bool get isEmpty =>
71 name == null && version == Version.none && dependencies.isEmpty; 70 name == null && version == Version.none && dependencies.isEmpty;
72 71
73 /// Parses the pubspec stored at [filePath] whose text is [contents]. If the 72 // TODO(rnystrom): Make this a static method to match corelib.
74 /// pubspec doesn't define version for itself, it defaults to [Version.none]. 73 /// Parses the pubspec whose text is [contents]. If the pubspec doesn't define
75 /// [filePath] may be `null` if the pubspec is not on the user's local 74 /// version for itself, it defaults to [Version.none].
76 /// file system. 75 factory Pubspec.parse(String contents, SourceRegistry sources) {
77 factory Pubspec.parse(String filePath, String contents,
78 SourceRegistry sources) {
79 var name = null; 76 var name = null;
80 var version = Version.none; 77 var version = Version.none;
81 78
82 if (contents.trim() == '') return new Pubspec.empty(); 79 if (contents.trim() == '') return new Pubspec.empty();
83 80
84 var parsedPubspec = loadYaml(contents); 81 var parsedPubspec = loadYaml(contents);
85 if (parsedPubspec == null) return new Pubspec.empty(); 82 if (parsedPubspec == null) return new Pubspec.empty();
86 83
87 if (parsedPubspec is! Map) { 84 if (parsedPubspec is! Map) {
88 throw new FormatException('The pubspec must be a YAML mapping.'); 85 throw new FormatException('The pubspec must be a YAML mapping.');
89 } 86 }
90 87
91 if (parsedPubspec.containsKey('name')) { 88 if (parsedPubspec.containsKey('name')) {
92 name = parsedPubspec['name']; 89 name = parsedPubspec['name'];
93 if (name is! String) { 90 if (name is! String) {
94 throw new FormatException( 91 throw new FormatException(
95 'The pubspec "name" field should be a string, but was "$name".'); 92 'The pubspec "name" field should be a string, but was "$name".');
96 } 93 }
97 } 94 }
98 95
99 if (parsedPubspec.containsKey('version')) { 96 if (parsedPubspec.containsKey('version')) {
100 version = new Version.parse(parsedPubspec['version']); 97 version = new Version.parse(parsedPubspec['version']);
101 } 98 }
102 99
103 var dependencies = _parseDependencies(filePath, sources, 100 var dependencies = _parseDependencies(sources,
104 parsedPubspec['dependencies']); 101 parsedPubspec['dependencies']);
105 102
106 var environmentYaml = parsedPubspec['environment']; 103 var environmentYaml = parsedPubspec['environment'];
107 var sdkConstraint = VersionConstraint.any; 104 var sdkConstraint = VersionConstraint.any;
108 if (environmentYaml != null) { 105 if (environmentYaml != null) {
109 if (environmentYaml is! Map) { 106 if (environmentYaml is! Map) {
110 throw new FormatException( 107 throw new FormatException(
111 'The pubspec "environment" field should be a map, but was ' 108 'The pubspec "environment" field should be a map, but was '
112 '"$environmentYaml".'); 109 '"$environmentYaml".');
113 } 110 }
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 } 180 }
184 181
185 var goodScheme = new RegExp(r'^https?:'); 182 var goodScheme = new RegExp(r'^https?:');
186 if (!goodScheme.hasMatch(url)) { 183 if (!goodScheme.hasMatch(url)) {
187 throw new FormatException( 184 throw new FormatException(
188 'The "$field" field should be an "http:" or "https:" URL, but ' 185 'The "$field" field should be an "http:" or "https:" URL, but '
189 'was "$url".'); 186 'was "$url".');
190 } 187 }
191 } 188 }
192 189
193 List<PackageRef> _parseDependencies(String pubspecPath, SourceRegistry sources, 190 List<PackageRef> _parseDependencies(SourceRegistry sources, yaml) {
194 yaml) {
195 var dependencies = <PackageRef>[]; 191 var dependencies = <PackageRef>[];
196 192
197 // Allow an empty dependencies key. 193 // Allow an empty dependencies key.
198 if (yaml == null) return dependencies; 194 if (yaml == null) return dependencies;
199 195
200 if (yaml is! Map || yaml.keys.any((e) => e is! String)) { 196 if (yaml is! Map || yaml.keys.any((e) => e is! String)) {
201 throw new FormatException( 197 throw new FormatException(
202 'The pubspec dependencies should be a map of package names, but ' 198 'The pubspec dependencies should be a map of package names, but '
203 'was ${yaml}.'); 199 'was ${yaml}.');
204 } 200 }
(...skipping 25 matching lines...) Expand all
230 'Source name $sourceName should be a string.'); 226 'Source name $sourceName should be a string.');
231 } 227 }
232 228
233 source = sources[sourceName]; 229 source = sources[sourceName];
234 description = spec[sourceName]; 230 description = spec[sourceName];
235 } else { 231 } else {
236 throw new FormatException( 232 throw new FormatException(
237 'Dependency specification $spec should be a string or a mapping.'); 233 'Dependency specification $spec should be a string or a mapping.');
238 } 234 }
239 235
240 description = source.parseDescription(pubspecPath, description, 236 source.validateDescription(description, fromLockFile: false);
241 fromLockFile: false);
242 237
243 dependencies.add(new PackageRef( 238 dependencies.add(new PackageRef(
244 name, source, versionConstraint, description)); 239 name, source, versionConstraint, description));
245 }); 240 });
246 241
247 return dependencies; 242 return dependencies;
248 } 243 }
249 244
250 /// The environment-related metadata in the pubspec. Corresponds to the data 245 /// The environment-related metadata in the pubspec. Corresponds to the data
251 /// under the "environment:" key in the pubspec. 246 /// under the "environment:" key in the pubspec.
252 class PubspecEnvironment { 247 class PubspecEnvironment {
253 /// The version constraint specifying which SDK versions this package works 248 /// The version constraint specifying which SDK versions this package works
254 /// with. 249 /// with.
255 final VersionConstraint sdkVersion; 250 final VersionConstraint sdkVersion;
256 251
257 PubspecEnvironment([VersionConstraint sdk]) 252 PubspecEnvironment([VersionConstraint sdk])
258 : sdkVersion = sdk != null ? sdk : VersionConstraint.any; 253 : sdkVersion = sdk != null ? sdk : VersionConstraint.any;
259 } 254 }
OLDNEW
« no previous file with comments | « utils/pub/path_source.dart ('k') | utils/pub/sdk_source.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698