Ver código fonte

feat: coloured transaction summary — green install, cyan update, yellow remove/rebuild, magenta downgrade, dim orphaned/download info; orphaned tag after package name

clanker 1 semana atrás
pai
commit
ea39f398f8
3 arquivos alterados com 1233 adições e 1210 exclusões
  1. 1200 1194
      installer/install-usm.sh
  2. 1 1
      src/cli/Confirm.vala
  3. 32 15
      src/lib/TransactionSummary.vala

Diferenças do arquivo suprimidas por serem muito extensas
+ 1200 - 1194
installer/install-usm.sh


+ 1 - 1
src/cli/Confirm.vala

@@ -12,7 +12,7 @@ namespace Usm.Cli {
             return true;
         }
 
-        stdout.printf("%s\n", summary.describe());
+        stdout.printf("%s\n", summary.describe(Posix.isatty(Posix.STDOUT_FILENO)));
         stdout.printf("Proceed? [y/N] ");
         stdout.flush();
 

+ 32 - 15
src/lib/TransactionSummary.vala

@@ -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);
                 }
             }
 

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff