58 lines
1.7 KiB
Dart
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';
|
|
}
|
|
}
|
|
}
|