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

Side by Side Diff: sdk/lib/_internal/pub/lib/src/pubspec.dart

Issue 13952013: Create a "PackageRef" class that defines a versionless package reference. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 7 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
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 'package:yaml/yaml.dart'; 7 import 'package:yaml/yaml.dart';
8 import 'package:pathos/path.dart' as path; 8 import 'package:pathos/path.dart' as path;
9 9
10 import 'io.dart'; 10 import 'io.dart';
11 import 'package.dart'; 11 import 'package.dart';
12 import 'source.dart'; 12 import 'source.dart';
13 import 'source_registry.dart'; 13 import 'source_registry.dart';
14 import 'utils.dart'; 14 import 'utils.dart';
15 import 'version.dart'; 15 import 'version.dart';
16 16
17 /// The parsed and validated contents of a pubspec file. 17 /// The parsed and validated contents of a pubspec file.
18 class Pubspec { 18 class Pubspec {
19 /// This package's name. 19 /// This package's name.
20 final String name; 20 final String name;
21 21
22 /// This package's version. 22 /// This package's version.
23 final Version version; 23 final Version version;
24 24
25 /// The packages this package depends on. 25 /// The packages this package depends on.
26 final List<PackageRef> dependencies; 26 final List<PackageDep> dependencies;
27 27
28 /// The packages this package depends on when it is the root package. 28 /// The packages this package depends on when it is the root package.
29 final List<PackageRef> devDependencies; 29 final List<PackageDep> devDependencies;
30 30
31 /// The environment-related metadata. 31 /// The environment-related metadata.
32 final PubspecEnvironment environment; 32 final PubspecEnvironment environment;
33 33
34 /// All pubspec fields. This includes the fields from which other properties 34 /// All pubspec fields. This includes the fields from which other properties
35 /// are derived. 35 /// are derived.
36 final Map<String, Object> fields; 36 final Map<String, Object> fields;
37 37
38 /// Loads the pubspec for a package [name] located in [packageDir]. 38 /// Loads the pubspec for a package [name] located in [packageDir].
39 factory Pubspec.load(String name, String packageDir, SourceRegistry sources) { 39 factory Pubspec.load(String name, String packageDir, SourceRegistry sources) {
(...skipping 18 matching lines...) Expand all
58 } 58 }
59 } 59 }
60 60
61 Pubspec(this.name, this.version, this.dependencies, this.devDependencies, 61 Pubspec(this.name, this.version, this.dependencies, this.devDependencies,
62 this.environment, [Map<String, Object> fields]) 62 this.environment, [Map<String, Object> fields])
63 : this.fields = fields == null ? {} : fields; 63 : this.fields = fields == null ? {} : fields;
64 64
65 Pubspec.empty() 65 Pubspec.empty()
66 : name = null, 66 : name = null,
67 version = Version.none, 67 version = Version.none,
68 dependencies = <PackageRef>[], 68 dependencies = <PackageDep>[],
69 devDependencies = <PackageRef>[], 69 devDependencies = <PackageDep>[],
70 environment = new PubspecEnvironment(), 70 environment = new PubspecEnvironment(),
71 fields = {}; 71 fields = {};
72 72
73 /// Whether or not the pubspec has no contents. 73 /// Whether or not the pubspec has no contents.
74 bool get isEmpty => 74 bool get isEmpty =>
75 name == null && version == Version.none && dependencies.isEmpty; 75 name == null && version == Version.none && dependencies.isEmpty;
76 76
77 // TODO(rnystrom): Instead of allowing a null argument here, split this up 77 // TODO(rnystrom): Instead of allowing a null argument here, split this up
78 // into load(), parse(), and _parse() like LockFile does. 78 // into load(), parse(), and _parse() like LockFile does.
79 /// Parses the pubspec stored at [filePath] whose text is [contents]. If the 79 /// Parses the pubspec stored at [filePath] whose text is [contents]. If the
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 } 226 }
227 227
228 var goodScheme = new RegExp(r'^https?:'); 228 var goodScheme = new RegExp(r'^https?:');
229 if (!goodScheme.hasMatch(url)) { 229 if (!goodScheme.hasMatch(url)) {
230 throw new FormatException( 230 throw new FormatException(
231 'The "$field" field should be an "http:" or "https:" URL, but ' 231 'The "$field" field should be an "http:" or "https:" URL, but '
232 'was "$url".'); 232 'was "$url".');
233 } 233 }
234 } 234 }
235 235
236 List<PackageRef> _parseDependencies(String pubspecPath, SourceRegistry sources, 236 List<PackageDep> _parseDependencies(String pubspecPath, SourceRegistry sources,
237 yaml) { 237 yaml) {
238 var dependencies = <PackageRef>[]; 238 var dependencies = <PackageDep>[];
239 239
240 // Allow an empty dependencies key. 240 // Allow an empty dependencies key.
241 if (yaml == null) return dependencies; 241 if (yaml == null) return dependencies;
242 242
243 if (yaml is! Map || yaml.keys.any((e) => e is! String)) { 243 if (yaml is! Map || yaml.keys.any((e) => e is! String)) {
244 throw new FormatException( 244 throw new FormatException(
245 'The pubspec dependencies should be a map of package names, but ' 245 'The pubspec dependencies should be a map of package names, but '
246 'was ${yaml}.'); 246 'was ${yaml}.');
247 } 247 }
248 248
(...skipping 27 matching lines...) Expand all
276 source = sources[sourceName]; 276 source = sources[sourceName];
277 description = spec[sourceName]; 277 description = spec[sourceName];
278 } else { 278 } else {
279 throw new FormatException( 279 throw new FormatException(
280 'Dependency specification $spec should be a string or a mapping.'); 280 'Dependency specification $spec should be a string or a mapping.');
281 } 281 }
282 282
283 description = source.parseDescription(pubspecPath, description, 283 description = source.parseDescription(pubspecPath, description,
284 fromLockFile: false); 284 fromLockFile: false);
285 285
286 dependencies.add(new PackageRef( 286 dependencies.add(new PackageDep(
287 name, source, versionConstraint, description)); 287 name, source, versionConstraint, description));
288 }); 288 });
289 289
290 return dependencies; 290 return dependencies;
291 } 291 }
292 292
293 /// The environment-related metadata in the pubspec. Corresponds to the data 293 /// The environment-related metadata in the pubspec. Corresponds to the data
294 /// under the "environment:" key in the pubspec. 294 /// under the "environment:" key in the pubspec.
295 class PubspecEnvironment { 295 class PubspecEnvironment {
296 /// The version constraint specifying which SDK versions this package works 296 /// The version constraint specifying which SDK versions this package works
297 /// with. 297 /// with.
298 final VersionConstraint sdkVersion; 298 final VersionConstraint sdkVersion;
299 299
300 PubspecEnvironment([VersionConstraint sdk]) 300 PubspecEnvironment([VersionConstraint sdk])
301 : sdkVersion = sdk != null ? sdk : VersionConstraint.any; 301 : sdkVersion = sdk != null ? sdk : VersionConstraint.any;
302 } 302 }
OLDNEW
« no previous file with comments | « sdk/lib/_internal/pub/lib/src/path_source.dart ('k') | sdk/lib/_internal/pub/lib/src/solver/backtracking_solver.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698