mirror of
https://github.com/dart-lang/sdk
synced 2024-10-06 16:31:07 +00:00
Add presubmit check for package_config.json .
Change-Id: Ida784b6e73601e0309e10b2808f46e70926eabc0 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/183045 Commit-Queue: Leaf Petersen <leafp@google.com> Reviewed-by: Alexander Thomas <athom@google.com> Reviewed-by: Bob Nystrom <rnystrom@google.com>
This commit is contained in:
parent
848121e6d4
commit
fe3cd179cf
29
PRESUBMIT.py
29
PRESUBMIT.py
|
@ -213,6 +213,34 @@ def _CheckStatusFiles(input_api, output_api):
|
|||
return []
|
||||
|
||||
|
||||
def _CheckPackageConfigUpToDate(input_api, output_api):
|
||||
"""Checks that .dart_tool/package_config.json is up to date."""
|
||||
# Run only if DEPS file or package_config.json have been modified.
|
||||
if not any(p == 'DEPS' or p == '.dart_tool/package_config.json' or
|
||||
p.endswith('pubspec.yaml') for p in input_api.LocalPaths()):
|
||||
return []
|
||||
local_root = input_api.change.RepositoryRoot()
|
||||
utils = imp.load_source('utils',
|
||||
os.path.join(local_root, 'tools', 'utils.py'))
|
||||
|
||||
dart = utils.CheckedInSdkExecutable()
|
||||
generate = os.path.join(local_root, 'tools', 'generate_package_config.dart')
|
||||
cmd = [dart, generate, '--check']
|
||||
pipe = subprocess.Popen(cmd,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE,
|
||||
shell=utils.IsWindows())
|
||||
output = pipe.communicate()
|
||||
if pipe.returncode != 0:
|
||||
return [
|
||||
output_api.PresubmitError(
|
||||
'File .dart_tool/package_config.json is out of date.\n'
|
||||
'Fix these issues with:\n'
|
||||
'%s tools/generate_package_config.dart' % (dart))
|
||||
]
|
||||
return []
|
||||
|
||||
|
||||
def _CheckValidHostsInDEPS(input_api, output_api):
|
||||
"""Checks that DEPS file deps are from allowed_hosts."""
|
||||
# Run only if DEPS file has been modified to annoy fewer bystanders.
|
||||
|
@ -333,6 +361,7 @@ def _CommonChecks(input_api, output_api):
|
|||
results.extend(_CheckLayering(input_api, output_api))
|
||||
results.extend(_CheckClangTidy(input_api, output_api))
|
||||
results.extend(_CheckTestMatrixValid(input_api, output_api))
|
||||
results.extend(_CheckPackageConfigUpToDate(input_api, output_api))
|
||||
results.extend(
|
||||
input_api.canned_checks.CheckPatchFormatted(input_api, output_api))
|
||||
return results
|
||||
|
|
|
@ -7,14 +7,43 @@
|
|||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:args/args.dart';
|
||||
import 'package:path/path.dart' as p;
|
||||
import 'package:pub_semver/pub_semver.dart';
|
||||
import 'package:yaml/yaml.dart';
|
||||
|
||||
bool _parseOptions(List<String> args) {
|
||||
const usage = "Usage: dart generate_package_config.dart [flags...]";
|
||||
|
||||
var parser = ArgParser();
|
||||
|
||||
parser.addFlag("help", abbr: "h");
|
||||
|
||||
parser.addFlag("check",
|
||||
abbr: "c",
|
||||
help: "Return with a non-zero exit code if not up-to-date",
|
||||
negatable: false);
|
||||
|
||||
var results = parser.parse(args);
|
||||
|
||||
if (results["help"] as bool) {
|
||||
print("Regenerate the .dart_tool/package_config.json file.");
|
||||
print("");
|
||||
print(usage);
|
||||
print("");
|
||||
print(parser.usage);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
return results["check"] as bool;
|
||||
}
|
||||
|
||||
final repoRoot = p.dirname(p.dirname(p.fromUri(Platform.script)));
|
||||
final configFilePath = p.join(repoRoot, '.dart_tool/package_config.json');
|
||||
|
||||
void main(List<String> args) {
|
||||
bool checkOnly = _parseOptions(args);
|
||||
|
||||
var packageDirs = [
|
||||
...listSubdirectories('pkg'),
|
||||
...listSubdirectories('third_party/pkg'),
|
||||
|
@ -60,6 +89,24 @@ void main(List<String> args) {
|
|||
];
|
||||
packages.sort((a, b) => a["name"].compareTo(b["name"]));
|
||||
|
||||
var configFile = File(p.join(repoRoot, '.dart_tool', 'package_config.json'));
|
||||
|
||||
// Validate the packages entry only, to avoid spurious failures from changes
|
||||
// in the dates embedded in the other entries.
|
||||
if (checkOnly) {
|
||||
var json =
|
||||
jsonDecode(configFile.readAsStringSync()) as Map<dynamic, dynamic>;
|
||||
var oldPackages = json['packages'] as List<dynamic>;
|
||||
if (jsonEncode(packages) == jsonEncode(oldPackages)) {
|
||||
print("Package config up to date");
|
||||
exit(0);
|
||||
} else {
|
||||
print("Package config out of date");
|
||||
print("Run `dart tools/generate_package_config.dart` to update");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
var year = DateTime.now().year;
|
||||
var config = <String, dynamic>{
|
||||
'copyright': [
|
||||
|
@ -81,8 +128,7 @@ void main(List<String> args) {
|
|||
|
||||
// TODO(rnystrom): Consider using package_config_v2 to generate this instead.
|
||||
var json = JsonEncoder.withIndent(' ').convert(config);
|
||||
File(p.join(repoRoot, '.dart_tool', 'package_config.json'))
|
||||
.writeAsStringSync(json);
|
||||
configFile.writeAsStringSync(json);
|
||||
print('Generated .dart_tool/package_config.dart containing '
|
||||
'${packages.length} packages.');
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue