From 24f39d40a413f9ef92aa3fcda58ba39bb41a34ec Mon Sep 17 00:00:00 2001 From: Dan Field Date: Thu, 2 Jan 2020 11:47:28 -0800 Subject: [PATCH] Revert "Revert "Add many more global analyses. (#47875)" (#48080)" (#48081) This reverts commit 04ea3183ce67c62def5852a5c2615e38188195ca. --- .github/no-response.yml | 2 +- CONTRIBUTING.md | 6 +- README.md | 2 +- dev/automated_tests/pubspec.yaml | 6 +- .../fuchsia/meta/complex_layout.cmx | 1 - dev/benchmarks/complex_layout/pubspec.yaml | 6 +- dev/benchmarks/macrobenchmarks/pubspec.yaml | 6 +- dev/benchmarks/microbenchmarks/pubspec.yaml | 6 +- dev/bots/README.md | 4 +- dev/bots/analyze.dart | 829 +++++++++++++----- dev/bots/docs.sh | 1 - dev/bots/download_android_sdk.sh | 2 - dev/bots/pubspec.yaml | 18 +- dev/bots/run_command.dart | 100 +-- dev/bots/test.dart | 93 +- .../root/packages/foo/serviceaccount.enc | 1 + .../root/packages/foo/spaces.txt | 9 + dev/bots/test/analyze_test.dart | 59 +- dev/bots/utils.dart | 72 ++ dev/ci/docker_linux/README.md | 1 - dev/devicelab/bin/tasks/flutter_run_test.dart | 1 - .../tiles_scroll_perf__timeline_summary.dart | 1 - dev/devicelab/pubspec.yaml | 6 +- dev/integration_tests/README.md | 1 - .../pubspec.yaml | 6 +- .../android_semantics_testing/pubspec.yaml | 6 +- .../splash_screen_kitchen_sink/README.md | 8 +- .../splash_screen_kitchen_sink/pubspec.yaml | 8 +- .../splash_screen_load_rotate/README.md | 6 +- .../splash_screen_load_rotate/pubspec.yaml | 4 +- .../splash_screen_trans_rotate/README.md | 4 +- .../splash_screen_trans_rotate/pubspec.yaml | 8 +- dev/integration_tests/android_views/README.md | 1 - .../androidviews/MainActivity.java | 1 - .../android_views/pubspec.yaml | 8 +- dev/integration_tests/channels/pubspec.yaml | 6 +- dev/integration_tests/codegen/pubspec.yaml | 6 +- .../external_ui/pubspec.yaml | 6 +- dev/integration_tests/flavors/pubspec.yaml | 6 +- .../pubspec.yaml | 10 +- .../image_loading/pubspec.yaml | 6 +- .../ios_add2app/build_and_test.sh | 1 - .../ios_add2app/flutterapp/pubspec.yaml | 4 +- .../ios_host_app/Host/AppDelegate.h | 1 - .../ios_host_app/Host/ViewController.h | 1 - .../platform_interaction/pubspec.yaml | 6 +- .../release_smoke_test/pubspec.yaml | 4 +- dev/integration_tests/ui/pubspec.yaml | 6 +- dev/snippets/pubspec.yaml | 6 +- dev/tools/gen_keycodes/README.md | 14 +- .../data/key_name_to_glfw_name.json | 2 +- .../data/supplemental_hid_codes.inc | 1 - dev/tools/gen_keycodes/pubspec.yaml | 4 +- dev/tools/pubspec.yaml | 6 +- dev/tools/vitool/test/vitool_test.dart | 1 - examples/catalog/pubspec.yaml | 6 +- .../lib/demo/material/slider_demo.dart | 1 - examples/flutter_gallery/pubspec.yaml | 23 +- .../ios/Runner/MainViewController.h | 1 - examples/image_list/pubspec.yaml | 4 +- examples/platform_channel/pubspec.yaml | 6 +- examples/platform_channel_swift/pubspec.yaml | 6 +- .../ios/Runner/PlatformViewController.m | 3 - examples/stocks/pubspec.yaml | 6 +- .../flutter/lib/src/material/scaffold.dart | 3 +- .../lib/src/services/keyboard_maps.dart | 1 - .../lib/src/widgets/annotated_region.dart | 1 - packages/flutter/lib/src/widgets/sliver.dart | 3 +- .../test/material/bottom_app_bar_test.dart | 1 - .../test/material/range_slider_test.dart | 1 - .../test/painting/image_cache_test.dart | 1 - .../test/widgets/semantics_9_test.dart | 1 - .../test/widgets/shader_mask_test.dart | 1 - .../flutter/test/widgets/test_border.dart | 1 - .../test/widgets/ticker_provider_test.dart | 1 - .../lib/src/base/fingerprint.dart | 2 - .../lib/src/build_system/targets/android.dart | 1 - .../lib/src/commands/update_packages.dart | 17 +- packages/flutter_tools/pubspec.yaml | 14 +- .../templates/cocoapods/Podfile-ios-swift | 2 +- .../test/general.shard/asset_bundle_test.dart | 1 - .../build_system/depfile_test.dart | 1 - .../build_system/targets/android_test.dart | 1 - .../general.shard/flutter_manifest_test.dart | 2 - .../test/general.shard/web/chrome_test.dart | 1 - 85 files changed, 992 insertions(+), 511 deletions(-) create mode 100644 dev/bots/test/analyze-test-input/root/packages/foo/serviceaccount.enc create mode 100644 dev/bots/test/analyze-test-input/root/packages/foo/spaces.txt create mode 100644 dev/bots/utils.dart diff --git a/.github/no-response.yml b/.github/no-response.yml index 7e39bceb25e23..ae8105f4e7519 100644 --- a/.github/no-response.yml +++ b/.github/no-response.yml @@ -12,5 +12,5 @@ closeComment: >- 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 c9636092ddba8..4a53a730be75b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -33,18 +33,18 @@ If you want to help us triage, you are very welcome to do so! 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 4a3b4ded7d2b3..00935af3c5179 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ Flutter works with any development tool (or none at all), but includes editor 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 7c7633b16ff0f..bb1caa7e30ca6 100644 --- a/dev/automated_tests/pubspec.yaml +++ b/dev/automated_tests/pubspec.yaml @@ -19,13 +19,13 @@ dependencies: 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 @@ flutter: 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 878780c19cefc..bbe88bf05c537 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 b34f3fc2224f2..9dd898f47a024 100644 --- a/dev/benchmarks/complex_layout/pubspec.yaml +++ b/dev/benchmarks/complex_layout/pubspec.yaml @@ -46,12 +46,12 @@ dev_dependencies: 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 @@ flutter: - 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 471d22ca0eb98..8ee0c193fc92c 100644 --- a/dev/benchmarks/macrobenchmarks/pubspec.yaml +++ b/dev/benchmarks/macrobenchmarks/pubspec.yaml @@ -46,12 +46,12 @@ dev_dependencies: 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 @@ flutter: - 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 ed952cf0552de..cc322ea778cba 100644 --- a/dev/benchmarks/microbenchmarks/pubspec.yaml +++ b/dev/benchmarks/microbenchmarks/pubspec.yaml @@ -23,14 +23,14 @@ dependencies: 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 @@ dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: e51f +# PUBSPEC CHECKSUM: 1d22 diff --git a/dev/bots/README.md b/dev/bots/README.md index f17ba96560cb2..683741bc2dd40 100644 --- a/dev/bots/README.md +++ b/dev/bots/README.md @@ -91,8 +91,8 @@ The typical cycle for editing a recipe is: 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 7bc1e8742cbbd..1da04580298e8 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 dart = path.join(flutterRoot, 'bin', 'cache', 'dart-sdk', 'bin', Pl 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 @@ Future main(List arguments) async { } on ExitException catch (error) { error.apply(); } - print('${bold}DONE: Analysis successful.$reset'); + print('$clock ${bold}Analysis successful.$reset'); } Future run(List 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(['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 @@ Future run(List arguments) async { 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, ['update-packages', '--verify-only'], workingDirectory: flutterRoot, ); - // Analyze all the sample code in the repo - print('$clock Sample code...'); - await runCommand(dart, - [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: [ @@ -123,6 +97,13 @@ Future run(List arguments) async { ...arguments, ]); + // Analyze all the sample code in the repo + print('$clock Sample code...'); + await runCommand(dart, + [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 @@ const String _ignoreDeprecation = ' // ignore: flutter_deprecation_syntax (see a /// 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 verifyDeprecations(String workingDirectory) async { +Future verifyDeprecations(String workingDirectory, { int minimumMatches = 2000 }) async { final List errors = []; - for (File file in _allFiles(workingDirectory, 'dart')) { + for (File file in _allFiles(workingDirectory, 'dart', minimumMatches: minimumMatches)) { int lineNumber = 0; final List lines = file.readAsLinesSync(); final List linesWithDeprecations = []; @@ -224,11 +205,10 @@ Future verifyDeprecations(String workingDirectory) async { } // 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([ + ...errors, + '${bold}See: https://github.com/flutter/flutter/wiki/Tree-hygiene#handling-breaking-changes$reset', + ]); } } @@ -239,26 +219,27 @@ String _generateLicense(String prefix) { '${prefix}found in the LICENSE file.'; } -Future 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', '\n', trailingBlank: false); - await _verifyNoMissingLicenseForExtension(workingDirectory, 'xml', ''); +Future 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, '\n', trailingBlank: false); + await _verifyNoMissingLicenseForExtension(workingDirectory, 'xml', overrideMinimumMatches ?? 1, ''); } -Future _verifyNoMissingLicenseForExtension(String workingDirectory, String extension, String license, { bool trailingBlank = true }) async { +Future _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 errors = []; - 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 @@ Future _verifyNoMissingLicenseForExtension(String workingDirectory, String } // 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([ + '${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 @@ const Set _exemptTestImports = { Future verifyNoTestImports(String workingDirectory) async { final List errors = []; assert("// foo\nimport 'binding_test.dart' as binding;\n'".contains(_testImportPattern)); - final Iterable dartFiles = Directory(path.join(workingDirectory, 'packages')) - .listSync(recursive: true) - .whereType() - .where((File file) => path.extension(file.path) == '.dart'); + final List 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 @@ Future verifyNoTestImports(String workingDirectory) async { } // 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([ + '${bold}The following file$s import a test directly. Test utilities should be in their own file.$reset', + ...errors, + ]); } } Future verifyNoTestPackageImports(String workingDirectory) async { // TODO(ianh): Remove this whole test once https://github.com/dart-lang/matcher/issues/98 is fixed. final List shims = []; - final List errors = Directory(workingDirectory) - .listSync(recursive: true) - .whereType() - .where((File file) => file.path.endsWith('.dart')) + final List errors = _allFiles(workingDirectory, 'dart', minimumMatches: 2000) .map((File file) { final String name = Uri.file(path.relative(file.path, from: workingDirectory)).toFilePath(windows: false); @@ -376,16 +348,15 @@ Future verifyNoTestPackageImports(String workingDirectory) async { // 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([ + '${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 @@ Future verifyGeneratedPluginRegistrants(String flutterRoot) async { } 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([ + '${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 @@ Future verifyNoBadImportsInFlutter(String workingDirectory) async { } // 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([ + 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 verifyNoBadImportsInFlutterTools(String workingDirectory) async { final List errors = []; - final Iterable files = Directory(path.join(workingDirectory, 'packages', 'flutter_tools', 'lib')) - .listSync(recursive: true) - .whereType() - .where((File file) => path.extension(file.path) == '.dart'); + final List 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 @@ Future verifyNoBadImportsInFlutterTools(String workingDirectory) async { } // 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([ + 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 @@ Future verifyInternationalizations() async { 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([ + '<<<<<<< $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([ + '<<<<<<< $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 verifyNoTrailingSpaces() async { - if (!Platform.isWindows) { - final String commitRange = Platform.environment.containsKey('TEST_COMMIT_RANGE') - ? Platform.environment['TEST_COMMIT_RANGE'] - : await _getCommitRange(); - final List fileTypes = [ - '*.dart', '*.cxx', '*.cpp', '*.cc', '*.c', '*.C', '*.h', '*.java', '*.mm', '*.m', '*.yml', - ]; - final EvalResult changedFilesResult = await _evalCommand( - 'git', ['diff', '-U0', '--no-color', '--name-only', commitRange, '--', ...fileTypes], - workingDirectory: flutterRoot, +Future verifyNoTrailingSpaces(String workingDirectory, { int minimumMatches = 4000 }) async { + final List 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 problems = []; + for (File file in files) { + final List 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'); + } + } + 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 _grandfatheredBinaries = { + // 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 verifyNoBinaries(String workingDirectory, { Set 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((Hash256 hash) => [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', ['ls-files', '-z'], + workingDirectory: workingDirectory, ); - if (changedFilesResult.stdout == null || changedFilesResult.stdout.trim().isEmpty) { - print('No files found that need to be checked for trailing whitespace.'); - return; + if (evalResult.exitCode != 0) { + exitWithError([ + 'git ls-filese failed with exit code ${evalResult.exitCode}', + '${bold}stdout:$reset', + evalResult.stdout, + '${bold}stderr:$reset', + evalResult.stderr, + ]); } - // 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 changedFiles = changedFilesResult.stdout.split('\n').where((String filename) { - return File(filename).existsSync(); - }).toList(); - if (changedFiles.isNotEmpty) { - await runCommand('grep', - [ - '--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. - ); + final List filenames = evalResult + .stdout + .split('\x00'); + assert(filenames.last.isEmpty); // git ls-files gives a trailing blank 0x00 + filenames.removeLast(); + final List files = filenames + .map((String filename) => File(path.join(workingDirectory, filename))) + .toList(); + final List problems = []; + 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([ + ...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 @@ bool _listEquals(List a, List b) { return true; } -Iterable _allFiles(String workingDirectory, String extension) sync* { +Iterable _allFiles(String workingDirectory, String extension, { @required int minimumMatches }) sync* { + assert(extension == null || !extension.startsWith('.'), 'Extension argument should not start with a period.'); final Set pending = { Directory(workingDirectory) }; + int matches = 0; while (pending.isNotEmpty) { final FileSystemEntity entity = pending.first; pending.remove(entity); @@ -631,13 +1062,17 @@ Iterable _allFiles(String workingDirectory, String extension) sync* { 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 @@ Iterable _allFiles(String workingDirectory, String extension) sync* { pending.addAll(entity.listSync()); } } -} - -Future _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', - ['merge-base', '--fork-point', 'FETCH_HEAD', 'HEAD'], - workingDirectory: flutterRoot, - allowNonZeroExit: true, - ); - if (result.exitCode != 0) { - result = await _evalCommand( - 'git', - ['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 @@ class EvalResult { final int exitCode; } +// TODO(ianh): Refactor this to reuse the code in run_command.dart Future _evalCommand(String executable, List arguments, { @required String workingDirectory, Map environment, @@ -714,14 +1129,11 @@ Future _evalCommand(String executable, List arguments, { 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([ + '${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 _evalCommand(String executable, List arguments, { Future _runFlutterAnalyze(String workingDirectory, { List options = const [], -}) { - return runCommand( +}) async { + return await runCommand( flutter, ['analyze', '--dartdocs', ...options], workingDirectory: workingDirectory, @@ -741,10 +1153,7 @@ final RegExp _importPattern = RegExp(r'''^\s*import (['"])package:flutter/([^.]+ final RegExp _importMetaPattern = RegExp(r'''^\s*import (['"])package:meta/meta\.dart\1'''); Set _findFlutterDependencies(String srcPath, List errors, { bool checkForMeta = false }) { - return Directory(srcPath) - .listSync(recursive: true) - .whereType() - .where((File file) => path.extension(file.path) == '.dart') + return _allFiles(srcPath, 'dart', minimumMatches: 1) .map>((File file) { final Set result = {}; for (String line in file.readAsLinesSync()) { diff --git a/dev/bots/docs.sh b/dev/bots/docs.sh index 44b326f6fed17..d9e2924fb424e 100755 --- a/dev/bots/docs.sh +++ b/dev/bots/docs.sh @@ -149,4 +149,3 @@ if [[ -n "$CIRRUS_CI" && -z "$CIRRUS_PR" ]]; then deploy 5 docs-flutter-dev fi fi - diff --git a/dev/bots/download_android_sdk.sh b/dev/bots/download_android_sdk.sh index 84817f49b5bfd..e909f4dd8e3a1 100755 --- a/dev/bots/download_android_sdk.sh +++ b/dev/bots/download_android_sdk.sh @@ -26,5 +26,3 @@ $ANDROID_SDK_ROOT/tools/bin/sdkmanager "platforms;android-28" \ "build-tools;27.0.3" \ "extras;google;m2repository" \ "extras;android;m2repository" - - diff --git a/dev/bots/pubspec.yaml b/dev/bots/pubspec.yaml index 46654577c640a..f8b379ee811c8 100644 --- a/dev/bots/pubspec.yaml +++ b/dev/bots/pubspec.yaml @@ -6,16 +6,17 @@ environment: sdk: ">=2.2.2 <3.0.0" dependencies: - path: 1.6.4 args: 1.5.2 + 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 - process: 3.0.12 + path: 1.6.4 platform: 2.2.1 - http: 0.12.0+2 - http_parser: 3.1.3 + process: 3.0.12 test: 1.9.4 - googleapis: 0.54.0 - googleapis_auth: 0.2.11 _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 @@ dependencies: 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 @@ dev_dependencies: 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 352865f137bb6..14070670576cf 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; - -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'; -} +import 'utils.dart'; -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 runAndGetStdout(String executable, List arguments, { String workingDirectory, @@ -49,11 +19,14 @@ Stream runAndGetStdout(String executable, List arguments, { 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 @@ Stream runAndGetStdout(String executable, List arguments, { stderr.addStream(process.stderr); final Stream 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([ + 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 runCommand(String executable, List arguments, { @@ -97,9 +65,10 @@ Future runCommand(String executable, List arguments, { 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 @@ Future runCommand(String executable, List arguments, { } 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 @@ Future runCommand(String executable, List arguments, { 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([ + 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 d18333019d329..f756d7065f819 100644 --- a/dev/bots/test.dart +++ b/dev/bots/test.dart @@ -13,6 +13,7 @@ import 'package:path/path.dart' as path; import 'flutter_compact_formatter.dart'; import 'run_command.dart'; +import 'utils.dart'; typedef ShardRunner = Future Function(); @@ -98,22 +99,28 @@ const List kWebTestFileBlacklist = [ /// 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 main(List 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 { - '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 { + '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 _runSmokeTests() async { @@ -195,12 +202,8 @@ Future _runSmokeTests() async { // 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([versionError]); } Future _getBigqueryApi() async { @@ -624,13 +627,17 @@ Future _pubRunTest(String workingDirectory, { } if (useFlutterTestFormatter) { final FlutterCompactFormatter formatter = FlutterCompactFormatter(); - final Stream testOutput = runAndGetStdout( - pub, - args, - workingDirectory: workingDirectory, - environment: pubEnvironment, - beforeExit: formatter.finish, - ); + Stream 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 @@ Future _runFlutterTest(String workingDirectory, { if (outputChecker != null) { final String message = outputChecker(output); - if (message != null) { - print('$redLine'); - print(message); - print('$redLine'); - exit(1); - } + if (message != null) + exitWithError([message]); } return; } if (useFlutterTestFormatter) { final FlutterCompactFormatter formatter = FlutterCompactFormatter(); - final Stream testOutput = runAndGetStdout( - flutter, - args, - workingDirectory: workingDirectory, - expectNonZeroExit: expectFailure, - beforeExit: formatter.finish, - environment: environment, - ); + Stream 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 0000000000000..ce542efaa5124 --- /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 0000000000000..d86d7c48006ce --- /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 4eb0bf9742a17..c6d36eb8b028c 100644 --- a/dev/bots/test/analyze_test.dart +++ b/dev/bots/test/analyze_test.dart @@ -7,6 +7,7 @@ import 'dart:io'; import 'package:path/path.dart' as path; import '../analyze.dart'; +import '../utils.dart'; import 'common.dart'; typedef AsyncVoidCallback = Future Function(); @@ -31,8 +32,10 @@ Future capture(AsyncVoidCallback callback, { int exitCode = 0 }) async { } 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 @@ void main() { ) + '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(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(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 0000000000000..92b2ef62ef085 --- /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 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 a2a00b08e706d..3aca33571636d 100644 --- a/dev/ci/docker_linux/README.md +++ b/dev/ci/docker_linux/README.md @@ -10,4 +10,3 @@ After setup, * 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 f6e74f63b0141..462075afe4708 100644 --- a/dev/devicelab/bin/tasks/flutter_run_test.dart +++ b/dev/devicelab/bin/tasks/flutter_run_test.dart @@ -63,4 +63,3 @@ Future createFlutterRunTask() async { ? TaskResult.success({}) : 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 7916a102e4e5f..509ca4c5646eb 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 @@ Future main() async { deviceOperatingSystem = DeviceOperatingSystem.android; await task(createTilesScrollPerfTest()); } - diff --git a/dev/devicelab/pubspec.yaml b/dev/devicelab/pubspec.yaml index 9477c5a5a2987..98cff862ca902 100644 --- a/dev/devicelab/pubspec.yaml +++ b/dev/devicelab/pubspec.yaml @@ -43,12 +43,12 @@ dev_dependencies: 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 @@ dev_dependencies: 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 04768e6989c56..07accc95bb944 100644 --- a/dev/integration_tests/README.md +++ b/dev/integration_tests/README.md @@ -11,4 +11,3 @@ you can use this command from the appropriate subdirectory: ```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 a94145a8169d7..4257c7aa5b34b 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 @@ dependencies: 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 @@ flutter: # 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 2139674d485f9..916ac3a825b66 100644 --- a/dev/integration_tests/android_semantics_testing/pubspec.yaml +++ b/dev/integration_tests/android_semantics_testing/pubspec.yaml @@ -15,14 +15,14 @@ dependencies: 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 @@ dependencies: 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 49c2cf009d312..2338a9804799b 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 @@ The files that are relevant to test execution are: - /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 832e345ac814d..1399939f7d767 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 @@ dependencies: # 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 @@ dev_dependencies: 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 @@ flutter: # 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 bd7b494e76530..9169c186675ca 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 b4ae8e3446cb7..5e5dd72253dc1 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 @@ dependencies: # 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 @@ flutter: # 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 def6d005e64e8..88dfe1d7c3b69 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 ee41f968af73a..d915cb241382a 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 @@ dependencies: # 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 @@ dev_dependencies: 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 @@ flutter: # 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 b1b594b4ae4d6..f6df75f85d7e9 100644 --- a/dev/integration_tests/android_views/README.md +++ b/dev/integration_tests/android_views/README.md @@ -29,4 +29,3 @@ assets_for_android_view package which lives in the goldens repository. 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 474ce9d850299..050696c8662a5 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 @@ private void sendPermissionResult(boolean result) { permissionResult = null; } } - diff --git a/dev/integration_tests/android_views/pubspec.yaml b/dev/integration_tests/android_views/pubspec.yaml index 9fad209a96cf8..c1d8e60bfc8f0 100644 --- a/dev/integration_tests/android_views/pubspec.yaml +++ b/dev/integration_tests/android_views/pubspec.yaml @@ -7,7 +7,7 @@ dependencies: 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 @@ dev_dependencies: 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 @@ dev_dependencies: 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 98245b6649ddd..08b83f08e4d58 100644 --- a/dev/integration_tests/channels/pubspec.yaml +++ b/dev/integration_tests/channels/pubspec.yaml @@ -19,14 +19,14 @@ dependencies: 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 @@ dependencies: 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 9160ca37d8ef9..21ab2f60df6e8 100644 --- a/dev/integration_tests/codegen/pubspec.yaml +++ b/dev/integration_tests/codegen/pubspec.yaml @@ -37,12 +37,12 @@ dev_dependencies: 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 @@ builders: 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 7b8916acc0b1b..71112f4c7b4c1 100644 --- a/dev/integration_tests/external_ui/pubspec.yaml +++ b/dev/integration_tests/external_ui/pubspec.yaml @@ -19,14 +19,14 @@ dependencies: 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 @@ dependencies: 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 864e36665441e..79a9a05d1d1b6 100644 --- a/dev/integration_tests/flavors/pubspec.yaml +++ b/dev/integration_tests/flavors/pubspec.yaml @@ -19,14 +19,14 @@ dependencies: 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 @@ dependencies: 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 8ae3e3781805f..4d793a0186296 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 @@ dependencies: 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 @@ dev_dependencies: 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 @@ flutter: 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 9c2ea370ad138..81ff0feef5ccc 100644 --- a/dev/integration_tests/image_loading/pubspec.yaml +++ b/dev/integration_tests/image_loading/pubspec.yaml @@ -14,13 +14,13 @@ dependencies: 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 @@ dependencies: 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 00977a2604e3e..40fa2c7b328b2 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 @@ set -o pipefail && xcodebuild \ -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 a58087384e8a6..3320ce684c1f6 100644 --- a/dev/integration_tests/ios_add2app/flutterapp/pubspec.yaml +++ b/dev/integration_tests/ios_add2app/flutterapp/pubspec.yaml @@ -22,7 +22,7 @@ dependencies: # 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 @@ flutter: 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 2aa64d93f61de..78655f963b90c 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 bca64f0958b04..4b4bbd035ba2a 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 dcc209fe159d3..04c95da03cdd2 100644 --- a/dev/integration_tests/platform_interaction/pubspec.yaml +++ b/dev/integration_tests/platform_interaction/pubspec.yaml @@ -19,14 +19,14 @@ dependencies: 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 @@ dependencies: 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 3a95f0211888b..828f1f52dcdb1 100644 --- a/dev/integration_tests/release_smoke_test/pubspec.yaml +++ b/dev/integration_tests/release_smoke_test/pubspec.yaml @@ -17,7 +17,7 @@ dev_dependencies: 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 @@ dev_dependencies: 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 a530981703e82..4fc04a21710b5 100644 --- a/dev/integration_tests/ui/pubspec.yaml +++ b/dev/integration_tests/ui/pubspec.yaml @@ -21,14 +21,14 @@ dependencies: 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 @@ dev_dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 1cf0 +# PUBSPEC CHECKSUM: 59f3 diff --git a/dev/snippets/pubspec.yaml b/dev/snippets/pubspec.yaml index 6aade2fb725b8..56cab92143d0a 100644 --- a/dev/snippets/pubspec.yaml +++ b/dev/snippets/pubspec.yaml @@ -47,8 +47,8 @@ dev_dependencies: 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 @@ executables: 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 c07f281ab46ed..9c81a23203e42 100644 --- a/dev/tools/gen_keycodes/README.md +++ b/dev/tools/gen_keycodes/README.md @@ -9,9 +9,9 @@ It then generates `keyboard_key.dart` (containing the `LogicalKeyboardKey` and `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 @@ used to generate the source files. - `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 @@ define. It has values in the following ranges. 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 @@ define. It has values in the following ranges. - **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 aac18137c4f73..f52194f9b6ca4 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 b9c99dc814a13..cf66a070f9489 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 e001d98075313..4861dff5fb2dd 100644 --- a/dev/tools/gen_keycodes/pubspec.yaml +++ b/dev/tools/gen_keycodes/pubspec.yaml @@ -7,7 +7,7 @@ environment: 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 @@ dependencies: 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 09f0177fcc78d..316c1d5c62bfc 100644 --- a/dev/tools/pubspec.yaml +++ b/dev/tools/pubspec.yaml @@ -8,7 +8,7 @@ environment: 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 @@ dev_dependencies: 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 @@ dev_dependencies: 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 82d20209c7320..fffcef2fb7ba4 100644 --- a/dev/tools/vitool/test/vitool_test.dart +++ b/dev/tools/vitool/test/vitool_test.dart @@ -696,4 +696,3 @@ class PathAnimationMatcher extends Matcher { String testAsset(String name) { return path.join(kPackagePath, 'test_assets', name); } - diff --git a/examples/catalog/pubspec.yaml b/examples/catalog/pubspec.yaml index 160d0417707af..dc74c5e692901 100644 --- a/examples/catalog/pubspec.yaml +++ b/examples/catalog/pubspec.yaml @@ -29,14 +29,14 @@ dev_dependencies: 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 @@ dev_dependencies: 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 f2f3e3c8427b9..542436a8a96f5 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 @@ class _RangeSlidersState extends State<_RangeSliders> { ); } } - diff --git a/examples/flutter_gallery/pubspec.yaml b/examples/flutter_gallery/pubspec.yaml index fa56e6f497cf4..cb601003907e3 100644 --- a/examples/flutter_gallery/pubspec.yaml +++ b/examples/flutter_gallery/pubspec.yaml @@ -8,13 +8,13 @@ dependencies: 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 @@ dependencies: 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 @@ dev_dependencies: 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 @@ flutter: - 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 d0a81d690bd91..2560f829607a3 100644 --- a/examples/flutter_view/ios/Runner/MainViewController.h +++ b/examples/flutter_view/ios/Runner/MainViewController.h @@ -15,4 +15,3 @@ @interface MainViewController : UIViewController @end - diff --git a/examples/image_list/pubspec.yaml b/examples/image_list/pubspec.yaml index bf3e2776baf37..dfe15eae12ff3 100644 --- a/examples/image_list/pubspec.yaml +++ b/examples/image_list/pubspec.yaml @@ -12,7 +12,7 @@ dependencies: # 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 @@ flutter: 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 d6b3b729f1254..92b963b752d07 100644 --- a/examples/platform_channel/pubspec.yaml +++ b/examples/platform_channel/pubspec.yaml @@ -27,14 +27,14 @@ dev_dependencies: 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 @@ dev_dependencies: 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 08a357f2415c8..7dd9f63119532 100644 --- a/examples/platform_channel_swift/pubspec.yaml +++ b/examples/platform_channel_swift/pubspec.yaml @@ -27,14 +27,14 @@ dev_dependencies: 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 @@ dev_dependencies: 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 b98ef5395f6cc..397dd3c75642d 100644 --- a/examples/platform_view/ios/Runner/PlatformViewController.m +++ b/examples/platform_view/ios/Runner/PlatformViewController.m @@ -34,6 +34,3 @@ - (void)setIncrementLabelText { } @end - - - diff --git a/examples/stocks/pubspec.yaml b/examples/stocks/pubspec.yaml index 485bda33ae792..34136276d5dca 100644 --- a/examples/stocks/pubspec.yaml +++ b/examples/stocks/pubspec.yaml @@ -11,7 +11,7 @@ dependencies: 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 @@ dev_dependencies: 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 @@ dev_dependencies: 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 25dc389f8eeec..1980161ccee7c 100644 --- a/packages/flutter/lib/src/material/scaffold.dart +++ b/packages/flutter/lib/src/material/scaffold.dart @@ -2574,11 +2574,12 @@ class PersistentBottomSheetController extends ScaffoldFeatureController<_Stan 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 a4c803e1d8809..1f40dad25f473 100644 --- a/packages/flutter/lib/src/services/keyboard_maps.dart +++ b/packages/flutter/lib/src/services/keyboard_maps.dart @@ -2007,4 +2007,3 @@ const Map kWebNumPadMap = extends SingleChildRenderObjectWidget { ..sized = sized; } } - diff --git a/packages/flutter/lib/src/widgets/sliver.dart b/packages/flutter/lib/src/widgets/sliver.dart index c11ace67ab58b..9b4a89ce16791 100644 --- a/packages/flutter/lib/src/widgets/sliver.dart +++ b/packages/flutter/lib/src/widgets/sliver.dart @@ -1097,12 +1097,13 @@ class _SliverFillViewportRenderObjectWidget extends SliverMultiBoxAdaptorWidget 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 bc23e101390db..f9f806318686b 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 @@ class RectangularNotch extends NotchedShape { ..close(); } } - diff --git a/packages/flutter/test/material/range_slider_test.dart b/packages/flutter/test/material/range_slider_test.dart index 3e6b4a3ca6798..22ebb25132d9e 100644 --- a/packages/flutter/test/material/range_slider_test.dart +++ b/packages/flutter/test/material/range_slider_test.dart @@ -1569,4 +1569,3 @@ void main() { ]); }); } - diff --git a/packages/flutter/test/painting/image_cache_test.dart b/packages/flutter/test/painting/image_cache_test.dart index 0ed236909f079..0d4dbbcf7bd44 100644 --- a/packages/flutter/test/painting/image_cache_test.dart +++ b/packages/flutter/test/painting/image_cache_test.dart @@ -214,4 +214,3 @@ void main() { }); }); } - diff --git a/packages/flutter/test/widgets/semantics_9_test.dart b/packages/flutter/test/widgets/semantics_9_test.dart index e490839394465..a7a6dde8d352d 100644 --- a/packages/flutter/test/widgets/semantics_9_test.dart +++ b/packages/flutter/test/widgets/semantics_9_test.dart @@ -155,4 +155,3 @@ class RenderBoundaryBlockSemantics extends RenderProxyBox { ..isSemanticBoundary = true; } } - diff --git a/packages/flutter/test/widgets/shader_mask_test.dart b/packages/flutter/test/widgets/shader_mask_test.dart index 2fb0162026917..17a5456e15df5 100644 --- a/packages/flutter/test/widgets/shader_mask_test.dart +++ b/packages/flutter/test/widgets/shader_mask_test.dart @@ -110,4 +110,3 @@ void main() { ); }, skip: isBrowser); } - diff --git a/packages/flutter/test/widgets/test_border.dart b/packages/flutter/test/widgets/test_border.dart index bfedbab51b1d8..e811064ee3a62 100644 --- a/packages/flutter/test/widgets/test_border.dart +++ b/packages/flutter/test/widgets/test_border.dart @@ -34,4 +34,3 @@ class TestBorder extends ShapeBorder { 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 f313ebcb460e6..6cb798715b528 100644 --- a/packages/flutter/test/widgets/ticker_provider_test.dart +++ b/packages/flutter/test/widgets/ticker_provider_test.dart @@ -310,4 +310,3 @@ class _SingleTickerCreateMultipleTickerState extends State<_SingleTickerCreateMu return Container(); } } - diff --git a/packages/flutter_tools/lib/src/base/fingerprint.dart b/packages/flutter_tools/lib/src/base/fingerprint.dart index 9a53a3ee9bf3f..38c90049c201b 100644 --- a/packages/flutter_tools/lib/src/base/fingerprint.dart +++ b/packages/flutter_tools/lib/src/base/fingerprint.dart @@ -191,5 +191,3 @@ Set readDepfile(String depfilePath) { .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 15a02816c989c..45ad5d6992267 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 androidx64ProfileBundle = AndroidAotBundle(androidx64Profile); 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 a0d62889cc759..b7a3857dd625a 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 @@ class UpdatePackagesCommand extends FlutterCommand { // 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] = {}; for (PubspecDependency dependency in pubspec.dependencies) { if (dependency.kind == DependencyKind.normal) { - tree._versions[package] = version; - tree._dependencyTree[package] ??= {}; tree._dependencyTree[package].add(dependency.name); } } @@ -765,12 +766,16 @@ class PubspecYaml { final List transitiveDependenciesAsList = transitiveDependencies.toList()..sort(); final List 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 @@ class PubDependencyTree { } /// The transitive closure of all the dependencies for the given package, - /// excluding any listen in `seen`. + /// excluding any listed in `seen`. Iterable getTransitiveDependenciesFor( String package, { @required Set seen, diff --git a/packages/flutter_tools/pubspec.yaml b/packages/flutter_tools/pubspec.yaml index 374b48fc7241d..b1029880f2aaa 100644 --- a/packages/flutter_tools/pubspec.yaml +++ b/packages/flutter_tools/pubspec.yaml @@ -11,12 +11,12 @@ dependencies: # 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 @@ dependencies: 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 @@ dependencies: 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 @@ dev_dependencies: 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 @@ dartdoc: # 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 b30a428b5e77e..0ee4a537885d1 100644 --- a/packages/flutter_tools/templates/cocoapods/Podfile-ios-swift +++ b/packages/flutter_tools/templates/cocoapods/Podfile-ios-swift @@ -35,7 +35,7 @@ end 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 7af839b32299d..c530ea48dee1a 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 @@ flutter: } 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 d88eaf4d5a6ac..b7b4cf629a67d 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 @@ file:///Users/foo/canonicalized_map.dart 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 1b557000521e0..e690ead96aee8 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 @@ void main() { } 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 f4b34ee0cac32..093e9cd1e5c2a 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 @@ flutter: ); }); - } - 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 d9f991482c5e3..48ad64c4f71bd 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 @@ void main() { class MockProcessManager extends Mock implements ProcessManager {} class MockPlatform extends Mock implements Platform {} class MockOperatingSystemUtils extends Mock implements OperatingSystemUtils {} -