refactor(flutter_version_resolver): replace scoped dep logger with log fn (#3271)
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user