diff --git a/dev/bots/analyze_snippet_code.dart b/dev/bots/analyze_snippet_code.dart index 70241d6bcf..5d4fb1466d 100644 --- a/dev/bots/analyze_snippet_code.dart +++ b/dev/bots/analyze_snippet_code.dart @@ -980,13 +980,6 @@ class _SnippetChecker { /// Invokes the analyzer on the given [directory] and returns the stdout (with some lines filtered). List _runAnalyzer() { _createConfigurationFiles(); - // Run pub get to avoid output from getting dependencies in the analyzer - // output. - Process.runSync( - _flutter, - ['pub', 'get'], - workingDirectory: _tempDirectory.absolute.path, - ); final ProcessResult result = Process.runSync( _flutter, ['--no-wrap', 'analyze', '--no-preamble', '--no-congratulate', '.'], @@ -1013,7 +1006,7 @@ class _SnippetChecker { if (stdout.isNotEmpty && stdout.first == 'Building flutter tool...') { stdout.removeAt(0); } - if (stdout.isNotEmpty && stdout.first.isEmpty) { + if (stdout.isNotEmpty && stdout.first.startsWith('Running "flutter pub get" in ')) { stdout.removeAt(0); } return stdout; diff --git a/packages/flutter_tools/lib/src/commands/create.dart b/packages/flutter_tools/lib/src/commands/create.dart index 69a242da5d..0923d70c3b 100644 --- a/packages/flutter_tools/lib/src/commands/create.dart +++ b/packages/flutter_tools/lib/src/commands/create.dart @@ -192,6 +192,7 @@ class CreateCommand extends CreateBase { } validateOutputDirectoryArg(); + String? sampleCode; final String? sampleArgument = stringArg('sample'); if (sampleArgument != null) { @@ -254,29 +255,7 @@ class CreateCommand extends CreateBase { } final String dartSdk = globals.cache.dartSdkBuild; - final bool includeIos; - final bool includeAndroid; - final bool includeWeb; - final bool includeLinux; - final bool includeMacos; - final bool includeWindows; - if (template == FlutterProjectType.module) { - // The module template only supports iOS and Android. - includeIos = true; - includeAndroid = true; - includeWeb = false; - includeLinux = false; - includeMacos = false; - includeWindows = false; - } else { - includeIos = featureFlags.isIOSEnabled && platforms.contains('ios'); - includeAndroid = featureFlags.isAndroidEnabled && platforms.contains('android'); - includeWeb = featureFlags.isWebEnabled && platforms.contains('web'); - includeLinux = featureFlags.isLinuxEnabled && platforms.contains('linux'); - includeMacos = featureFlags.isMacOSEnabled && platforms.contains('macos'); - includeWindows = featureFlags.isWindowsEnabled && platforms.contains('windows'); - } - + final bool includeIos = featureFlags.isIOSEnabled && platforms.contains('ios'); String? developmentTeam; if (includeIos) { developmentTeam = await getCodeSigningIdentityDevelopmentTeam( @@ -303,11 +282,11 @@ class CreateCommand extends CreateBase { iosLanguage: stringArgDeprecated('ios-language'), iosDevelopmentTeam: developmentTeam, ios: includeIos, - android: includeAndroid, - web: includeWeb, - linux: includeLinux, - macos: includeMacos, - windows: includeWindows, + android: featureFlags.isAndroidEnabled && platforms.contains('android'), + web: featureFlags.isWebEnabled && platforms.contains('web'), + linux: featureFlags.isLinuxEnabled && platforms.contains('linux'), + macos: featureFlags.isMacOSEnabled && platforms.contains('macos'), + windows: featureFlags.isWindowsEnabled && platforms.contains('windows'), // Enable null safety everywhere. dartSdkVersionBounds: "'>=$dartSdk <3.0.0'", implementationTests: boolArgDeprecated('implementation-tests'), @@ -330,7 +309,6 @@ class CreateCommand extends CreateBase { final Directory relativeDir = globals.fs.directory(projectDirPath); int generatedFileCount = 0; - final PubContext pubContext; switch (template) { case FlutterProjectType.app: generatedFileCount += await generateApp( @@ -341,7 +319,6 @@ class CreateCommand extends CreateBase { printStatusWhenWriting: !creatingNewProject, projectType: template, ); - pubContext = PubContext.create; break; case FlutterProjectType.skeleton: generatedFileCount += await generateApp( @@ -352,7 +329,6 @@ class CreateCommand extends CreateBase { printStatusWhenWriting: !creatingNewProject, generateMetadata: false, ); - pubContext = PubContext.create; break; case FlutterProjectType.module: generatedFileCount += await _generateModule( @@ -361,7 +337,6 @@ class CreateCommand extends CreateBase { overwrite: overwrite, printStatusWhenWriting: !creatingNewProject, ); - pubContext = PubContext.create; break; case FlutterProjectType.package: generatedFileCount += await _generatePackage( @@ -370,7 +345,6 @@ class CreateCommand extends CreateBase { overwrite: overwrite, printStatusWhenWriting: !creatingNewProject, ); - pubContext = PubContext.createPackage; break; case FlutterProjectType.plugin: generatedFileCount += await _generateMethodChannelPlugin( @@ -380,7 +354,6 @@ class CreateCommand extends CreateBase { printStatusWhenWriting: !creatingNewProject, projectType: template, ); - pubContext = PubContext.createPlugin; break; case FlutterProjectType.ffiPlugin: generatedFileCount += await _generateFfiPlugin( @@ -390,26 +363,8 @@ class CreateCommand extends CreateBase { printStatusWhenWriting: !creatingNewProject, projectType: template, ); - pubContext = PubContext.createPlugin; break; } - - if (boolArgDeprecated('pub')) { - final FlutterProject project = FlutterProject.fromDirectory(relativeDir); - await pub.get( - context: pubContext, - project: project, - offline: boolArgDeprecated('offline'), - ); - await project.ensureReadyForPlatformSpecificTooling( - androidPlatform: includeAndroid, - iosPlatform: includeIos, - linuxPlatform: includeLinux, - macOSPlatform: includeMacos, - windowsPlatform: includeWindows, - webPlatform: includeWeb, - ); - } if (sampleCode != null) { generatedFileCount += _applySample(relativeDir, sampleCode); } @@ -492,6 +447,18 @@ Your $application code is in $relativeAppMain. overwrite: overwrite, printStatusWhenWriting: printStatusWhenWriting, ); + if (boolArgDeprecated('pub')) { + await pub.get( + context: PubContext.create, + directory: directory.path, + offline: boolArgDeprecated('offline'), + ); + final FlutterProject project = FlutterProject.fromDirectory(directory); + await project.ensureReadyForPlatformSpecificTooling( + androidPlatform: true, + iosPlatform: true, + ); + } return generatedCount; } @@ -513,6 +480,13 @@ Your $application code is in $relativeAppMain. overwrite: overwrite, printStatusWhenWriting: printStatusWhenWriting, ); + if (boolArgDeprecated('pub')) { + await pub.get( + context: PubContext.createPackage, + directory: directory.path, + offline: boolArgDeprecated('offline'), + ); + } return generatedCount; } @@ -552,6 +526,14 @@ Your $application code is in $relativeAppMain. printStatusWhenWriting: printStatusWhenWriting, ); + if (boolArgDeprecated('pub')) { + await pub.get( + context: PubContext.createPlugin, + directory: directory.path, + offline: boolArgDeprecated('offline'), + ); + } + final FlutterProject project = FlutterProject.fromDirectory(directory); final bool generateAndroid = templateContext['android'] == true; if (generateAndroid) { @@ -622,6 +604,14 @@ Your $application code is in $relativeAppMain. printStatusWhenWriting: printStatusWhenWriting, ); + if (boolArgDeprecated('pub')) { + await pub.get( + context: PubContext.createPlugin, + directory: directory.path, + offline: boolArgDeprecated('offline'), + ); + } + final FlutterProject project = FlutterProject.fromDirectory(directory); final bool generateAndroid = templateContext['android'] == true; if (generateAndroid) { diff --git a/packages/flutter_tools/lib/src/commands/create_base.dart b/packages/flutter_tools/lib/src/commands/create_base.dart index 2f11b87b4f..a131d6cd11 100644 --- a/packages/flutter_tools/lib/src/commands/create_base.dart +++ b/packages/flutter_tools/lib/src/commands/create_base.dart @@ -17,6 +17,7 @@ import '../build_system/build_system.dart'; import '../cache.dart'; import '../convert.dart'; import '../dart/generate_synthetic_packages.dart'; +import '../dart/pub.dart'; import '../flutter_project_metadata.dart'; import '../globals.dart' as globals; import '../project.dart'; @@ -548,6 +549,24 @@ abstract class CreateBase extends FlutterCommand { environment: environment, buildSystem: globals.buildSystem, ); + + await pub.get( + context: PubContext.create, + directory: directory.path, + offline: boolArgDeprecated('offline'), + // For templates that use the l10n localization tooling, make sure + // importing the generated package works right after `flutter create`. + generateSyntheticPackage: true, + ); + + await project.ensureReadyForPlatformSpecificTooling( + androidPlatform: androidPlatform, + iosPlatform: iosPlatform, + linuxPlatform: linuxPlatform, + macOSPlatform: macOSPlatform, + windowsPlatform: windowsPlatform, + webPlatform: webPlatform, + ); } final List platformsForMigrateConfig = [SupportedPlatform.root]; if (androidPlatform) { diff --git a/packages/flutter_tools/lib/src/commands/daemon.dart b/packages/flutter_tools/lib/src/commands/daemon.dart index 9bcec8c862..0ad140388f 100644 --- a/packages/flutter_tools/lib/src/commands/daemon.dart +++ b/packages/flutter_tools/lib/src/commands/daemon.dart @@ -1541,7 +1541,7 @@ class AppRunLogger extends DelegatingLogger { } @override - bool get supportsColor => false; + bool get supportsColor => throw UnimplementedError(); @override bool get hasTerminal => false; diff --git a/packages/flutter_tools/lib/src/commands/packages.dart b/packages/flutter_tools/lib/src/commands/packages.dart index 14503a03b2..f360cc5f87 100644 --- a/packages/flutter_tools/lib/src/commands/packages.dart +++ b/packages/flutter_tools/lib/src/commands/packages.dart @@ -139,10 +139,11 @@ class PackagesGetCommand extends FlutterCommand { try { await pub.get( context: PubContext.pubGet, - project: flutterProject, + directory: directory, upgrade: upgrade, shouldSkipThirdPartyGenerator: false, offline: boolArgDeprecated('offline'), + generateSyntheticPackage: flutterProject.manifest.generateSyntheticPackage, ); pubGetTimer.stop(); globals.flutterUsage.sendTiming('pub', 'get', pubGetTimer.elapsed, label: 'success'); @@ -171,14 +172,13 @@ class PackagesGetCommand extends FlutterCommand { } final FlutterProject rootProject = FlutterProject.fromDirectory(globals.fs.directory(target)); - // This will also resolve dependencies for the example folder, await _runPubGet(target, rootProject); - - // We need to regenerate the platform specific tooling for both the project - // itself and example (if present). await rootProject.regeneratePlatformSpecificTooling(); + + // Get/upgrade packages in example app as well if (rootProject.hasExampleApp && rootProject.example.pubspecFile.existsSync()) { final FlutterProject exampleProject = rootProject.example; + await _runPubGet(exampleProject.directory.path, exampleProject); await exampleProject.regeneratePlatformSpecificTooling(); } @@ -211,7 +211,7 @@ class PackagesTestCommand extends FlutterCommand { @override Future runCommand() async { - await pub.batch(['run', 'test', ...argResults!.rest], context: PubContext.runTest); + await pub.batch(['run', 'test', ...argResults!.rest], context: PubContext.runTest, retry: false); return FlutterCommandResult.success(); } } diff --git a/packages/flutter_tools/lib/src/commands/update_packages.dart b/packages/flutter_tools/lib/src/commands/update_packages.dart index ef70ceeef1..dbef897c97 100644 --- a/packages/flutter_tools/lib/src/commands/update_packages.dart +++ b/packages/flutter_tools/lib/src/commands/update_packages.dart @@ -16,7 +16,6 @@ import '../base/task_queue.dart'; import '../cache.dart'; import '../dart/pub.dart'; import '../globals.dart' as globals; -import '../project.dart'; import '../runner/flutter_command.dart'; /// Map from package name to package version, used to artificially pin a pub @@ -400,7 +399,7 @@ class UpdatePackagesCommand extends FlutterCommand { // needed packages to the pub cache, upgrading if requested. await pub.get( context: PubContext.updatePackages, - project: FlutterProject.fromDirectory(tempDir), + directory: tempDir.path, upgrade: doUpgrade, offline: boolArgDeprecated('offline'), flutterRootOverride: temporaryFlutterSdk?.path, @@ -423,6 +422,7 @@ class UpdatePackagesCommand extends FlutterCommand { context: PubContext.updatePackages, directory: tempDir.path, filter: tree.fill, + retry: false, // errors here are usually fatal since we're not hitting the network ); } } finally { @@ -502,7 +502,7 @@ class UpdatePackagesCommand extends FlutterCommand { stopwatch.start(); await pub.get( context: PubContext.updatePackages, - project: FlutterProject.fromDirectory(dir), + directory: dir.path, // All dependencies should already have been downloaded by the fake // package, so the concurrent checks can all happen offline. offline: true, diff --git a/packages/flutter_tools/lib/src/commands/upgrade.dart b/packages/flutter_tools/lib/src/commands/upgrade.dart index f7d75a2d52..4841f29e37 100644 --- a/packages/flutter_tools/lib/src/commands/upgrade.dart +++ b/packages/flutter_tools/lib/src/commands/upgrade.dart @@ -12,7 +12,6 @@ import '../cache.dart'; import '../dart/pub.dart'; import '../globals.dart' as globals; import '../persistent_tool_state.dart'; -import '../project.dart'; import '../runner/flutter_command.dart'; import '../version.dart'; import 'channel.dart'; @@ -331,7 +330,7 @@ class UpgradeCommandRunner { globals.printStatus(''); await pub.get( context: PubContext.pubUpgrade, - project: FlutterProject.fromDirectory(globals.fs.directory(projectRoot)), + directory: projectRoot, upgrade: true, ); } diff --git a/packages/flutter_tools/lib/src/context_runner.dart b/packages/flutter_tools/lib/src/context_runner.dart index b4cf96d876..d35bdb5f3d 100644 --- a/packages/flutter_tools/lib/src/context_runner.dart +++ b/packages/flutter_tools/lib/src/context_runner.dart @@ -152,7 +152,6 @@ Future runInContext( logger: globals.logger, platform: globals.platform, osUtils: globals.os, - projectFactory: globals.projectFactory, ), CocoaPods: () => CocoaPods( fileSystem: globals.fs, @@ -313,7 +312,6 @@ Future runInContext( botDetector: globals.botDetector, platform: globals.platform, usage: globals.flutterUsage, - stdio: globals.stdio, ), ShutdownHooks: () => ShutdownHooks(logger: globals.logger), Stdio: () => Stdio(), diff --git a/packages/flutter_tools/lib/src/dart/pub.dart b/packages/flutter_tools/lib/src/dart/pub.dart index f64249d083..c784f85cf0 100644 --- a/packages/flutter_tools/lib/src/dart/pub.dart +++ b/packages/flutter_tools/lib/src/dart/pub.dart @@ -12,14 +12,12 @@ import '../base/common.dart'; import '../base/context.dart'; import '../base/file_system.dart'; import '../base/io.dart' as io; -import '../base/io.dart'; import '../base/logger.dart'; import '../base/platform.dart'; import '../base/process.dart'; import '../cache.dart'; import '../convert.dart'; import '../dart/package_map.dart'; -import '../project.dart'; import '../reporting/reporting.dart'; /// The [Pub] instance. @@ -150,10 +148,9 @@ abstract class Pub { required Platform platform, required BotDetector botDetector, required Usage usage, - required Stdio stdio, }) = _DefaultPub; - /// Runs `pub get` or `pub upgrade` for [project]. + /// Runs `pub get`. /// /// [context] provides extra information to package server requests to /// understand usage. @@ -161,13 +158,13 @@ abstract class Pub { /// If [shouldSkipThirdPartyGenerator] is true, the overall pub get will be /// skipped if the package config file has a "generator" other than "pub". /// Defaults to true. - /// Will also resolve dependencies in the example folder if present. Future get({ required PubContext context, - required FlutterProject project, + String? directory, bool skipIfAbsent = false, bool upgrade = false, bool offline = false, + bool generateSyntheticPackage = false, String? flutterRootOverride, bool checkUpToDate = false, bool shouldSkipThirdPartyGenerator = true, @@ -180,8 +177,9 @@ abstract class Pub { /// the corresponding stream of this process, optionally applying filtering. /// The pub process will not receive anything on its stdin stream. /// - /// The `--trace` argument is passed to `pub` when `showTraceForErrors` - /// `isRunningOnBot` is true. + /// The `--trace` argument is passed to `pub` (by mutating the provided + /// `arguments` list) when `showTraceForErrors` is true, and when `showTraceForErrors` + /// is null/unset, and `isRunningOnBot` is true. /// /// [context] provides extra information to package server requests to /// understand usage. @@ -191,6 +189,8 @@ abstract class Pub { String? directory, MessageFilter? filter, String failureMessage = 'pub failed', + required bool retry, + bool? showTraceForErrors, }); /// Runs pub in 'interactive' mode. @@ -214,7 +214,6 @@ class _DefaultPub implements Pub { required Platform platform, required BotDetector botDetector, required Usage usage, - required Stdio stdio, }) : _fileSystem = fileSystem, _logger = logger, _platform = platform, @@ -224,8 +223,7 @@ class _DefaultPub implements Pub { logger: logger, processManager: processManager, ), - _processManager = processManager, - _stdio = stdio; + _processManager = processManager; final FileSystem _fileSystem; final Logger _logger; @@ -234,40 +232,40 @@ class _DefaultPub implements Pub { final BotDetector _botDetector; final Usage _usage; final ProcessManager _processManager; - final Stdio _stdio; @override Future get({ required PubContext context, - required FlutterProject project, + String? directory, bool skipIfAbsent = false, bool upgrade = false, bool offline = false, bool generateSyntheticPackage = false, - bool generateSyntheticPackageForExample = false, String? flutterRootOverride, bool checkUpToDate = false, bool shouldSkipThirdPartyGenerator = true, bool printProgress = true, }) async { - final String directory = project.directory.path; - final File packageConfigFile = project.packageConfigFile; + directory ??= _fileSystem.currentDirectory.path; + final File packageConfigFile = _fileSystem.file( + _fileSystem.path.join(directory, '.dart_tool', 'package_config.json')); final Directory generatedDirectory = _fileSystem.directory( _fileSystem.path.join(directory, '.dart_tool', 'flutter_gen')); final File lastVersion = _fileSystem.file( _fileSystem.path.join(directory, '.dart_tool', 'version')); final File currentVersion = _fileSystem.file( _fileSystem.path.join(Cache.flutterRoot!, 'version')); - final File pubspecYaml = project.pubspecFile; + final File pubspecYaml = _fileSystem.file( + _fileSystem.path.join(directory, 'pubspec.yaml')); final File pubLockFile = _fileSystem.file( _fileSystem.path.join(directory, 'pubspec.lock') ); - if (shouldSkipThirdPartyGenerator && project.packageConfigFile.existsSync()) { + if (shouldSkipThirdPartyGenerator && packageConfigFile.existsSync()) { Map packageConfigMap; try { packageConfigMap = jsonDecode( - project.packageConfigFile.readAsStringSync(), + packageConfigFile.readAsStringSync(), ) as Map; } on FormatException { packageConfigMap = {}; @@ -300,118 +298,31 @@ class _DefaultPub implements Pub { } final String command = upgrade ? 'upgrade' : 'get'; + final Status? status = printProgress ? _logger.startProgress( + 'Running "flutter pub $command" in ${_fileSystem.path.basename(directory)}...', + ) : null; final bool verbose = _logger.isVerbose; final List args = [ - if (_logger.supportsColor) - '--color', if (verbose) - '--verbose', - '--directory', - _fileSystem.path.relative(directory), + '--verbose' + else + '--verbosity=warning', ...[ command, + '--no-precompile', ], if (offline) '--offline', - '--example', ]; - await _runWithRetries( - args, - command: command, - context: context, - directory: directory, - failureMessage: 'pub $command failed', - retry: !offline, - flutterRootOverride: flutterRootOverride, - printProgress: printProgress - ); - - if (!packageConfigFile.existsSync()) { - throwToolExit('$directory: pub did not create .dart_tools/package_config.json file.'); - } - lastVersion.writeAsStringSync(currentVersion.readAsStringSync()); - await _updatePackageConfig( - packageConfigFile, - generatedDirectory, - project.manifest.generateSyntheticPackage, - ); - if (project.hasExampleApp && project.example.pubspecFile.existsSync()) { - final Directory exampleGeneratedDirectory = _fileSystem.directory( - _fileSystem.path.join(project.example.directory.path, '.dart_tool', 'flutter_gen')); - await _updatePackageConfig( - project.example.packageConfigFile, - exampleGeneratedDirectory, - project.example.manifest.generateSyntheticPackage, - ); - } - } - - /// Runs pub with [arguments]. - /// - /// Retries the command as long as the exit code is - /// `_kPubExitCodeUnavailable`. - /// - /// Prints the stderr and stdout of the last run. - /// - /// Sends an analytics event - Future _runWithRetries( - List arguments, { - required String command, - required bool printProgress, - required PubContext context, - required bool retry, - required String directory, - String failureMessage = 'pub failed', - String? flutterRootOverride, - }) async { - int exitCode; - int attempts = 0; - int duration = 1; - - List<_OutputLine>? output; - StreamSubscription recordLines(Stream> stream, _OutputStream streamName) { - return stream - .transform(utf8.decoder) - .transform(const LineSplitter()) - .listen((String line) => output!.add(_OutputLine(line, streamName))); - } - - final Status? status = printProgress - ? _logger.startProgress('Running "flutter pub $command" in ${_fileSystem.path.basename(directory)}...',) - : null; - final List pubCommand = _pubCommand(arguments); - final Map pubEnvironment = await _createPubEnvironment(context, flutterRootOverride); try { - do { - output = <_OutputLine>[]; - attempts += 1; - final io.Process process = await _processUtils.start( - pubCommand, - workingDirectory: _fileSystem.path.current, - environment: pubEnvironment, - ); - final StreamSubscription stdoutSubscription = - recordLines(process.stdout, _OutputStream.stdout); - final StreamSubscription stderrSubscription = - recordLines(process.stderr, _OutputStream.stderr); - - exitCode = await process.exitCode; - unawaited(stdoutSubscription.cancel()); - unawaited(stderrSubscription.cancel()); - - if (retry && exitCode == _kPubExitCodeUnavailable) { - _logger.printStatus( - '$failureMessage (server unavailable) -- attempting retry $attempts in $duration ' - 'second${ duration == 1 ? "" : "s"}...', - ); - await Future.delayed(Duration(seconds: duration)); - if (duration < 64) { - duration *= 2; - } - // This will cause a retry. - output = null; - } - } while (output == null); + await batch( + args, + context: context, + directory: directory, + failureMessage: 'pub $command failed', + retry: !offline, + flutterRootOverride: flutterRootOverride, + ); status?.stop(); // The exception is rethrown, so don't catch only Exceptions. } catch (exception) { // ignore: avoid_catches_without_on_clauses @@ -431,45 +342,15 @@ class _DefaultPub implements Pub { rethrow; } - if (printProgress) { - // Show the output of the last run. - for (final _OutputLine line in output) { - switch (line.stream) { - case _OutputStream.stdout: - _stdio.stdoutWrite('${line.line}\n'); - break; - case _OutputStream.stderr: - _stdio.stderrWrite('${line.line}\n'); - break; - } - } - } - - final int code = exitCode; - String result = 'success'; - if (output.any((_OutputLine line) => line.line.contains('version solving failed'))) { - result = 'version-solving-failed'; - } else if (code != 0) { - result = 'failure'; - } - PubResultEvent( - context: context.toAnalyticsString(), - result: result, - usage: _usage, - ).send(); - final String lastPubMessage = output.isEmpty ? 'no message' : output.last.line; - - if (code != 0) { - final StringBuffer buffer = StringBuffer('$failureMessage\n'); - buffer.writeln('command: "${pubCommand.join(' ')}"'); - buffer.write(_stringifyPubEnv(pubEnvironment)); - buffer.writeln('exit code: $code'); - buffer.writeln('last line of pub output: "${lastPubMessage.trim()}"'); - throwToolExit( - buffer.toString(), - exitCode: code, - ); + if (!packageConfigFile.existsSync()) { + throwToolExit('$directory: pub did not create .dart_tools/package_config.json file.'); } + lastVersion.writeAsStringSync(currentVersion.readAsStringSync()); + await _updatePackageConfig( + packageConfigFile, + generatedDirectory, + generateSyntheticPackage, + ); } // For surfacing pub env in crash reporting @@ -493,13 +374,19 @@ class _DefaultPub implements Pub { String? directory, MessageFilter? filter, String failureMessage = 'pub failed', + required bool retry, + bool? showTraceForErrors, String? flutterRootOverride, }) async { - final bool showTraceForErrors = await _botDetector.isRunningOnBot; + showTraceForErrors ??= await _botDetector.isRunningOnBot; String lastPubMessage = 'no message'; + bool versionSolvingFailed = false; String? filterWrapper(String line) { lastPubMessage = line; + if (line.contains('version solving failed')) { + versionSolvingFailed = true; + } if (filter == null) { return line; } @@ -509,17 +396,44 @@ class _DefaultPub implements Pub { if (showTraceForErrors) { arguments.insert(0, '--trace'); } - final Map pubEnvironment = await _createPubEnvironment(context, flutterRootOverride); + int attempts = 0; + int duration = 1; + int code; final List pubCommand = _pubCommand(arguments); - final int code = await _processUtils.stream( + final Map pubEnvironment = await _createPubEnvironment(context, flutterRootOverride); + while (true) { + attempts += 1; + code = await _processUtils.stream( pubCommand, workingDirectory: directory, mapFunction: filterWrapper, // may set versionSolvingFailed, lastPubMessage environment: pubEnvironment, ); + String? message; + if (retry) { + if (code == _kPubExitCodeUnavailable) { + message = 'server unavailable'; + } + } + if (message == null) { + break; + } + versionSolvingFailed = false; + _logger.printStatus( + '$failureMessage ($message) -- attempting retry $attempts in $duration ' + 'second${ duration == 1 ? "" : "s"}...', + ); + await Future.delayed(Duration(seconds: duration)); + if (duration < 64) { + duration *= 2; + } + } + assert(code != null); String result = 'success'; - if (code != 0) { + if (versionSolvingFailed) { + result = 'version-solving-failed'; + } else if (code != 0) { result = 'failure'; } PubResultEvent( @@ -551,10 +465,7 @@ class _DefaultPub implements Pub { }) async { // Fully resolved pub or pub.bat is calculated based on current platform. final io.Process process = await _processUtils.start( - _pubCommand([ - if (_logger.supportsColor) '--color', - ...arguments, - ]), + _pubCommand(arguments), workingDirectory: directory, environment: await _createPubEnvironment(PubContext.interactive), ); @@ -810,14 +721,3 @@ class _DefaultPub implements Pub { return buffer.toString(); } } - -class _OutputLine { - _OutputLine(this.line, this.stream); - final String line; - final _OutputStream stream; -} - -enum _OutputStream { - stdout, - stderr, -} diff --git a/packages/flutter_tools/lib/src/flutter_cache.dart b/packages/flutter_tools/lib/src/flutter_cache.dart index 80ee9fbc57..f4ce3cd8c3 100644 --- a/packages/flutter_tools/lib/src/flutter_cache.dart +++ b/packages/flutter_tools/lib/src/flutter_cache.dart @@ -19,7 +19,6 @@ import 'cache.dart'; import 'dart/package_map.dart'; import 'dart/pub.dart'; import 'globals.dart' as globals; -import 'project.dart'; /// An implementation of the [Cache] which provides all of Flutter's default artifacts. class FlutterCache extends Cache { @@ -30,7 +29,6 @@ class FlutterCache extends Cache { required super.fileSystem, required Platform platform, required super.osUtils, - required FlutterProjectFactory projectFactory, }) : super(logger: logger, platform: platform, artifacts: []) { registerArtifact(MaterialFonts(this)); registerArtifact(GradleWrapper(this)); @@ -56,7 +54,6 @@ class FlutterCache extends Cache { // before the version is determined. flutterRoot: () => Cache.flutterRoot!, pub: () => pub, - projectFactory: projectFactory, )); } } @@ -73,17 +70,14 @@ class PubDependencies extends ArtifactSet { required String Function() flutterRoot, required Logger logger, required Pub Function() pub, - required FlutterProjectFactory projectFactory, }) : _logger = logger, _flutterRoot = flutterRoot, _pub = pub, - _projectFactory = projectFactory, super(DevelopmentArtifact.universal); final String Function() _flutterRoot; final Logger _logger; final Pub Function() _pub; - final FlutterProjectFactory _projectFactory; @override Future isUpToDate( @@ -124,9 +118,7 @@ class PubDependencies extends ArtifactSet { ) async { await _pub().get( context: PubContext.pubGet, - project: _projectFactory.fromDirectory( - fileSystem.directory(fileSystem.path.join(_flutterRoot(), 'packages', 'flutter_tools')) - ), + directory: fileSystem.path.join(_flutterRoot(), 'packages', 'flutter_tools'), offline: offline ); } diff --git a/packages/flutter_tools/lib/src/runner/flutter_command.dart b/packages/flutter_tools/lib/src/runner/flutter_command.dart index 41eee55e51..e4e193db21 100644 --- a/packages/flutter_tools/lib/src/runner/flutter_command.dart +++ b/packages/flutter_tools/lib/src/runner/flutter_command.dart @@ -1355,7 +1355,7 @@ abstract class FlutterCommand extends Command { await pub.get( context: PubContext.getVerifyContext(name), - project: project, + generateSyntheticPackage: project.manifest.generateSyntheticPackage, checkUpToDate: cachePubGet, ); await project.regeneratePlatformSpecificTooling(); diff --git a/packages/flutter_tools/test/commands.shard/hermetic/analyze_continuously_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/analyze_continuously_test.dart index 91794cba82..0205a9a723 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/analyze_continuously_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/analyze_continuously_test.dart @@ -19,14 +19,12 @@ import 'package:flutter_tools/src/commands/analyze.dart'; import 'package:flutter_tools/src/dart/analysis.dart'; import 'package:flutter_tools/src/dart/pub.dart'; import 'package:flutter_tools/src/globals.dart' as globals; -import 'package:flutter_tools/src/project.dart'; import 'package:flutter_tools/src/project_validator.dart'; import 'package:process/process.dart'; import '../../src/common.dart'; import '../../src/context.dart'; import '../../src/fake_process_manager.dart'; -import '../../src/fakes.dart'; import '../../src/test_flutter_command_runner.dart'; void main() { @@ -41,7 +39,6 @@ void main() { ProcessManager processManager; AnsiTerminal terminal; Logger logger; - FakeStdio mockStdio; setUp(() { fileSystem = globals.localFileSystem; @@ -50,7 +47,6 @@ void main() { terminal = AnsiTerminal(platform: platform, stdio: Stdio()); logger = BufferLogger(outputPreferences: OutputPreferences.test(), terminal: terminal); tempDir = fileSystem.systemTempDirectory.createTempSync('flutter_analysis_test.'); - mockStdio = FakeStdio(); }); tearDown(() { @@ -88,11 +84,11 @@ void main() { platform: const LocalPlatform(), botDetector: globals.botDetector, usage: globals.flutterUsage, - stdio: mockStdio, ); await pub.get( context: PubContext.flutterTests, - project: FlutterProject.fromDirectoryTest(tempDir), + directory: tempDir.path, + generateSyntheticPackage: false, ); server = AnalysisServer( @@ -126,11 +122,11 @@ void main() { platform: const LocalPlatform(), usage: globals.flutterUsage, botDetector: globals.botDetector, - stdio: mockStdio, ); await pub.get( context: PubContext.flutterTests, - project: FlutterProject.fromDirectoryTest(tempDir), + directory: tempDir.path, + generateSyntheticPackage: false, ); server = AnalysisServer( diff --git a/packages/flutter_tools/test/commands.shard/hermetic/create_usage_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/create_usage_test.dart index 5f88b9c21f..523c3b2def 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/create_usage_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/create_usage_test.dart @@ -13,7 +13,6 @@ import 'package:flutter_tools/src/dart/pub.dart'; import 'package:flutter_tools/src/doctor.dart'; import 'package:flutter_tools/src/doctor_validator.dart'; import 'package:flutter_tools/src/globals.dart' as globals; -import 'package:flutter_tools/src/project.dart'; import 'package:test/fake.dart'; import '../../src/context.dart'; @@ -30,18 +29,17 @@ class FakePub extends Fake implements Pub { @override Future get({ PubContext context, - FlutterProject project, + String directory, bool skipIfAbsent = false, bool upgrade = false, bool offline = false, bool generateSyntheticPackage = false, - bool generateSyntheticPackageForExample = false, String flutterRootOverride, bool checkUpToDate = false, bool shouldSkipThirdPartyGenerator = true, bool printProgress = true, }) async { - project.directory.childFile('.packages').createSync(); + fs.directory(directory).childFile('.packages').createSync(); if (offline == true) { calledGetOffline += 1; } else { diff --git a/packages/flutter_tools/test/commands.shard/hermetic/drive_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/drive_test.dart index 2c3aecab2c..4cdf7531f6 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/drive_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/drive_test.dart @@ -308,12 +308,11 @@ class FakePub extends Fake implements Pub { @override Future get({ PubContext context, - FlutterProject project, + String directory, bool skipIfAbsent = false, bool upgrade = false, bool offline = false, bool generateSyntheticPackage = false, - bool generateSyntheticPackageForExample = false, String flutterRootOverride, bool checkUpToDate = false, bool shouldSkipThirdPartyGenerator = true, diff --git a/packages/flutter_tools/test/commands.shard/hermetic/pub_get_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/pub_get_test.dart index 6861f22253..080fa54e79 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/pub_get_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/pub_get_test.dart @@ -169,18 +169,17 @@ class FakePub extends Fake implements Pub { @override Future get({ required PubContext context, - required FlutterProject project, + String? directory, bool skipIfAbsent = false, bool upgrade = false, bool offline = false, bool generateSyntheticPackage = false, - bool generateSyntheticPackageForExample = false, String? flutterRootOverride, bool checkUpToDate = false, bool shouldSkipThirdPartyGenerator = true, bool printProgress = true, }) async { - fileSystem.directory(project.directory) + fileSystem.directory(directory) .childDirectory('.dart_tool') .childFile('package_config.json') ..createSync(recursive: true) diff --git a/packages/flutter_tools/test/commands.shard/hermetic/update_packages_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/update_packages_test.dart index 92d4f597c5..2d947bc5c1 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/update_packages_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/update_packages_test.dart @@ -8,7 +8,6 @@ import 'package:flutter_tools/src/base/file_system.dart'; import 'package:flutter_tools/src/cache.dart'; import 'package:flutter_tools/src/commands/update_packages.dart'; import 'package:flutter_tools/src/dart/pub.dart'; -import 'package:flutter_tools/src/project.dart'; import 'package:test/fake.dart'; import 'package:yaml/yaml.dart'; @@ -224,19 +223,20 @@ class FakePub extends Fake implements Pub { @override Future get({ required PubContext context, - required FlutterProject project, + String? directory, bool skipIfAbsent = false, bool upgrade = false, bool offline = false, bool generateSyntheticPackage = false, - bool generateSyntheticPackageForExample = false, String? flutterRootOverride, bool checkUpToDate = false, bool shouldSkipThirdPartyGenerator = true, bool printProgress = true, }) async { - pubGetDirectories.add(project.directory.path); - project.directory.childFile('pubspec.lock') + if (directory != null) { + pubGetDirectories.add(directory); + } + fileSystem.directory(directory).childFile('pubspec.lock') ..createSync(recursive: true) ..writeAsStringSync(''' # Generated by pub @@ -266,6 +266,8 @@ sdks: String? directory, MessageFilter? filter, String failureMessage = 'pub failed', + required bool retry, + bool? showTraceForErrors, }) async { if (directory != null) { pubBatchDirectories.add(directory); diff --git a/packages/flutter_tools/test/commands.shard/permeable/build_aar_test.dart b/packages/flutter_tools/test/commands.shard/permeable/build_aar_test.dart index b12d3b717f..27c26878e4 100644 --- a/packages/flutter_tools/test/commands.shard/permeable/build_aar_test.dart +++ b/packages/flutter_tools/test/commands.shard/permeable/build_aar_test.dart @@ -23,7 +23,7 @@ import '../../src/android_common.dart'; import '../../src/common.dart'; import '../../src/context.dart'; import '../../src/fake_process_manager.dart'; -import '../../src/fakes.dart' hide FakeFlutterProjectFactory; +import '../../src/fakes.dart'; import '../../src/test_flutter_command_runner.dart'; void main() { diff --git a/packages/flutter_tools/test/commands.shard/permeable/create_test.dart b/packages/flutter_tools/test/commands.shard/permeable/create_test.dart index 305cd21607..6352dd37f2 100644 --- a/packages/flutter_tools/test/commands.shard/permeable/create_test.dart +++ b/packages/flutter_tools/test/commands.shard/permeable/create_test.dart @@ -66,7 +66,6 @@ void main() { LoggingProcessManager loggingProcessManager; FakeProcessManager fakeProcessManager; BufferLogger logger; - FakeStdio mockStdio; setUpAll(() async { Cache.disableLocking(); @@ -83,7 +82,6 @@ void main() { channel: frameworkChannel, ); fakeProcessManager = FakeProcessManager.empty(); - mockStdio = FakeStdio(); }); tearDown(() { @@ -175,7 +173,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), }); @@ -223,7 +220,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), }); @@ -250,7 +246,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), }); @@ -280,7 +275,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), }); @@ -306,7 +300,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), ...noColorTerminalOverride, }); @@ -332,7 +325,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), ...noColorTerminalOverride, }); @@ -366,7 +358,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), }); @@ -399,7 +390,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), }); @@ -427,7 +417,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), }); @@ -466,7 +455,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), }); @@ -496,7 +484,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), }); @@ -535,7 +522,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), }); @@ -566,7 +552,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), }); @@ -597,7 +582,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), Logger: ()=>logger, }); @@ -625,7 +609,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), }); @@ -747,7 +730,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), }); @@ -1446,7 +1428,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), }); @@ -1475,7 +1456,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), }); @@ -1733,7 +1713,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), }); @@ -1758,7 +1737,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), }); @@ -1909,7 +1887,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), }); @@ -1934,14 +1911,13 @@ void main() { }, overrides: { ProcessManager: () => loggingProcessManager, - Pub: () => Pub( + Pub: () => Pub( fileSystem: globals.fs, logger: globals.logger, processManager: globals.processManager, usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), }, ); @@ -2895,7 +2871,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), }); diff --git a/packages/flutter_tools/test/commands.shard/permeable/format_test.dart b/packages/flutter_tools/test/commands.shard/permeable/format_test.dart index a065afc312..942dbd266a 100644 --- a/packages/flutter_tools/test/commands.shard/permeable/format_test.dart +++ b/packages/flutter_tools/test/commands.shard/permeable/format_test.dart @@ -6,25 +6,21 @@ import 'package:args/command_runner.dart'; import 'package:flutter_tools/src/base/file_system.dart'; -import 'package:flutter_tools/src/base/io.dart'; import 'package:flutter_tools/src/cache.dart'; import 'package:flutter_tools/src/commands/format.dart'; import 'package:flutter_tools/src/globals.dart' as globals; import '../../src/common.dart'; import '../../src/context.dart'; -import '../../src/fakes.dart'; import '../../src/test_flutter_command_runner.dart'; void main() { group('format', () { Directory tempDir; - FakeStdio mockStdio; setUp(() { Cache.disableLocking(); tempDir = globals.fs.systemTempDirectory.createTempSync('flutter_tools_format_test.'); - mockStdio = FakeStdio(); }); tearDown(() { @@ -44,8 +40,6 @@ void main() { final String formatted = srcFile.readAsStringSync(); expect(formatted, original); - }, overrides: { - Stdio: () => mockStdio, }); testUsingContext('dry-run', () async { 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 9e8b9a03b3..8ca503852b 100644 --- a/packages/flutter_tools/test/commands.shard/permeable/packages_test.dart +++ b/packages/flutter_tools/test/commands.shard/permeable/packages_test.dart @@ -32,12 +32,6 @@ import '../../src/fakes.dart'; import '../../src/test_flutter_command_runner.dart'; void main() { - FakeStdio mockStdio; - - setUp(() { - mockStdio = FakeStdio()..stdout.terminalColumns = 80; - }); - Cache.disableLocking(); group('packages get/upgrade', () { Directory tempDir; @@ -203,25 +197,16 @@ void main() { } } - testUsingContext('get fetches packages and has output from pub', () async { + testUsingContext('get fetches packages', () async { final String projectPath = await createProject(tempDir, arguments: ['--no-pub', '--template=module']); removeGeneratedFiles(projectPath); await runCommandIn(projectPath, 'get'); - expect(mockStdio.stdout.writes.map(utf8.decode), - allOf( - contains(matches(RegExp(r'Resolving dependencies in .+flutter_project\.\.\.'))), - contains('+ flutter 0.0.0 from sdk flutter\n'), - contains(matches(RegExp(r'Changed \d+ dependencies in .+flutter_project!'))), - ), - ); - expectDependenciesResolved(projectPath); expectZeroPluginsInjected(projectPath); }, overrides: { - Stdio: () => mockStdio, Pub: () => Pub( fileSystem: globals.fs, logger: globals.logger, @@ -229,7 +214,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), }); @@ -243,7 +227,6 @@ void main() { expectDependenciesResolved(projectPath); expectZeroPluginsInjected(projectPath); }, overrides: { - Stdio: () => mockStdio, Pub: () => Pub( fileSystem: globals.fs, logger: globals.logger, @@ -251,7 +234,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), }); @@ -265,7 +247,6 @@ void main() { expect((await getCommand.usageValues).commandPackagesNumberPlugins, 0); }, overrides: { - Stdio: () => mockStdio, Pub: () => Pub( fileSystem: globals.fs, logger: globals.logger, @@ -273,7 +254,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), }); @@ -289,7 +269,6 @@ void main() { expect((await getCommand.usageValues).commandPackagesNumberPlugins, 1); }, overrides: { - Stdio: () => mockStdio, Pub: () => Pub( fileSystem: globals.fs, logger: globals.logger, @@ -297,7 +276,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), }); @@ -311,7 +289,6 @@ void main() { expect((await getCommand.usageValues).commandPackagesProjectModule, false); }, overrides: { - Stdio: () => mockStdio, Pub: () => Pub( fileSystem: globals.fs, logger: globals.logger, @@ -319,7 +296,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), }); @@ -333,7 +309,6 @@ void main() { expect((await getCommand.usageValues).commandPackagesProjectModule, true); }, overrides: { - Stdio: () => mockStdio, Pub: () => Pub( fileSystem: globals.fs, logger: globals.logger, @@ -341,7 +316,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), }); @@ -364,7 +338,6 @@ void main() { expect((await getCommand.usageValues).commandPackagesAndroidEmbeddingVersion, 'v1'); }, overrides: { - Stdio: () => mockStdio, Pub: () => Pub( fileSystem: globals.fs, logger: globals.logger, @@ -372,7 +345,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), }); @@ -386,7 +358,6 @@ void main() { expect((await getCommand.usageValues).commandPackagesAndroidEmbeddingVersion, 'v2'); }, overrides: { - Stdio: () => mockStdio, Pub: () => Pub( fileSystem: globals.fs, logger: globals.logger, @@ -394,7 +365,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), }); @@ -408,7 +378,7 @@ void main() { expectDependenciesResolved(projectPath); expectZeroPluginsInjected(projectPath); }, overrides: { - Stdio: () => mockStdio, + Stdio: () => FakeStdio()..stdout.terminalColumns = 80, Pub: () => Pub( fileSystem: globals.fs, logger: globals.logger, @@ -416,7 +386,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), }); @@ -430,7 +399,6 @@ void main() { expectDependenciesResolved(projectPath); expectModulePluginInjected(projectPath); }, overrides: { - Stdio: () => mockStdio, Pub: () => Pub( fileSystem: globals.fs, logger: globals.logger, @@ -438,7 +406,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), }); @@ -460,7 +427,6 @@ void main() { expectDependenciesResolved(exampleProjectPath); expectPluginInjected(exampleProjectPath); }, overrides: { - Stdio: () => mockStdio, Pub: () => Pub( fileSystem: globals.fs, logger: globals.logger, @@ -468,17 +434,17 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), }); }); group('packages test/pub', () { FakeProcessManager processManager; - + FakeStdio mockStdio; setUp(() { processManager = FakeProcessManager.empty(); + mockStdio = FakeStdio()..stdout.terminalColumns = 80; }); testUsingContext('test without bot', () async { @@ -504,7 +470,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), }); @@ -530,7 +495,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), }); @@ -561,7 +525,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), }); @@ -592,7 +555,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), }); @@ -621,7 +583,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: mockStdio, ), }); }); diff --git a/packages/flutter_tools/test/general.shard/cache_test.dart b/packages/flutter_tools/test/general.shard/cache_test.dart index 9410c02178..18684fb90d 100644 --- a/packages/flutter_tools/test/general.shard/cache_test.dart +++ b/packages/flutter_tools/test/general.shard/cache_test.dart @@ -16,7 +16,6 @@ import 'package:flutter_tools/src/cache.dart'; import 'package:flutter_tools/src/dart/pub.dart'; import 'package:flutter_tools/src/flutter_cache.dart'; import 'package:flutter_tools/src/globals.dart' as globals; -import 'package:flutter_tools/src/project.dart'; import 'package:test/fake.dart'; import '../src/common.dart'; @@ -909,7 +908,6 @@ void main() { flutterRoot: () => '', logger: logger, pub: () => FakePub(), - projectFactory: FakeFlutterProjectFactory(), ); expect(await pubDependencies.isUpToDate(fileSystem), false); // no package config @@ -952,7 +950,6 @@ void main() { flutterRoot: () => '', logger: logger, pub: () => pub, - projectFactory: FakeFlutterProjectFactory() ); await pubDependencies.update(FakeArtifactUpdater(), logger, fileSystem, FakeOperatingSystemUtils()); @@ -1158,7 +1155,7 @@ class FakePub extends Fake implements Pub { @override Future get({ PubContext? context, - required FlutterProject project, + String? directory, bool skipIfAbsent = false, bool upgrade = false, bool offline = false, diff --git a/packages/flutter_tools/test/general.shard/dart/pub_get_test.dart b/packages/flutter_tools/test/general.shard/dart/pub_get_test.dart index 417185d141..f3f9bfe18b 100644 --- a/packages/flutter_tools/test/general.shard/dart/pub_get_test.dart +++ b/packages/flutter_tools/test/general.shard/dart/pub_get_test.dart @@ -12,14 +12,11 @@ import 'package:flutter_tools/src/base/io.dart' show ProcessException; import 'package:flutter_tools/src/base/logger.dart'; import 'package:flutter_tools/src/base/platform.dart'; import 'package:flutter_tools/src/cache.dart'; -import 'package:flutter_tools/src/convert.dart'; import 'package:flutter_tools/src/dart/pub.dart'; -import 'package:flutter_tools/src/project.dart'; import 'package:flutter_tools/src/reporting/reporting.dart'; import '../../src/common.dart'; import '../../src/fake_process_manager.dart'; -import '../../src/fakes.dart'; void main() { setUpAll(() { @@ -41,11 +38,9 @@ void main() { usage: TestUsage(), platform: FakePlatform(), botDetector: const BotDetectorAlwaysNo(), - stdio: FakeStdio(), ); await expectLater(() => pub.get( - project: FlutterProject.fromDirectoryTest(fileSystem.currentDirectory), context: PubContext.pubGet, checkUpToDate: true, ), throwsToolExit(message: 'Your Flutter SDK download may be corrupt or missing permissions to run')); @@ -57,10 +52,9 @@ void main() { const FakeCommand(command: [ 'bin/cache/dart-sdk/bin/dart', '__deprecated_pub', - '--directory', - '.', + '--verbosity=warning', 'get', - '--example', + '--no-precompile', ]), ]); final BufferLogger logger = BufferLogger.test(); @@ -88,11 +82,9 @@ void main() { usage: TestUsage(), platform: FakePlatform(), botDetector: const BotDetectorAlwaysNo(), - stdio: FakeStdio(), ); await pub.get( - project: FlutterProject.fromDirectoryTest(fileSystem.currentDirectory), context: PubContext.pubGet, checkUpToDate: true, shouldSkipThirdPartyGenerator: false, @@ -107,10 +99,9 @@ void main() { const FakeCommand(command: [ 'bin/cache/dart-sdk/bin/dart', '__deprecated_pub', - '--directory', - '.', + '--verbosity=warning', 'get', - '--example', + '--no-precompile', ]), ]); final BufferLogger logger = BufferLogger.test(); @@ -139,11 +130,9 @@ void main() { usage: TestUsage(), platform: FakePlatform(), botDetector: const BotDetectorAlwaysNo(), - stdio: FakeStdio(), ); await pub.get( - project: FlutterProject.fromDirectoryTest(fileSystem.currentDirectory), context: PubContext.pubGet, checkUpToDate: true, ); @@ -157,10 +146,9 @@ void main() { const FakeCommand(command: [ 'bin/cache/dart-sdk/bin/dart', '__deprecated_pub', - '--directory', - '.', + '--verbosity=warning', 'get', - '--example', + '--no-precompile', ]), ]); final BufferLogger logger = BufferLogger.test(); @@ -189,11 +177,9 @@ void main() { usage: TestUsage(), platform: FakePlatform(), botDetector: const BotDetectorAlwaysNo(), - stdio: FakeStdio(), ); await pub.get( - project: FlutterProject.fromDirectoryTest(fileSystem.currentDirectory), context: PubContext.pubGet, checkUpToDate: true, ); @@ -221,11 +207,9 @@ void main() { usage: TestUsage(), platform: FakePlatform(), botDetector: const BotDetectorAlwaysNo(), - stdio: FakeStdio(), ); await pub.get( - project: FlutterProject.fromDirectoryTest(fileSystem.currentDirectory), context: PubContext.pubGet, checkUpToDate: true, ); @@ -256,11 +240,9 @@ void main() { usage: TestUsage(), platform: FakePlatform(), botDetector: const BotDetectorAlwaysNo(), - stdio: FakeStdio(), ); await pub.get( - project: FlutterProject.fromDirectoryTest(fileSystem.currentDirectory), context: PubContext.pubGet, checkUpToDate: true, ); @@ -274,10 +256,9 @@ void main() { const FakeCommand(command: [ 'bin/cache/dart-sdk/bin/dart', '__deprecated_pub', - '--directory', - '.', + '--verbosity=warning', 'get', - '--example', + '--no-precompile', ]), ]); final BufferLogger logger = BufferLogger.test(); @@ -296,11 +277,9 @@ void main() { usage: TestUsage(), platform: FakePlatform(), botDetector: const BotDetectorAlwaysNo(), - stdio: FakeStdio(), ); await pub.get( - project: FlutterProject.fromDirectoryTest(fileSystem.currentDirectory), context: PubContext.pubGet, checkUpToDate: true, ); @@ -315,10 +294,9 @@ void main() { const FakeCommand(command: [ 'bin/cache/dart-sdk/bin/dart', '__deprecated_pub', - '--directory', - '.', + '--verbosity=warning', 'get', - '--example', + '--no-precompile', ]), ]); final BufferLogger logger = BufferLogger.test(); @@ -336,11 +314,9 @@ void main() { usage: TestUsage(), platform: FakePlatform(), botDetector: const BotDetectorAlwaysNo(), - stdio: FakeStdio(), ); await pub.get( - project: FlutterProject.fromDirectoryTest(fileSystem.currentDirectory), context: PubContext.pubGet, checkUpToDate: true, ); @@ -355,10 +331,9 @@ void main() { FakeCommand(command: const [ 'bin/cache/dart-sdk/bin/dart', '__deprecated_pub', - '--directory', - '.', + '--verbosity=warning', 'get', - '--example', + '--no-precompile', ], onRun: () { fileSystem.file('.dart_tool/package_config.json').createSync(recursive: true); }), @@ -376,11 +351,9 @@ void main() { usage: TestUsage(), platform: FakePlatform(), botDetector: const BotDetectorAlwaysNo(), - stdio: FakeStdio(), ); await pub.get( - project: FlutterProject.fromDirectoryTest(fileSystem.currentDirectory), context: PubContext.pubGet, checkUpToDate: true, ); @@ -395,10 +368,9 @@ void main() { const FakeCommand(command: [ 'bin/cache/dart-sdk/bin/dart', '__deprecated_pub', - '--directory', - '.', + '--verbosity=warning', 'get', - '--example', + '--no-precompile', ]), ]); final BufferLogger logger = BufferLogger.test(); @@ -415,11 +387,9 @@ void main() { usage: TestUsage(), platform: FakePlatform(), botDetector: const BotDetectorAlwaysNo(), - stdio: FakeStdio(), ); await pub.get( - project: FlutterProject.fromDirectoryTest(fileSystem.currentDirectory), context: PubContext.pubGet, checkUpToDate: true, ); @@ -433,10 +403,9 @@ void main() { const FakeCommand(command: [ 'bin/cache/dart-sdk/bin/dart', '__deprecated_pub', - '--directory', - '.', + '--verbosity=warning', 'get', - '--example', + '--no-precompile', ]), ]); final BufferLogger logger = BufferLogger.test(); @@ -456,11 +425,9 @@ void main() { usage: TestUsage(), platform: FakePlatform(), botDetector: const BotDetectorAlwaysNo(), - stdio: FakeStdio(), ); await pub.get( - project: FlutterProject.fromDirectoryTest(fileSystem.currentDirectory), context: PubContext.pubGet, checkUpToDate: true, ); @@ -474,10 +441,9 @@ void main() { const FakeCommand(command: [ 'bin/cache/dart-sdk/bin/dart', '__deprecated_pub', - '--directory', - '.', + '--verbosity=warning', 'get', - '--example', + '--no-precompile', ]), ]); final BufferLogger logger = BufferLogger.test(); @@ -499,11 +465,9 @@ void main() { usage: TestUsage(), platform: FakePlatform(), botDetector: const BotDetectorAlwaysNo(), - stdio: FakeStdio(), ); await pub.get( - project: FlutterProject.fromDirectoryTest(fileSystem.currentDirectory), context: PubContext.pubGet, checkUpToDate: true, ); @@ -519,10 +483,9 @@ void main() { command: [ 'bin/cache/dart-sdk/bin/dart', '__deprecated_pub', - '--directory', - '.', + '--verbosity=warning', 'get', - '--example', + '--no-precompile', ], exitCode: 69, environment: {'FLUTTER_ROOT': '', 'PUB_ENVIRONMENT': 'flutter_cli:flutter_tests'}, @@ -548,15 +511,11 @@ void main() { usage: TestUsage(), platform: FakePlatform(), botDetector: const BotDetectorAlwaysNo(), - stdio: FakeStdio(), ); FakeAsync().run((FakeAsync time) { expect(logger.statusText, ''); - pub.get( - project: FlutterProject.fromDirectoryTest(fileSystem.currentDirectory), - context: PubContext.flutterTests, - ).then((void value) { + pub.get(context: PubContext.flutterTests).then((void value) { error = 'test completed unexpectedly'; }, onError: (dynamic thrownError) { error = 'test failed unexpectedly: $thrownError'; @@ -617,11 +576,10 @@ void main() { command: [ 'bin/cache/dart-sdk/bin/dart', '__deprecated_pub', - '--directory', - '.', + '--verbosity=warning', 'get', + '--no-precompile', '--offline', - '--example', ], exitCode: 69, environment: {'FLUTTER_ROOT': '', 'PUB_ENVIRONMENT': 'flutter_cli:flutter_tests'}, @@ -638,16 +596,11 @@ void main() { usage: TestUsage(), platform: FakePlatform(), botDetector: const BotDetectorAlwaysNo(), - stdio: FakeStdio(), ); FakeAsync().run((FakeAsync time) { expect(logger.statusText, ''); - pub.get( - project: FlutterProject.fromDirectoryTest(fileSystem.currentDirectory), - context: PubContext.flutterTests, - offline: true - ).then((void value) { + pub.get(context: PubContext.flutterTests, offline: true).then((void value) { error = 'test completed unexpectedly'; }, onError: (dynamic thrownError) { error = 'test failed unexpectedly: $thrownError'; @@ -671,10 +624,9 @@ void main() { command: [ 'bin/cache/dart-sdk/bin/dart', '__deprecated_pub', - '--directory', - '.', + '--verbosity=warning', 'get', - '--example', + '--no-precompile', ], exitCode: 66, stderr: 'err1\nerr2\nerr3\n', @@ -682,19 +634,18 @@ void main() { environment: {'FLUTTER_ROOT': '', 'PUB_ENVIRONMENT': 'flutter_cli:flutter_tests'}, ), ]); - final FakeStdio mockStdio = FakeStdio(); + final Pub pub = Pub( platform: FakePlatform(), fileSystem: fileSystem, logger: logger, usage: TestUsage(), botDetector: const BotDetectorAlwaysNo(), - stdio: mockStdio, processManager: processManager, ); const String toolExitMessage = ''' pub get failed -command: "bin/cache/dart-sdk/bin/dart __deprecated_pub --directory . get --example" +command: "bin/cache/dart-sdk/bin/dart __deprecated_pub --verbosity=warning get --no-precompile" pub env: { "FLUTTER_ROOT": "", "PUB_ENVIRONMENT": "flutter_cli:flutter_tests", @@ -703,28 +654,19 @@ exit code: 66 last line of pub output: "err3" '''; await expectLater( - () => pub.get( - project: FlutterProject.fromDirectoryTest(fileSystem.currentDirectory), - context: PubContext.flutterTests, - ), + () => pub.get(context: PubContext.flutterTests), throwsA(isA().having((ToolExit error) => error.message, 'message', toolExitMessage)), ); - expect(logger.statusText, 'Running "flutter pub get" in /...\n'); - expect( - mockStdio.stdout.writes.map(utf8.decode), - [ - 'out1\n', - 'out2\n', - 'out3\n', - ] + expect(logger.statusText, + 'Running "flutter pub get" in /...\n' + 'out1\n' + 'out2\n' + 'out3\n' ); - expect( - mockStdio.stderr.writes.map(utf8.decode), - [ - 'err1\n', - 'err2\n', - 'err3\n', - ] + expect(logger.errorText, + 'err1\n' + 'err2\n' + 'err3\n' ); expect(processManager, hasNoRemainingExpectations); }); @@ -738,20 +680,18 @@ last line of pub output: "err3" command: const [ 'bin/cache/dart-sdk/bin/dart', '__deprecated_pub', - '--directory', - '.', + '--verbosity=warning', 'get', - '--example', + '--no-precompile', ], onRun: () { throw const ProcessException( 'bin/cache/dart-sdk/bin/dart', [ '__deprecated_pub', - '--directory', - '.', + '--verbosity=warning', 'get', - '--example', + '--no-precompile', ], 'message', 1, @@ -770,14 +710,10 @@ last line of pub output: "err3" logger: logger, usage: TestUsage(), botDetector: const BotDetectorAlwaysNo(), - stdio: FakeStdio(), processManager: processManager, ); await expectLater( - () => pub.get( - project: FlutterProject.fromDirectoryTest(fileSystem.currentDirectory), - context: PubContext.flutterTests, - ), + () => pub.get(context: PubContext.flutterTests), throwsA( isA().having( (ProcessException error) => error.message, @@ -805,10 +741,9 @@ last line of pub output: "err3" command: [ 'bin/cache/dart-sdk/bin/dart', '__deprecated_pub', - '--directory', - '.', + '--verbosity=warning', 'get', - '--example', + '--no-precompile', ], exitCode: 69, environment: { @@ -825,14 +760,10 @@ last line of pub output: "err3" logger: BufferLogger.test(), processManager: processManager, botDetector: const BotDetectorAlwaysNo(), - stdio: FakeStdio(), ); FakeAsync().run((FakeAsync time) { - pub.get( - project: FlutterProject.fromDirectoryTest(fileSystem.currentDirectory), - context: PubContext.flutterTests - ).then((void value) { + pub.get(context: PubContext.flutterTests).then((void value) { error = 'test completed unexpectedly'; }, onError: (dynamic thrownError) { error = 'test failed unexpectedly: $thrownError'; @@ -871,10 +802,9 @@ last line of pub output: "err3" command: [ 'bin/cache/dart-sdk/bin/dart', '__deprecated_pub', - '--directory', - '.', + '--verbosity=warning', 'get', - '--example', + '--no-precompile', ], exitCode: 69, environment: { @@ -895,14 +825,10 @@ last line of pub output: "err3" logger: BufferLogger.test(), processManager: processManager, botDetector: const BotDetectorAlwaysNo(), - stdio: FakeStdio(), ); FakeAsync().run((FakeAsync time) { - pub.get( - project: FlutterProject.fromDirectoryTest(fileSystem.currentDirectory), - context: PubContext.flutterTests, - ).then((void value) { + pub.get(context: PubContext.flutterTests).then((void value) { error = 'test completed unexpectedly'; }, onError: (dynamic thrownError) { error = thrownError.toString(); @@ -927,10 +853,9 @@ last line of pub output: "err3" command: [ 'bin/cache/dart-sdk/bin/dart', '__deprecated_pub', - '--directory', - '.', + '--verbosity=warning', 'get', - '--example', + '--no-precompile', ], exitCode: 69, environment: { @@ -946,7 +871,6 @@ last line of pub output: "err3" processManager: processManager, usage: TestUsage(), botDetector: const BotDetectorAlwaysNo(), - stdio: FakeStdio(), platform: FakePlatform( environment: const { 'PUB_CACHE': 'custom/pub-cache/path', @@ -956,9 +880,7 @@ last line of pub output: "err3" FakeAsync().run((FakeAsync time) { String? error; - pub.get( - project: FlutterProject.fromDirectoryTest(fileSystem.currentDirectory), - context: PubContext.flutterTests).then((void value) { + pub.get(context: PubContext.flutterTests).then((void value) { error = 'test completed unexpectedly'; }, onError: (dynamic thrownError) { error = 'test failed unexpectedly: $thrownError'; @@ -977,7 +899,6 @@ last line of pub output: "err3" logger: BufferLogger.test(), processManager: FakeProcessManager.any(), botDetector: const BotDetectorAlwaysNo(), - stdio: FakeStdio(), usage: usage, platform: FakePlatform( environment: const { @@ -992,8 +913,8 @@ last line of pub output: "err3" ..writeAsStringSync('{"configVersion": 2,"packages": []}'); await pub.get( - project: FlutterProject.fromDirectoryTest(fileSystem.currentDirectory), context: PubContext.flutterTests, + generateSyntheticPackage: true, ); expect(usage.events, contains( const TestUsageEvent('pub-result', 'flutter-tests', label: 'success'), @@ -1008,7 +929,6 @@ last line of pub output: "err3" logger: BufferLogger.test(), processManager: FakeProcessManager.any(), botDetector: const BotDetectorAlwaysNo(), - stdio: FakeStdio(), usage: usage, platform: FakePlatform( environment: const { @@ -1032,8 +952,8 @@ last line of pub output: "err3" '''); await pub.get( - project: FlutterProject.fromDirectoryTest(fileSystem.currentDirectory), context: PubContext.flutterTests, + generateSyntheticPackage: true, ); expect( @@ -1056,10 +976,9 @@ last line of pub output: "err3" command: [ 'bin/cache/dart-sdk/bin/dart', '__deprecated_pub', - '--directory', - '.', + '--verbosity=warning', 'get', - '--example', + '--no-precompile', ], exitCode: 1, ), @@ -1071,7 +990,6 @@ last line of pub output: "err3" logger: BufferLogger.test(), processManager: processManager, botDetector: const BotDetectorAlwaysNo(), - stdio: FakeStdio(), platform: FakePlatform( environment: const { 'PUB_CACHE': 'custom/pub-cache/path', @@ -1079,10 +997,7 @@ last line of pub output: "err3" ), ); try { - await pub.get( - project: FlutterProject.fromDirectoryTest(fileSystem.currentDirectory), - context: PubContext.flutterTests, - ); + await pub.get(context: PubContext.flutterTests); } on ToolExit { // Ignore. } @@ -1103,10 +1018,9 @@ last line of pub output: "err3" command: [ 'bin/cache/dart-sdk/bin/dart', '__deprecated_pub', - '--directory', - '.', + '--verbosity=warning', 'get', - '--example', + '--no-precompile', ], exitCode: 1, stderr: 'version solving failed', @@ -1124,15 +1038,11 @@ last line of pub output: "err3" ), usage: usage, botDetector: const BotDetectorAlwaysNo(), - stdio: FakeStdio(), ); fileSystem.file('pubspec.yaml').writeAsStringSync('name: foo'); try { - await pub.get( - project: FlutterProject.fromDirectoryTest(fileSystem.currentDirectory), - context: PubContext.flutterTests - ); + await pub.get(context: PubContext.flutterTests); } on ToolExit { // Ignore. } @@ -1151,10 +1061,9 @@ last line of pub output: "err3" command: const [ 'bin/cache/dart-sdk/bin/dart', '__deprecated_pub', - '--directory', - '.', + '--verbosity=warning', 'get', - '--example', + '--no-precompile', ], onRun: () { fileSystem.file('.dart_tool/package_config.json') @@ -1165,20 +1074,18 @@ last line of pub output: "err3" command: [ 'bin/cache/dart-sdk/bin/dart', '__deprecated_pub', - '--directory', - '.', + '--verbosity=warning', 'get', - '--example', + '--no-precompile', ], ), FakeCommand( command: const [ 'bin/cache/dart-sdk/bin/dart', '__deprecated_pub', - '--directory', - '.', + '--verbosity=warning', 'get', - '--example', + '--no-precompile', ], onRun: () { fileSystem.file('pubspec.yaml') @@ -1189,10 +1096,9 @@ last line of pub output: "err3" command: [ 'bin/cache/dart-sdk/bin/dart', '__deprecated_pub', - '--directory', - '.', + '--verbosity=warning', 'get', - '--example', + '--no-precompile', ], ), ]); @@ -1204,8 +1110,7 @@ last line of pub output: "err3" platform: FakePlatform( environment: {}, ), - botDetector: const BotDetectorAlwaysNo(), - stdio: FakeStdio() + botDetector: const BotDetectorAlwaysNo() ); fileSystem.file('version').createSync(); @@ -1216,10 +1121,7 @@ last line of pub output: "err3" fileSystem.file('pubspec.yaml') ..createSync() ..setLastModifiedSync(DateTime(2001)); - await pub.get( - project: FlutterProject.fromDirectoryTest(fileSystem.currentDirectory), - context: PubContext.flutterTests, - ); // pub sets date of .packages to 2002 + await pub.get(context: PubContext.flutterTests); // pub sets date of .packages to 2002 expect(logger.statusText, 'Running "flutter pub get" in /...\n'); expect(logger.errorText, isEmpty); @@ -1231,10 +1133,7 @@ last line of pub output: "err3" .setLastModifiedSync(DateTime(2000)); fileSystem.file('pubspec.yaml') .setLastModifiedSync(DateTime(2001)); - await pub.get( - project: FlutterProject.fromDirectoryTest(fileSystem.currentDirectory), - context: PubContext.flutterTests, - ); // pub does nothing + await pub.get(context: PubContext.flutterTests); // pub does nothing expect(logger.statusText, 'Running "flutter pub get" in /...\n'); expect(logger.errorText, isEmpty); diff --git a/packages/flutter_tools/test/general.shard/runner/flutter_command_test.dart b/packages/flutter_tools/test/general.shard/runner/flutter_command_test.dart index e9ff3b5ab0..7522d37fbb 100644 --- a/packages/flutter_tools/test/general.shard/runner/flutter_command_test.dart +++ b/packages/flutter_tools/test/general.shard/runner/flutter_command_test.dart @@ -20,7 +20,6 @@ import 'package:flutter_tools/src/cache.dart'; import 'package:flutter_tools/src/dart/pub.dart'; import 'package:flutter_tools/src/globals.dart' as globals; import 'package:flutter_tools/src/pre_run_validator.dart'; -import 'package:flutter_tools/src/project.dart'; import 'package:flutter_tools/src/reporting/reporting.dart'; import 'package:flutter_tools/src/runner/flutter_command.dart'; import 'package:test/fake.dart'; @@ -815,12 +814,11 @@ class FakePub extends Fake implements Pub { @override Future get({ PubContext context, - FlutterProject project, + String directory, bool skipIfAbsent = false, bool upgrade = false, bool offline = false, bool generateSyntheticPackage = false, - bool generateSyntheticPackageForExample = false, String flutterRootOverride, bool checkUpToDate = false, bool shouldSkipThirdPartyGenerator = true, diff --git a/packages/flutter_tools/test/integration.shard/web_plugin_registrant_test.dart b/packages/flutter_tools/test/integration.shard/web_plugin_registrant_test.dart index f2e205e380..b79701b141 100644 --- a/packages/flutter_tools/test/integration.shard/web_plugin_registrant_test.dart +++ b/packages/flutter_tools/test/integration.shard/web_plugin_registrant_test.dart @@ -75,7 +75,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: globals.stdio, ), }); @@ -123,7 +122,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: globals.stdio, ), }); @@ -155,7 +153,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: globals.stdio, ), }); @@ -186,7 +183,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: globals.stdio, ), }); @@ -236,7 +232,6 @@ void main() { usage: globals.flutterUsage, botDetector: globals.botDetector, platform: globals.platform, - stdio: globals.stdio, ), }); } diff --git a/packages/flutter_tools/test/src/fakes.dart b/packages/flutter_tools/test/src/fakes.dart index 6be91d9302..d0d8ad21ae 100644 --- a/packages/flutter_tools/test/src/fakes.dart +++ b/packages/flutter_tools/test/src/fakes.dart @@ -14,7 +14,6 @@ import 'package:flutter_tools/src/cache.dart'; import 'package:flutter_tools/src/convert.dart'; import 'package:flutter_tools/src/features.dart'; import 'package:flutter_tools/src/ios/plist_parser.dart'; -import 'package:flutter_tools/src/project.dart'; import 'package:flutter_tools/src/version.dart'; import 'package:test/fake.dart'; @@ -562,13 +561,3 @@ class FakeStopwatchFactory implements StopwatchFactory { return stopwatches[name] ?? FakeStopwatch(); } } - -class FakeFlutterProjectFactory implements FlutterProjectFactory { - @override - FlutterProject fromDirectory(Directory directory) { - return FlutterProject.fromDirectoryTest(directory); - } - - @override - Map get projects => throw UnimplementedError(); -} diff --git a/packages/flutter_tools/test/src/test_flutter_command_runner.dart b/packages/flutter_tools/test/src/test_flutter_command_runner.dart index d616bbd0da..22b68f1793 100644 --- a/packages/flutter_tools/test/src/test_flutter_command_runner.dart +++ b/packages/flutter_tools/test/src/test_flutter_command_runner.dart @@ -35,7 +35,7 @@ Future createProject(Directory temp, { List? arguments }) async final CreateCommand command = CreateCommand(); final CommandRunner runner = createTestCommandRunner(command); await runner.run(['create', ...arguments, projectPath]); - // Create `.packages` since it's not created when the flag `--no-pub` is passed. + // Created `.packages` since it's not created when the flag `--no-pub` is passed. globals.fs.file(globals.fs.path.join(projectPath, '.packages')).createSync(); return projectPath; } diff --git a/packages/flutter_tools/test/src/throwing_pub.dart b/packages/flutter_tools/test/src/throwing_pub.dart index c00a7f12d5..235771b816 100644 --- a/packages/flutter_tools/test/src/throwing_pub.dart +++ b/packages/flutter_tools/test/src/throwing_pub.dart @@ -4,7 +4,6 @@ import 'package:flutter_tools/src/base/io.dart'; import 'package:flutter_tools/src/dart/pub.dart'; -import 'package:flutter_tools/src/project.dart'; class ThrowingPub implements Pub { @override @@ -13,6 +12,8 @@ class ThrowingPub implements Pub { String? directory, MessageFilter? filter, String? failureMessage = 'pub failed', + bool? retry, + bool? showTraceForErrors, }) { throw UnsupportedError('Attempted to invoke pub during test.'); } @@ -20,14 +21,13 @@ class ThrowingPub implements Pub { @override Future get({ PubContext? context, - required FlutterProject project, + String? directory, bool skipIfAbsent = false, bool upgrade = false, bool offline = false, bool checkLastModified = true, bool skipPubspecYamlCheck = false, bool generateSyntheticPackage = false, - bool generateSyntheticPackageForExample = false, String? flutterRootOverride, bool checkUpToDate = false, bool shouldSkipThirdPartyGenerator = true,