blob: 0df1721e7b5976262bd458ea5e550829eacb4fc8 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:yaml/yaml.dart';
import 'base/file_system.dart';
import 'dart/package_map.dart';
import 'globals.dart';
dynamic _loadYamlFile(String path) {
if (!fs.isFileSync(path))
return null;
final String manifestString = fs.file(path).readAsStringSync();
return loadYaml(manifestString);
}
String _generatePluginManifest() {
Map<String, Uri> packages;
try {
packages = new PackageMap(PackageMap.globalPackagesPath).map;
} on FormatException catch(e) {
printTrace('Invalid .packages file: $e');
return '';
}
final List<String> plugins = <String>[];
packages.forEach((String name, Uri uri) {
final Uri packageRoot = uri.resolve('..');
final dynamic packageConfig = _loadYamlFile(packageRoot.resolve('pubspec.yaml').path);
if (packageConfig != null) {
final dynamic flutterConfig = packageConfig['flutter'];
if (flutterConfig != null && flutterConfig.containsKey('plugin')) {
printTrace('Found plugin $name at ${packageRoot.path}');
plugins.add('$name=${packageRoot.path}');
}
}
});
return plugins.join('\n');
}
void writeFlutterPluginsList() {
final File pluginsProperties = fs.file('.flutter-plugins');
final String pluginManifest = _generatePluginManifest();
if (pluginManifest.isNotEmpty) {
pluginsProperties.writeAsStringSync('$pluginManifest\n');
} else {
if (pluginsProperties.existsSync()) {
pluginsProperties.deleteSync();
}
}
}