refactor(flutter_version_resolver): replace scoped dep logger with log fn (#3271)

This commit is contained in:
Bryan Oltman
2025-08-05 14:22:19 -04:00
committed by GitHub
parent 9ff9a8883c
commit 38edc0e269
5 changed files with 53 additions and 75 deletions
@@ -1,9 +1,7 @@
import 'dart:io';
import 'package:flutter_version_resolver/flutter_version_resolver.dart';
import 'package:flutter_version_resolver/src/logger.dart';
import 'package:mason_logger/mason_logger.dart';
import 'package:scoped_deps/scoped_deps.dart';
/// Resolves the Flutter version for a package and optionally writes it to a
/// file.
@@ -13,34 +11,28 @@ import 'package:scoped_deps/scoped_deps.dart';
/// dart run bin/flutter_version_resolver.dart <path-to-package> [<output-file>]
/// ```
Future<int> main(List<String> arguments) async {
return await runScoped(() async {
if (arguments.isEmpty || arguments.length > 2) {
logger.err(
'Usage: dart run bin/flutter_version_resolver.dart <path-to-package> [<output-file>]',
);
return ExitCode.usage.code;
}
final logger = Logger();
final packageDirectory = Directory(arguments[0]);
if (!packageDirectory.existsSync()) {
logger.err(
'Package directory does not exist: ${packageDirectory.path}',
);
return ExitCode.usage.code;
}
final flutterVersion = resolveFlutterVersion(
packagePath: packageDirectory.path,
if (arguments.isEmpty) {
logger.err(
'Usage: dart run bin/flutter_version_resolver.dart <path-to-package>',
);
logger.info('Resolved Flutter version: $flutterVersion');
return ExitCode.usage.code;
}
if (arguments.length > 1) {
final outputFile = File(arguments[1])
..createSync(recursive: true)
..writeAsStringSync(flutterVersion);
logger.info('Wrote flutter version to ${outputFile.path}');
}
final packageDirectory = Directory(arguments[0]);
if (!packageDirectory.existsSync()) {
logger.err(
'Package directory does not exist: ${packageDirectory.path}',
);
return ExitCode.usage.code;
}
return ExitCode.success.code;
}, values: {loggerRef});
final flutterVersion = resolveFlutterVersion(
packagePath: packageDirectory.path,
log: logger.info,
);
logger.info('Resolved Flutter version: $flutterVersion');
return ExitCode.success.code;
}
@@ -1,10 +1,12 @@
import 'dart:io';
import 'package:flutter_version_resolver/src/logger.dart';
import 'package:path/path.dart' as p;
import 'package:pub_semver/pub_semver.dart';
import 'package:yaml/yaml.dart';
/// A function that handles log output (e.g. [print]).
typedef LogFn = void Function(String message);
/// {@template version_constraint_exception}
/// Thrown when a version constraint is found unexpectedly.
/// {@endtemplate}
@@ -27,32 +29,31 @@ class VersionConstraintException implements Exception {
/// If no version is found, this returns the `stable` version.
String resolveFlutterVersion({
required String packagePath,
required LogFn log,
}) {
logger
..info('Resolving Flutter version for $packagePath')
..info('Checking pubspec.yaml environment section for flutter version');
log('Resolving Flutter version for $packagePath');
log('Checking pubspec.yaml environment section for flutter version');
try {
final flutterVersion = flutterVersionFromPubspecEnvironment(
packagePath: packagePath,
);
if (flutterVersion != null) {
logger.info('Found flutter version in pubspec.yaml: $flutterVersion');
log('Found flutter version in pubspec.yaml: $flutterVersion');
return flutterVersion.toString();
}
} on VersionConstraintException catch (e) {
logger.err(
log(
'''Found version constraint: ${e.versionConstraint}. Version constraints are not supported in pubspec.yaml. Please specify a specific version.''',
);
return 'stable';
} on Exception catch (e) {
logger
..err('Error resolving Flutter version: $e')
..info('Falling back to "stable" branch');
log('Error resolving Flutter version: $e');
log('Falling back to "stable" branch');
return 'stable';
}
logger.info('No flutter version found in pubspec.yaml, using stable');
log('No flutter version found in pubspec.yaml, using stable');
return 'stable';
}
@@ -1,8 +0,0 @@
import 'package:mason_logger/mason_logger.dart';
import 'package:scoped_deps/scoped_deps.dart';
/// A reference to a [Logger] instance.
final loggerRef = create(Logger.new);
/// The [Logger] instance available in the current zone.
Logger get logger => read(loggerRef);
@@ -11,7 +11,6 @@ dependencies:
mason_logger: ^0.3.3
path: ^1.9.1
pub_semver: ^2.2.0
scoped_deps: ^0.1.0+2
yaml: ^3.1.3
dev_dependencies:
@@ -1,12 +1,10 @@
import 'dart:io';
import 'package:flutter_version_resolver/flutter_version_resolver.dart';
import 'package:flutter_version_resolver/src/logger.dart';
import 'package:mason_logger/mason_logger.dart';
import 'package:mocktail/mocktail.dart';
import 'package:path/path.dart' as p;
import 'package:pub_semver/pub_semver.dart';
import 'package:scoped_deps/scoped_deps.dart';
import 'package:test/test.dart';
class _MockLogger extends Mock implements Logger {}
@@ -16,13 +14,6 @@ void main() {
late Directory packageDirectory;
late File pubspecFile;
R runWithOverrides<R>(R Function() body) {
return runScoped(
body,
values: {loggerRef.overrideWith(() => logger)},
);
}
setUp(() {
logger = _MockLogger();
@@ -37,12 +28,13 @@ void main() {
group('resolveFlutterVersion', () {
group('when no flutter version is specified in the pubspec.yaml file', () {
test('returns the stable version', () {
runWithOverrides(() {
expect(
resolveFlutterVersion(packagePath: packageDirectory.path),
equals('stable'),
);
});
expect(
resolveFlutterVersion(
packagePath: packageDirectory.path,
log: logger.info,
),
equals('stable'),
);
});
});
@@ -56,12 +48,13 @@ environment:
});
test('returns the version', () {
runWithOverrides(() {
expect(
resolveFlutterVersion(packagePath: packageDirectory.path),
equals('3.20.0'),
);
});
expect(
resolveFlutterVersion(
packagePath: packageDirectory.path,
log: logger.info,
),
equals('3.20.0'),
);
});
});
@@ -75,14 +68,15 @@ environment:
});
test('prints an error message and returns the stable version', () {
runWithOverrides(() {
expect(
resolveFlutterVersion(packagePath: packageDirectory.path),
equals('stable'),
);
});
expect(
resolveFlutterVersion(
packagePath: packageDirectory.path,
log: logger.info,
),
equals('stable'),
);
verify(
() => logger.err(
() => logger.info(
'''Found version constraint: ^3.8.0. Version constraints are not supported in pubspec.yaml. Please specify a specific version.''',
),
).called(1);