Migrator: Apply changes to pubspec

This commit is contained in:
Simon Binder 2021-10-07 23:22:08 +02:00
parent 6877cf9673
commit 2a67edec33
No known key found for this signature in database
GPG Key ID: 7891917E4147B8C0
3 changed files with 78 additions and 1 deletions

View File

@ -9,6 +9,7 @@ import 'package:analyzer/dart/ast/visitor.dart';
import 'package:moor_generator/src/utils/string_escaper.dart'; import 'package:moor_generator/src/utils/string_escaper.dart';
import 'package:path/path.dart' as p; import 'package:path/path.dart' as p;
import 'package:sqlparser/sqlparser.dart' hide AnalysisContext, StringLiteral; import 'package:sqlparser/sqlparser.dart' hide AnalysisContext, StringLiteral;
import 'package:yaml/yaml.dart';
import 'package:yaml_edit/yaml_edit.dart'; import 'package:yaml_edit/yaml_edit.dart';
import '../cli.dart'; import '../cli.dart';
@ -100,7 +101,44 @@ class MigrateCommand extends MoorCommand {
Future<void> _transformBuildYaml(File file) async {} Future<void> _transformBuildYaml(File file) async {}
Future<void> _transformPubspec(File file) async {} Future<void> _transformPubspec(File file) async {
dynamic originalPubspec;
YamlEditor editor;
try {
final content = await file.readAsString();
originalPubspec = loadYaml(content, sourceUrl: file.uri);
editor = YamlEditor(content);
} on Exception {
cli.logger.warning('Could not parse ${file.path}, ignoring...');
}
const newPackages = {'moor': 'drift', 'moor_generator': 'drift_dev'};
void replaceIn(String key) {
if (originalPubspec is! Map) return;
final dependencyBlock = originalPubspec[key];
if (dependencyBlock is! Map) return;
final block = dependencyBlock as Map;
for (final package in newPackages.keys) {
if (block.containsKey(package)) {
final newPackage = newPackages[package];
editor
..remove([key, package])
..update([key, newPackage], block[package]);
}
}
}
replaceIn('dependencies');
replaceIn('dev_dependencies');
replaceIn('dependency_overrides');
await file.writeAsString(editor.toString());
}
} }
class _Moor2DriftDartRewriter extends GeneralizingAstVisitor<void> { class _Moor2DriftDartRewriter extends GeneralizingAstVisitor<void> {

View File

@ -22,6 +22,7 @@ dependencies:
logging: '>=0.11.0 <2.0.0' logging: '>=0.11.0 <2.0.0'
cli_util: '>=0.2.0 <0.4.0' cli_util: '>=0.2.0 <0.4.0'
yaml_edit: ^2.0.1 yaml_edit: ^2.0.1
yaml: ^3.1.0
# Moor-specific analysis and apis # Moor-specific analysis and apis
moor: ^4.4.0 moor: ^4.4.0

View File

@ -101,6 +101,44 @@ import 'package:drift/src/some/internal/file.dart';
export 'package:drift/web.dart'; export 'package:drift/web.dart';
export 'package:drift/native.dart'; export 'package:drift/native.dart';
'''),
]).validate();
});
_test('updates pubspec.yaml', () async {
await _setup(const [], pubspec: '''
name: app
environment:
sdk: ^2.12.0
dependencies:
moor: ^1.2.3
something_else:
# comment
dev_dependencies:
moor_generator: ^4.5.6
build_runner: ^2.0.0
''');
await _apply();
await d.dir('app', [
d.file('pubspec.yaml', '''
name: app
environment:
sdk: ^2.12.0
dependencies:
drift: ^1.2.3
something_else:
# comment
dev_dependencies:
build_runner: ^2.0.0
drift_dev: ^4.5.6
'''), '''),
]).validate(); ]).validate();
}); });