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 |
deleted file mode 100644 |
index 2a089b5d8010def715d949c6df9550a006fa19eb..0000000000000000000000000000000000000000 |
--- a/sdk/lib/_internal/pub/lib/src/solver/solve_report.dart |
+++ /dev/null |
@@ -1,249 +0,0 @@ |
-// Copyright (c) 2013, 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.solver.solve_report; |
- |
-import 'package:pub_semver/pub_semver.dart'; |
- |
-import '../lock_file.dart'; |
-import '../log.dart' as log; |
-import '../package.dart'; |
-import '../source_registry.dart'; |
-import '../utils.dart'; |
-import 'version_solver.dart'; |
- |
-/// 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 { |
- final SolveType _type; |
- final SourceRegistry _sources; |
- final Package _root; |
- final LockFile _previousLockFile; |
- final SolveResult _result; |
- |
- /// The dependencies in [_result], keyed by package name. |
- final _dependencies = new Map<String, PackageId>(); |
- |
- final _output = new StringBuffer(); |
- |
- SolveReport(this._type, this._sources, this._root, this._previousLockFile, |
- this._result) { |
- // Fill the map so we can use it later. |
- for (var id in _result.packages) { |
- _dependencies[id.name] = id; |
- } |
- } |
- |
- /// Displays a report of the results of the version resolution relative to |
- /// the previous lock file. |
- 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); |
- |
- var numChanged = dependencies.where((name) { |
- var oldId = _previousLockFile.packages[name]; |
- var newId = _dependencies[name]; |
- |
- // Added or removed dependencies count. |
- if (oldId == null) return true; |
- if (newId == null) return true; |
- |
- // The dependency existed before, so see if it was modified. |
- return !_sources.idsEqual(oldId, newId); |
- }).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 (_type == SolveType.GET) { |
- log.message("Got dependencies!"); |
- } else { |
- log.message("No dependencies changed."); |
- } |
- } 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 |
- /// how they have changed. |
- void _reportChanges() { |
- _output.clear(); |
- |
- // Show the new set of dependencies ordered by name. |
- var names = _result.packages.map((id) => id.name).toList(); |
- names.remove(_root.name); |
- names.sort(); |
- names.forEach(_reportPackage); |
- |
- // Show any removed ones. |
- var removed = _previousLockFile.packages.keys.toSet(); |
- removed.removeAll(names); |
- if (removed.isNotEmpty) { |
- _output.writeln("These packages are no longer being depended on:"); |
- removed = removed.toList(); |
- removed.sort(); |
- removed.forEach((name) => _reportPackage(name, alwaysShow: true)); |
- } |
- |
- log.message(_output); |
- } |
- |
- /// Displays a warning about the overrides currently in effect. |
- void _reportOverrides() { |
- _output.clear(); |
- |
- if (_result.overrides.isNotEmpty) { |
- _output.writeln("Warning: You are using these overridden dependencies:"); |
- var overrides = _result.overrides.map((dep) => dep.name).toList(); |
- overrides.sort((a, b) => a.compareTo(b)); |
- |
- overrides.forEach( |
- (name) => _reportPackage(name, alwaysShow: true, |
- highlightOverride: false)); |
- |
- log.warning(_output); |
- } |
- } |
- |
- /// Reports the results of the upgrade on the package named [name]. |
- /// |
- /// If [alwaysShow] is true, the package is reported even if it didn't change, |
- /// regardless of [_type]. 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; |
- |
- 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. |
- // - The package was removed. |
- // + The package was added. |
- // > 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) { |
- icon = log.magenta("! "); |
- } else if (newId == null) { |
- icon = log.red("- "); |
- addedOrRemoved = true; |
- } else if (oldId == null) { |
- icon = log.green("+ "); |
- addedOrRemoved = true; |
- } else if (!_sources.idDescriptionsEqual(oldId, newId)) { |
- icon = log.cyan("* "); |
- changed = true; |
- } else if (oldId.version < newId.version) { |
- icon = log.green("> "); |
- changed = true; |
- } else if (oldId.version > newId.version) { |
- icon = log.cyan("< "); |
- changed = true; |
- } else { |
- // Unchanged. |
- icon = " "; |
- } |
- |
- if (_type == SolveType.GET && !(alwaysShow || changed || addedOrRemoved)) { |
- return; |
- } |
- |
- _output.write(icon); |
- _output.write(log.bold(id.name)); |
- _output.write(" "); |
- _writeId(id); |
- |
- // If the package was upgraded, show what it was upgraded from. |
- if (changed) { |
- _output.write(" (was "); |
- _writeId(oldId); |
- _output.write(")"); |
- } |
- |
- // Highlight overridden packages. |
- if (isOverridden && highlightOverride) { |
- _output.write(" ${log.magenta('(overridden)')}"); |
- } |
- |
- // See if there are any newer versions of the package that we were |
- // unable to upgrade to. |
- if (newId != null && _type != SolveType.DOWNGRADE) { |
- var versions = _result.availableVersions[newId.name]; |
- |
- var newerStable = false; |
- var newerUnstable = false; |
- |
- for (var version in versions) { |
- if (version > newId.version) { |
- if (version.isPreRelease) { |
- newerUnstable = true; |
- } else { |
- newerStable = true; |
- } |
- } |
- } |
- |
- // If there are newer stable versions, only show those. |
- var message; |
- if (newerStable) { |
- message = "(${maxAll(versions, Version.prioritize)} available)"; |
- } else if (newerUnstable) { |
- message = "(${maxAll(versions)} available)"; |
- } |
- |
- if (message != null) _output.write(" ${log.cyan(message)}"); |
- } |
- |
- _output.writeln(); |
- } |
- |
- /// Writes a terse description of [id] (not including its name) to the output. |
- void _writeId(PackageId id) { |
- _output.write(id.version); |
- |
- var source = _sources[id.source]; |
- if (source != _sources.defaultSource) { |
- var description = source.formatDescription(_root.dir, id.description); |
- _output.write(" from ${id.source} $description"); |
- } |
- } |
-} |