updateWorkspaceDependencies function
Future<void>
updateWorkspaceDependencies({
- required WorkspaceInfo workspace,
- required List<
WorkspacePackage> packages, - required Map<
String, Version> updatedVersions,
Updates dependencies in workspace packages that reference other workspace packages
Implementation
Future<void> updateWorkspaceDependencies({
required WorkspaceInfo workspace,
required List<WorkspacePackage> packages,
required Map<String, Version> updatedVersions,
}) async {
// Create a map of package names to their directories for quick lookup
final packageMap = <String, WorkspacePackage>{};
for (final package in packages) {
packageMap[package.name] = package;
}
// Update dependencies in all packages
for (final package in packages) {
final pubspecFile = File(path.join(package.directory.path, 'pubspec.yaml'));
if (!pubspecFile.existsSync()) {
continue;
}
final pubspecContent = await pubspecFile.readAsString();
final dependencies = PubspecUtils.getAllDependencies(pubspecContent);
bool needsUpdate = false;
// Check if this package depends on any of the updated packages
for (final dependencyName in dependencies.keys) {
if (updatedVersions.containsKey(dependencyName) && packageMap.containsKey(dependencyName)) {
// This is a workspace dependency that was updated
needsUpdate = true;
break;
}
}
if (needsUpdate) {
// Update each workspace dependency
for (final entry in updatedVersions.entries) {
final dependencyName = entry.key;
final newVersion = entry.value;
// Check if this package depends on this workspace package
if (dependencies.containsKey(dependencyName)) {
try {
await PubspecUtils.updateWorkspaceDependency(
pubspecFile,
dependencyName,
newVersion,
);
logger.info('Updated dependency $dependencyName to $newVersion in ${package.name}');
} catch (e) {
logger.warn('Failed to update dependency $dependencyName in ${package.name}: $e');
}
}
}
}
}
}