runPubOutdated method
Implementation
Future<Outdated> runPubOutdated(
String packageDir, {
List<String> args = const [],
required bool usesFlutter,
}) async {
final pubCmd = usesFlutter
?
// Use `flutter pub pub` to get the 'raw' pub command. This avoids
// issues with `flutter pub get` running in the example directory,
// argument parsing differing and other misalignments between `dart pub`
// and `flutter pub` (see https://github.com/dart-lang/pub/issues/2971).
[..._flutterSdk.flutterCmd, 'pub', 'pub']
: [..._dartSdk.dartCmd, 'pub'];
final cmdLabel = usesFlutter ? 'flutter' : 'dart';
return await _withStripAndAugmentPubspecYaml(packageDir, () async {
Future<PanaProcessResult> runPubGet() async {
final pr = await runConstrained(
[...pubCmd, 'get', '--no-example'],
environment:
usesFlutter ? _flutterSdk.environment : _dartSdk.environment,
workingDirectory: packageDir,
);
return pr;
}
final firstPubGet = await runPubGet();
// Flutter on CI may download additional assets, which will change
// the output and won't match the expected on in the golden files.
// Running a second `pub get` will make sure that the output is consistent.
final secondPubGet = usesFlutter ? await runPubGet() : firstPubGet;
if (secondPubGet.wasError) {
// Stripping extra verbose log lines which make Flutter differ on different environment.
final stderr = ProcessOutput.from(
secondPubGet.stderr.asString
.split('---- Log transcript ----\n')
.first
.split('pub get failed (1;')
.first,
);
final pr = secondPubGet.change(stderr: stderr);
throw ToolException(
'`$cmdLabel pub get` failed:\n\n```\n${pr.asTrimmedOutput}\n```',
pr,
);
}
final result = await runConstrained(
[
...pubCmd,
'outdated',
...args,
],
environment:
usesFlutter ? _flutterSdk.environment : _dartSdk.environment,
workingDirectory: packageDir,
);
if (result.wasError) {
throw ToolException(
'`$cmdLabel pub outdated` failed:\n\n```\n${result.asTrimmedOutput}\n```',
result,
);
} else {
return Outdated.fromJson(result.parseJson());
}
});
}