[flutter_tools] do not check for pubspec.yaml in packages forward command (#81059)

This commit is contained in:
Jonah Williams 2021-04-23 13:39:20 -07:00 committed by GitHub
parent 307e381935
commit 84bc2382f7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 58 additions and 34 deletions

View file

@ -23,7 +23,6 @@ import '../runner/flutter_command.dart';
class PackagesCommand extends FlutterCommand { class PackagesCommand extends FlutterCommand {
PackagesCommand() { PackagesCommand() {
addSubcommand(PackagesGetCommand('get', false)); addSubcommand(PackagesGetCommand('get', false));
//addSubcommand(PackagesGetCommand('upgrade', true));
addSubcommand(PackagesInteractiveGetCommand('upgrade', 'Upgrade the current package\'s dependencies to latest versions.')); addSubcommand(PackagesInteractiveGetCommand('upgrade', 'Upgrade the current package\'s dependencies to latest versions.'));
addSubcommand(PackagesInteractiveGetCommand('add', 'Add a dependency to pubspec.yaml.')); addSubcommand(PackagesInteractiveGetCommand('add', 'Add a dependency to pubspec.yaml.'));
addSubcommand(PackagesInteractiveGetCommand('remove', 'Removes a dependency from the current package.')); addSubcommand(PackagesInteractiveGetCommand('remove', 'Removes a dependency from the current package.'));
@ -271,9 +270,7 @@ class PackagesPassthroughCommand extends FlutterCommand {
} }
class PackagesInteractiveGetCommand extends FlutterCommand { class PackagesInteractiveGetCommand extends FlutterCommand {
PackagesInteractiveGetCommand(this._commandName, this._description) { PackagesInteractiveGetCommand(this._commandName, this._description);
requiresPubspecYaml();
}
@override @override
ArgParser argParser = ArgParser.allowAnything(); ArgParser argParser = ArgParser.allowAnything();
@ -298,10 +295,9 @@ class PackagesInteractiveGetCommand extends FlutterCommand {
@override @override
Future<FlutterCommandResult> runCommand() async { Future<FlutterCommandResult> runCommand() async {
List<String> rest = argResults.rest; List<String> rest = argResults.rest;
final bool isHelp = rest.contains('-h') || rest.contains('--help');
String target; String target;
if (rest.length == 1 && if (rest.length == 1 && (rest[0].contains('/') || rest[0].contains(r'\'))) {
(rest[0].contains('/') ||
rest[0].contains(r'\'))) {
// HACK: Supporting flutter specific behavior where you can pass a // HACK: Supporting flutter specific behavior where you can pass a
// folder to the command. // folder to the command.
target = findProjectRoot(globals.fs, rest[0]); target = findProjectRoot(globals.fs, rest[0]);
@ -309,43 +305,45 @@ class PackagesInteractiveGetCommand extends FlutterCommand {
} else { } else {
target = findProjectRoot(globals.fs); target = findProjectRoot(globals.fs);
} }
if (target == null) {
throwToolExit('Expected to find project root in '
'current working directory.');
}
final FlutterProject flutterProject = FlutterProject.fromDirectory(globals.fs.directory(target));
if (flutterProject.manifest.generateSyntheticPackage) { FlutterProject flutterProject;
final Environment environment = Environment( if (!isHelp) {
artifacts: globals.artifacts, if (target == null) {
logger: globals.logger, throwToolExit('Expected to find project root in current working directory.');
cacheDir: globals.cache.getRoot(), }
engineVersion: globals.flutterVersion.engineRevision, flutterProject = FlutterProject.fromDirectory(globals.fs.directory(target));
fileSystem: globals.fs,
flutterRootDir: globals.fs.directory(Cache.flutterRoot),
outputDir: globals.fs.directory(getBuildDirectory()),
processManager: globals.processManager,
platform: globals.platform,
projectDir: flutterProject.directory,
);
await generateLocalizationsSyntheticPackage( if (flutterProject.manifest.generateSyntheticPackage) {
environment: environment, final Environment environment = Environment(
buildSystem: globals.buildSystem, artifacts: globals.artifacts,
); logger: globals.logger,
cacheDir: globals.cache.getRoot(),
engineVersion: globals.flutterVersion.engineRevision,
fileSystem: globals.fs,
flutterRootDir: globals.fs.directory(Cache.flutterRoot),
outputDir: globals.fs.directory(getBuildDirectory()),
processManager: globals.processManager,
platform: globals.platform,
projectDir: flutterProject.directory,
);
await generateLocalizationsSyntheticPackage(
environment: environment,
buildSystem: globals.buildSystem,
);
}
} }
final List<String> subArgs = rest.toList() final List<String> subArgs = rest.toList()..removeWhere((String arg) => arg == '--');
..removeWhere((String arg) => arg == '--');
await pub.interactively( await pub.interactively(
<String>[name, ...subArgs], <String>[name, ...subArgs],
directory: target, directory: target,
stdio: globals.stdio, stdio: globals.stdio,
touchesPackageConfig: true, touchesPackageConfig: !isHelp,
generateSyntheticPackage: flutterProject.manifest.generateSyntheticPackage, generateSyntheticPackage: flutterProject?.manifest?.generateSyntheticPackage ?? false,
); );
await flutterProject.regeneratePlatformSpecificTooling(); await flutterProject?.regeneratePlatformSpecificTooling();
return FlutterCommandResult.success(); return FlutterCommandResult.success();
} }
} }

View file

@ -525,5 +525,31 @@ void main() {
platform: globals.platform, platform: globals.platform,
), ),
}); });
testUsingContext('upgrade does not check for pubspec.yaml if -h/--help is passed', () async {
Cache.flutterRoot = '';
processManager.addCommand(
FakeCommand(command: const <String>[
'/bin/cache/dart-sdk/bin/pub', 'upgrade', '-h'],
stdin: IOSink(StreamController<List<int>>().sink),
),
);
await createTestCommandRunner(PackagesCommand()).run(<String>['pub', 'upgrade', '-h']);
expect(processManager, hasNoRemainingExpectations);
}, overrides: <Type, Generator>{
FileSystem: () => MemoryFileSystem.test(),
Platform: () => FakePlatform(operatingSystem: 'linux', environment: <String, String>{}),
ProcessManager: () => processManager,
Stdio: () => mockStdio,
Pub: () => Pub(
fileSystem: globals.fs,
logger: globals.logger,
processManager: globals.processManager,
usage: globals.flutterUsage,
botDetector: globals.botDetector,
platform: globals.platform,
),
});
}); });
} }