platform-cli/lib/src/commands/update.dart
2017-10-20 02:31:36 -04:00

68 lines
2 KiB
Dart

import 'dart:io';
import 'package:args/command_runner.dart';
import 'package:console/console.dart';
import 'package:http/http.dart' as http;
import 'pubspec.update.g.dart';
import 'pub.dart';
class UpdateCommand extends Command {
@override
String get name => 'update';
@override
String get description => 'Updates the Angel CLI, if an update is available.';
@override
run() async {
stdout.write('Checking for update... ');
try {
var client = new http.Client();
var update = await checkForUpdate(client);
client.close();
if (update != null) {
stdout.writeln();
var pen = new TextPen();
pen.cyan();
pen.text(
'ATTENTION: There is a new version of the Angel CLI available (version $update).');
pen.call();
var prompt = new Chooser<String>(['Yes', 'No']);
print('Update now?');
var choice = await prompt.choose();
if (choice != 'Yes') {
pen.reset();
pen.cyan();
pen.text(
'When you are ready to update, run `pub global activate angel_cli`.');
pen();
stdout.writeln();
} else {
var pubPath = resolvePub();
print('Running `pub global activate` using $pubPath...');
var p =
await Process.start(pubPath, ['global', 'activate', 'angel_cli']);
p.stderr.listen(stderr.add);
p.stdout.listen(stdout.add);
var exitCode = await p.exitCode;
if (exitCode != 0)
throw 'Pub terminated with a non-zero exit code.';
else {
pen.reset();
pen.green();
pen("${Icon.CHECKMARK} Successfully updated the Angel CLI to version $update.\n");
pen();
}
}
} else
stdout.writeln('No update available.');
} catch (e, st) {
stdout.writeln('Failed to check for update.');
stderr.writeln(e);
stderr.writeln(st);
}
}
}