mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00

This auto-formats all *.dart files in the repository outside of the `engine` subdirectory and enforces that these files stay formatted with a presubmit check. **Reviewers:** Please carefully review all the commits except for the one titled "formatted". The "formatted" commit was auto-generated by running `dev/tools/format.sh -a -f`. The other commits were hand-crafted to prepare the repo for the formatting change. I recommend reviewing the commits one-by-one via the "Commits" tab and avoiding Github's "Files changed" tab as it will likely slow down your browser because of the size of this PR. --------- Co-authored-by: Kate Lovett <katelovett@google.com> Co-authored-by: LongCatIsLooong <31859944+LongCatIsLooong@users.noreply.github.com>
121 lines
3.5 KiB
Dart
121 lines
3.5 KiB
Dart
// Copyright 2014 The Flutter Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
import 'dart:io';
|
|
|
|
void _validate(List<String> args) {
|
|
bool errors = false;
|
|
if (!File('bin/internal/engine.version').existsSync()) {
|
|
errors = true;
|
|
print('This program must be run from the root of your flutter repository.');
|
|
}
|
|
if (!File('../engine/src/flutter/DEPS').existsSync()) {
|
|
errors = true;
|
|
print(
|
|
'This program assumes the engine directory is a sibling to the flutter repository directory.',
|
|
);
|
|
}
|
|
if (args.length != 1) {
|
|
errors = true;
|
|
print('This program takes the engine revision as a single argument.');
|
|
}
|
|
if (errors) {
|
|
exit(-1);
|
|
}
|
|
}
|
|
|
|
const String engineRepo = '../engine/src/flutter';
|
|
|
|
Future<void> main(List<String> args) async {
|
|
_validate(args);
|
|
await _fetchUpstream();
|
|
await _fetchUpstream(engineRepo);
|
|
String? flutterRevision;
|
|
await for (final FlutterEngineRevision revision in _logEngineVersions()) {
|
|
if (!await containsRevision(args[0], revision.engineRevision)) {
|
|
if (flutterRevision == null) {
|
|
print('Revision not found.');
|
|
exit(-1);
|
|
}
|
|
print('earliest revision: $flutterRevision');
|
|
print('Tags that contain this engine revision:');
|
|
print(await _tagsForRevision(flutterRevision));
|
|
exit(0);
|
|
}
|
|
flutterRevision = revision.flutterRevision;
|
|
}
|
|
}
|
|
|
|
Future<void> _fetchUpstream([String workingDirectory = '.']) async {
|
|
print(
|
|
'Fetching remotes for "$workingDirectory" - you may be prompted for SSH credentials by git.',
|
|
);
|
|
final ProcessResult fetchResult = await Process.run('git', <String>[
|
|
'fetch',
|
|
'--all',
|
|
], workingDirectory: workingDirectory);
|
|
if (fetchResult.exitCode != 0) {
|
|
throw Exception('Failed to fetch upstream in repository $workingDirectory');
|
|
}
|
|
}
|
|
|
|
Future<String> _tagsForRevision(String flutterRevision) async {
|
|
final ProcessResult tagResult = await Process.run('git', <String>[
|
|
'tag',
|
|
'--contains',
|
|
flutterRevision,
|
|
]);
|
|
return tagResult.stdout as String;
|
|
}
|
|
|
|
Future<bool> containsRevision(String ancestorRevision, String revision) async {
|
|
final ProcessResult result = await Process.run('git', <String>[
|
|
'merge-base',
|
|
'--is-ancestor',
|
|
ancestorRevision,
|
|
revision,
|
|
], workingDirectory: engineRepo);
|
|
return result.exitCode == 0;
|
|
}
|
|
|
|
Stream<FlutterEngineRevision> _logEngineVersions() async* {
|
|
final ProcessResult result = await Process.run('git', <String>[
|
|
'log',
|
|
'--oneline',
|
|
'-p',
|
|
'--',
|
|
'bin/internal/engine.version',
|
|
]);
|
|
if (result.exitCode != 0) {
|
|
print(result.stderr);
|
|
throw Exception('Failed to log bin/internal/engine.version');
|
|
}
|
|
|
|
final List<String> lines = (result.stdout as String).split('\n');
|
|
int index = 0;
|
|
while (index < lines.length - 1) {
|
|
final String flutterRevision = lines[index].split(' ').first;
|
|
index += 1;
|
|
while (!lines[index].startsWith('+') || lines[index].startsWith('+++')) {
|
|
index += 1;
|
|
}
|
|
if (index >= lines.length) {
|
|
break;
|
|
}
|
|
final String engineRevision = lines[index].substring(1);
|
|
yield FlutterEngineRevision(flutterRevision, engineRevision);
|
|
index += lines[index + 1].startsWith(r'\ ') ? 2 : 1;
|
|
}
|
|
}
|
|
|
|
class FlutterEngineRevision {
|
|
const FlutterEngineRevision(this.flutterRevision, this.engineRevision);
|
|
|
|
final String flutterRevision;
|
|
final String engineRevision;
|
|
|
|
@override
|
|
String toString() => '$flutterRevision: $engineRevision';
|
|
}
|