| Index: sdk/lib/_internal/pub/lib/src/solver/solve_report.dart
|
| diff --git a/sdk/lib/_internal/pub/lib/src/solver/solve_report.dart b/sdk/lib/_internal/pub/lib/src/solver/solve_report.dart
|
| index 0c51d5ddf5cb6729b10a445a5db708d6494210b9..aafa5d03cdc5e4fdfcdf26103cc0ad1c098d23a5 100644
|
| --- a/sdk/lib/_internal/pub/lib/src/solver/solve_report.dart
|
| +++ b/sdk/lib/_internal/pub/lib/src/solver/solve_report.dart
|
| @@ -11,26 +11,15 @@ import '../source_registry.dart';
|
| import '../utils.dart';
|
| import 'version_solver.dart';
|
|
|
| -/// Generates and displays nicely formatted reports for the results of running
|
| -/// a version resolution.
|
| -///
|
| -/// If [showAll] is true, then all of the previous and current dependencies
|
| -/// are shown and their changes relative to the previous lock file are
|
| -/// highlighted. Otherwise, only overrides are shown.
|
| -///
|
| -/// Returns the number of changed dependencies.
|
| -int show(SourceRegistry sources, Package root, LockFile previousLockFile,
|
| - SolveResult result, {bool showAll: false}) {
|
| - var report = new _SolveReport(sources, root, previousLockFile, result);
|
| - return report.show(showAll: showAll);
|
| -}
|
| -
|
| /// Unlike [SolveResult], which is the static data describing a resolution,
|
| /// this class contains the mutable state used while generating the report
|
| /// itself.
|
| ///
|
| /// It's a report builder.
|
| -class _SolveReport {
|
| +class SolveReport {
|
| + /// Whether all dependencies should be reported, or just ones that changed.
|
| + final bool _showAll;
|
| +
|
| final SourceRegistry _sources;
|
| final Package _root;
|
| final LockFile _previousLockFile;
|
| @@ -41,8 +30,9 @@ class _SolveReport {
|
|
|
| final _output = new StringBuffer();
|
|
|
| - _SolveReport(this._sources, this._root, this._previousLockFile,
|
| - this._result) {
|
| + SolveReport(this._sources, this._root, this._previousLockFile,
|
| + this._result, {bool showAll: false})
|
| + : _showAll = showAll {
|
| // Fill the map so we can use it later.
|
| for (var id in _result.packages) {
|
| _dependencies[id.name] = id;
|
| @@ -51,22 +41,22 @@ class _SolveReport {
|
|
|
| /// Displays a report of the results of the version resolution relative to
|
| /// the previous lock file.
|
| - ///
|
| - /// If [showAll] is true, then all of the previous and current dependencies
|
| - /// are shown and their changes relative to the previous lock file are
|
| - /// highlighted. Otherwise, only overrides are shown.
|
| - ///
|
| - /// Returns the number of changed dependencies.
|
| - int show({bool showAll: false}) {
|
| - if (showAll) _reportChanges();
|
| + void show() {
|
| + _reportChanges();
|
| _reportOverrides();
|
| + }
|
|
|
| + /// Displays a one-line message summarizing what changes were made (or would
|
| + /// be made) to the lockfile.
|
| + ///
|
| + /// If [dryRun] is true, describes it in terms of what would be done.
|
| + void summarize({bool dryRun: false}) {
|
| // Count how many dependencies actually changed.
|
| var dependencies = _dependencies.keys.toSet();
|
| dependencies.addAll(_previousLockFile.packages.keys);
|
| dependencies.remove(_root.name);
|
|
|
| - return dependencies.where((name) {
|
| + var numChanged = dependencies.where((name) {
|
| var oldId = _previousLockFile.packages[name];
|
| var newId = _dependencies[name];
|
|
|
| @@ -78,6 +68,28 @@ class _SolveReport {
|
| return !_descriptionsEqual(oldId, newId) ||
|
| oldId.version != newId.version;
|
| }).length;
|
| +
|
| + if (dryRun) {
|
| + if (numChanged == 0) {
|
| + log.message("No dependencies would change.");
|
| + } else if (numChanged == 1) {
|
| + log.message("Would change $numChanged dependency.");
|
| + } else {
|
| + log.message("Would change $numChanged dependencies.");
|
| + }
|
| + } else {
|
| + if (numChanged == 0) {
|
| + if (_showAll) {
|
| + log.message("No dependencies changed.");
|
| + } else {
|
| + log.message("Got dependencies!");
|
| + }
|
| + } else if (numChanged == 1) {
|
| + log.message("Changed $numChanged dependency!");
|
| + } else {
|
| + log.message("Changed $numChanged dependencies!");
|
| + }
|
| + }
|
| }
|
|
|
| /// Displays a report of all of the previous and current dependencies and
|
| @@ -98,7 +110,7 @@ class _SolveReport {
|
| _output.writeln("These packages are no longer being depended on:");
|
| removed = removed.toList();
|
| removed.sort();
|
| - removed.forEach(_reportPackage);
|
| + removed.forEach((name) => _reportPackage(name, alwaysShow: true));
|
| }
|
|
|
| log.message(_output);
|
| @@ -114,7 +126,8 @@ class _SolveReport {
|
| overrides.sort((a, b) => a.compareTo(b));
|
|
|
| overrides.forEach(
|
| - (name) => _reportPackage(name, highlightOverride: false));
|
| + (name) => _reportPackage(name, alwaysShow: true,
|
| + highlightOverride: false));
|
|
|
| log.warning(_output);
|
| }
|
| @@ -122,11 +135,11 @@ class _SolveReport {
|
|
|
| /// Reports the results of the upgrade on the package named [name].
|
| ///
|
| - /// If [highlightOverride] is true (or absent), writes "(override)" next to
|
| - /// overridden packages.
|
| - void _reportPackage(String name, {bool highlightOverride}) {
|
| - if (highlightOverride == null) highlightOverride = true;
|
| -
|
| + /// If [alwaysShow] is true, the package is reported even if it didn't change,
|
| + /// regardless of [_showAll]. If [highlightOverride] is true (or absent),
|
| + /// writes "(override)" next to overridden packages.
|
| + void _reportPackage(String name,
|
| + {bool alwaysShow: false, bool highlightOverride: true}) {
|
| var newId = _dependencies[name];
|
| var oldId = _previousLockFile.packages[name];
|
| var id = newId != null ? newId : oldId;
|
| @@ -134,8 +147,13 @@ class _SolveReport {
|
| var isOverridden = _result.overrides.map(
|
| (dep) => dep.name).contains(id.name);
|
|
|
| + // If the package was previously a dependency but the dependency has
|
| + // changed in some way.
|
| var changed = false;
|
|
|
| + // If the dependency was added or removed.
|
| + var addedOrRemoved = false;
|
| +
|
| // Show a one-character "icon" describing the change. They are:
|
| //
|
| // ! The package is being overridden.
|
| @@ -144,26 +162,32 @@ class _SolveReport {
|
| // > The package was upgraded from a lower version.
|
| // < The package was downgraded from a higher version.
|
| // * Any other change between the old and new package.
|
| + var icon;
|
| if (isOverridden) {
|
| - _output.write(log.magenta("! "));
|
| + icon = log.magenta("! ");
|
| } else if (newId == null) {
|
| - _output.write(log.red("- "));
|
| + icon = log.red("- ");
|
| + addedOrRemoved = true;
|
| } else if (oldId == null) {
|
| - _output.write(log.green("+ "));
|
| + icon = log.green("+ ");
|
| + addedOrRemoved = true;
|
| } else if (!_descriptionsEqual(oldId, newId)) {
|
| - _output.write(log.cyan("* "));
|
| + icon = log.cyan("* ");
|
| changed = true;
|
| } else if (oldId.version < newId.version) {
|
| - _output.write(log.green("> "));
|
| + icon = log.green("> ");
|
| changed = true;
|
| } else if (oldId.version > newId.version) {
|
| - _output.write(log.cyan("< "));
|
| + icon = log.cyan("< ");
|
| changed = true;
|
| } else {
|
| // Unchanged.
|
| - _output.write(" ");
|
| + icon = " ";
|
| }
|
|
|
| + if (!(alwaysShow || changed || addedOrRemoved || _showAll)) return;
|
| +
|
| + _output.write(icon);
|
| _output.write(log.bold(id.name));
|
| _output.write(" ");
|
| _writeId(id);
|
|
|