resolvePackages static method
Future<PackageMap>
resolvePackages({
- required String workspacePath,
- required List<
Glob> packages, - required List<
Glob> ignore, - required MelosLogger logger,
Implementation
static Future<PackageMap> resolvePackages({
required String workspacePath,
required List<Glob> packages,
required List<Glob> ignore,
required MelosLogger logger,
}) async {
final pubspecFiles = await _resolvePubspecFiles(
workspacePath: workspacePath,
packages: packages,
ignore: [
...ignore,
for (final pattern in _commonIgnorePatterns)
createGlob(pattern, currentDirectoryPath: workspacePath),
],
);
final packageMap = <String, Package>{};
await Future.wait<void>(
pubspecFiles.map((pubspecFile) async {
final pubspecDirPath = pubspecFile.parent.path;
final pubSpec = await PubSpec.load(pubspecFile.parent);
final name = pubSpec.name!;
if (packageMap.containsKey(name)) {
throw MelosConfigException(
'''
Multiple packages with the name `$name` found in the workspace, which is unsupported.
To fix this problem, consider renaming your packages to have a unique name.
The packages that caused the problem are:
- $name at ${printablePath(relativePath(pubspecDirPath, workspacePath))}
- $name at ${printablePath(relativePath(packageMap[name]!.path, workspacePath))}
''',
);
}
packageMap[name] = Package(
name: name,
path: pubspecDirPath,
pathRelativeToWorkspace: relativePath(pubspecDirPath, workspacePath),
version: pubSpec.version ?? Version.none,
publishTo: pubSpec.publishTo,
packageMap: packageMap,
dependencies: pubSpec.dependencies.keys.toList(),
devDependencies: pubSpec.devDependencies.keys.toList(),
dependencyOverrides: pubSpec.dependencyOverrides.keys.toList(),
pubSpec: pubSpec,
);
}),
);
return PackageMap(packageMap, logger);
}