mirror of
https://github.com/dart-lang/sdk
synced 2024-09-05 00:13:50 +00:00
tools/package_deps: allow "normal" deps as long as there is a path override
Also migrate to null safety, drop unused pedantic dep Change-Id: Ic3be5af7e7933f2bd757e9dcdda62eb5be99c5bf Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/218085 Auto-Submit: Kevin Moore <kevmoo@google.com> Reviewed-by: Devon Carew <devoncarew@google.com> Commit-Queue: Devon Carew <devoncarew@google.com> Commit-Queue: Kevin Moore <kevmoo@google.com>
This commit is contained in:
parent
9a873bc23f
commit
ada6029976
|
@ -11,7 +11,7 @@
|
|||
"constraint, update this by running tools/generate_package_config.dart."
|
||||
],
|
||||
"configVersion": 2,
|
||||
"generated": "2021-10-15T13:46:59.969883",
|
||||
"generated": "2021-10-26T10:20:01.277340",
|
||||
"generator": "tools/generate_package_config.dart",
|
||||
"packages": [
|
||||
{
|
||||
|
@ -515,7 +515,7 @@
|
|||
{
|
||||
"name": "package_deps",
|
||||
"rootUri": "../tools/package_deps",
|
||||
"languageVersion": "2.8"
|
||||
"languageVersion": "2.12"
|
||||
},
|
||||
{
|
||||
"name": "path",
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import 'dart:io';
|
||||
|
||||
import 'package:cli_util/cli_logging.dart';
|
||||
import 'package:collection/collection.dart';
|
||||
import 'package:path/path.dart' as path;
|
||||
import 'package:yaml/yaml.dart' as yaml;
|
||||
|
||||
|
@ -85,34 +86,59 @@ void main(List<String> arguments) {
|
|||
}
|
||||
|
||||
if (validateFailure) {
|
||||
exit(1);
|
||||
exitCode = 1;
|
||||
}
|
||||
}
|
||||
|
||||
class Package implements Comparable<Package> {
|
||||
final String dir;
|
||||
final _regularDependencies = <String>{};
|
||||
final _devDependencies = <String>{};
|
||||
final _declaredPubDeps = <PubDep>[];
|
||||
final _declaredDevPubDeps = <PubDep>[];
|
||||
final _declaredOverridePubDeps = <PubDep>[];
|
||||
|
||||
late final String _packageName;
|
||||
late final Set<String> _declaredDependencies;
|
||||
late final Set<String> _declaredDevDependencies;
|
||||
late final Set<String> _declaredOverrideDependencies;
|
||||
late final bool _publishToNone;
|
||||
|
||||
Package(this.dir) {
|
||||
_parsePubspec();
|
||||
var pubspec = File(path.join(dir, 'pubspec.yaml'));
|
||||
var doc = yaml.loadYamlDocument(pubspec.readAsStringSync());
|
||||
dynamic docContents = doc.contents.value;
|
||||
_packageName = docContents['name'];
|
||||
_publishToNone = docContents['publish_to'] == 'none';
|
||||
|
||||
Set<String> process(String section, List<PubDep> target) {
|
||||
if (docContents[section] != null) {
|
||||
final value = Set<String>.from(docContents[section].keys);
|
||||
|
||||
var deps = docContents[section];
|
||||
for (var package in deps.keys) {
|
||||
target.add(PubDep.parse(package, deps[package]));
|
||||
}
|
||||
|
||||
return value;
|
||||
} else {
|
||||
return {};
|
||||
}
|
||||
}
|
||||
|
||||
_declaredDependencies = process('dependencies', _declaredPubDeps);
|
||||
_declaredDevDependencies = process('dev_dependencies', _declaredDevPubDeps);
|
||||
_declaredOverrideDependencies =
|
||||
process('dependency_overrides', _declaredOverridePubDeps);
|
||||
}
|
||||
|
||||
String get dirName => path.basename(dir);
|
||||
final Set<String> _regularDependencies = {};
|
||||
final Set<String> _devDependencies = {};
|
||||
String _packageName;
|
||||
|
||||
String get packageName => _packageName;
|
||||
Set<String> _declaredDependencies;
|
||||
List<PubDep> _declaredPubDeps;
|
||||
Set<String> _declaredDevDependencies;
|
||||
List<PubDep> _declaredDevPubDeps;
|
||||
|
||||
List<String> get regularDependencies => _regularDependencies.toList()..sort();
|
||||
|
||||
List<String> get devDependencies => _devDependencies.toList()..sort();
|
||||
|
||||
bool _publishToNone;
|
||||
|
||||
bool get publishable => !_publishToNone;
|
||||
|
||||
@override
|
||||
|
@ -161,40 +187,6 @@ class Package implements Comparable<Package> {
|
|||
}
|
||||
}
|
||||
|
||||
void _parsePubspec() {
|
||||
var pubspec = File(path.join(dir, 'pubspec.yaml'));
|
||||
var doc = yaml.loadYamlDocument(pubspec.readAsStringSync());
|
||||
dynamic docContents = doc.contents.value;
|
||||
_packageName = docContents['name'];
|
||||
_publishToNone = docContents['publish_to'] == 'none';
|
||||
|
||||
_declaredPubDeps = [];
|
||||
if (docContents['dependencies'] != null) {
|
||||
_declaredDependencies =
|
||||
Set<String>.from(docContents['dependencies'].keys);
|
||||
|
||||
var deps = docContents['dependencies'];
|
||||
for (var package in deps.keys) {
|
||||
_declaredPubDeps.add(PubDep.parse(package, deps[package]));
|
||||
}
|
||||
} else {
|
||||
_declaredDependencies = {};
|
||||
}
|
||||
|
||||
_declaredDevPubDeps = [];
|
||||
if (docContents['dev_dependencies'] != null) {
|
||||
_declaredDevDependencies =
|
||||
Set<String>.from(docContents['dev_dependencies'].keys);
|
||||
|
||||
var deps = docContents['dev_dependencies'];
|
||||
for (var package in deps.keys) {
|
||||
_declaredDevPubDeps.add(PubDep.parse(package, deps[package]));
|
||||
}
|
||||
} else {
|
||||
_declaredDevDependencies = {};
|
||||
}
|
||||
}
|
||||
|
||||
bool _validatePubspecDeps(Logger logger, List<String> pkgPackages) {
|
||||
var fail = false;
|
||||
|
||||
|
@ -300,6 +292,13 @@ class Package implements Comparable<Package> {
|
|||
if (!publishable) {
|
||||
for (PubDep dep in [..._declaredPubDeps, ..._declaredDevPubDeps]) {
|
||||
if (pkgPackages.contains(dep.name) && dep is! PathPubDep) {
|
||||
// check to see if there is a dependency_override to a path dependency
|
||||
final override = _declaredOverridePubDeps
|
||||
.singleWhereOrNull((element) => element.name == dep.name);
|
||||
if (override != null && override is PathPubDep) {
|
||||
continue;
|
||||
}
|
||||
|
||||
out(' Prefer a relative path dep for pkg/ packages:');
|
||||
out(' $dep');
|
||||
fail = true;
|
||||
|
@ -368,13 +367,13 @@ class Package implements Comparable<Package> {
|
|||
|
||||
var match = importRegex1.firstMatch(line);
|
||||
if (match != null) {
|
||||
results.add(match.group(2));
|
||||
results.add(match.group(2)!);
|
||||
continue;
|
||||
}
|
||||
|
||||
match = importRegex2.firstMatch(line);
|
||||
if (match != null) {
|
||||
results.add(match.group(2));
|
||||
results.add(match.group(2)!);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
@ -418,9 +417,9 @@ class SdkDeps {
|
|||
var testedPkgDep = testedPkgRegExp.firstMatch(line);
|
||||
|
||||
if (pkgDep != null) {
|
||||
pkgs.add(pkgDep.group(1));
|
||||
pkgs.add(pkgDep.group(1)!);
|
||||
} else if (testedPkgDep != null) {
|
||||
testedPkgs.add(testedPkgDep.group(1));
|
||||
testedPkgs.add(testedPkgDep.group(1)!);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -5,12 +5,10 @@ description: A tool to validate pubspec files in pkg/.
|
|||
publish_to: none
|
||||
|
||||
environment:
|
||||
sdk: '>=2.8.1 <3.0.0'
|
||||
sdk: '>=2.12.0 <3.0.0'
|
||||
|
||||
dependencies:
|
||||
cli_util: any
|
||||
collection: any
|
||||
path: any
|
||||
yaml: any
|
||||
|
||||
dev_dependencies:
|
||||
pedantic: ^1.9.0
|
||||
|
|
Loading…
Reference in a new issue