guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

02/02: ui: Display hints to resolve profile collisions.


From: Ludovic Courtès
Subject: 02/02: ui: Display hints to resolve profile collisions.
Date: Sun, 10 Dec 2017 17:45:04 -0500 (EST)

civodul pushed a commit to branch master
in repository guix.

commit 3b80b81358b3861ca3794105c8eb4395df97846b
Author: Ludovic Courtès <address@hidden>
Date:   Sun Dec 10 23:41:21 2017 +0100

    ui: Display hints to resolve profile collisions.
    
    Fixes <https://bugs.gnu.org/29255>.
    Reported by Ben Sturmfels <address@hidden>.
    
    * guix/ui.scm (display-collision-resolution-hint): New procedure.
    (call-with-error-handling): Call it upon '&profile-collistion-error'.
---
 guix/ui.scm | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/guix/ui.scm b/guix/ui.scm
index e40fe57..fa747b7 100644
--- a/guix/ui.scm
+++ b/guix/ui.scm
@@ -502,6 +502,26 @@ interpreted."
           (x
            (leave (G_ "unknown unit: ~a~%") unit)))))))
 
+(define (display-collision-resolution-hint collision)
+  "Display hints on how to resolve COLLISION, a &profile-collistion-error."
+  (define (top-most-entry entry)
+    (let loop ((entry entry))
+      (match (force (manifest-entry-parent entry))
+        (#f entry)
+        (parent (loop parent)))))
+
+  (let* ((first  (profile-collision-error-entry collision))
+         (second (profile-collision-error-conflict collision))
+         (name1  (manifest-entry-name (top-most-entry first)))
+         (name2  (manifest-entry-name (top-most-entry second))))
+    (if (string=? name1 name2)
+        (display-hint (format #f (G_ "You cannot have two different versions
+or variants of @code{~a} in the same profile.")
+                              name1))
+        (display-hint (format #f (G_ "Try upgrading both @code{~a} and 
@code{~a},
+or remove one of them from the profile.")
+                              name1 name2)))))
+
 (define (call-with-error-handling thunk)
   "Call THUNK within a user-friendly error handler."
   (define (port-filename* port)
@@ -570,6 +590,7 @@ interpreted."
                              (manifest-entry-output* conflict)
                              (manifest-entry-item conflict))
                (report-parent-entries conflict)
+               (display-collision-resolution-hint c)
                (exit 1)))
             ((nar-error? c)
              (let ((file (nar-error-file c))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]