Chromium Code Reviews| 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 library pub.pubspec; | 5 library pub.pubspec; |
| 6 | 6 |
| 7 import 'package:path/path.dart' as path; | 7 import 'package:path/path.dart' as path; |
| 8 import 'package:pub_semver/pub_semver.dart'; | 8 import 'package:pub_semver/pub_semver.dart'; |
| 9 import 'package:source_span/source_span.dart'; | 9 import 'package:source_span/source_span.dart'; |
| 10 import 'package:yaml/yaml.dart'; | 10 import 'package:yaml/yaml.dart'; |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 183 } | 183 } |
| 184 } | 184 } |
| 185 | 185 |
| 186 var config = _wrapSpanFormatException('transformer config', () { | 186 var config = _wrapSpanFormatException('transformer config', () { |
| 187 return new TransformerConfig.parse( | 187 return new TransformerConfig.parse( |
| 188 libraryNode.value, libraryNode.span, | 188 libraryNode.value, libraryNode.span, |
| 189 configurationNode); | 189 configurationNode); |
| 190 }); | 190 }); |
| 191 | 191 |
| 192 var package = config.id.package; | 192 var package = config.id.package; |
| 193 if (package != name && | 193 if (package != name && !config.id.isBuiltInTransformer && |
| 194 !config.id.isBuiltInTransformer && | 194 !_hasDependency(package)) { |
| 195 !dependencies.any((ref) => ref.name == package) && | |
| 196 !devDependencies.any((ref) => ref.name == package) && | |
| 197 !dependencyOverrides.any((ref) => ref.name == package)) { | |
| 198 _error('"$package" is not a dependency.', | 195 _error('"$package" is not a dependency.', |
| 199 libraryNode.span); | 196 libraryNode.span); |
| 200 } | 197 } |
| 201 | 198 |
| 202 return config; | 199 return config; |
| 203 }).toSet(); | 200 }).toSet(); |
| 204 }).toList(); | 201 }).toList(); |
| 205 | 202 |
| 206 return _transformers; | 203 return _transformers; |
| 207 } | 204 } |
| 208 List<Set<TransformerConfig>> _transformers; | 205 List<Set<TransformerConfig>> _transformers; |
| 209 | 206 |
| 207 /// Returns whether this pubspec has any kind of dependency on [package]. | |
| 208 /// | |
| 209 /// This explicitly avoids calling [_parseDependencies] because parsing dev | |
| 210 /// dependencies can fail for a hosted package's pubspec (e.g. if that package | |
| 211 /// has a relative path dev dependency). | |
| 212 bool _hasDependency(String package) { | |
| 213 return [ | |
| 214 'dependencies', 'dev_dependencies', 'dependency_overrides' | |
| 215 ].any((field) { | |
| 216 var map = fields[field]; | |
| 217 if (map == null) return false; | |
| 218 | |
| 219 if (map is! Map) { | |
| 220 _error('"$field" field must be a map.', fields.nodes[field].span); | |
| 221 } | |
| 222 | |
| 223 return map.containsKey(package); | |
| 224 }); | |
| 225 } | |
| 226 | |
| 210 /// The environment-related metadata. | 227 /// The environment-related metadata. |
| 211 PubspecEnvironment get environment { | 228 PubspecEnvironment get environment { |
| 212 if (_environment != null) return _environment; | 229 if (_environment != null) return _environment; |
| 213 | 230 |
| 214 var yaml = fields['environment']; | 231 var yaml = fields['environment']; |
| 215 if (yaml == null) { | 232 if (yaml == null) { |
| 216 _environment = new PubspecEnvironment(VersionConstraint.any); | 233 _environment = new PubspecEnvironment(VersionConstraint.any); |
| 217 return _environment; | 234 return _environment; |
| 218 } | 235 } |
| 219 | 236 |
| (...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 489 specNode.nodes.keys.single.span); | 506 specNode.nodes.keys.single.span); |
| 490 } | 507 } |
| 491 | 508 |
| 492 descriptionNode = specNode.nodes[sourceName]; | 509 descriptionNode = specNode.nodes[sourceName]; |
| 493 } else { | 510 } else { |
| 494 _error('A dependency specification must be a string or a mapping.', | 511 _error('A dependency specification must be a string or a mapping.', |
| 495 specNode.span); | 512 specNode.span); |
| 496 } | 513 } |
| 497 | 514 |
| 498 // Let the source validate the description. | 515 // Let the source validate the description. |
| 499 var ref = _wrapFormatException('description', descriptionNode.span, () { | |
| 500 var pubspecPath; | 516 var pubspecPath; |
|
Bob Nystrom
2016/01/04 23:46:44
Fix the indentation.
nweiz
2016/01/05 01:57:13
Oops, this whole change shouldn't have made it in.
| |
| 501 if (_location != null && _isFileUri(_location)) { | 517 if (_location != null && _isFileUri(_location)) { |
| 502 pubspecPath = path.fromUri(_location); | 518 pubspecPath = path.fromUri(_location); |
| 503 } | 519 } |
| 504 | 520 |
| 505 return _sources[sourceName].parseRef(name, descriptionNode.value, | 521 var ref = _sources[sourceName].parseRef(name, descriptionNode.value, |
| 506 containingPath: pubspecPath); | 522 containingPath: pubspecPath); |
| 507 }); | |
| 508 | 523 |
| 509 dependencies.add(ref.withConstraint(versionConstraint)); | 524 dependencies.add(ref.withConstraint(versionConstraint)); |
| 510 }); | 525 }); |
| 511 | 526 |
| 512 return dependencies; | 527 return dependencies; |
| 513 } | 528 } |
| 514 | 529 |
| 515 /// Parses [node] to a [VersionConstraint]. | 530 /// Parses [node] to a [VersionConstraint]. |
| 516 VersionConstraint _parseVersionConstraint(YamlNode node) { | 531 VersionConstraint _parseVersionConstraint(YamlNode node) { |
| 517 if (node.value == null) return VersionConstraint.any; | 532 if (node.value == null) return VersionConstraint.any; |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 593 implements ApplicationException { | 608 implements ApplicationException { |
| 594 PubspecException(String message, SourceSpan span) | 609 PubspecException(String message, SourceSpan span) |
| 595 : super(message, span); | 610 : super(message, span); |
| 596 } | 611 } |
| 597 | 612 |
| 598 /// Returns whether [uri] is a file URI. | 613 /// Returns whether [uri] is a file URI. |
| 599 /// | 614 /// |
| 600 /// This is slightly more complicated than just checking if the scheme is | 615 /// This is slightly more complicated than just checking if the scheme is |
| 601 /// 'file', since relative URIs also refer to the filesystem on the VM. | 616 /// 'file', since relative URIs also refer to the filesystem on the VM. |
| 602 bool _isFileUri(Uri uri) => uri.scheme == 'file' || uri.scheme == ''; | 617 bool _isFileUri(Uri uri) => uri.scheme == 'file' || uri.scheme == ''; |
| OLD | NEW |