mirror of
https://github.com/flutter/packages.git
synced 2025-06-22 16:14:26 +08:00
[tool] Adds a fix
command (#6512)
This commit is contained in:
@ -1,3 +1,7 @@
|
||||
## 0.11.1
|
||||
|
||||
* Adds a `fix` command to run `dart fix --apply` in target packages.
|
||||
|
||||
## 0.11
|
||||
|
||||
* Renames `publish-plugin` to `publish`.
|
||||
|
51
script/tool/lib/src/fix_command.dart
Normal file
51
script/tool/lib/src/fix_command.dart
Normal file
@ -0,0 +1,51 @@
|
||||
// Copyright 2013 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:async';
|
||||
|
||||
import 'package:file/file.dart';
|
||||
import 'package:platform/platform.dart';
|
||||
|
||||
import 'common/core.dart';
|
||||
import 'common/package_looping_command.dart';
|
||||
import 'common/process_runner.dart';
|
||||
import 'common/repository_package.dart';
|
||||
|
||||
/// A command to run Dart's "fix" command on packages.
|
||||
class FixCommand extends PackageLoopingCommand {
|
||||
/// Creates a fix command instance.
|
||||
FixCommand(
|
||||
Directory packagesDir, {
|
||||
ProcessRunner processRunner = const ProcessRunner(),
|
||||
Platform platform = const LocalPlatform(),
|
||||
}) : super(packagesDir, processRunner: processRunner, platform: platform);
|
||||
|
||||
@override
|
||||
final String name = 'fix';
|
||||
|
||||
@override
|
||||
final String description = 'Fixes packages using dart fix.\n\n'
|
||||
'This command requires "dart" and "flutter" to be in your path, and '
|
||||
'assumes that dependencies have already been fetched (e.g., by running '
|
||||
'the analyze command first).';
|
||||
|
||||
@override
|
||||
final bool hasLongOutput = false;
|
||||
|
||||
@override
|
||||
PackageLoopingType get packageLoopingType =>
|
||||
PackageLoopingType.includeAllSubpackages;
|
||||
|
||||
@override
|
||||
Future<PackageResult> runForPackage(RepositoryPackage package) async {
|
||||
final int exitCode = await processRunner.runAndStream(
|
||||
'dart', <String>['fix', '--apply'],
|
||||
workingDir: package.directory);
|
||||
if (exitCode != 0) {
|
||||
printError('Unable to automatically fix package.');
|
||||
return PackageResult.fail();
|
||||
}
|
||||
return PackageResult.success();
|
||||
}
|
||||
}
|
@ -17,6 +17,7 @@ import 'dependabot_check_command.dart';
|
||||
import 'drive_examples_command.dart';
|
||||
import 'federation_safety_check_command.dart';
|
||||
import 'firebase_test_lab_command.dart';
|
||||
import 'fix_command.dart';
|
||||
import 'format_command.dart';
|
||||
import 'license_check_command.dart';
|
||||
import 'lint_android_command.dart';
|
||||
@ -61,6 +62,7 @@ void main(List<String> args) {
|
||||
..addCommand(DriveExamplesCommand(packagesDir))
|
||||
..addCommand(FederationSafetyCheckCommand(packagesDir))
|
||||
..addCommand(FirebaseTestLabCommand(packagesDir))
|
||||
..addCommand(FixCommand(packagesDir))
|
||||
..addCommand(FormatCommand(packagesDir))
|
||||
..addCommand(LicenseCheckCommand(packagesDir))
|
||||
..addCommand(LintAndroidCommand(packagesDir))
|
||||
|
78
script/tool/test/fix_command_test.dart
Normal file
78
script/tool/test/fix_command_test.dart
Normal file
@ -0,0 +1,78 @@
|
||||
// Copyright 2013 The Flutter Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'dart:io' as io;
|
||||
|
||||
import 'package:args/command_runner.dart';
|
||||
import 'package:file/file.dart';
|
||||
import 'package:file/memory.dart';
|
||||
import 'package:flutter_plugin_tools/src/common/core.dart';
|
||||
import 'package:flutter_plugin_tools/src/fix_command.dart';
|
||||
import 'package:test/test.dart';
|
||||
|
||||
import 'mocks.dart';
|
||||
import 'util.dart';
|
||||
|
||||
void main() {
|
||||
late FileSystem fileSystem;
|
||||
late MockPlatform mockPlatform;
|
||||
late Directory packagesDir;
|
||||
late RecordingProcessRunner processRunner;
|
||||
late CommandRunner<void> runner;
|
||||
|
||||
setUp(() {
|
||||
fileSystem = MemoryFileSystem();
|
||||
mockPlatform = MockPlatform();
|
||||
packagesDir = createPackagesDirectory(fileSystem: fileSystem);
|
||||
processRunner = RecordingProcessRunner();
|
||||
final FixCommand command = FixCommand(
|
||||
packagesDir,
|
||||
processRunner: processRunner,
|
||||
platform: mockPlatform,
|
||||
);
|
||||
|
||||
runner = CommandRunner<void>('fix_command', 'Test for fix_command');
|
||||
runner.addCommand(command);
|
||||
});
|
||||
|
||||
test('runs fix in top-level packages and subpackages', () async {
|
||||
final RepositoryPackage package = createFakePackage('a', packagesDir);
|
||||
final RepositoryPackage plugin = createFakePlugin('b', packagesDir);
|
||||
|
||||
await runCapturingPrint(runner, <String>['fix']);
|
||||
|
||||
expect(
|
||||
processRunner.recordedCalls,
|
||||
orderedEquals(<ProcessCall>[
|
||||
ProcessCall('dart', const <String>['fix', '--apply'], package.path),
|
||||
ProcessCall('dart', const <String>['fix', '--apply'],
|
||||
package.getExamples().first.path),
|
||||
ProcessCall('dart', const <String>['fix', '--apply'], plugin.path),
|
||||
ProcessCall('dart', const <String>['fix', '--apply'],
|
||||
plugin.getExamples().first.path),
|
||||
]));
|
||||
});
|
||||
|
||||
test('fails if "dart fix" fails', () async {
|
||||
createFakePlugin('foo', packagesDir);
|
||||
|
||||
processRunner.mockProcessesForExecutable['dart'] = <io.Process>[
|
||||
MockProcess(exitCode: 1),
|
||||
];
|
||||
|
||||
Error? commandError;
|
||||
final List<String> output = await runCapturingPrint(runner, <String>['fix'],
|
||||
errorHandler: (Error e) {
|
||||
commandError = e;
|
||||
});
|
||||
|
||||
expect(commandError, isA<ToolExit>());
|
||||
expect(
|
||||
output,
|
||||
containsAllInOrder(<Matcher>[
|
||||
contains('Unable to automatically fix package.'),
|
||||
]),
|
||||
);
|
||||
});
|
||||
}
|
Reference in New Issue
Block a user