Subject: [bug#45632] [PATCH] guix package: Warn if uses has 'guix' package in profile.

From: Jakub Kądziołka <[email-masked]>
Date: Sun, 3 Jan 2021 19:32:02 +0100

* guix/scripts/package.scm (warn-about-guix-in-profile): New procedure.
(process-actions): Call WARN-ABOUT-GUIX-IN-PROFILE before executing
transaction.
---

Unresolved questions:
- Is this the right place to put warn-about-guix-in-profile?
- The warning message seems to be hard-wrapped. Is this the right
  line length?
- Do we want to make this configurable? Some other warnings are, but in
  those cases it is the threshold that gets configured. In this case,
  there is no threshold.

 guix/scripts/package.scm | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm
index 6faf2adb7a..bc42bd7d84 100644
--- a/guix/scripts/package.scm
+++ b/guix/scripts/package.scm
@@ -9,6 +9,7 @@
 ;;; Copyright © 2019 Tobias Geerinckx-Rice <[email-masked]>
 ;;; Copyright © 2020 Ricardo Wurmus <[email-masked]>
 ;;; Copyright © 2020 Simon Tournier <[email-masked]>
+;;; Copyright © 2021 Jakub Kądziołka <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -863,6 +864,15 @@ processed, #f otherwise."
     (switch-generation . ,switch-generation-action)
     (delete-generations . ,delete-generations-action)))
 
+(define (warn-about-guix-in-profile manifest)
+  "Emit a warning if MANIFEST contains a 'guix' package."
+  (when (manifest-installed? manifest
+          (manifest-pattern
+            (name "guix")))
+    (warning (G_ "Installing the 'guix' package in a user profile is not recommended,
+as it will conflict with the installation managed by 'guix pull'. Consider running
+'guix package -r guix'.\n"))))
+
 (define (process-actions store opts)
   "Process any install/remove/upgrade action from OPTS."
 
@@ -928,6 +938,7 @@ processed, #f otherwise."
                                (manifest-entries manifest)))))
 
       (warn-about-old-distro)
+      (warn-about-guix-in-profile new)
 
       (unless (manifest-transaction-null? trans)
         ;; When '--manifest' is used, display information about TRANS as if we
-- 
2.29.2