From 84bc2382f7ec79d744e2442ad475a6caa4faa437 Mon Sep 17 00:00:00 2001 From: Jonah Williams Date: Fri, 23 Apr 2021 13:39:20 -0700 Subject: [PATCH] [flutter_tools] do not check for pubspec.yaml in packages forward command (#81059) --- .../lib/src/commands/packages.dart | 66 +++++++++---------- .../permeable/packages_test.dart | 26 ++++++++ 2 files changed, 58 insertions(+), 34 deletions(-) diff --git a/packages/flutter_tools/lib/src/commands/packages.dart b/packages/flutter_tools/lib/src/commands/packages.dart index 581a097ac0..d09caea7e0 100644 --- a/packages/flutter_tools/lib/src/commands/packages.dart +++ b/packages/flutter_tools/lib/src/commands/packages.dart @@ -23,7 +23,6 @@ import '../runner/flutter_command.dart'; class PackagesCommand extends FlutterCommand { PackagesCommand() { addSubcommand(PackagesGetCommand('get', false)); - //addSubcommand(PackagesGetCommand('upgrade', true)); addSubcommand(PackagesInteractiveGetCommand('upgrade', 'Upgrade the current package\'s dependencies to latest versions.')); addSubcommand(PackagesInteractiveGetCommand('add', 'Add a dependency to pubspec.yaml.')); addSubcommand(PackagesInteractiveGetCommand('remove', 'Removes a dependency from the current package.')); @@ -271,9 +270,7 @@ class PackagesPassthroughCommand extends FlutterCommand { } class PackagesInteractiveGetCommand extends FlutterCommand { - PackagesInteractiveGetCommand(this._commandName, this._description) { - requiresPubspecYaml(); - } + PackagesInteractiveGetCommand(this._commandName, this._description); @override ArgParser argParser = ArgParser.allowAnything(); @@ -298,10 +295,9 @@ class PackagesInteractiveGetCommand extends FlutterCommand { @override Future runCommand() async { List rest = argResults.rest; + final bool isHelp = rest.contains('-h') || rest.contains('--help'); String target; - if (rest.length == 1 && - (rest[0].contains('/') || - rest[0].contains(r'\'))) { + if (rest.length == 1 && (rest[0].contains('/') || rest[0].contains(r'\'))) { // HACK: Supporting flutter specific behavior where you can pass a // folder to the command. target = findProjectRoot(globals.fs, rest[0]); @@ -309,43 +305,45 @@ class PackagesInteractiveGetCommand extends FlutterCommand { } else { 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) { - final Environment environment = Environment( - 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, - ); + FlutterProject flutterProject; + if (!isHelp) { + if (target == null) { + throwToolExit('Expected to find project root in current working directory.'); + } + flutterProject = FlutterProject.fromDirectory(globals.fs.directory(target)); - await generateLocalizationsSyntheticPackage( - environment: environment, - buildSystem: globals.buildSystem, - ); + if (flutterProject.manifest.generateSyntheticPackage) { + final Environment environment = Environment( + 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 subArgs = rest.toList() - ..removeWhere((String arg) => arg == '--'); + final List subArgs = rest.toList()..removeWhere((String arg) => arg == '--'); await pub.interactively( [name, ...subArgs], directory: target, stdio: globals.stdio, - touchesPackageConfig: true, - generateSyntheticPackage: flutterProject.manifest.generateSyntheticPackage, + touchesPackageConfig: !isHelp, + generateSyntheticPackage: flutterProject?.manifest?.generateSyntheticPackage ?? false, ); - await flutterProject.regeneratePlatformSpecificTooling(); + await flutterProject?.regeneratePlatformSpecificTooling(); return FlutterCommandResult.success(); } } diff --git a/packages/flutter_tools/test/commands.shard/permeable/packages_test.dart b/packages/flutter_tools/test/commands.shard/permeable/packages_test.dart index 1fb98840e1..f8b90a3631 100644 --- a/packages/flutter_tools/test/commands.shard/permeable/packages_test.dart +++ b/packages/flutter_tools/test/commands.shard/permeable/packages_test.dart @@ -525,5 +525,31 @@ void main() { platform: globals.platform, ), }); + + testUsingContext('upgrade does not check for pubspec.yaml if -h/--help is passed', () async { + Cache.flutterRoot = ''; + processManager.addCommand( + FakeCommand(command: const [ + '/bin/cache/dart-sdk/bin/pub', 'upgrade', '-h'], + stdin: IOSink(StreamController>().sink), + ), + ); + await createTestCommandRunner(PackagesCommand()).run(['pub', 'upgrade', '-h']); + + expect(processManager, hasNoRemainingExpectations); + }, overrides: { + FileSystem: () => MemoryFileSystem.test(), + Platform: () => FakePlatform(operatingSystem: 'linux', environment: {}), + ProcessManager: () => processManager, + Stdio: () => mockStdio, + Pub: () => Pub( + fileSystem: globals.fs, + logger: globals.logger, + processManager: globals.processManager, + usage: globals.flutterUsage, + botDetector: globals.botDetector, + platform: globals.platform, + ), + }); }); }