|
|
@@ -56,13 +56,22 @@ namespace Usm {
|
|
|
* Human-readable multi-line rendering of the plan (without a
|
|
|
* trailing newline): one line per package with its version
|
|
|
* transition, categories ordered install, update, remove,
|
|
|
- * remove (orphaned), downgrade, rebuild. Unreadable manifests
|
|
|
- * degrade to the cache directory name rather than failing the
|
|
|
- * display.
|
|
|
+ * downgrade, rebuild. Orphaned removals carry the `(orphaned)`
|
|
|
+ * tag after the package name. Unreadable manifests degrade to
|
|
|
+ * the cache directory name rather than failing the display.
|
|
|
+ * When {@link coloured} is true, ANSI colours highlight the
|
|
|
+ * action column.
|
|
|
*/
|
|
|
- public string describe() {
|
|
|
+ public string describe(bool coloured = false) {
|
|
|
+ var c_green = coloured ? "\033[32m" : "";
|
|
|
+ var c_cyan = coloured ? "\033[36m" : "";
|
|
|
+ var c_yellow = coloured ? "\033[33m" : "";
|
|
|
+ var c_magenta= coloured ? "\033[35m" : "";
|
|
|
+ var c_dim = coloured ? "\033[2m" : "";
|
|
|
+ var c_reset = coloured ? "\033[0m" : "";
|
|
|
+
|
|
|
var builder = new StringBuilder();
|
|
|
- builder.append("Transaction plan:\n");
|
|
|
+ builder.append_printf("%sTransaction plan:%s\n", coloured ? "\033[1m" : "", c_reset);
|
|
|
|
|
|
var removed_versions = new Dictionary<string, string>();
|
|
|
foreach(var package in to_remove) {
|
|
|
@@ -75,10 +84,12 @@ namespace Usm {
|
|
|
string removed_version;
|
|
|
if(removed_versions.try_get(name, out removed_version)) {
|
|
|
updated_names.add(name);
|
|
|
- builder.append_printf(" %-9s %s %s → %s\n", "update", name, removed_version, summary_version(package));
|
|
|
+ builder.append_printf(" %s%-9s%s %s %s %s→%s %s\n",
|
|
|
+ c_cyan, "update", c_reset, name, removed_version, c_dim, c_reset, summary_version(package));
|
|
|
}
|
|
|
else {
|
|
|
- builder.append_printf(" %-9s %s %s\n", "install", name, summary_version(package));
|
|
|
+ builder.append_printf(" %s%-9s%s %s %s\n",
|
|
|
+ c_green, "install", c_reset, name, summary_version(package));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -86,30 +97,36 @@ namespace Usm {
|
|
|
if(updated_names.contains(summary_name(package))) {
|
|
|
continue;
|
|
|
}
|
|
|
- builder.append_printf(" %-9s %s %s\n", "remove", summary_name(package), summary_version(package));
|
|
|
+ builder.append_printf(" %s%-9s%s %s %s\n",
|
|
|
+ c_yellow, "remove", c_reset, summary_name(package), summary_version(package));
|
|
|
}
|
|
|
|
|
|
foreach(var package in orphaned_removals.sort((a, b) => summary_name(a).collate(summary_name(b)))) {
|
|
|
- builder.append_printf(" remove (orphaned) %s %s\n", summary_name(package), summary_version(package));
|
|
|
+ builder.append_printf(" %s%-9s%s %s %s %s(orphaned)%s\n",
|
|
|
+ c_yellow, "remove", c_reset, summary_name(package), summary_version(package), c_dim, c_reset);
|
|
|
}
|
|
|
|
|
|
foreach(var entry in to_downgrade.sort((a, b) => summary_name(a.target).collate(summary_name(b.target)))) {
|
|
|
- builder.append_printf(" %-9s %s %s → %s\n", "downgrade",
|
|
|
- summary_name(entry.target), summary_version(entry.current), summary_version(entry.target));
|
|
|
+ builder.append_printf(" %s%-9s%s %s %s %s→%s %s\n",
|
|
|
+ c_magenta, "downgrade", c_reset, summary_name(entry.target),
|
|
|
+ summary_version(entry.current), c_dim, c_reset, summary_version(entry.target));
|
|
|
}
|
|
|
|
|
|
foreach(var entry in to_rebuild.sort((a, b) => summary_name(a.package).collate(summary_name(b.package)))) {
|
|
|
- builder.append_printf(" %-9s %s %s (triggered by %s %s)\n", "rebuild",
|
|
|
+ builder.append_printf(" %s%-9s%s %s %s %s(triggered by %s %s)%s\n",
|
|
|
+ c_yellow, "rebuild", c_reset,
|
|
|
summary_name(entry.package), summary_version(entry.package),
|
|
|
- summary_name(entry.trigger), summary_version(entry.trigger));
|
|
|
+ c_dim, summary_name(entry.trigger), summary_version(entry.trigger), c_reset);
|
|
|
}
|
|
|
|
|
|
if(download_count > 0) {
|
|
|
if(download_bytes >= 0) {
|
|
|
- builder.append_printf(" %u package(s) to download, %s total\n", download_count, format_byte_size(download_bytes));
|
|
|
+ builder.append_printf(" %s%u package(s) to download, %s total%s\n",
|
|
|
+ c_dim, download_count, format_byte_size(download_bytes), c_reset);
|
|
|
}
|
|
|
else {
|
|
|
- builder.append_printf(" %u package(s) to download, size unknown\n", download_count);
|
|
|
+ builder.append_printf(" %s%u package(s) to download, size unknown%s\n",
|
|
|
+ c_dim, download_count, c_reset);
|
|
|
}
|
|
|
}
|
|
|
|