Add many more global analyses. (#47875)
* Update packages.
* Add many more global analyses.
* Catch trailing spaces and trailing newlines in all text files.
Before we were only checking newly added files, but that means we
missed some.
* Port the trailing spaces logic to work on Windows too.
* Correct all the files with trailing spaces and newlines.
* Refactor some of the dev/bots logic into a utils.dart library.
Notably, the "exit" and "print" shims for testing are now usable
from test.dart, analyze.dart, and run_command.dart.
* Add an "exitWithError" function that prints the red lines and
then exits. This is the preferred way to exit from test.dart,
analyze.dart, and run_command.dart.
* More consistency in the output of analyze.dart.
* Refactor analyze.dart to use the _allFiles file enumerating logic
more widely.
* Add some double-checking logic to the _allFiles logic to catch
cases where changes to that logic end up catching fewer files
than expected (helps prevent future false positives).
* Add a check to prevent new binary files from being added to
the repository. Grandfather in the binaries that we've already
added.
* Update all the dependencies (needed because we now import crypto in
dev/bots/analyze.dart).
diff --git a/.github/no-response.yml b/.github/no-response.yml
index 7e39bce..ae8105f 100644
--- a/.github/no-response.yml
+++ b/.github/no-response.yml
@@ -12,5 +12,5 @@
resolve this issue. We are therefore reluctantly going to close this
bug for now. Please don't hesitate to comment on the bug if you have
any more information for us; we will reopen it right away!
-
+
Thanks for your contribution.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index c963609..4a53a73 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -33,18 +33,18 @@
that everyone must be gracious, respectful, and professional. If you're helping out
with triage, you are representing the Flutter team, and so you want to make sure to
make a good impression!
-
+
3. Help out as described in our wiki: https://github.com/flutter/flutter/wiki/Triage
You won't be able to add labels at first, so instead start by trying to
do the other steps, e.g. trying to reproduce the problem and asking for people to
provide enough details that you can reproduce the problem, pointing out duplicates,
and so on. Chat on the #hackers-triage channel to let us know what you're up to!
-
+
4. Familiarize yourself with our
[issue hygiene](https://github.com/flutter/flutter/wiki/Issue-hygiene) wiki page,
which covers the meanings of some important GitHub labels and
milestones.
-
+
5. Once you've been doing this for a while, someone will invite you to the flutter-hackers
team on GitHub and you'll be able to add labels too. See the
[contributor access](https://github.com/flutter/flutter/wiki/Contributor-access) wiki
diff --git a/README.md b/README.md
index 4a3b4de..00935af 100644
--- a/README.md
+++ b/README.md
@@ -61,7 +61,7 @@
plug-ins for both [Visual Studio Code] and [IntelliJ / Android Studio]. Flutter
provides [thousands of packages][Flutter packages] to speed your development,
regardless of your target platform. And accessing other native code is easy,
-with support for both [FFI] and [platform-specific APIs][platform channels].
+with support for both [FFI] and [platform-specific APIs][platform channels].
Flutter is a fully open source project, and we welcome contributions.
Information on how to get started can be found at our
diff --git a/dev/automated_tests/pubspec.yaml b/dev/automated_tests/pubspec.yaml
index 7c7633b..bb1caa7 100644
--- a/dev/automated_tests/pubspec.yaml
+++ b/dev/automated_tests/pubspec.yaml
@@ -19,13 +19,13 @@
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
collection: 1.14.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
crypto: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
image: 2.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -74,4 +74,4 @@
assets:
- icon/
-# PUBSPEC CHECKSUM: ebc8
+# PUBSPEC CHECKSUM: b1cb
diff --git a/dev/benchmarks/complex_layout/fuchsia/meta/complex_layout.cmx b/dev/benchmarks/complex_layout/fuchsia/meta/complex_layout.cmx
index 878780c..bbe88bf 100644
--- a/dev/benchmarks/complex_layout/fuchsia/meta/complex_layout.cmx
+++ b/dev/benchmarks/complex_layout/fuchsia/meta/complex_layout.cmx
@@ -20,4 +20,3 @@
]
}
}
-
diff --git a/dev/benchmarks/complex_layout/pubspec.yaml b/dev/benchmarks/complex_layout/pubspec.yaml
index b34f3fc..9dd898f 100644
--- a/dev/benchmarks/complex_layout/pubspec.yaml
+++ b/dev/benchmarks/complex_layout/pubspec.yaml
@@ -46,12 +46,12 @@
archive: 2.0.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
image: 2.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -91,4 +91,4 @@
- packages/flutter_gallery_assets/people/square/ali.png
- packages/flutter_gallery_assets/places/india_chettinad_silk_maker.png
-# PUBSPEC CHECKSUM: 4cef
+# PUBSPEC CHECKSUM: 06f2
diff --git a/dev/benchmarks/macrobenchmarks/pubspec.yaml b/dev/benchmarks/macrobenchmarks/pubspec.yaml
index 471d22c..8ee0c19 100644
--- a/dev/benchmarks/macrobenchmarks/pubspec.yaml
+++ b/dev/benchmarks/macrobenchmarks/pubspec.yaml
@@ -46,12 +46,12 @@
archive: 2.0.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
image: 2.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -92,4 +92,4 @@
- packages/flutter_gallery_assets/food/cherry_pie.png
- assets/999x1000.png
-# PUBSPEC CHECKSUM: 4cef
+# PUBSPEC CHECKSUM: 06f2
diff --git a/dev/benchmarks/microbenchmarks/pubspec.yaml b/dev/benchmarks/microbenchmarks/pubspec.yaml
index ed952cf..cc322ea 100644
--- a/dev/benchmarks/microbenchmarks/pubspec.yaml
+++ b/dev/benchmarks/microbenchmarks/pubspec.yaml
@@ -23,14 +23,14 @@
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
collection: 1.14.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
crypto: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
dart_style: 1.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
image: 2.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -79,4 +79,4 @@
flutter:
uses-material-design: true
-# PUBSPEC CHECKSUM: e51f
+# PUBSPEC CHECKSUM: 1d22
diff --git a/dev/bots/README.md b/dev/bots/README.md
index f17ba96..683741b 100644
--- a/dev/bots/README.md
+++ b/dev/bots/README.md
@@ -91,8 +91,8 @@
existing expected output to match the new output. Verify completely new test
cases by altering the `GenTests` method of the recipe. The recipe is required
to have 100% test coverage.
-3. Run `led get-builder 'luci.flutter.prod:BUILDER_NAME' | led edit -p 'revision="GIT_HASH"' | led edit-recipe-bundle | led launch`, where `BUILDER_NAME` is the builder name (e.g. `Linux Engine`), and
- `GIT_HASH` is the hash to build (which is important for the engine but not
+3. Run `led get-builder 'luci.flutter.prod:BUILDER_NAME' | led edit -p 'revision="GIT_HASH"' | led edit-recipe-bundle | led launch`, where `BUILDER_NAME` is the builder name (e.g. `Linux Engine`), and
+ `GIT_HASH` is the hash to build (which is important for the engine but not
for the framework).
4. To submit a CL, you need a local branch first (`git checkout -b [some branch name]`).
5. Upload the patch (`git commit`, `git cl upload`) and send it to someone in
diff --git a/dev/bots/analyze.dart b/dev/bots/analyze.dart
index 7bc1e87..1da0458 100644
--- a/dev/bots/analyze.dart
+++ b/dev/bots/analyze.dart
@@ -4,15 +4,16 @@
import 'dart:async';
import 'dart:convert';
-import 'dart:core' as core_internals show print;
import 'dart:core' hide print;
-import 'dart:io' as io_internals show exit;
import 'dart:io' hide exit;
+import 'dart:typed_data';
-import 'package:path/path.dart' as path;
+import 'package:crypto/crypto.dart';
import 'package:meta/meta.dart';
+import 'package:path/path.dart' as path;
import 'run_command.dart';
+import 'utils.dart';
final String flutterRoot = path.dirname(path.dirname(path.dirname(path.fromUri(Platform.script))));
final String flutter = path.join(flutterRoot, 'bin', Platform.isWindows ? 'flutter.bat' : 'flutter');
@@ -20,28 +21,6 @@
final String pub = path.join(flutterRoot, 'bin', 'cache', 'dart-sdk', 'bin', Platform.isWindows ? 'pub.bat' : 'pub');
final String pubCache = path.join(flutterRoot, '.pub-cache');
-class ExitException implements Exception {
- ExitException(this.exitCode);
-
- final int exitCode;
-
- void apply() {
- io_internals.exit(exitCode);
- }
-}
-
-// We actually reimplement exit() so that it uses exceptions rather
-// than truly immediately terminating the application, so that we can
-// test the exit code in unit tests (see test/analyze_test.dart).
-void exit(int exitCode) {
- throw ExitException(exitCode);
-}
-
-typedef PrintCallback = void Function(Object line);
-
-// Allow print() to be overridden, for tests.
-PrintCallback print = core_internals.print;
-
/// When you call this, you can pass additional arguments to pass custom
/// arguments to flutter analyze. For example, you might want to call this
/// script with the parameter --dart-sdk to use custom dart sdk.
@@ -55,17 +34,22 @@
} on ExitException catch (error) {
error.apply();
}
- print('${bold}DONE: Analysis successful.$reset');
+ print('$clock ${bold}Analysis successful.$reset');
}
Future<void> run(List<String> arguments) async {
bool assertsEnabled = false;
assert(() { assertsEnabled = true; return true; }());
if (!assertsEnabled) {
- print('The analyze.dart script must be run with --enable-asserts.');
- exit(1);
+ exitWithError(<String>['The analyze.dart script must be run with --enable-asserts.']);
}
+ print('$clock Unexpected binaries...');
+ await verifyNoBinaries(flutterRoot);
+
+ print('$clock Trailing spaces...');
+ await verifyNoTrailingSpaces(flutterRoot); // assumes no unexpected binaries, so should be after verifyNoBinaries
+
print('$clock Deprecations...');
await verifyDeprecations(flutterRoot);
@@ -90,22 +74,12 @@
print('$clock Internationalization...');
await verifyInternationalizations();
- print('$clock Trailing spaces...');
- await verifyNoTrailingSpaces();
-
// Ensure that all package dependencies are in sync.
print('$clock Package dependencies...');
await runCommand(flutter, <String>['update-packages', '--verify-only'],
workingDirectory: flutterRoot,
);
- // Analyze all the sample code in the repo
- print('$clock Sample code...');
- await runCommand(dart,
- <String>[path.join(flutterRoot, 'dev', 'bots', 'analyze-sample-code.dart')],
- workingDirectory: flutterRoot,
- );
-
// Analyze all the Dart code in the repo.
print('$clock Dart analysis...');
await _runFlutterAnalyze(flutterRoot, options: <String>[
@@ -123,6 +97,13 @@
...arguments,
]);
+ // Analyze all the sample code in the repo
+ print('$clock Sample code...');
+ await runCommand(dart,
+ <String>[path.join(flutterRoot, 'dev', 'bots', 'analyze-sample-code.dart')],
+ workingDirectory: flutterRoot,
+ );
+
// Try analysis against a big version of the gallery; generate into a temporary directory.
print('$clock Dart analysis (mega gallery)...');
final Directory outDir = Directory.systemTemp.createTempSync('flutter_mega_gallery.');
@@ -164,9 +145,9 @@
/// Some deprecation notices are grand-fathered in for now. They must have an issue listed.
final RegExp _grandfatheredDeprecation = RegExp(r' // ignore: flutter_deprecation_syntax, https://github.com/flutter/flutter/issues/[0-9]+$');
-Future<void> verifyDeprecations(String workingDirectory) async {
+Future<void> verifyDeprecations(String workingDirectory, { int minimumMatches = 2000 }) async {
final List<String> errors = <String>[];
- for (File file in _allFiles(workingDirectory, 'dart')) {
+ for (File file in _allFiles(workingDirectory, 'dart', minimumMatches: minimumMatches)) {
int lineNumber = 0;
final List<String> lines = file.readAsLinesSync();
final List<int> linesWithDeprecations = <int>[];
@@ -224,11 +205,10 @@
}
// Fail if any errors
if (errors.isNotEmpty) {
- print('$redLine');
- print(errors.join('\n'));
- print('${bold}See: https://github.com/flutter/flutter/wiki/Tree-hygiene#handling-breaking-changes$reset\n');
- print('$redLine\n');
- exit(1);
+ exitWithError(<String>[
+ ...errors,
+ '${bold}See: https://github.com/flutter/flutter/wiki/Tree-hygiene#handling-breaking-changes$reset',
+ ]);
}
}
@@ -239,26 +219,27 @@
'${prefix}found in the LICENSE file.';
}
-Future<void> verifyNoMissingLicense(String workingDirectory) async {
- await _verifyNoMissingLicenseForExtension(workingDirectory, 'dart', _generateLicense('// '));
- await _verifyNoMissingLicenseForExtension(workingDirectory, 'java', _generateLicense('// '));
- await _verifyNoMissingLicenseForExtension(workingDirectory, 'h', _generateLicense('// '));
- await _verifyNoMissingLicenseForExtension(workingDirectory, 'm', _generateLicense('// '));
- await _verifyNoMissingLicenseForExtension(workingDirectory, 'swift', _generateLicense('// '));
- await _verifyNoMissingLicenseForExtension(workingDirectory, 'gradle', _generateLicense('// '));
- await _verifyNoMissingLicenseForExtension(workingDirectory, 'gn', _generateLicense('# '));
- await _verifyNoMissingLicenseForExtension(workingDirectory, 'sh', '#!/usr/bin/env bash\n' + _generateLicense('# '));
- await _verifyNoMissingLicenseForExtension(workingDirectory, 'bat', '@ECHO off\n' + _generateLicense('REM '));
- await _verifyNoMissingLicenseForExtension(workingDirectory, 'ps1', _generateLicense('# '));
- await _verifyNoMissingLicenseForExtension(workingDirectory, 'html', '<!DOCTYPE HTML>\n<!-- ${_generateLicense('')} -->', trailingBlank: false);
- await _verifyNoMissingLicenseForExtension(workingDirectory, 'xml', '<!-- ${_generateLicense('')} -->');
+Future<void> verifyNoMissingLicense(String workingDirectory, { bool checkMinimums = true }) async {
+ final int overrideMinimumMatches = checkMinimums ? null : 0;
+ await _verifyNoMissingLicenseForExtension(workingDirectory, 'dart', overrideMinimumMatches ?? 2000, _generateLicense('// '));
+ await _verifyNoMissingLicenseForExtension(workingDirectory, 'java', overrideMinimumMatches ?? 40, _generateLicense('// '));
+ await _verifyNoMissingLicenseForExtension(workingDirectory, 'h', overrideMinimumMatches ?? 30, _generateLicense('// '));
+ await _verifyNoMissingLicenseForExtension(workingDirectory, 'm', overrideMinimumMatches ?? 30, _generateLicense('// '));
+ await _verifyNoMissingLicenseForExtension(workingDirectory, 'swift', overrideMinimumMatches ?? 10, _generateLicense('// '));
+ await _verifyNoMissingLicenseForExtension(workingDirectory, 'gradle', overrideMinimumMatches ?? 100, _generateLicense('// '));
+ await _verifyNoMissingLicenseForExtension(workingDirectory, 'gn', overrideMinimumMatches ?? 0, _generateLicense('# '));
+ await _verifyNoMissingLicenseForExtension(workingDirectory, 'sh', overrideMinimumMatches ?? 1, '#!/usr/bin/env bash\n' + _generateLicense('# '));
+ await _verifyNoMissingLicenseForExtension(workingDirectory, 'bat', overrideMinimumMatches ?? 1, '@ECHO off\n' + _generateLicense('REM '));
+ await _verifyNoMissingLicenseForExtension(workingDirectory, 'ps1', overrideMinimumMatches ?? 1, _generateLicense('# '));
+ await _verifyNoMissingLicenseForExtension(workingDirectory, 'html', overrideMinimumMatches ?? 1, '<!DOCTYPE HTML>\n<!-- ${_generateLicense('')} -->', trailingBlank: false);
+ await _verifyNoMissingLicenseForExtension(workingDirectory, 'xml', overrideMinimumMatches ?? 1, '<!-- ${_generateLicense('')} -->');
}
-Future<void> _verifyNoMissingLicenseForExtension(String workingDirectory, String extension, String license, { bool trailingBlank = true }) async {
+Future<void> _verifyNoMissingLicenseForExtension(String workingDirectory, String extension, int minimumMatches, String license, { bool trailingBlank = true }) async {
assert(!license.endsWith('\n'));
final String licensePattern = license + '\n' + (trailingBlank ? '\n' : '');
final List<String> errors = <String>[];
- for (File file in _allFiles(workingDirectory, extension)) {
+ for (File file in _allFiles(workingDirectory, extension, minimumMatches: minimumMatches)) {
final String contents = file.readAsStringSync().replaceAll('\r\n', '\n');
if (contents.isEmpty)
continue; // let's not go down the /bin/true rabbit hole
@@ -267,16 +248,14 @@
}
// Fail if any errors
if (errors.isNotEmpty) {
- print('$redLine');
final String s = errors.length == 1 ? ' does' : 's do';
- print('${bold}The following ${errors.length} file$s not have the right license header:$reset\n');
- print(errors.join('\n'));
- print('$redLine\n');
- print('The expected license header is:');
- print('$license');
- if (trailingBlank)
- print('...followed by a blank line.');
- exit(1);
+ exitWithError(<String>[
+ '${bold}The following ${errors.length} file$s not have the right license header:$reset',
+ ...errors,
+ 'The expected license header is:',
+ license,
+ if (trailingBlank) '...followed by a blank line.',
+ ]);
}
}
@@ -290,10 +269,7 @@
Future<void> verifyNoTestImports(String workingDirectory) async {
final List<String> errors = <String>[];
assert("// foo\nimport 'binding_test.dart' as binding;\n'".contains(_testImportPattern));
- final Iterable<File> dartFiles = Directory(path.join(workingDirectory, 'packages'))
- .listSync(recursive: true)
- .whereType<File>()
- .where((File file) => path.extension(file.path) == '.dart');
+ final List<File> dartFiles = _allFiles(path.join(workingDirectory, 'packages'), 'dart', minimumMatches: 1500).toList();
for (File file in dartFiles) {
for (String line in file.readAsLinesSync()) {
final Match match = _testImportPattern.firstMatch(line);
@@ -303,22 +279,18 @@
}
// Fail if any errors
if (errors.isNotEmpty) {
- print('$redLine');
final String s = errors.length == 1 ? '' : 's';
- print('${bold}The following file$s import a test directly. Test utilities should be in their own file.$reset\n');
- print(errors.join('\n'));
- print('$redLine\n');
- exit(1);
+ exitWithError(<String>[
+ '${bold}The following file$s import a test directly. Test utilities should be in their own file.$reset',
+ ...errors,
+ ]);
}
}
Future<void> verifyNoTestPackageImports(String workingDirectory) async {
// TODO(ianh): Remove this whole test once https://github.com/dart-lang/matcher/issues/98 is fixed.
final List<String> shims = <String>[];
- final List<String> errors = Directory(workingDirectory)
- .listSync(recursive: true)
- .whereType<File>()
- .where((File file) => file.path.endsWith('.dart'))
+ final List<String> errors = _allFiles(workingDirectory, 'dart', minimumMatches: 2000)
.map<String>((File file) {
final String name = Uri.file(path.relative(file.path,
from: workingDirectory)).toFilePath(windows: false);
@@ -376,16 +348,15 @@
// Fail if any errors
if (errors.isNotEmpty) {
- print('$redLine');
final String s1 = errors.length == 1 ? 's' : '';
final String s2 = errors.length == 1 ? '' : 's';
- print('${bold}The following file$s2 use$s1 \'package:test\' incorrectly:$reset');
- print(errors.join('\n'));
- print('Rather than depending on \'package:test\' directly, use one of the shims:');
- print(shims.join('\n'));
- print('This insulates us from breaking changes in \'package:test\'.');
- print('$redLine\n');
- exit(1);
+ exitWithError(<String>[
+ '${bold}The following file$s2 use$s1 \'package:test\' incorrectly:$reset',
+ ...errors,
+ 'Rather than depending on \'package:test\' directly, use one of the shims:',
+ ...shims,
+ 'This insulates us from breaking changes in \'package:test\'.'
+ ]);
}
}
@@ -419,14 +390,11 @@
}
if (outOfDate.isNotEmpty) {
- print('$redLine');
- print('${bold}The following GeneratedPluginRegistrants are out of date:$reset');
- for (String registrant in outOfDate) {
- print(' - $registrant');
- }
- print('\nRun "flutter inject-plugins" in the package that\'s out of date.');
- print('$redLine');
- exit(1);
+ exitWithError(<String>[
+ '${bold}The following GeneratedPluginRegistrants are out of date:$reset',
+ for (String registrant in outOfDate) ' - $registrant',
+ '\nRun "flutter inject-plugins" in the package that\'s out of date.',
+ ]);
}
}
@@ -478,24 +446,19 @@
}
// Fail if any errors
if (errors.isNotEmpty) {
- print('$redLine');
- if (errors.length == 1) {
- print('${bold}An error was detected when looking at import dependencies within the Flutter package:$reset\n');
- } else {
- print('${bold}Multiple errors were detected when looking at import dependencies within the Flutter package:$reset\n');
- }
- print(errors.join('\n\n'));
- print('$redLine\n');
- exit(1);
+ exitWithError(<String>[
+ if (errors.length == 1)
+ '${bold}An error was detected when looking at import dependencies within the Flutter package:$reset'
+ else
+ '${bold}Multiple errors were detected when looking at import dependencies within the Flutter package:$reset',
+ ...errors,
+ ]);
}
}
Future<void> verifyNoBadImportsInFlutterTools(String workingDirectory) async {
final List<String> errors = <String>[];
- final Iterable<File> files = Directory(path.join(workingDirectory, 'packages', 'flutter_tools', 'lib'))
- .listSync(recursive: true)
- .whereType<File>()
- .where((File file) => path.extension(file.path) == '.dart');
+ final List<File> files = _allFiles(path.join(workingDirectory, 'packages', 'flutter_tools', 'lib'), 'dart', minimumMatches: 200).toList();
for (File file in files) {
if (file.readAsStringSync().contains('package:flutter_tools/')) {
errors.add('$yellow${file.path}$reset imports flutter_tools.');
@@ -503,15 +466,13 @@
}
// Fail if any errors
if (errors.isNotEmpty) {
- print('$redLine');
- if (errors.length == 1) {
- print('${bold}An error was detected when looking at import dependencies within the flutter_tools package:$reset\n');
- } else {
- print('${bold}Multiple errors were detected when looking at import dependencies within the flutter_tools package:$reset\n');
- }
- print(errors.join('\n\n'));
- print('$redLine\n');
- exit(1);
+ exitWithError(<String>[
+ if (errors.length == 1)
+ '${bold}An error was detected when looking at import dependencies within the flutter_tools package:$reset'
+ else
+ '${bold}Multiple errors were detected when looking at import dependencies within the flutter_tools package:$reset',
+ ...errors.map((String paragraph) => '$paragraph\n'),
+ ]);
}
}
@@ -539,65 +500,533 @@
final String expectedCupertinoResult = await File(cupertinoLocalizationsFile).readAsString();
if (materialGenResult.stdout.trim() != expectedMaterialResult.trim()) {
- stderr
- ..writeln('<<<<<<< $materialLocalizationsFile')
- ..writeln(expectedMaterialResult.trim())
- ..writeln('=======')
- ..writeln(materialGenResult.stdout.trim())
- ..writeln('>>>>>>> gen_localizations')
- ..writeln('The contents of $materialLocalizationsFile are different from that produced by gen_localizations.')
- ..writeln()
- ..writeln('Did you forget to run gen_localizations.dart after updating a .arb file?');
- exit(1);
+ exitWithError(<String>[
+ '<<<<<<< $materialLocalizationsFile',
+ expectedMaterialResult.trim(),
+ '=======',
+ materialGenResult.stdout.trim(),
+ '>>>>>>> gen_localizations',
+ 'The contents of $materialLocalizationsFile are different from that produced by gen_localizations.',
+ '',
+ 'Did you forget to run gen_localizations.dart after updating a .arb file?',
+ ]);
}
if (cupertinoGenResult.stdout.trim() != expectedCupertinoResult.trim()) {
- stderr
- ..writeln('<<<<<<< $cupertinoLocalizationsFile')
- ..writeln(expectedCupertinoResult.trim())
- ..writeln('=======')
- ..writeln(cupertinoGenResult.stdout.trim())
- ..writeln('>>>>>>> gen_localizations')
- ..writeln('The contents of $cupertinoLocalizationsFile are different from that produced by gen_localizations.')
- ..writeln()
- ..writeln('Did you forget to run gen_localizations.dart after updating a .arb file?');
- exit(1);
+ exitWithError(<String>[
+ '<<<<<<< $cupertinoLocalizationsFile',
+ expectedCupertinoResult.trim(),
+ '=======',
+ cupertinoGenResult.stdout.trim(),
+ '>>>>>>> gen_localizations',
+ 'The contents of $cupertinoLocalizationsFile are different from that produced by gen_localizations.',
+ '',
+ 'Did you forget to run gen_localizations.dart after updating a .arb file?',
+ ]);
}
}
-Future<void> verifyNoTrailingSpaces() async {
- if (!Platform.isWindows) {
- final String commitRange = Platform.environment.containsKey('TEST_COMMIT_RANGE')
- ? Platform.environment['TEST_COMMIT_RANGE']
- : await _getCommitRange();
- final List<String> fileTypes = <String>[
- '*.dart', '*.cxx', '*.cpp', '*.cc', '*.c', '*.C', '*.h', '*.java', '*.mm', '*.m', '*.yml',
- ];
- final EvalResult changedFilesResult = await _evalCommand(
- 'git', <String>['diff', '-U0', '--no-color', '--name-only', commitRange, '--', ...fileTypes],
- workingDirectory: flutterRoot,
- );
- if (changedFilesResult.stdout == null || changedFilesResult.stdout.trim().isEmpty) {
- print('No files found that need to be checked for trailing whitespace.');
- return;
+Future<void> verifyNoTrailingSpaces(String workingDirectory, { int minimumMatches = 4000 }) async {
+ final List<File> files = _allFiles(workingDirectory, null, minimumMatches: minimumMatches)
+ .where((File file) => path.basename(file.path) != 'serviceaccount.enc')
+ .where((File file) => path.basename(file.path) != 'Ahem.ttf')
+ .where((File file) => path.extension(file.path) != '.snapshot')
+ .where((File file) => path.extension(file.path) != '.png')
+ .where((File file) => path.extension(file.path) != '.jpg')
+ .where((File file) => path.extension(file.path) != '.jar')
+ .toList();
+ final List<String> problems = <String>[];
+ for (File file in files) {
+ final List<String> lines = file.readAsLinesSync();
+ for (int index = 0; index < lines.length; index += 1) {
+ if (lines[index].endsWith(' ')) {
+ problems.add('${file.path}:${index + 1}: trailing U+0020 space character');
+ } else if (lines[index].endsWith('\t')) {
+ problems.add('${file.path}:${index + 1}: trailing U+0009 tab character');
+ }
}
- // Only include files that actually exist, so that we don't try and grep for
- // nonexistent files, which can occur when files are deleted or moved.
- final List<String> changedFiles = changedFilesResult.stdout.split('\n').where((String filename) {
- return File(filename).existsSync();
- }).toList();
- if (changedFiles.isNotEmpty) {
- await runCommand('grep',
- <String>[
- '--line-number',
- '--extended-regexp',
- r'[[:blank:]]$',
- ...changedFiles,
- ],
- workingDirectory: flutterRoot,
- failureMessage: '${red}Detected trailing whitespace in the file[s] listed above.$reset\nPlease remove them from the offending line[s].',
- expectNonZeroExit: true, // Just means a non-zero exit code is expected.
- expectedExitCode: 1, // Indicates that zero lines were found.
- );
+ if (lines.isNotEmpty && lines.last == '')
+ problems.add('${file.path}:${lines.length}: trailing blank line');
+ }
+ if (problems.isNotEmpty)
+ exitWithError(problems);
+}
+
+class Hash256 {
+ Hash256(this.a, this.b, this.c, this.d);
+
+ factory Hash256.fromDigest(Digest digest) {
+ assert(digest.bytes.length == 32);
+ return Hash256(
+ digest.bytes[ 0] << 56 |
+ digest.bytes[ 1] << 48 |
+ digest.bytes[ 2] << 40 |
+ digest.bytes[ 3] << 32 |
+ digest.bytes[ 4] << 24 |
+ digest.bytes[ 5] << 16 |
+ digest.bytes[ 6] << 8 |
+ digest.bytes[ 7] << 0,
+ digest.bytes[ 8] << 56 |
+ digest.bytes[ 9] << 48 |
+ digest.bytes[10] << 40 |
+ digest.bytes[11] << 32 |
+ digest.bytes[12] << 24 |
+ digest.bytes[13] << 16 |
+ digest.bytes[14] << 8 |
+ digest.bytes[15] << 0,
+ digest.bytes[16] << 56 |
+ digest.bytes[17] << 48 |
+ digest.bytes[18] << 40 |
+ digest.bytes[19] << 32 |
+ digest.bytes[20] << 24 |
+ digest.bytes[21] << 16 |
+ digest.bytes[22] << 8 |
+ digest.bytes[23] << 0,
+ digest.bytes[24] << 56 |
+ digest.bytes[25] << 48 |
+ digest.bytes[26] << 40 |
+ digest.bytes[27] << 32 |
+ digest.bytes[28] << 24 |
+ digest.bytes[29] << 16 |
+ digest.bytes[30] << 8 |
+ digest.bytes[31] << 0,
+ );
+ }
+
+ final int a;
+ final int b;
+ final int c;
+ final int d;
+
+ @override
+ bool operator ==(Object other) {
+ if (other.runtimeType != runtimeType)
+ return false;
+ return other is Hash256
+ && other.a == a
+ && other.b == b
+ && other.c == c
+ && other.d == d;
+ }
+
+ @override
+ int get hashCode => a ^ b ^ c ^ d;
+}
+
+// DO NOT ADD ANY ENTRIES TO THIS LIST.
+// We have a policy of not checking in binaries into this repository.
+// If you have binaries to add, please consult Hixie for advice.
+final Set<Hash256> _grandfatheredBinaries = <Hash256>{
+ // DEFAULT ICON IMAGES
+
+ // packages/flutter_tools/templates/app/android.tmpl/app/src/main/res/mipmap-hdpi/ic_launcher.png
+ // packages/flutter_tools/templates/module/android/host_app_common/app.tmpl/src/main/res/mipmap-hdpi/ic_launcher.png
+ // (also used by many examples)
+ Hash256(0x6A7C8F0D703E3682, 0x108F9662F8133022, 0x36240D3F8F638BB3, 0x91E32BFB96055FEF),
+
+ // packages/flutter_tools/templates/app/android.tmpl/app/src/main/res/mipmap-mdpi/ic_launcher.png
+ // (also used by many examples)
+ Hash256(0xC7C0C0189145E4E3, 0x2A401C61C9BDC615, 0x754B0264E7AFAE24, 0xE834BB81049EAF81),
+
+ // packages/flutter_tools/templates/app/android.tmpl/app/src/main/res/mipmap-xhdpi/ic_launcher.png
+ // (also used by many examples)
+ Hash256(0xE14AA40904929BF3, 0x13FDED22CF7E7FFC, 0xBF1D1AAC4263B5EF, 0x1BE8BFCE650397AA),
+
+ // packages/flutter_tools/templates/app/android.tmpl/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
+ // (also used by many examples)
+ Hash256(0x4D470BF22D5C17D8, 0x4EDC5F82516D1BA8, 0xA1C09559CD761CEF, 0xB792F86D9F52B540),
+
+ // packages/flutter_tools/templates/app/android.tmpl/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
+ // (also used by many examples)
+ Hash256(0x3C34E1F298D0C9EA, 0x3455D46DB6B7759C, 0x8211A49E9EC6E44B, 0x635FC5C87DFB4180),
+
+ // packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
+ // packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
+ // (also used by a few examples)
+ Hash256(0x7770183009E91411, 0x2DE7D8EF1D235A6A, 0x30C5834424858E0D, 0x2F8253F6B8D31926),
+
+ // packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
+ // packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
+ // (also used by many examples)
+ Hash256(0x5925DAB509451F9E, 0xCBB12CE8A625F9D4, 0xC104718EE20CAFF8, 0xB1B51032D1CD8946),
+
+ // packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
+ // packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
+ // packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
+ // packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
+ // (also used by many examples)
+ Hash256(0xC4D9A284C12301D0, 0xF50E248EC53ED51A, 0x19A10147B774B233, 0x08399250B0D44C55),
+
+ // packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
+ // packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
+ // (also used by many examples)
+ Hash256(0xBF97F9D3233F33E1, 0x389B09F7B8ADD537, 0x41300CB834D6C7A5, 0xCA32CBED363A4FB2),
+
+ // packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
+ // packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
+ // (also used by many examples)
+ Hash256(0x285442F69A06B45D, 0x9D79DF80321815B5, 0x46473548A37B7881, 0x9B68959C7B8ED237),
+
+ // packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
+ // packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
+ // (also used by many examples)
+ Hash256(0x2AB64AF8AC727EA9, 0x9C6AB9EAFF847F46, 0xFBF2A9A0A78A0ABC, 0xBF3180F3851645B4),
+
+ // packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
+ // packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
+ // (also used by many examples)
+ Hash256(0x9DCA09F4E5ED5684, 0xD3C4DFF41F4E8B7C, 0xB864B438172D72BE, 0x069315FA362930F9),
+
+ // packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
+ // packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
+ // (also used by many examples)
+ Hash256(0xD5AD04DE321EF37C, 0xACC5A7B960AFCCE7, 0x1BDCB96FA020C482, 0x49C1545DD1A0F497),
+
+ // packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
+ // packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
+ // packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
+ // packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
+ // (also used by many examples)
+ Hash256(0x809ABFE75C440770, 0xC13C4E2E46D09603, 0xC22053E9D4E0E227, 0x5DCB9C1DCFBB2C75),
+
+ // packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
+ // packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
+ // (also used by many examples)
+ Hash256(0x3DB08CB79E7B01B9, 0xE81F956E3A0AE101, 0x48D0FAFDE3EA7AA7, 0x0048DF905AA52CFD),
+
+ // packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
+ // packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
+ // (also used by many examples)
+ Hash256(0x23C13D463F5DCA5C, 0x1F14A14934003601, 0xC29F1218FD461016, 0xD8A22CEF579A665F),
+
+ // packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
+ // packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
+ // (also used by many examples)
+ Hash256(0x6DB7726530D71D3F, 0x52CB59793EB69131, 0x3BAA04796E129E1E, 0x043C0A58A1BFFD2F),
+
+ // packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
+ // packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
+ // (also used by many examples)
+ Hash256(0xCEE565F5E6211656, 0x9B64980B209FD5CA, 0x4B3D3739011F5343, 0x250B33A1A2C6EB65),
+
+ // packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
+ // packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
+ // packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
+ // packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
+ // packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
+ // packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
+ // (also used by many examples)
+ Hash256(0x93AE7D494FAD0FB3, 0x0CBF3AE746A39C4B, 0xC7A0F8BBF87FBB58, 0x7A3F3C01F3C5CE20),
+
+ // packages/flutter_tools/templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png
+ // (also used by a few examples)
+ Hash256(0xB18BEBAAD1AD6724, 0xE48BCDF699BA3927, 0xDF3F258FEBE646A3, 0xAB5C62767C6BAB40),
+
+ // packages/flutter_tools/templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png
+ // (also used by a few examples)
+ Hash256(0xF90D839A289ECADB, 0xF2B0B3400DA43EB8, 0x08B84908335AE4A0, 0x07457C4D5A56A57C),
+
+ // packages/flutter_tools/templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png
+ // (also used by a few examples)
+ Hash256(0x592C2ABF84ADB2D3, 0x91AED8B634D3233E, 0x2C65369F06018DCD, 0x8A4B27BA755EDCBE),
+
+ // packages/flutter_tools/templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png
+ // (also used by a few examples)
+ Hash256(0x75D9A0C034113CA8, 0xA1EC11C24B81F208, 0x6630A5A5C65C7D26, 0xA5DC03A1C0A4478C),
+
+ // packages/flutter_tools/templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png
+ // (also used by a few examples)
+ Hash256(0xA896E65745557732, 0xC72BD4EE3A10782F, 0xE2AA95590B5AF659, 0x869E5808DB9C01C1),
+
+ // packages/flutter_tools/templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png
+ // (also used by a few examples)
+ Hash256(0x3A69A8A1AAC5D9A8, 0x374492AF4B6D07A4, 0xCE637659EB24A784, 0x9C4DFB261D75C6A3),
+
+ // packages/flutter_tools/templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png
+ // (also used by a few examples)
+ Hash256(0xD29D4E0AF9256DC9, 0x2D0A8F8810608A5E, 0x64A132AD8B397CA2, 0xC4DDC0B1C26A68C3),
+
+
+ // GALLERY ICONS
+
+ // examples/flutter_gallery/android/app/src/main/res/mipmap-hdpi/ic_background.png
+ Hash256(0x03CFDE53C249475C, 0x277E8B8E90AC8A13, 0xE5FC13C358A94CCB, 0x67CA866C9862A0DD),
+
+ // examples/flutter_gallery/android/app/src/main/res/mipmap-hdpi/ic_foreground.png
+ Hash256(0x86A83E23A505EFCC, 0x39C358B699EDE12F, 0xC088EE516A1D0C73, 0xF3B5D74DDAD164B1),
+
+ // examples/flutter_gallery/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
+ Hash256(0xD813B1A77320355E, 0xB68C485CD47D0F0F, 0x3C7E1910DCD46F08, 0x60A6401B8DC13647),
+
+ // examples/flutter_gallery/android/app/src/main/res/mipmap-xhdpi/ic_background.png
+ Hash256(0x35AFA76BD5D6053F, 0xEE927436C78A8794, 0xA8BA5F5D9FC9653B, 0xE5B96567BB7215ED),
+
+ // examples/flutter_gallery/android/app/src/main/res/mipmap-xhdpi/ic_foreground.png
+ Hash256(0x263CE9B4F1F69B43, 0xEBB08AE9FE8F80E7, 0x95647A59EF2C040B, 0xA8AEB246861A7DFF),
+
+ // examples/flutter_gallery/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
+ Hash256(0x5E1A93C3653BAAFF, 0x1AAC6BCEB8DCBC2F, 0x2AE7D68ECB07E507, 0xCB1FA8354B28313A),
+
+ // examples/flutter_gallery/android/app/src/main/res/mipmap-xxhdpi/ic_background.png
+ Hash256(0xA5C77499151DDEC6, 0xDB40D0AC7321FD74, 0x0646C0C0F786743F, 0x8F3C3C408CAC5E8C),
+
+ // examples/flutter_gallery/android/app/src/main/res/mipmap-xxhdpi/ic_foreground.png
+ Hash256(0x33DE450980A2A16B, 0x1982AC7CDC1E7B01, 0x919E07E0289C2139, 0x65F85BCED8895FEF),
+
+ // examples/flutter_gallery/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
+ Hash256(0xC3B8577F4A89BA03, 0x830944FB06C3566B, 0x4C99140A2CA52958, 0x089BFDC3079C59B7),
+
+ // examples/flutter_gallery/android/app/src/main/res/mipmap-xxxhdpi/ic_background.png
+ Hash256(0xDEBC241D6F9C5767, 0x8980FDD46FA7ED0C, 0x5B8ACD26BCC5E1BC, 0x473C89B432D467AD),
+
+ // examples/flutter_gallery/android/app/src/main/res/mipmap-xxxhdpi/ic_foreground.png
+ Hash256(0xBEFE5F7E82BF8B64, 0x148D869E3742004B, 0xF821A9F5A1BCDC00, 0x357D246DCC659DC2),
+
+ // examples/flutter_gallery/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
+ Hash256(0xC385404341FF9EDD, 0x30FBE76F0EC99155, 0x8EA4F4AFE8CC0C60, 0x1CA3EDEF177E1DA8),
+
+ // examples/flutter_gallery/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-1024.png
+ Hash256(0x6BE5751A29F57A80, 0x36A4B31CC542C749, 0x984E49B22BD65CAA, 0x75AE8B2440848719),
+
+ // examples/flutter_gallery/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-120.png
+ Hash256(0x9972A2264BFA8F8D, 0x964AFE799EADC1FA, 0x2247FB31097F994A, 0x1495DC32DF071793),
+
+ // examples/flutter_gallery/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-152.png
+ Hash256(0x4C7CC9B09BEEDA24, 0x45F57D6967753910, 0x57D68E1A6B883D2C, 0x8C52701A74F1400F),
+
+ // examples/flutter_gallery/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-167.png
+ Hash256(0x66DACAC1CFE4D349, 0xDBE994CB9125FFD7, 0x2D795CFC9CF9F739, 0xEDBB06CE25082E9C),
+
+ // examples/flutter_gallery/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-180.png
+ Hash256(0x5188621015EBC327, 0xC9EF63AD76E60ECE, 0xE82BDC3E4ABF09E2, 0xEE0139FA7C0A2BE5),
+
+ // examples/flutter_gallery/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-20.png
+ Hash256(0x27D2752D04EE9A6B, 0x78410E208F74A6CD, 0xC90D9E03B73B8C60, 0xD05F7D623E790487),
+
+ // examples/flutter_gallery/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-29.png
+ Hash256(0xBB20556B2826CF85, 0xD5BAC73AA69C2AC3, 0x8E71DAD64F15B855, 0xB30CB73E0AF89307),
+
+ // examples/flutter_gallery/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-40.png
+ Hash256(0x623820FA45CDB0AC, 0x808403E34AD6A53E, 0xA3E9FDAE83EE0931, 0xB020A3A4EF2CDDE7),
+
+ // examples/flutter_gallery/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-58.png
+ Hash256(0xC6D631D1E107215E, 0xD4A58FEC5F3AA4B5, 0x0AE9724E07114C0C, 0x453E5D87C2CAD3B3),
+
+ // examples/flutter_gallery/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-60.png
+ Hash256(0x4B6F58D1EB8723C6, 0xE717A0D09FEC8806, 0x90C6D1EF4F71836E, 0x618672827979B1A2),
+
+ // examples/flutter_gallery/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-76.png
+ Hash256(0x0A1744CC7634D508, 0xE85DD793331F0C8A, 0x0B7C6DDFE0975D8F, 0x29E91C905BBB1BED),
+
+ // examples/flutter_gallery/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-80.png
+ Hash256(0x24032FBD1E6519D6, 0x0BA93C0D5C189554, 0xF50EAE23756518A2, 0x3FABACF4BD5DAF08),
+
+ // examples/flutter_gallery/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-87.png
+ Hash256(0xC17BAE6DF6BB234A, 0xE0AF4BEB0B805F12, 0x14E74EB7AA9A30F1, 0x5763689165DA7DDF),
+
+
+ // STOCKS ICONS
+
+ // examples/stocks/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
+ Hash256(0x74052AB5241D4418, 0x7085180608BC3114, 0xD12493C50CD8BBC7, 0x56DED186C37ACE84),
+
+ // examples/stocks/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
+ Hash256(0xE37947332E3491CB, 0x82920EE86A086FEA, 0xE1E0A70B3700A7DA, 0xDCAFBDD8F40E2E19),
+
+ // examples/stocks/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
+ Hash256(0xE608CDFC0C8579FB, 0xE38873BAAF7BC944, 0x9C9D2EE3685A4FAE, 0x671EF0C8BC41D17C),
+
+ // examples/stocks/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
+ Hash256(0xBD53D86977DF9C54, 0xF605743C5ABA114C, 0x9D51D1A8BB917E1A, 0x14CAA26C335CAEBD),
+
+ // examples/stocks/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
+ Hash256(0x64E4D02262C4F3D0, 0xBB4FDC21CD0A816C, 0x4CD2A0194E00FB0F, 0x1C3AE4142FAC0D15),
+
+ // examples/stocks/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png
+ // examples/stocks/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@3x.png
+ Hash256(0x5BA3283A76918FC0, 0xEE127D0F22D7A0B6, 0xDF03DAED61669427, 0x93D89DDD87A08117),
+
+ // examples/stocks/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png
+ Hash256(0xCD7F26ED31DEA42A, 0x535D155EC6261499, 0x34E6738255FDB2C4, 0xBD8D4BDDE9A99B05),
+
+ // examples/stocks/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-76.png
+ Hash256(0x3FA1225FC9A96A7E, 0xCD071BC42881AB0E, 0x7747EB72FFB72459, 0xA37971BBAD27EE24),
+
+ // examples/stocks/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png
+ Hash256(0xCD867001ACD7BBDB, 0x25CDFD452AE89FA2, 0x8C2DC980CAF55F48, 0x0B16C246CFB389BC),
+
+ // examples/stocks/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-83.5@2x.png
+ Hash256(0x848E9736E5C4915A, 0x7945BCF6B32FD56B, 0x1F1E7CDDD914352E, 0xC9681D38EF2A70DA),
+
+ // examples/stocks/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Notification.png
+ Hash256(0x654BA7D6C4E05CA0, 0x7799878884EF8F11, 0xA383E1F24CEF5568, 0x3C47604A966983C8),
+
+ // examples/stocks/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Notification@2x.png
+ // examples/stocks/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small-40.png
+ Hash256(0x743056FE7D83FE42, 0xA2990825B6AD0415, 0x1AF73D0D43B227AA, 0x07EBEA9B767381D9),
+
+ // examples/stocks/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Notification@3x.png
+ Hash256(0xA7E1570812D119CF, 0xEF4B602EF28DD0A4, 0x100D066E66F5B9B9, 0x881765DC9303343B),
+
+ // examples/stocks/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@2x.png
+ Hash256(0xB4102839A1E41671, 0x62DACBDEFA471953, 0xB1EE89A0AB7594BE, 0x1D9AC1E67DC2B2CE),
+
+ // examples/stocks/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small.png
+ Hash256(0x70AC6571B593A967, 0xF1CBAEC9BC02D02D, 0x93AD766D8290ADE6, 0x840139BF9F219019),
+
+ // examples/stocks/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png
+ Hash256(0x5D87A78386DA2C43, 0xDDA8FEF2CA51438C, 0xE5A276FE28C6CF0A, 0xEBE89085B56665B6),
+
+ // examples/stocks/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png
+ Hash256(0x4D9F5E81F668DA44, 0xB20A77F8BF7BA2E1, 0xF384533B5AD58F07, 0xB3A2F93F8635CD96),
+
+
+ // LEGACY ICONS
+
+ // dev/benchmarks/complex_layout/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png
+ // dev/benchmarks/microbenchmarks/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png
+ // examples/flutter_view/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png
+ // (not really sure where this came from, or why neither the template nor most examples use them)
+ Hash256(0x6E645DC9ED913AAD, 0xB50ED29EEB16830D, 0xB32CA12F39121DB9, 0xB7BC1449DDDBF8B8),
+
+ // dev/benchmarks/macrobenchmarks/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
+ // dev/integration_tests/codegen/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
+ // dev/integration_tests/ios_add2app/ios_add2app/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
+ // dev/integration_tests/release_smoke_test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
+ Hash256(0xDEFAC77E08EC71EC, 0xA04CCA3C95D1FC33, 0xB9F26E1CB15CB051, 0x47DEFC79CDD7C158),
+
+ // examples/flutter_view/ios/Runner/ic_add.png
+ // examples/platform_view/ios/Runner/ic_add.png
+ Hash256(0x3CCE7450334675E2, 0xE3AABCA20B028993, 0x127BE82FE0EB3DFF, 0x8B027B3BAF052F2F),
+
+ // examples/image_list/images/coast.jpg
+ Hash256(0xDA957FD30C51B8D2, 0x7D74C2C918692DC4, 0xD3C5C99BB00F0D6B, 0x5EBB30395A6EDE82),
+
+ // examples/image_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
+ Hash256(0xB5792CA06F48A431, 0xD4379ABA2160BD5D, 0xE92339FC64C6A0D3, 0x417AA359634CD905),
+
+
+ // TEST ASSETS
+
+ // dev/benchmarks/macrobenchmarks/assets/999x1000.png
+ Hash256(0x553E9C36DFF3E610, 0x6A608BDE822A0019, 0xDE4F1769B6FBDB97, 0xBC3C20E26B839F59),
+
+ // dev/bots/test/analyze-test-input/root/packages/foo/serviceaccount.enc
+ Hash256(0xA8100AE6AA1940D0, 0xB663BB31CD466142, 0xEBBDBD5187131B92, 0xD93818987832EB89),
+
+ // dev/automated_tests/icon/test.png
+ Hash256(0xE214B4A0FEEEC6FA, 0x8E7AA8CC9BFBEC40, 0xBCDAC2F2DEBC950F, 0x75AF8EBF02BCE459),
+
+ // dev/integration_tests/android_splash_screens/splash_screen_kitchen_sink/android/app/src/main/res/drawable-land-xxhdpi/flutter_splash_screen.png
+ // dev/integration_tests/android_splash_screens/splash_screen_kitchen_sink/android/app/src/main/res/mipmap-land-xxhdpi/flutter_splash_screen.png
+ Hash256(0x2D4F8D7A3DFEF9D3, 0xA0C66938E169AB58, 0x8C6BBBBD1973E34E, 0x03C428416D010182),
+
+ // dev/integration_tests/android_splash_screens/splash_screen_kitchen_sink/android/app/src/main/res/drawable-xxhdpi/flutter_splash_screen.png
+ // dev/integration_tests/android_splash_screens/splash_screen_kitchen_sink/android/app/src/main/res/mipmap-xxhdpi/flutter_splash_screen.png
+ Hash256(0xCD46C01BAFA3B243, 0xA6AA1645EEDDE481, 0x143AC8ABAB1A0996, 0x22CAA9D41F74649A),
+
+ // dev/integration_tests/flutter_driver_screenshot_test/assets/red_square.png
+ Hash256(0x40054377E1E084F4, 0x4F4410CE8F44C210, 0xABA945DFC55ED0EF, 0x23BDF9469E32F8D3),
+
+ // dev/integration_tests/flutter_driver_screenshot_test/test_driver/goldens/red_square_image/iPhone7,2.png
+ Hash256(0x7F9D27C7BC418284, 0x01214E21CA886B2F, 0x40D9DA2B31AE7754, 0x71D68375F9C8A824),
+
+ // examples/flutter_view/assets/flutter-mark-square-64.png
+ // examples/platform_view/assets/flutter-mark-square-64.png
+ Hash256(0xF416B0D8AC552EC8, 0x819D1F492D1AB5E6, 0xD4F20CF45DB47C22, 0x7BB431FEFB5B67B2),
+
+ // packages/flutter_tools/test/data/intellij/plugins/Dart/lib/Dart.jar
+ Hash256(0x576E489D788A13DB, 0xBF40E4A39A3DAB37, 0x15CCF0002032E79C, 0xD260C69B29E06646),
+
+ // packages/flutter_tools/test/data/intellij/plugins/flutter-intellij.jar
+ Hash256(0x4C67221E25626CB2, 0x3F94E1F49D34E4CF, 0x3A9787A514924FC5, 0x9EF1E143E5BC5690),
+
+
+ // HISTORICAL DEVICE LAB IMAGES
+
+ // dev/devicelab/images/agent-statuses.png
+ Hash256(0x0A43016C84095771, 0x1C610E1C01B1C3B2, 0x681DA0B2062C02AA, 0x31CC7FB3FDC298FD),
+
+ // dev/devicelab/images/broken-test.png
+ Hash256(0x319459F42967A888, 0x90B20063544D6707, 0x849E1E3447CC56A5, 0xE226C47DE34F13AD),
+
+ // dev/devicelab/images/legend.png
+ Hash256(0x92A98975AF5F076C, 0xE7BFAB86B0DD7A3D, 0xC45287B706D10456, 0x4E512BA3C41B2749),
+
+
+ // MISCELLANEOUS
+
+ // dev/bots/serviceaccount.enc
+ Hash256(0x1F19ADB4D80AFE8C, 0xE61899BA776B1A8D, 0xCA398C75F5F7050D, 0xFB0E72D7FBBBA69B),
+
+ // dev/docs/favicon.ico
+ Hash256(0x67368CA1733E933A, 0xCA3BC56EF0695012, 0xE862C371AD4412F0, 0x3EC396039C609965),
+
+ // dev/snippets/assets/code_sample.png
+ Hash256(0xAB2211A47BDA001D, 0x173A52FD9C75EBC7, 0xE158942FFA8243AD, 0x2A148871990D4297),
+
+ // dev/snippets/assets/code_snippet.png
+ Hash256(0xDEC70574DA46DFBB, 0xFA657A771F3E1FBD, 0xB265CFC6B2AA5FE3, 0x93BA4F325D1520BA),
+
+ // packages/flutter_tools/static/Ahem.ttf
+ Hash256(0x63D2ABD0041C3E3B, 0x4B52AD8D382353B5, 0x3C51C6785E76CE56, 0xED9DACAD2D2E31C4),
+};
+
+Future<void> verifyNoBinaries(String workingDirectory, { Set<Hash256> grandfatheredBinaries }) async {
+ // Please do not add anything to the _grandfatheredBinaries set above.
+ // We have a policy of not checking in binaries into this repository.
+ // If you have binaries to add, please consult Hixie for advice.
+ assert(
+ _grandfatheredBinaries
+ .expand<int>((Hash256 hash) => <int>[hash.a, hash.b, hash.c, hash.d])
+ .reduce((int value, int element) => value ^ element) == 0x39A050CD69434936 // Please do not modify this line.
+ );
+ grandfatheredBinaries ??= _grandfatheredBinaries;
+ if (!Platform.isWindows) { // TODO(ianh): Port this to Windows
+ final EvalResult evalResult = await _evalCommand(
+ 'git', <String>['ls-files', '-z'],
+ workingDirectory: workingDirectory,
+ );
+ if (evalResult.exitCode != 0) {
+ exitWithError(<String>[
+ 'git ls-filese failed with exit code ${evalResult.exitCode}',
+ '${bold}stdout:$reset',
+ evalResult.stdout,
+ '${bold}stderr:$reset',
+ evalResult.stderr,
+ ]);
+ }
+ final List<String> filenames = evalResult
+ .stdout
+ .split('\x00');
+ assert(filenames.last.isEmpty); // git ls-files gives a trailing blank 0x00
+ filenames.removeLast();
+ final List<File> files = filenames
+ .map<File>((String filename) => File(path.join(workingDirectory, filename)))
+ .toList();
+ final List<String> problems = <String>[];
+ for (File file in files) {
+ final Uint8List bytes = file.readAsBytesSync();
+ try {
+ utf8.decode(bytes);
+ } on FormatException catch (error) {
+ if (error.message.startsWith('Bad UTF-8 encoding ')) {
+ final Digest digest = sha256.convert(bytes);
+ if (!grandfatheredBinaries.contains(Hash256.fromDigest(digest)))
+ problems.add('${file.path}:${error.offset}: file is not valid UTF-8');
+ } else {
+ rethrow;
+ }
+ }
+ }
+ if (problems.isNotEmpty) {
+ exitWithError(<String>[
+ ...problems,
+ 'All files in this repository must be UTF-8. In particular, images and other binaries',
+ 'must not be checked into this repository. This is because we are very sensitive to the',
+ 'size of the repository as it is distributed to all our developers. If you have a binary',
+ 'to which you need access, you should consider how to fetch it from another repository;',
+ 'for example, the "assets-for-api-docs" repository is used for images in API docs.',
+ ]);
}
}
}
@@ -617,8 +1046,10 @@
return true;
}
-Iterable<File> _allFiles(String workingDirectory, String extension) sync* {
+Iterable<File> _allFiles(String workingDirectory, String extension, { @required int minimumMatches }) sync* {
+ assert(extension == null || !extension.startsWith('.'), 'Extension argument should not start with a period.');
final Set<FileSystemEntity> pending = <FileSystemEntity>{ Directory(workingDirectory) };
+ int matches = 0;
while (pending.isNotEmpty) {
final FileSystemEntity entity = pending.first;
pending.remove(entity);
@@ -631,13 +1062,17 @@
continue;
if (path.basename(entity.path) == 'gradlew.bat')
continue;
- if (path.extension(entity.path) == '.$extension')
+ if (extension == null || path.extension(entity.path) == '.$extension') {
+ matches += 1;
yield entity;
+ }
} else if (entity is Directory) {
if (File(path.join(entity.path, '.dartignore')).existsSync())
continue;
if (path.basename(entity.path) == '.git')
continue;
+ if (path.basename(entity.path) == '.gradle')
+ continue;
if (path.basename(entity.path) == '.dart_tool')
continue;
if (path.basename(entity.path) == 'build')
@@ -645,28 +1080,7 @@
pending.addAll(entity.listSync());
}
}
-}
-
-Future<String> _getCommitRange() async {
- // Using --fork-point is more conservative, and will result in the correct
- // fork point, but when running locally, it may return nothing. Git is
- // guaranteed to return a (reasonable, but maybe not optimal) result when not
- // using --fork-point, so we fall back to that if we can't get a definitive
- // fork point. See "git merge-base" documentation for more info.
- EvalResult result = await _evalCommand(
- 'git',
- <String>['merge-base', '--fork-point', 'FETCH_HEAD', 'HEAD'],
- workingDirectory: flutterRoot,
- allowNonZeroExit: true,
- );
- if (result.exitCode != 0) {
- result = await _evalCommand(
- 'git',
- <String>['merge-base', 'FETCH_HEAD', 'HEAD'],
- workingDirectory: flutterRoot,
- );
- }
- return result.stdout.trim();
+ assert(matches >= minimumMatches, 'Expected to find at least $minimumMatches files with extension ".$extension" in "$workingDirectory", but only found $matches.');
}
class EvalResult {
@@ -681,6 +1095,7 @@
final int exitCode;
}
+// TODO(ianh): Refactor this to reuse the code in run_command.dart
Future<EvalResult> _evalCommand(String executable, List<String> arguments, {
@required String workingDirectory,
Map<String, String> environment,
@@ -714,14 +1129,11 @@
if (exitCode != 0 && !allowNonZeroExit) {
stderr.write(result.stderr);
- print(
- '$redLine\n'
- '${bold}ERROR:$red Last command exited with $exitCode.$reset\n'
- '${bold}Command:$red $commandDescription$reset\n'
- '${bold}Relative working directory:$red $relativeWorkingDir$reset\n'
- '$redLine'
- );
- exit(1);
+ exitWithError(<String>[
+ '${bold}ERROR:$red Last command exited with $exitCode.$reset',
+ '${bold}Command:$red $commandDescription$reset',
+ '${bold}Relative working directory:$red $relativeWorkingDir$reset',
+ ]);
}
return result;
@@ -729,8 +1141,8 @@
Future<void> _runFlutterAnalyze(String workingDirectory, {
List<String> options = const <String>[],
-}) {
- return runCommand(
+}) async {
+ return await runCommand(
flutter,
<String>['analyze', '--dartdocs', ...options],
workingDirectory: workingDirectory,
@@ -741,10 +1153,7 @@
final RegExp _importMetaPattern = RegExp(r'''^\s*import (['"])package:meta/meta\.dart\1''');
Set<String> _findFlutterDependencies(String srcPath, List<String> errors, { bool checkForMeta = false }) {
- return Directory(srcPath)
- .listSync(recursive: true)
- .whereType<File>()
- .where((File file) => path.extension(file.path) == '.dart')
+ return _allFiles(srcPath, 'dart', minimumMatches: 1)
.map<Set<String>>((File file) {
final Set<String> result = <String>{};
for (String line in file.readAsLinesSync()) {
diff --git a/dev/bots/docs.sh b/dev/bots/docs.sh
index 44b326f..d9e2924 100755
--- a/dev/bots/docs.sh
+++ b/dev/bots/docs.sh
@@ -149,4 +149,3 @@
deploy 5 docs-flutter-dev
fi
fi
-
diff --git a/dev/bots/download_android_sdk.sh b/dev/bots/download_android_sdk.sh
index 84817f4..e909f4d 100755
--- a/dev/bots/download_android_sdk.sh
+++ b/dev/bots/download_android_sdk.sh
@@ -26,5 +26,3 @@
"build-tools;27.0.3" \
"extras;google;m2repository" \
"extras;android;m2repository"
-
-
diff --git a/dev/bots/pubspec.yaml b/dev/bots/pubspec.yaml
index 4665457..f8b379e 100644
--- a/dev/bots/pubspec.yaml
+++ b/dev/bots/pubspec.yaml
@@ -6,16 +6,17 @@
sdk: ">=2.2.2 <3.0.0"
dependencies:
- path: 1.6.4
args: 1.5.2
- meta: 1.1.8
- process: 3.0.12
- platform: 2.2.1
- http: 0.12.0+2
- http_parser: 3.1.3
- test: 1.9.4
+ crypto: 2.1.3
googleapis: 0.54.0
googleapis_auth: 0.2.11
+ http: 0.12.0+3
+ http_parser: 3.1.3
+ meta: 1.1.8
+ path: 1.6.4
+ platform: 2.2.1
+ process: 3.0.12
+ test: 1.9.4
_discoveryapis_commons: 0.1.9 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
analyzer: 0.38.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -24,8 +25,7 @@
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
collection: 1.14.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- crypto: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
file: 5.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -70,4 +70,4 @@
mockito: 4.1.1
test_api: 0.2.11
-# PUBSPEC CHECKSUM: 2235
+# PUBSPEC CHECKSUM: 5e38
diff --git a/dev/bots/run_command.dart b/dev/bots/run_command.dart
index 352865f..1407067 100644
--- a/dev/bots/run_command.dart
+++ b/dev/bots/run_command.dart
@@ -4,44 +4,14 @@
import 'dart:async';
import 'dart:convert';
-import 'dart:io';
+import 'dart:core' hide print;
+import 'dart:io' hide exit;
import 'package:path/path.dart' as path;
-final bool hasColor = stdout.supportsAnsiEscapes;
+import 'utils.dart';
-final String bold = hasColor ? '\x1B[1m' : ''; // used for shard titles
-final String red = hasColor ? '\x1B[31m' : ''; // used for errors
-final String green = hasColor ? '\x1B[32m' : ''; // used for section titles, commands
-final String yellow = hasColor ? '\x1B[33m' : ''; // unused
-final String cyan = hasColor ? '\x1B[36m' : ''; // used for paths
-final String reverse = hasColor ? '\x1B[7m' : ''; // used for clocks
-final String reset = hasColor ? '\x1B[0m' : '';
-final String redLine = '$red━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━$reset';
-
-String get clock {
- final DateTime now = DateTime.now();
- return '$reverse▌'
- '${now.hour.toString().padLeft(2, "0")}:'
- '${now.minute.toString().padLeft(2, "0")}:'
- '${now.second.toString().padLeft(2, "0")}'
- '▐$reset';
-}
-
-String prettyPrintDuration(Duration duration) {
- String result = '';
- final int minutes = duration.inMinutes;
- if (minutes > 0)
- result += '${minutes}min ';
- final int seconds = duration.inSeconds - minutes * 60;
- final int milliseconds = duration.inMilliseconds - (seconds * 1000 + minutes * 60 * 1000);
- result += '$seconds.${milliseconds.toString().padLeft(3, "0")}s';
- return result;
-}
-
-void printProgress(String action, String workingDir, String command) {
- print('$clock $action: cd $cyan$workingDir$reset; $green$command$reset');
-}
+// TODO(ianh): These two functions should be refactored into something that avoids all this code duplication.
Stream<String> runAndGetStdout(String executable, List<String> arguments, {
String workingDirectory,
@@ -49,11 +19,14 @@
bool expectNonZeroExit = false,
int expectedExitCode,
String failureMessage,
- Function beforeExit,
+ bool skip = false,
}) async* {
final String commandDescription = '${path.relative(executable, from: workingDirectory)} ${arguments.join(' ')}';
final String relativeWorkingDir = path.relative(workingDirectory);
-
+ if (skip) {
+ printProgress('SKIPPING', relativeWorkingDir, commandDescription);
+ return;
+ }
printProgress('RUNNING', relativeWorkingDir, commandDescription);
final Stopwatch time = Stopwatch()..start();
@@ -64,26 +37,21 @@
stderr.addStream(process.stderr);
final Stream<String> lines = process.stdout.transform(utf8.decoder).transform(const LineSplitter());
- await for (String line in lines) {
+ await for (String line in lines)
yield line;
- }
final int exitCode = await process.exitCode;
- print('$clock ELAPSED TIME: ${prettyPrintDuration(time.elapsed)} for $green$commandDescription$reset in $cyan$relativeWorkingDir$reset');
if ((exitCode == 0) == expectNonZeroExit || (expectedExitCode != null && exitCode != expectedExitCode)) {
- if (failureMessage != null) {
- print(failureMessage);
- }
- print(
- '$redLine\n'
- '${bold}ERROR: ${red}Last command exited with $exitCode (expected: ${expectNonZeroExit ? (expectedExitCode ?? 'non-zero') : 'zero'}).$reset\n'
- '${bold}Command: $green$commandDescription$reset\n'
- '${bold}Relative working directory: $cyan$relativeWorkingDir$reset\n'
- '$redLine'
- );
- beforeExit?.call();
- exit(1);
+ exitWithError(<String>[
+ if (failureMessage != null)
+ failureMessage
+ else
+ '${bold}ERROR: ${red}Last command exited with $exitCode (expected: ${expectNonZeroExit ? (expectedExitCode ?? 'non-zero') : 'zero'}).$reset',
+ '${bold}Command: $green$commandDescription$reset',
+ '${bold}Relative working directory: $cyan$relativeWorkingDir$reset',
+ ]);
}
+ print('$clock ELAPSED TIME: ${prettyPrintDuration(time.elapsed)} for $green$commandDescription$reset in $cyan$relativeWorkingDir$reset');
}
Future<void> runCommand(String executable, List<String> arguments, {
@@ -97,9 +65,10 @@
bool skip = false,
bool Function(String) removeLine,
}) async {
- assert((outputMode == OutputMode.capture) == (output != null),
- 'The output parameter must be non-null with and only with '
- 'OutputMode.capture');
+ assert(
+ (outputMode == OutputMode.capture) == (output != null),
+ 'The output parameter must be non-null with and only with OutputMode.capture',
+ );
final String commandDescription = '${path.relative(executable, from: workingDirectory)} ${arguments.join(' ')}';
final String relativeWorkingDir = path.relative(workingDirectory);
@@ -137,18 +106,12 @@
}
final int exitCode = await process.exitCode;
- print('$clock ELAPSED TIME: ${prettyPrintDuration(time.elapsed)} for $green$commandDescription$reset in $cyan$relativeWorkingDir$reset');
-
if (output != null) {
output.stdout = _flattenToString(await savedStdout);
output.stderr = _flattenToString(await savedStderr);
}
if ((exitCode == 0) == expectNonZeroExit || (expectedExitCode != null && exitCode != expectedExitCode)) {
- if (failureMessage != null) {
- print(failureMessage);
- }
-
// Print the output when we get unexpected results (unless output was
// printed already).
switch (outputMode) {
@@ -160,15 +123,16 @@
stderr.writeln(_flattenToString(await savedStderr));
break;
}
- print(
- '$redLine\n'
- '${bold}ERROR: ${red}Last command exited with $exitCode (expected: ${expectNonZeroExit ? (expectedExitCode ?? 'non-zero') : 'zero'}).$reset\n'
- '${bold}Command: $green$commandDescription$reset\n'
- '${bold}Relative working directory: $cyan$relativeWorkingDir$reset\n'
- '$redLine'
- );
- exit(1);
+ exitWithError(<String>[
+ if (failureMessage != null)
+ failureMessage
+ else
+ '${bold}ERROR: ${red}Last command exited with $exitCode (expected: ${expectNonZeroExit ? (expectedExitCode ?? 'non-zero') : 'zero'}).$reset',
+ '${bold}Command: $green$commandDescription$reset',
+ '${bold}Relative working directory: $cyan$relativeWorkingDir$reset',
+ ]);
}
+ print('$clock ELAPSED TIME: ${prettyPrintDuration(time.elapsed)} for $green$commandDescription$reset in $cyan$relativeWorkingDir$reset');
}
/// Flattens a nested list of UTF-8 code units into a single string.
diff --git a/dev/bots/test.dart b/dev/bots/test.dart
index d183330..f756d70 100644
--- a/dev/bots/test.dart
+++ b/dev/bots/test.dart
@@ -13,6 +13,7 @@
import 'flutter_compact_formatter.dart';
import 'run_command.dart';
+import 'utils.dart';
typedef ShardRunner = Future<void> Function();
@@ -98,22 +99,28 @@
/// SHARD=tool_tests bin/cache/dart-sdk/bin/dart dev/bots/test.dart
/// bin/cache/dart-sdk/bin/dart dev/bots/test.dart --local-engine=host_debug_unopt
Future<void> main(List<String> args) async {
- flutterTestArgs.addAll(args);
- if (Platform.environment.containsKey(CIRRUS_TASK_NAME))
- print('Running task: ${Platform.environment[CIRRUS_TASK_NAME]}');
- print('═' * 80);
- await _runSmokeTests();
- print('═' * 80);
- await selectShard(const <String, ShardRunner>{
- 'add_to_app_tests': _runAddToAppTests,
- 'build_tests': _runBuildTests,
- 'framework_coverage': _runFrameworkCoverage,
- 'framework_tests': _runFrameworkTests,
- 'hostonly_devicelab_tests': _runHostOnlyDeviceLabTests,
- 'tool_coverage': _runToolCoverage,
- 'tool_tests': _runToolTests,
- 'web_tests': _runWebTests,
- });
+ print('$clock STARTING ANALYSIS');
+ try {
+ flutterTestArgs.addAll(args);
+ if (Platform.environment.containsKey(CIRRUS_TASK_NAME))
+ print('Running task: ${Platform.environment[CIRRUS_TASK_NAME]}');
+ print('═' * 80);
+ await _runSmokeTests();
+ print('═' * 80);
+ await selectShard(const <String, ShardRunner>{
+ 'add_to_app_tests': _runAddToAppTests,
+ 'build_tests': _runBuildTests,
+ 'framework_coverage': _runFrameworkCoverage,
+ 'framework_tests': _runFrameworkTests,
+ 'hostonly_devicelab_tests': _runHostOnlyDeviceLabTests,
+ 'tool_coverage': _runToolCoverage,
+ 'tool_tests': _runToolTests,
+ 'web_tests': _runWebTests,
+ });
+ } on ExitException catch (error) {
+ error.apply();
+ }
+ print('$clock ${bold}Test successful.$reset');
}
Future<void> _runSmokeTests() async {
@@ -195,12 +202,8 @@
// Verify that we correctly generated the version file.
final String versionError = await verifyVersion(File(path.join(flutterRoot, 'version')));
- if (versionError != null) {
- print(redLine);
- print(versionError);
- print(redLine);
- exit(1);
- }
+ if (versionError != null)
+ exitWithError(<String>[versionError]);
}
Future<bq.BigqueryApi> _getBigqueryApi() async {
@@ -624,13 +627,17 @@
}
if (useFlutterTestFormatter) {
final FlutterCompactFormatter formatter = FlutterCompactFormatter();
- final Stream<String> testOutput = runAndGetStdout(
- pub,
- args,
- workingDirectory: workingDirectory,
- environment: pubEnvironment,
- beforeExit: formatter.finish,
- );
+ Stream<String> testOutput;
+ try {
+ testOutput = runAndGetStdout(
+ pub,
+ args,
+ workingDirectory: workingDirectory,
+ environment: pubEnvironment,
+ );
+ } finally {
+ formatter.finish();
+ }
await _processTestOutput(formatter, testOutput, tableData);
} else {
await runCommand(
@@ -707,26 +714,26 @@
if (outputChecker != null) {
final String message = outputChecker(output);
- if (message != null) {
- print('$redLine');
- print(message);
- print('$redLine');
- exit(1);
- }
+ if (message != null)
+ exitWithError(<String>[message]);
}
return;
}
if (useFlutterTestFormatter) {
final FlutterCompactFormatter formatter = FlutterCompactFormatter();
- final Stream<String> testOutput = runAndGetStdout(
- flutter,
- args,
- workingDirectory: workingDirectory,
- expectNonZeroExit: expectFailure,
- beforeExit: formatter.finish,
- environment: environment,
- );
+ Stream<String> testOutput;
+ try {
+ testOutput = runAndGetStdout(
+ flutter,
+ args,
+ workingDirectory: workingDirectory,
+ expectNonZeroExit: expectFailure,
+ environment: environment,
+ );
+ } finally {
+ formatter.finish();
+ }
await _processTestOutput(formatter, testOutput, tableData);
} else {
await runCommand(
diff --git a/dev/bots/test/analyze-test-input/root/packages/foo/serviceaccount.enc b/dev/bots/test/analyze-test-input/root/packages/foo/serviceaccount.enc
new file mode 100644
index 0000000..ce542ef
--- /dev/null
+++ b/dev/bots/test/analyze-test-input/root/packages/foo/serviceaccount.enc
@@ -0,0 +1 @@
+ÿ
\ No newline at end of file
diff --git a/dev/bots/test/analyze-test-input/root/packages/foo/spaces.txt b/dev/bots/test/analyze-test-input/root/packages/foo/spaces.txt
new file mode 100644
index 0000000..d86d7c4
--- /dev/null
+++ b/dev/bots/test/analyze-test-input/root/packages/foo/spaces.txt
@@ -0,0 +1,9 @@
+// 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.
+
+Trailing space:
+ ^
+
+Extra blank line:
+
diff --git a/dev/bots/test/analyze_test.dart b/dev/bots/test/analyze_test.dart
index 4eb0bf9..c6d36eb 100644
--- a/dev/bots/test/analyze_test.dart
+++ b/dev/bots/test/analyze_test.dart
@@ -7,6 +7,7 @@
import 'package:path/path.dart' as path;
import '../analyze.dart';
+import '../utils.dart';
import 'common.dart';
typedef AsyncVoidCallback = Future<void> Function();
@@ -31,8 +32,10 @@
}
void main() {
+ final String testRootPath = path.join('test', 'analyze-test-input', 'root');
+
test('analyze.dart - verifyDeprecations', () async {
- final String result = await capture(() => verifyDeprecations(path.join('test', 'analyze-test-input', 'root')), exitCode: 1);
+ final String result = await capture(() => verifyDeprecations(testRootPath, minimumMatches: 2), exitCode: 1);
expect(result,
'━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'
+
@@ -50,31 +53,73 @@
)
+
'See: https://github.com/flutter/flutter/wiki/Tree-hygiene#handling-breaking-changes\n'
- '\n'
'━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'
- '\n'
);
});
test('analyze.dart - verifyNoMissingLicense', () async {
- final String result = await capture(() => verifyNoMissingLicense(path.join('test', 'analyze-test-input', 'root')), exitCode: 1);
+ final String result = await capture(() => verifyNoMissingLicense(testRootPath, checkMinimums: false), exitCode: 1);
expect(result,
'━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'
+
(
'The following 1 file does not have the right license header:\n'
- '\n'
'test/analyze-test-input/root/packages/foo/foo.dart\n'
.replaceAll('/', Platform.isWindows ? '\\' : '/')
)
+
- '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'
- '\n'
'The expected license header is:\n'
'// Copyright 2014 The Flutter Authors. All rights reserved.\n'
'// Use of this source code is governed by a BSD-style license that can be\n'
'// found in the LICENSE file.\n'
'...followed by a blank line.\n'
+ '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'
);
});
+
+ test('analyze.dart - verifyNoTrailingSpaces', () async {
+ final String result = await capture(() => verifyNoTrailingSpaces(testRootPath, minimumMatches: 2), exitCode: 1);
+ expect(result,
+ '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'
+ +
+ (
+ 'test/analyze-test-input/root/packages/foo/spaces.txt:5: trailing U+0020 space character\n'
+ 'test/analyze-test-input/root/packages/foo/spaces.txt:9: trailing blank line\n'
+ .replaceAll('/', Platform.isWindows ? '\\' : '/')
+ )
+ +
+ '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'
+ );
+ });
+
+ test('analyze.dart - verifyNoBinaries - positive', () async {
+ final String result = await capture(() => verifyNoBinaries(
+ testRootPath,
+ grandfatheredBinaries: <Hash256>{Hash256(0x39A050CD69434936, 0, 0, 0)},
+ ), exitCode: Platform.isWindows ? 0 : 1);
+ if (!Platform.isWindows) {
+ // The output starts with the call to git ls-files, the details of which
+ // change from run to run, so we only check the trailing end of the output.
+ expect(result, endsWith('\n'
+ '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'
+ 'test/analyze-test-input/root/packages/foo/serviceaccount.enc:0: file is not valid UTF-8\n'
+ 'All files in this repository must be UTF-8. In particular, images and other binaries\n'
+ 'must not be checked into this repository. This is because we are very sensitive to the\n'
+ 'size of the repository as it is distributed to all our developers. If you have a binary\n'
+ 'to which you need access, you should consider how to fetch it from another repository;\n'
+ 'for example, the "assets-for-api-docs" repository is used for images in API docs.\n'
+ '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'
+ ));
+ }
+ });
+
+ test('analyze.dart - verifyNoBinaries - negative', () async {
+ await capture(() => verifyNoBinaries(
+ testRootPath,
+ grandfatheredBinaries: <Hash256>{
+ Hash256(0xA8100AE6AA1940D0, 0xB663BB31CD466142, 0xEBBDBD5187131B92, 0xD93818987832EB89), // sha256("\xff")
+ Hash256(0x155644D3F13D98BF, 0, 0, 0),
+ },
+ ), exitCode: 0);
+ });
}
diff --git a/dev/bots/utils.dart b/dev/bots/utils.dart
new file mode 100644
index 0000000..92b2ef6
--- /dev/null
+++ b/dev/bots/utils.dart
@@ -0,0 +1,72 @@
+// 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:core' as core_internals show print;
+import 'dart:core' hide print;
+import 'dart:io' as io_internals show exit;
+import 'dart:io' hide exit;
+
+final bool hasColor = stdout.supportsAnsiEscapes;
+
+final String bold = hasColor ? '\x1B[1m' : ''; // used for shard titles
+final String red = hasColor ? '\x1B[31m' : ''; // used for errors
+final String green = hasColor ? '\x1B[32m' : ''; // used for section titles, commands
+final String yellow = hasColor ? '\x1B[33m' : ''; // unused
+final String cyan = hasColor ? '\x1B[36m' : ''; // used for paths
+final String reverse = hasColor ? '\x1B[7m' : ''; // used for clocks
+final String reset = hasColor ? '\x1B[0m' : '';
+
+class ExitException implements Exception {
+ ExitException(this.exitCode);
+
+ final int exitCode;
+
+ void apply() {
+ io_internals.exit(exitCode);
+ }
+}
+
+// We actually reimplement exit() so that it uses exceptions rather
+// than truly immediately terminating the application, so that we can
+// test the exit code in unit tests (see test/analyze_test.dart).
+void exit(int exitCode) {
+ throw ExitException(exitCode);
+}
+
+void exitWithError(List<String> messages) {
+ final String redLine = '$red━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━$reset';
+ print(redLine);
+ messages.forEach(print);
+ print(redLine);
+ exit(1);
+}
+
+typedef PrintCallback = void Function(Object line);
+
+// Allow print() to be overridden, for tests.
+PrintCallback print = core_internals.print;
+
+String get clock {
+ final DateTime now = DateTime.now();
+ return '$reverse▌'
+ '${now.hour.toString().padLeft(2, "0")}:'
+ '${now.minute.toString().padLeft(2, "0")}:'
+ '${now.second.toString().padLeft(2, "0")}'
+ '▐$reset';
+}
+
+String prettyPrintDuration(Duration duration) {
+ String result = '';
+ final int minutes = duration.inMinutes;
+ if (minutes > 0)
+ result += '${minutes}min ';
+ final int seconds = duration.inSeconds - minutes * 60;
+ final int milliseconds = duration.inMilliseconds - (seconds * 1000 + minutes * 60 * 1000);
+ result += '$seconds.${milliseconds.toString().padLeft(3, "0")}s';
+ return result;
+}
+
+void printProgress(String action, String workingDir, String command) {
+ print('$clock $action: cd $cyan$workingDir$reset; $green$command$reset');
+}
diff --git a/dev/ci/docker_linux/README.md b/dev/ci/docker_linux/README.md
index a2a00b0..3aca335 100644
--- a/dev/ci/docker_linux/README.md
+++ b/dev/ci/docker_linux/README.md
@@ -10,4 +10,3 @@
* run `./docker_build.sh` to build the container image.
* run `./docker_push.sh` to push the image to google cloud registry. This will
affect our CI tests.
-
diff --git a/dev/devicelab/bin/tasks/flutter_run_test.dart b/dev/devicelab/bin/tasks/flutter_run_test.dart
index f6e74f6..462075a 100644
--- a/dev/devicelab/bin/tasks/flutter_run_test.dart
+++ b/dev/devicelab/bin/tasks/flutter_run_test.dart
@@ -63,4 +63,3 @@
? TaskResult.success(<String, dynamic>{})
: TaskResult.failure('Test did not execute as expected.');
}
-
diff --git a/dev/devicelab/bin/tasks/tiles_scroll_perf__timeline_summary.dart b/dev/devicelab/bin/tasks/tiles_scroll_perf__timeline_summary.dart
index 7916a10..509ca4c 100644
--- a/dev/devicelab/bin/tasks/tiles_scroll_perf__timeline_summary.dart
+++ b/dev/devicelab/bin/tasks/tiles_scroll_perf__timeline_summary.dart
@@ -12,4 +12,3 @@
deviceOperatingSystem = DeviceOperatingSystem.android;
await task(createTilesScrollPerfTest());
}
-
diff --git a/dev/devicelab/pubspec.yaml b/dev/devicelab/pubspec.yaml
index 9477c5a..98cff86 100644
--- a/dev/devicelab/pubspec.yaml
+++ b/dev/devicelab/pubspec.yaml
@@ -43,12 +43,12 @@
analyzer: 0.38.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
io: 0.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -77,4 +77,4 @@
watcher: 0.9.7+13 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
yaml: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
-# PUBSPEC CHECKSUM: 9e46
+# PUBSPEC CHECKSUM: d549
diff --git a/dev/integration_tests/README.md b/dev/integration_tests/README.md
index 04768e6..07accc9 100644
--- a/dev/integration_tests/README.md
+++ b/dev/integration_tests/README.md
@@ -11,4 +11,3 @@
```shell
% flutter drive
```
-
diff --git a/dev/integration_tests/android_embedding_v2_smoke_test/pubspec.yaml b/dev/integration_tests/android_embedding_v2_smoke_test/pubspec.yaml
index a94145a..4257c7a 100644
--- a/dev/integration_tests/android_embedding_v2_smoke_test/pubspec.yaml
+++ b/dev/integration_tests/android_embedding_v2_smoke_test/pubspec.yaml
@@ -20,12 +20,12 @@
flutter:
sdk: flutter
# This plugin is using Android Embedding 1
- battery: 0.3.1+4
+ battery: 0.3.1+7
# TODO(egarciad): Add a plugin that uses Android Embedding 2
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
- cupertino_icons: 0.1.2
+ cupertino_icons: 0.1.3
collection: 1.14.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
meta: 1.1.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -100,4 +100,4 @@
# For details regarding fonts from package dependencies,
# see https://flutter.dev/custom-fonts/#from-packages
-# PUBSPEC CHECKSUM: fad6
+# PUBSPEC CHECKSUM: 6dda
diff --git a/dev/integration_tests/android_semantics_testing/pubspec.yaml b/dev/integration_tests/android_semantics_testing/pubspec.yaml
index 2139674..916ac3a 100644
--- a/dev/integration_tests/android_semantics_testing/pubspec.yaml
+++ b/dev/integration_tests/android_semantics_testing/pubspec.yaml
@@ -15,14 +15,14 @@
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
collection: 1.14.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
crypto: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
file: 5.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
intl: 0.16.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -68,4 +68,4 @@
flutter:
uses-material-design: true
-# PUBSPEC CHECKSUM: f2a9
+# PUBSPEC CHECKSUM: f0ac
diff --git a/dev/integration_tests/android_splash_screens/splash_screen_kitchen_sink/README.md b/dev/integration_tests/android_splash_screens/splash_screen_kitchen_sink/README.md
index 49c2cf0..2338a98 100644
--- a/dev/integration_tests/android_splash_screens/splash_screen_kitchen_sink/README.md
+++ b/dev/integration_tests/android_splash_screens/splash_screen_kitchen_sink/README.md
@@ -12,12 +12,12 @@
- /test_driver/main.dart
- /test_driver/main_test.dart
- /android/app/src/main/java/io/flutter/splash_screen_kitchen_sink/MainActivity.java
-
+
The files that should be inspected to learn about splash behavior are:
-
+
- /android/app/src/main/java/io/flutter/splash_screen_kitchen_sink/FlutterZoomSplashScreen.java
- /android/app/src/main/java/io/flutter/splash_screen_kitchen_sink/FlutterZoomSplashView.java
-
+
Communication takes place from Android to Flutter to Driver to communicate splash screen events.
This communication takes place over a channel called "testChannel", whose definition can be
- found in `MainActivity.java` and `test_driver/main.dart`.
\ No newline at end of file
+ found in `MainActivity.java` and `test_driver/main.dart`.
diff --git a/dev/integration_tests/android_splash_screens/splash_screen_kitchen_sink/pubspec.yaml b/dev/integration_tests/android_splash_screens/splash_screen_kitchen_sink/pubspec.yaml
index 832e345..1399939 100644
--- a/dev/integration_tests/android_splash_screens/splash_screen_kitchen_sink/pubspec.yaml
+++ b/dev/integration_tests/android_splash_screens/splash_screen_kitchen_sink/pubspec.yaml
@@ -22,7 +22,7 @@
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
- cupertino_icons: 0.1.2
+ cupertino_icons: 0.1.3
collection: 1.14.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
meta: 1.1.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -49,14 +49,14 @@
boolean_selector: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
crypto: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
file: 5.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
image: 2.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -138,4 +138,4 @@
# For details regarding fonts from package dependencies,
# see https://flutter.dev/custom-fonts/#from-packages
-# PUBSPEC CHECKSUM: 8095
+# PUBSPEC CHECKSUM: dd99
diff --git a/dev/integration_tests/android_splash_screens/splash_screen_load_rotate/README.md b/dev/integration_tests/android_splash_screens/splash_screen_load_rotate/README.md
index bd7b494..9169c18 100644
--- a/dev/integration_tests/android_splash_screens/splash_screen_load_rotate/README.md
+++ b/dev/integration_tests/android_splash_screens/splash_screen_load_rotate/README.md
@@ -2,6 +2,6 @@
This project is an example of a splash screen that displays an animation indefinitely.
-A never ending animation is provided as a demo so that developers can manually verify that
-orientation changes and other UI destruction processes do not cause issues with Flutter's splash
-system for Android.
+A never ending animation is provided as a demo so that developers can manually verify that
+orientation changes and other UI destruction processes do not cause issues with Flutter's splash
+system for Android.
diff --git a/dev/integration_tests/android_splash_screens/splash_screen_load_rotate/pubspec.yaml b/dev/integration_tests/android_splash_screens/splash_screen_load_rotate/pubspec.yaml
index b4ae8e3..5e5dd72 100644
--- a/dev/integration_tests/android_splash_screens/splash_screen_load_rotate/pubspec.yaml
+++ b/dev/integration_tests/android_splash_screens/splash_screen_load_rotate/pubspec.yaml
@@ -22,7 +22,7 @@
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
- cupertino_icons: 0.1.2
+ cupertino_icons: 0.1.3
collection: 1.14.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
meta: 1.1.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -97,4 +97,4 @@
# For details regarding fonts from package dependencies,
# see https://flutter.dev/custom-fonts/#from-packages
-# PUBSPEC CHECKSUM: 712e
+# PUBSPEC CHECKSUM: 6e2f
diff --git a/dev/integration_tests/android_splash_screens/splash_screen_trans_rotate/README.md b/dev/integration_tests/android_splash_screens/splash_screen_trans_rotate/README.md
index def6d00..88dfe1d 100644
--- a/dev/integration_tests/android_splash_screens/splash_screen_trans_rotate/README.md
+++ b/dev/integration_tests/android_splash_screens/splash_screen_trans_rotate/README.md
@@ -2,6 +2,6 @@
This project is an example of a splash screen that fades very slowly to the Flutter UI.
-A slow transition is provided as a demo so that developers can manually verify that orientation
+A slow transition is provided as a demo so that developers can manually verify that orientation
changes and other UI destruction processes do not cause issues with Flutter's splash system for
-Android.
+Android.
diff --git a/dev/integration_tests/android_splash_screens/splash_screen_trans_rotate/pubspec.yaml b/dev/integration_tests/android_splash_screens/splash_screen_trans_rotate/pubspec.yaml
index ee41f96..d915cb2 100644
--- a/dev/integration_tests/android_splash_screens/splash_screen_trans_rotate/pubspec.yaml
+++ b/dev/integration_tests/android_splash_screens/splash_screen_trans_rotate/pubspec.yaml
@@ -22,7 +22,7 @@
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
- cupertino_icons: 0.1.2
+ cupertino_icons: 0.1.3
collection: 1.14.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
meta: 1.1.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -49,14 +49,14 @@
boolean_selector: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
crypto: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
file: 5.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
image: 2.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -138,4 +138,4 @@
# For details regarding fonts from package dependencies,
# see https://flutter.dev/custom-fonts/#from-packages
-# PUBSPEC CHECKSUM: 8095
+# PUBSPEC CHECKSUM: dd99
diff --git a/dev/integration_tests/android_views/README.md b/dev/integration_tests/android_views/README.md
index b1b594b..f6df75f 100644
--- a/dev/integration_tests/android_views/README.md
+++ b/dev/integration_tests/android_views/README.md
@@ -29,4 +29,3 @@
When running this test with `flutter drive` the record touch sequences is
replayed and the test asserts that the events that got to FlutterView are
equivalent to the ones that got to the embedded view.
-
diff --git a/dev/integration_tests/android_views/android/app/src/main/java/io/flutter/integration/androidviews/MainActivity.java b/dev/integration_tests/android_views/android/app/src/main/java/io/flutter/integration/androidviews/MainActivity.java
index 474ce9d..050696c 100644
--- a/dev/integration_tests/android_views/android/app/src/main/java/io/flutter/integration/androidviews/MainActivity.java
+++ b/dev/integration_tests/android_views/android/app/src/main/java/io/flutter/integration/androidviews/MainActivity.java
@@ -101,4 +101,3 @@
permissionResult = null;
}
}
-
diff --git a/dev/integration_tests/android_views/pubspec.yaml b/dev/integration_tests/android_views/pubspec.yaml
index 9fad209..c1d8e60 100644
--- a/dev/integration_tests/android_views/pubspec.yaml
+++ b/dev/integration_tests/android_views/pubspec.yaml
@@ -7,7 +7,7 @@
sdk: flutter
flutter_driver:
sdk: flutter
- path_provider: 1.4.5
+ path_provider: 1.5.1
collection: 1.14.11
assets_for_android_views:
git:
@@ -44,12 +44,12 @@
archive: 2.0.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
image: 2.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -86,4 +86,4 @@
flutter:
uses-material-design: true
-# PUBSPEC CHECKSUM: 4173
+# PUBSPEC CHECKSUM: 8273
diff --git a/dev/integration_tests/channels/pubspec.yaml b/dev/integration_tests/channels/pubspec.yaml
index 98245b6..08b83f0 100644
--- a/dev/integration_tests/channels/pubspec.yaml
+++ b/dev/integration_tests/channels/pubspec.yaml
@@ -19,14 +19,14 @@
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
collection: 1.14.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
crypto: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
file: 5.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
intl: 0.16.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -72,4 +72,4 @@
flutter:
uses-material-design: true
-# PUBSPEC CHECKSUM: f2a9
+# PUBSPEC CHECKSUM: f0ac
diff --git a/dev/integration_tests/codegen/pubspec.yaml b/dev/integration_tests/codegen/pubspec.yaml
index 9160ca3..21ab2f6 100644
--- a/dev/integration_tests/codegen/pubspec.yaml
+++ b/dev/integration_tests/codegen/pubspec.yaml
@@ -37,12 +37,12 @@
analyzer: 0.38.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
io: 0.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -79,4 +79,4 @@
flutter:
uses-material-design: true
-# PUBSPEC CHECKSUM: f2a9
+# PUBSPEC CHECKSUM: f0ac
diff --git a/dev/integration_tests/external_ui/pubspec.yaml b/dev/integration_tests/external_ui/pubspec.yaml
index 7b8916a..71112f4 100644
--- a/dev/integration_tests/external_ui/pubspec.yaml
+++ b/dev/integration_tests/external_ui/pubspec.yaml
@@ -19,14 +19,14 @@
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
collection: 1.14.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
crypto: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
file: 5.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
intl: 0.16.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -72,4 +72,4 @@
flutter:
uses-material-design: true
-# PUBSPEC CHECKSUM: f2a9
+# PUBSPEC CHECKSUM: f0ac
diff --git a/dev/integration_tests/flavors/pubspec.yaml b/dev/integration_tests/flavors/pubspec.yaml
index 864e366..79a9a05 100644
--- a/dev/integration_tests/flavors/pubspec.yaml
+++ b/dev/integration_tests/flavors/pubspec.yaml
@@ -19,14 +19,14 @@
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
collection: 1.14.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
crypto: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
file: 5.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
intl: 0.16.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -72,4 +72,4 @@
flutter:
uses-material-design: true
-# PUBSPEC CHECKSUM: f2a9
+# PUBSPEC CHECKSUM: f0ac
diff --git a/dev/integration_tests/flutter_driver_screenshot_test/pubspec.yaml b/dev/integration_tests/flutter_driver_screenshot_test/pubspec.yaml
index 8ae3e37..4d793a0 100644
--- a/dev/integration_tests/flutter_driver_screenshot_test/pubspec.yaml
+++ b/dev/integration_tests/flutter_driver_screenshot_test/pubspec.yaml
@@ -9,8 +9,8 @@
sdk: flutter
flutter_driver:
sdk: flutter
- cupertino_icons: 0.1.2
- device_info: 0.4.1+2
+ cupertino_icons: 0.1.3
+ device_info: 0.4.1+4
async: 2.4.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -38,12 +38,12 @@
analyzer: 0.38.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
io: 0.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -78,4 +78,4 @@
assets:
- assets/
-# PUBSPEC CHECKSUM: e877
+# PUBSPEC CHECKSUM: cf7d
diff --git a/dev/integration_tests/image_loading/pubspec.yaml b/dev/integration_tests/image_loading/pubspec.yaml
index 9c2ea37..81ff0fe 100644
--- a/dev/integration_tests/image_loading/pubspec.yaml
+++ b/dev/integration_tests/image_loading/pubspec.yaml
@@ -14,13 +14,13 @@
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
collection: 1.14.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
crypto: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
io: 0.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -63,4 +63,4 @@
flutter:
uses-material-design: true
-# PUBSPEC CHECKSUM: a6c7
+# PUBSPEC CHECKSUM: 81ca
diff --git a/dev/integration_tests/ios_add2app/build_and_test.sh b/dev/integration_tests/ios_add2app/build_and_test.sh
index 00977a2..40fa2c7 100755
--- a/dev/integration_tests/ios_add2app/build_and_test.sh
+++ b/dev/integration_tests/ios_add2app/build_and_test.sh
@@ -24,4 +24,3 @@
-scheme ios_add2appTests \
-sdk "iphonesimulator$os_version" \
-destination "OS=$os_version,name=iPhone X" test | $PRETTY
-
diff --git a/dev/integration_tests/ios_add2app/flutterapp/pubspec.yaml b/dev/integration_tests/ios_add2app/flutterapp/pubspec.yaml
index a580873..3320ce6 100644
--- a/dev/integration_tests/ios_add2app/flutterapp/pubspec.yaml
+++ b/dev/integration_tests/ios_add2app/flutterapp/pubspec.yaml
@@ -22,7 +22,7 @@
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
- cupertino_icons: 0.1.2
+ cupertino_icons: 0.1.3
collection: 1.14.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
meta: 1.1.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -105,4 +105,4 @@
androidPackage: com.example.iosadd2appflutter
iosBundleIdentifier: com.example.iosAdd2appFlutter
-# PUBSPEC CHECKSUM: 712e
+# PUBSPEC CHECKSUM: 6e2f
diff --git a/dev/integration_tests/ios_host_app/Host/AppDelegate.h b/dev/integration_tests/ios_host_app/Host/AppDelegate.h
index 2aa64d9..78655f9 100644
--- a/dev/integration_tests/ios_host_app/Host/AppDelegate.h
+++ b/dev/integration_tests/ios_host_app/Host/AppDelegate.h
@@ -7,4 +7,3 @@
@interface AppDelegate : FlutterAppDelegate
@end
-
diff --git a/dev/integration_tests/ios_host_app/Host/ViewController.h b/dev/integration_tests/ios_host_app/Host/ViewController.h
index bca64f0..4b4bbd0 100644
--- a/dev/integration_tests/ios_host_app/Host/ViewController.h
+++ b/dev/integration_tests/ios_host_app/Host/ViewController.h
@@ -6,4 +6,3 @@
@interface ViewController : UIViewController
@end
-
diff --git a/dev/integration_tests/platform_interaction/pubspec.yaml b/dev/integration_tests/platform_interaction/pubspec.yaml
index dcc209f..04c95da 100644
--- a/dev/integration_tests/platform_interaction/pubspec.yaml
+++ b/dev/integration_tests/platform_interaction/pubspec.yaml
@@ -19,14 +19,14 @@
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
collection: 1.14.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
crypto: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
file: 5.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
intl: 0.16.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -72,4 +72,4 @@
flutter:
uses-material-design: true
-# PUBSPEC CHECKSUM: f2a9
+# PUBSPEC CHECKSUM: f0ac
diff --git a/dev/integration_tests/release_smoke_test/pubspec.yaml b/dev/integration_tests/release_smoke_test/pubspec.yaml
index 3a95f02..828f1f5 100644
--- a/dev/integration_tests/release_smoke_test/pubspec.yaml
+++ b/dev/integration_tests/release_smoke_test/pubspec.yaml
@@ -17,7 +17,7 @@
flutter_test:
sdk: flutter
- e2e: 0.2.1+1
+ e2e: 0.2.2+3
archive: 2.0.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -40,4 +40,4 @@
test_api: 0.2.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
xml: 3.5.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
-# PUBSPEC CHECKSUM: b92d
+# PUBSPEC CHECKSUM: b430
diff --git a/dev/integration_tests/ui/pubspec.yaml b/dev/integration_tests/ui/pubspec.yaml
index a530981..4fc04a2 100644
--- a/dev/integration_tests/ui/pubspec.yaml
+++ b/dev/integration_tests/ui/pubspec.yaml
@@ -21,14 +21,14 @@
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
collection: 1.14.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
crypto: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
file: 5.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
intl: 0.16.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -82,4 +82,4 @@
flutter:
uses-material-design: true
-# PUBSPEC CHECKSUM: 1cf0
+# PUBSPEC CHECKSUM: 59f3
diff --git a/dev/snippets/pubspec.yaml b/dev/snippets/pubspec.yaml
index 6aade2f..56cab92 100644
--- a/dev/snippets/pubspec.yaml
+++ b/dev/snippets/pubspec.yaml
@@ -47,8 +47,8 @@
test: 1.9.4
boolean_selector: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
io: 0.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -101,4 +101,4 @@
vm_service_client: 0.2.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
web_socket_channel: 1.0.9 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
-# PUBSPEC CHECKSUM: a7d1
+# PUBSPEC CHECKSUM: 60d4
diff --git a/dev/tools/gen_keycodes/README.md b/dev/tools/gen_keycodes/README.md
index c07f281..9c81a23 100644
--- a/dev/tools/gen_keycodes/README.md
+++ b/dev/tools/gen_keycodes/README.md
@@ -9,9 +9,9 @@
`PhysicalKeyboardKey` classes), and `keyboard_maps.dart`, containing
platform-specific immutable maps for translating platform keycodes and
information into the pre-defined key values in the `LogicalKeyboardKey` and
-`PhysicalKeyboardKey` classes.
+`PhysicalKeyboardKey` classes.
-The `data` subdirectory contains both some local data files, and the templates
+The `data` subdirectory contains both some local data files, and the templates
used to generate the source files.
- `data/key_data.json`: contains the merged data from all the other sources.
@@ -30,9 +30,9 @@
- `data/synonyms.json`: contains a mapping between pseudo-keys that represent
other keys, and the sets of keys they represent. For example, this contains
the "shift" key that represents either a "shiftLeft" or "shiftRight" key.
-
+
## Running the tool
-
+
To run the `gen_keycodes` tool using the checked in `key_data.json` file, run
it like so:
@@ -106,9 +106,9 @@
a unique prefix in the range 0x2-0xFE. If multiple systems define keys with
the same usage (not the same number), then the value with the lowest prefix
is used as the defining code.
-
+
Prefixes will be:
-
+
|Code|Platform|
|----|--------|
|0x02| Android|
@@ -139,7 +139,7 @@
- **0x200 0000 0000 - 0x2FF FFFF FFFF**: For pseudo-keys which represent
combinations of other keys, and conceptual keys which don't have a physical
- representation. This is where things like key synonyms are defined (e.g.
+ representation. This is where things like key synonyms are defined (e.g.
"shiftLeft" is a synonym for "shift": the "shift" key is a pseudo-key
representing either the left or right shift key).
diff --git a/dev/tools/gen_keycodes/data/key_name_to_glfw_name.json b/dev/tools/gen_keycodes/data/key_name_to_glfw_name.json
index aac1813..f52194f 100644
--- a/dev/tools/gen_keycodes/data/key_name_to_glfw_name.json
+++ b/dev/tools/gen_keycodes/data/key_name_to_glfw_name.json
@@ -1,4 +1,4 @@
-{
+{
"altLeft": ["LEFT_ALT"],
"altRight": ["RIGHT_ALT"],
"arrowDown": ["DOWN"],
diff --git a/dev/tools/gen_keycodes/data/supplemental_hid_codes.inc b/dev/tools/gen_keycodes/data/supplemental_hid_codes.inc
index b9c99dc..cf66a07 100644
--- a/dev/tools/gen_keycodes/data/supplemental_hid_codes.inc
+++ b/dev/tools/gen_keycodes/data/supplemental_hid_codes.inc
@@ -49,4 +49,3 @@
// give it a Mac keycode. This overrides their definition.
// USB HID evdev XKB Win Mac DOMKey Code
USB_KEYMAP(0x000012, 0x0000, 0x0000, 0x0000, 0x003f, "Fn", FN),
-
diff --git a/dev/tools/gen_keycodes/pubspec.yaml b/dev/tools/gen_keycodes/pubspec.yaml
index e001d98..4861dff 100644
--- a/dev/tools/gen_keycodes/pubspec.yaml
+++ b/dev/tools/gen_keycodes/pubspec.yaml
@@ -7,7 +7,7 @@
dependencies:
args: 1.5.2
- http: 0.12.0+2
+ http: 0.12.0+3
path: 1.6.4
platform: 2.2.1
@@ -22,4 +22,4 @@
term_glyph: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
typed_data: 1.1.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
-# PUBSPEC CHECKSUM: 613a
+# PUBSPEC CHECKSUM: 853b
diff --git a/dev/tools/pubspec.yaml b/dev/tools/pubspec.yaml
index 09f0177..316c1d5 100644
--- a/dev/tools/pubspec.yaml
+++ b/dev/tools/pubspec.yaml
@@ -8,7 +8,7 @@
dependencies:
archive: 2.0.11
args: 1.5.2
- http: 0.12.0+2
+ http: 0.12.0+3
intl: 0.16.0
meta: 1.1.8
path: 1.6.4
@@ -35,7 +35,7 @@
analyzer: 0.38.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -69,4 +69,4 @@
web_socket_channel: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
yaml: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
-# PUBSPEC CHECKSUM: 3590
+# PUBSPEC CHECKSUM: cc93
diff --git a/dev/tools/vitool/test/vitool_test.dart b/dev/tools/vitool/test/vitool_test.dart
index 82d2020..fffcef2 100644
--- a/dev/tools/vitool/test/vitool_test.dart
+++ b/dev/tools/vitool/test/vitool_test.dart
@@ -696,4 +696,3 @@
String testAsset(String name) {
return path.join(kPackagePath, 'test_assets', name);
}
-
diff --git a/examples/catalog/pubspec.yaml b/examples/catalog/pubspec.yaml
index 160d041..dc74c5e 100644
--- a/examples/catalog/pubspec.yaml
+++ b/examples/catalog/pubspec.yaml
@@ -29,14 +29,14 @@
boolean_selector: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
crypto: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
file: 5.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
image: 2.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -82,4 +82,4 @@
flutter:
uses-material-design: true
-# PUBSPEC CHECKSUM: 1cf0
+# PUBSPEC CHECKSUM: 59f3
diff --git a/examples/flutter_gallery/lib/demo/material/slider_demo.dart b/examples/flutter_gallery/lib/demo/material/slider_demo.dart
index f2f3e3c..542436a 100644
--- a/examples/flutter_gallery/lib/demo/material/slider_demo.dart
+++ b/examples/flutter_gallery/lib/demo/material/slider_demo.dart
@@ -438,4 +438,3 @@
);
}
}
-
diff --git a/examples/flutter_gallery/pubspec.yaml b/examples/flutter_gallery/pubspec.yaml
index fa56e6f..cb60100 100644
--- a/examples/flutter_gallery/pubspec.yaml
+++ b/examples/flutter_gallery/pubspec.yaml
@@ -8,13 +8,13 @@
flutter:
sdk: flutter
collection: 1.14.11
- device_info: 0.4.1+2
+ device_info: 0.4.1+4
intl: 0.16.0
- connectivity: 0.4.5+6
+ connectivity: 0.4.6+1
string_scanner: 1.0.5
- url_launcher: 5.2.7
- cupertino_icons: 0.1.2
- video_player: 0.10.3+3
+ url_launcher: 5.4.1
+ cupertino_icons: 0.1.3
+ video_player: 0.10.5
scoped_model: 1.0.1
shrine_images: 1.1.2
@@ -25,11 +25,16 @@
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
meta: 1.1.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
path: 1.6.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ plugin_platform_interface: 1.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
source_span: 1.5.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
term_glyph: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
typed_data: 1.1.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- url_launcher_platform_interface: 1.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ url_launcher_macos: 0.0.1+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ url_launcher_platform_interface: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ url_launcher_web: 0.1.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ video_player_platform_interface: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ video_player_web: 0.1.1+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
dev_dependencies:
flutter_test:
@@ -46,14 +51,14 @@
async: 2.4.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
crypto: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
file: 5.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
image: 2.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -265,4 +270,4 @@
- asset: packages/flutter_gallery_assets/fonts/merriweather/Merriweather-Regular.ttf
- asset: packages/flutter_gallery_assets/fonts/merriweather/Merriweather-Light.ttf
-# PUBSPEC CHECKSUM: ab21
+# PUBSPEC CHECKSUM: 3a6a
diff --git a/examples/flutter_view/ios/Runner/MainViewController.h b/examples/flutter_view/ios/Runner/MainViewController.h
index d0a81d6..2560f82 100644
--- a/examples/flutter_view/ios/Runner/MainViewController.h
+++ b/examples/flutter_view/ios/Runner/MainViewController.h
@@ -15,4 +15,3 @@
@interface MainViewController : UIViewController <NativeViewControllerDelegate>
@end
-
diff --git a/examples/image_list/pubspec.yaml b/examples/image_list/pubspec.yaml
index bf3e277..dfe15ea 100644
--- a/examples/image_list/pubspec.yaml
+++ b/examples/image_list/pubspec.yaml
@@ -12,7 +12,7 @@
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
- cupertino_icons: 0.1.2
+ cupertino_icons: 0.1.3
collection: 1.14.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
meta: 1.1.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -60,4 +60,4 @@
assets:
- images/coast.jpg
-# PUBSPEC CHECKSUM: 712e
+# PUBSPEC CHECKSUM: 6e2f
diff --git a/examples/platform_channel/pubspec.yaml b/examples/platform_channel/pubspec.yaml
index d6b3b72..92b963b 100644
--- a/examples/platform_channel/pubspec.yaml
+++ b/examples/platform_channel/pubspec.yaml
@@ -27,14 +27,14 @@
boolean_selector: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
crypto: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
file: 5.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
image: 2.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -81,4 +81,4 @@
flutter:
uses-material-design: true
-# PUBSPEC CHECKSUM: 1cf0
+# PUBSPEC CHECKSUM: 59f3
diff --git a/examples/platform_channel_swift/pubspec.yaml b/examples/platform_channel_swift/pubspec.yaml
index 08a357f..7dd9f63 100644
--- a/examples/platform_channel_swift/pubspec.yaml
+++ b/examples/platform_channel_swift/pubspec.yaml
@@ -27,14 +27,14 @@
boolean_selector: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
crypto: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
file: 5.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
image: 2.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -81,4 +81,4 @@
flutter:
uses-material-design: true
-# PUBSPEC CHECKSUM: 1cf0
+# PUBSPEC CHECKSUM: 59f3
diff --git a/examples/platform_view/ios/Runner/PlatformViewController.m b/examples/platform_view/ios/Runner/PlatformViewController.m
index b98ef53..397dd3c 100644
--- a/examples/platform_view/ios/Runner/PlatformViewController.m
+++ b/examples/platform_view/ios/Runner/PlatformViewController.m
@@ -34,6 +34,3 @@
}
@end
-
-
-
diff --git a/examples/stocks/pubspec.yaml b/examples/stocks/pubspec.yaml
index 485bda3..3413627 100644
--- a/examples/stocks/pubspec.yaml
+++ b/examples/stocks/pubspec.yaml
@@ -11,7 +11,7 @@
sdk: flutter
intl: 0.16.0
intl_translation: 0.17.7
- http: 0.12.0+2
+ http: 0.12.0+3
isolate: 2.0.2
analyzer: 0.38.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -54,7 +54,7 @@
archive: 2.0.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
file: 5.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
image: 2.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -86,4 +86,4 @@
flutter:
uses-material-design: true
-# PUBSPEC CHECKSUM: e110
+# PUBSPEC CHECKSUM: 4813
diff --git a/packages/flutter/lib/src/material/scaffold.dart b/packages/flutter/lib/src/material/scaffold.dart
index 25dc389..1980161 100644
--- a/packages/flutter/lib/src/material/scaffold.dart
+++ b/packages/flutter/lib/src/material/scaffold.dart
@@ -2574,11 +2574,12 @@
class _ScaffoldScope extends InheritedWidget {
const _ScaffoldScope({
+ Key key,
@required this.hasDrawer,
@required this.geometryNotifier,
@required Widget child,
}) : assert(hasDrawer != null),
- super(child: child);
+ super(key: key, child: child);
final bool hasDrawer;
final _ScaffoldGeometryNotifier geometryNotifier;
diff --git a/packages/flutter/lib/src/services/keyboard_maps.dart b/packages/flutter/lib/src/services/keyboard_maps.dart
index a4c803e..1f40dad 100644
--- a/packages/flutter/lib/src/services/keyboard_maps.dart
+++ b/packages/flutter/lib/src/services/keyboard_maps.dart
@@ -2007,4 +2007,3 @@
'NumpadParenLeft': LogicalKeyboardKey.numpadParenLeft,
'NumpadParenRight': LogicalKeyboardKey.numpadParenRight,
};
-
diff --git a/packages/flutter/lib/src/widgets/annotated_region.dart b/packages/flutter/lib/src/widgets/annotated_region.dart
index 87fa678..f44e0e7 100644
--- a/packages/flutter/lib/src/widgets/annotated_region.dart
+++ b/packages/flutter/lib/src/widgets/annotated_region.dart
@@ -54,4 +54,3 @@
..sized = sized;
}
}
-
diff --git a/packages/flutter/lib/src/widgets/sliver.dart b/packages/flutter/lib/src/widgets/sliver.dart
index c11ace6..9b4a89c 100644
--- a/packages/flutter/lib/src/widgets/sliver.dart
+++ b/packages/flutter/lib/src/widgets/sliver.dart
@@ -1097,12 +1097,13 @@
class _SliverFractionalPadding extends SingleChildRenderObjectWidget {
const _SliverFractionalPadding({
+ Key key,
this.viewportFraction = 0,
Widget sliver,
}) : assert(viewportFraction != null),
assert(viewportFraction >= 0),
assert(viewportFraction <= 0.5),
- super(child: sliver);
+ super(key: key, child: sliver);
final double viewportFraction;
diff --git a/packages/flutter/test/material/bottom_app_bar_test.dart b/packages/flutter/test/material/bottom_app_bar_test.dart
index bc23e10..f9f8063 100644
--- a/packages/flutter/test/material/bottom_app_bar_test.dart
+++ b/packages/flutter/test/material/bottom_app_bar_test.dart
@@ -466,4 +466,3 @@
..close();
}
}
-
diff --git a/packages/flutter/test/material/range_slider_test.dart b/packages/flutter/test/material/range_slider_test.dart
index 3e6b4a3..22ebb25 100644
--- a/packages/flutter/test/material/range_slider_test.dart
+++ b/packages/flutter/test/material/range_slider_test.dart
@@ -1569,4 +1569,3 @@
]);
});
}
-
diff --git a/packages/flutter/test/painting/image_cache_test.dart b/packages/flutter/test/painting/image_cache_test.dart
index 0ed2369..0d4dbbc 100644
--- a/packages/flutter/test/painting/image_cache_test.dart
+++ b/packages/flutter/test/painting/image_cache_test.dart
@@ -214,4 +214,3 @@
});
});
}
-
diff --git a/packages/flutter/test/widgets/semantics_9_test.dart b/packages/flutter/test/widgets/semantics_9_test.dart
index e490839..a7a6dde 100644
--- a/packages/flutter/test/widgets/semantics_9_test.dart
+++ b/packages/flutter/test/widgets/semantics_9_test.dart
@@ -155,4 +155,3 @@
..isSemanticBoundary = true;
}
}
-
diff --git a/packages/flutter/test/widgets/shader_mask_test.dart b/packages/flutter/test/widgets/shader_mask_test.dart
index 2fb0162..17a5456 100644
--- a/packages/flutter/test/widgets/shader_mask_test.dart
+++ b/packages/flutter/test/widgets/shader_mask_test.dart
@@ -110,4 +110,3 @@
);
}, skip: isBrowser);
}
-
diff --git a/packages/flutter/test/widgets/test_border.dart b/packages/flutter/test/widgets/test_border.dart
index bfedbab..e811064 100644
--- a/packages/flutter/test/widgets/test_border.dart
+++ b/packages/flutter/test/widgets/test_border.dart
@@ -34,4 +34,3 @@
onLog('paint $rect $textDirection');
}
}
-
diff --git a/packages/flutter/test/widgets/ticker_provider_test.dart b/packages/flutter/test/widgets/ticker_provider_test.dart
index f313ebc..6cb7987 100644
--- a/packages/flutter/test/widgets/ticker_provider_test.dart
+++ b/packages/flutter/test/widgets/ticker_provider_test.dart
@@ -310,4 +310,3 @@
return Container();
}
}
-
diff --git a/packages/flutter_tools/lib/src/base/fingerprint.dart b/packages/flutter_tools/lib/src/base/fingerprint.dart
index 9a53a3e..38c9004 100644
--- a/packages/flutter_tools/lib/src/base/fingerprint.dart
+++ b/packages/flutter_tools/lib/src/base/fingerprint.dart
@@ -191,5 +191,3 @@
.where((String path) => path.isNotEmpty)
.toSet();
}
-
-
diff --git a/packages/flutter_tools/lib/src/build_system/targets/android.dart b/packages/flutter_tools/lib/src/build_system/targets/android.dart
index 15a0281..45ad5d6 100644
--- a/packages/flutter_tools/lib/src/build_system/targets/android.dart
+++ b/packages/flutter_tools/lib/src/build_system/targets/android.dart
@@ -290,4 +290,3 @@
const Target androidArmReleaseBundle = AndroidAotBundle(androidArmRelease);
const Target androidArm64ReleaseBundle = AndroidAotBundle(androidArm64Release);
const Target androidx64ReleaseBundle = AndroidAotBundle(androidx64Release);
-
diff --git a/packages/flutter_tools/lib/src/commands/update_packages.dart b/packages/flutter_tools/lib/src/commands/update_packages.dart
index a0d6288..b7a3857 100644
--- a/packages/flutter_tools/lib/src/commands/update_packages.dart
+++ b/packages/flutter_tools/lib/src/commands/update_packages.dart
@@ -275,11 +275,12 @@
// here.
for (PubspecYaml pubspec in pubspecs) {
final String package = pubspec.name;
- final String version = pubspec.version;
+ specialDependencies.add(package);
+ tree._versions[package] = pubspec.version;
+ assert(!tree._dependencyTree.containsKey(package));
+ tree._dependencyTree[package] = <String>{};
for (PubspecDependency dependency in pubspec.dependencies) {
if (dependency.kind == DependencyKind.normal) {
- tree._versions[package] = version;
- tree._dependencyTree[package] ??= <String>{};
tree._dependencyTree[package].add(dependency.name);
}
}
@@ -765,12 +766,16 @@
final List<String> transitiveDependenciesAsList = transitiveDependencies.toList()..sort();
final List<String> transitiveDevDependenciesAsList = transitiveDevDependencies.toList()..sort();
+ String computeTransitiveDependencyLineFor(String package) {
+ return ' $package: ${versions.versionFor(package)} $kTransitiveMagicString';
+ }
+
// Add a line for each transitive dependency and transitive dev dependency using our magic string to recognize them later.
for (String package in transitiveDependenciesAsList) {
- transitiveDependencyOutput.add(' $package: ${versions.versionFor(package)} $kTransitiveMagicString');
+ transitiveDependencyOutput.add(computeTransitiveDependencyLineFor(package));
}
for (String package in transitiveDevDependenciesAsList) {
- transitiveDevDependencyOutput.add(' $package: ${versions.versionFor(package)} $kTransitiveMagicString');
+ transitiveDevDependencyOutput.add(computeTransitiveDependencyLineFor(package));
}
// Build a sorted list of all dependencies for the checksum.
@@ -1239,7 +1244,7 @@
}
/// The transitive closure of all the dependencies for the given package,
- /// excluding any listen in `seen`.
+ /// excluding any listed in `seen`.
Iterable<String> getTransitiveDependenciesFor(
String package, {
@required Set<String> seen,
diff --git a/packages/flutter_tools/pubspec.yaml b/packages/flutter_tools/pubspec.yaml
index 374b48f..b102988 100644
--- a/packages/flutter_tools/pubspec.yaml
+++ b/packages/flutter_tools/pubspec.yaml
@@ -11,12 +11,12 @@
# To update these, use "flutter update-packages --force-upgrade".
archive: 2.0.11
args: 1.5.2
- dwds: 0.8.1
+ dwds: 0.8.5
completion: 0.2.1+1
- coverage: 0.13.3+1
+ coverage: 0.13.3+3
crypto: 2.1.3
file: 5.1.0
- http: 0.12.0+2
+ http: 0.12.0+3
intl: 0.16.0
json_rpc_2: 2.1.0
linter: 0.1.101
@@ -46,7 +46,7 @@
test_core: 0.2.15
# Code generation dependencies
- build_runner_core: 4.2.0
+ build_runner_core: 4.3.0
dart_style: 1.3.3
code_builder: 3.2.1
build: 1.2.2
@@ -78,7 +78,7 @@
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
io: 0.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
js: 0.6.1+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- json_annotation: 3.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ json_annotation: 3.0.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
kernel: 0.3.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
logging: 0.11.3+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
matcher: 0.12.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -118,7 +118,7 @@
test: 1.9.4
build_runner: 1.7.2
build_vm_compilers: 1.0.4
- build_test: 0.10.10
+ build_test: 0.10.11
multi_server_socket: 1.0.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
node_preamble: 1.4.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -128,4 +128,4 @@
# Exclude this package from the hosted API docs.
nodoc: true
-# PUBSPEC CHECKSUM: de88
+# PUBSPEC CHECKSUM: a092
diff --git a/packages/flutter_tools/templates/cocoapods/Podfile-ios-swift b/packages/flutter_tools/templates/cocoapods/Podfile-ios-swift
index b30a428..0ee4a53 100644
--- a/packages/flutter_tools/templates/cocoapods/Podfile-ios-swift
+++ b/packages/flutter_tools/templates/cocoapods/Podfile-ios-swift
@@ -35,7 +35,7 @@
target 'Runner' do
use_frameworks!
use_modular_headers!
-
+
# Flutter Pod
copied_flutter_dir = File.join(__dir__, 'Flutter')
diff --git a/packages/flutter_tools/test/general.shard/asset_bundle_test.dart b/packages/flutter_tools/test/general.shard/asset_bundle_test.dart
index 7af839b..c530ea4 100644
--- a/packages/flutter_tools/test/general.shard/asset_bundle_test.dart
+++ b/packages/flutter_tools/test/general.shard/asset_bundle_test.dart
@@ -197,4 +197,3 @@
}
class MockDirectory extends Mock implements Directory {}
-
diff --git a/packages/flutter_tools/test/general.shard/build_system/depfile_test.dart b/packages/flutter_tools/test/general.shard/build_system/depfile_test.dart
index d88eaf4..b7b4cf6 100644
--- a/packages/flutter_tools/test/general.shard/build_system/depfile_test.dart
+++ b/packages/flutter_tools/test/general.shard/build_system/depfile_test.dart
@@ -135,4 +135,3 @@
FileSystem: () => MemoryFileSystem(style: FileSystemStyle.posix)
}));
}
-
diff --git a/packages/flutter_tools/test/general.shard/build_system/targets/android_test.dart b/packages/flutter_tools/test/general.shard/build_system/targets/android_test.dart
index 1b55700..e690ead 100644
--- a/packages/flutter_tools/test/general.shard/build_system/targets/android_test.dart
+++ b/packages/flutter_tools/test/general.shard/build_system/targets/android_test.dart
@@ -185,4 +185,3 @@
}
class MockGenSnapshot extends Mock implements GenSnapshot {}
-
diff --git a/packages/flutter_tools/test/general.shard/flutter_manifest_test.dart b/packages/flutter_tools/test/general.shard/flutter_manifest_test.dart
index f4b34ee..093e9cd 100644
--- a/packages/flutter_tools/test/general.shard/flutter_manifest_test.dart
+++ b/packages/flutter_tools/test/general.shard/flutter_manifest_test.dart
@@ -674,6 +674,4 @@
);
});
-
}
-
diff --git a/packages/flutter_tools/test/general.shard/web/chrome_test.dart b/packages/flutter_tools/test/general.shard/web/chrome_test.dart
index d9f9914..48ad64c 100644
--- a/packages/flutter_tools/test/general.shard/web/chrome_test.dart
+++ b/packages/flutter_tools/test/general.shard/web/chrome_test.dart
@@ -107,4 +107,3 @@
class MockProcessManager extends Mock implements ProcessManager {}
class MockPlatform extends Mock implements Platform {}
class MockOperatingSystemUtils extends Mock implements OperatingSystemUtils {}
-