blob: 278b3276fc7bbe466392389d69ee69dc843b52ca [file] [log] [blame]
// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
library pub.command.cache_repair;
import 'dart:async';
import '../command.dart';
import '../exit_codes.dart' as exit_codes;
import '../io.dart';
import '../log.dart' as log;
import '../source/cached.dart';
import '../utils.dart';
/// Handles the `cache repair` pub command.
class CacheRepairCommand extends PubCommand {
String get description => "Reinstall cached packages.";
String get usage => "pub cache repair";
String get docUrl => "http://dartlang.org/tools/pub/cmd/pub-cache.html";
Future onRun() {
final completer0 = new Completer();
scheduleMicrotask(() {
try {
var successes = 0;
var failures = 0;
var it0 = cache.sources.iterator;
break0() {
join0() {
join1() {
globals.repairActivatedPackages().then((x0) {
try {
var results = x0;
join2() {
join3() {
join4() {
join5() {
completer0.complete();
}
if (failures > 0) {
flushThenExit(exit_codes.UNAVAILABLE).then((x1) {
try {
x1;
join5();
} catch (e0, s0) {
completer0.completeError(e0, s0);
}
}, onError: completer0.completeError);
} else {
join5();
}
}
if (successes == 0 && failures == 0) {
log.message(
"No packages in cache, so nothing to repair.");
join4();
} else {
join4();
}
}
if (results.last > 0) {
var packages = pluralize("package", results.last);
log.message(
"Failed to reactivate ${log.red(results.last)} ${packages}.");
join3();
} else {
join3();
}
}
if (results.first > 0) {
var packages = pluralize("package", results.first);
log.message(
"Reactivated ${log.green(results.first)} ${packages}.");
join2();
} else {
join2();
}
} catch (e1, s1) {
completer0.completeError(e1, s1);
}
}, onError: completer0.completeError);
}
if (failures > 0) {
var packages = pluralize("package", failures);
log.message(
"Failed to reinstall ${log.red(failures)} ${packages}.");
join1();
} else {
join1();
}
}
if (successes > 0) {
var packages = pluralize("package", successes);
log.message("Reinstalled ${log.green(successes)} ${packages}.");
join0();
} else {
join0();
}
}
var trampoline0;
continue0() {
trampoline0 = null;
if (it0.moveNext()) {
var source = it0.current;
join6() {
source.repairCachedPackages().then((x2) {
trampoline0 = () {
trampoline0 = null;
try {
var results = x2;
successes += results.first;
failures += results.last;
trampoline0 = continue0;
} catch (e2, s2) {
completer0.completeError(e2, s2);
}
};
do trampoline0(); while (trampoline0 != null);
}, onError: completer0.completeError);
}
if (source is! CachedSource) {
continue0();
} else {
join6();
}
} else {
break0();
}
}
trampoline0 = continue0;
do trampoline0(); while (trampoline0 != null);
} catch (e, s) {
completer0.completeError(e, s);
}
});
return completer0.future;
}
}