bd2a8e1d60
Bug: Change-Id: I4ca50f315361422db1d4356055862463bfe1d6f3 Reviewed-on: https://dart-review.googlesource.com/12240 Reviewed-by: Siva Annamalai <asiva@google.com> Reviewed-by: Ben Konyi <bkonyi@google.com> Commit-Queue: Siva Annamalai <asiva@google.com>
94 lines
2.6 KiB
Dart
94 lines
2.6 KiB
Dart
// Copyright (c) 2017, 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.
|
|
|
|
/// Given the beginning and ending file names in a batch, does as much automated
|
|
/// migration and possible and prints out the remaining manual steps required.
|
|
///
|
|
/// This should be safe to run, and safe to re-run on an in-progress chunk.
|
|
/// However, it has not been thoroughly tested, so run at your own risk.
|
|
|
|
import 'dart:io';
|
|
|
|
import 'package:migration/src/fork.dart';
|
|
import 'package:migration/src/io.dart';
|
|
import 'package:migration/src/log.dart';
|
|
import 'package:migration/src/migrate_statuses.dart';
|
|
|
|
const simpleDirs = const ["corelib", "language", "lib", "standalone"];
|
|
|
|
void main(List<String> arguments) {
|
|
if (arguments.contains("--dry-run")) {
|
|
dryRun = true;
|
|
arguments = arguments.where((argument) => argument != "--dry-run").toList();
|
|
}
|
|
|
|
if (arguments.length != 2) {
|
|
stderr.writeln(
|
|
"Usage: dart migrate_batch.dart [--dry-run] <first file> <last file>");
|
|
stderr.writeln();
|
|
stderr.writeln("Example:");
|
|
stderr.writeln();
|
|
stderr.writeln(" \$ dart migrate_batch.dart map_to_string queue");
|
|
exit(1);
|
|
}
|
|
|
|
var tests = scanTests();
|
|
|
|
var startIndex = findFork(tests, arguments[0]);
|
|
var endIndex = findFork(tests, arguments[1]);
|
|
|
|
if (startIndex == null || endIndex == null) exit(1);
|
|
|
|
tests = tests.sublist(startIndex, endIndex + 1);
|
|
|
|
if (tests.isEmpty) {
|
|
print(bold("No tests in range."));
|
|
return;
|
|
}
|
|
|
|
var s = tests.length == 1 ? "" : "s";
|
|
var first = tests.first.twoPath;
|
|
var last = tests.last.twoPath;
|
|
print("Migrating ${bold(tests.length)} test$s from ${bold(first)} "
|
|
"to ${bold(last)}...");
|
|
print("");
|
|
|
|
var allTodos = <String, List<String>>{};
|
|
var migratedTests = 0;
|
|
var unmigratedTests = 0;
|
|
for (var test in tests) {
|
|
var todos = test.migrate();
|
|
if (todos.isEmpty) {
|
|
migratedTests++;
|
|
} else {
|
|
unmigratedTests++;
|
|
allTodos[test.twoPath] = todos;
|
|
}
|
|
}
|
|
|
|
migrateStatusEntries(tests, allTodos);
|
|
|
|
// Tell the user what's left to do.
|
|
print("");
|
|
var summary = "";
|
|
|
|
if (migratedTests > 0) {
|
|
var s = migratedTests == 1 ? "" : "s";
|
|
summary += "Successfully migrated ${green(migratedTests)} test$s. ";
|
|
}
|
|
|
|
if (unmigratedTests > 0) {
|
|
var s = unmigratedTests == 1 ? "" : "s";
|
|
summary += "Need manual work on ${red(unmigratedTests)} test$s:";
|
|
}
|
|
|
|
print(summary);
|
|
var todoTests = allTodos.keys.toList();
|
|
todoTests.sort();
|
|
for (var todoTest in todoTests) {
|
|
print("- ${bold(todoTest)}:");
|
|
allTodos[todoTest].forEach(todo);
|
|
}
|
|
}
|