platform/lib/src/commands/make/maker.dart
2017-08-07 21:45:37 -04:00

58 lines
1.7 KiB
Dart

import 'dart:async';
import 'dart:io';
import 'package:pubspec/pubspec.dart';
import 'package:pub_semver/pub_semver.dart';
import '../pub.dart';
class MakerDependency {
final String name, version;
final bool dev;
const MakerDependency(this.name, this.version, {this.dev: false});
}
Future depend(Iterable<MakerDependency> deps) async {
var pubspec = await PubSpec.load(Directory.current);
Map<String, DependencyReference> newDeps = {}, newDevDeps = {};
for (var dep in deps) {
var isPresent = false;
if (dep.dev)
isPresent = pubspec.devDependencies.containsKey(dep.name);
else
isPresent = pubspec.dependencies.containsKey(dep.name);
if (!isPresent) {
print('Installing ${dep.name}@${dep.version}...');
if (dep.dev)
newDevDeps[dep.name] =
new HostedReference(new VersionConstraint.parse(dep.version));
else
newDeps[dep.name] =
new HostedReference(new VersionConstraint.parse(dep.version));
}
if (newDeps.isNotEmpty || newDevDeps.isNotEmpty) {
var newPubspec = pubspec.copy(
dependencies:
new Map<String, DependencyReference>.from(pubspec.dependencies)
..addAll(newDeps),
devDependencies:
new Map<String, DependencyReference>.from(pubspec.devDependencies)
..addAll(newDevDeps));
await newPubspec.save(Directory.current);
var pubPath = resolvePub();
print('Now running `$pubPath get`...');
var pubGet = await Process.start(pubPath, ['get']);
pubGet.stdout.listen(stdout.add);
pubGet.stderr.listen(stderr.add);
var code = await pubGet.exitCode;
if (code != 0) throw 'pub get terminated with exit code $code';
}
}
}