// 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 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] "); 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 = >{}; 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); } }