GNU bug report logs -
#29255
"Profile contains conflicting entries" could be more helpful
Previous Next
Reported by: Ben Sturmfels <ben <at> sturm.com.au>
Date: Sat, 11 Nov 2017 00:15:01 UTC
Severity: normal
Tags: moreinfo
Done: ludo <at> gnu.org (Ludovic Courtès)
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Hi,
Ricardo Wurmus <rekado <at> elephly.net> skribis:
> In this case it is not entirely clear that the existing python-requests
> package in the profile is “old”. The version looks the same and the
> hash is opaque.
>
> Would it be possible to record something about the Guix version that was
> used to install a package? Then we could say:
>
> An older variant of python-requests is installed in this profile
> (propagated from package “foo-bar”) and conflicts with a newer variant
> (propagated from package “python-twine”).
When the version numbers are the same, we cannot tell whether a variant
is “older”, we can just tell that it’s different. Also, I find it
useful to see the propagation stack as is currently the case.
With the patch below, I get:
--8<---------------cut here---------------start------------->8---
$ ./pre-inst-env guix package -p foo -i python <at> 2 python
The following packages will be installed:
python 2.7.13 /gnu/store/vysfxizaddh1q8s5qjgbdkzxx0585dzi-python-2.7.13
python 3.5.3 /gnu/store/m4rdgmvdqcxs2zhv42idnz1s1w391i8j-python-3.5.3
guix package: error: profile contains conflicting entries for python:out
guix package: error: first entry: python <at> 2.7.13 /gnu/store/vysfxizaddh1q8s5qjgbdkzxx0585dzi-python-2.7.13
guix package: error: second entry: python <at> 3.5.3 /gnu/store/m4rdgmvdqcxs2zhv42idnz1s1w391i8j-python-3.5.3
hint: You cannot have two different versions or variants of `python' in the same profile.
--8<---------------cut here---------------end--------------->8---
and:
--8<---------------cut here---------------start------------->8---
$ ./pre-inst-env guix package -i guile-cairo -p foo --no-grafts
The following package will be installed:
guile-cairo 1.4.1 /gnu/store/dsdbp9sqla6zz2skljlcr5zfjyzvargf-guile-cairo-1.4.1
guix package: error: profile contains conflicting entries for cairo:out
guix package: error: first entry: cairo <at> 1.14.10 /gnu/store/c4vl4hw5jccg0b23sfvs0kdnfdbxdlgm-cairo-1.14.10
guix package: error: ... propagated from guile-cairo <at> 1.4.1
guix package: error: second entry: cairo <at> 1.14.10 /gnu/store/nwxv9s2q8pi0m6gn6fyidpj8442dwp6f-cairo-1.14.10
guix package: error: ... propagated from cairomm <at> 1.12.2
hint: Try upgrading both `guile-cairo' and `cairomm', or remove one of them from the profile.
--8<---------------cut here---------------end--------------->8---
How does that sound?
We could further refine the hint to suggest using ‘guix package -m’,
though I’m not sure if it’d be a useful hint (it’s a useful
recommendation, but not necessarily good as a “fix hint.”)
Thoughts?
Thanks,
Ludo’.
[Message part 2 (text/x-patch, inline)]
diff --git a/guix/ui.scm b/guix/ui.scm
index 13cbe3a0f..660f6ea5c 100644
--- a/guix/ui.scm
+++ b/guix/ui.scm
@@ -502,6 +502,25 @@ interpreted."
(x
(leave (G_ "unknown unit: ~a~%") unit)))))))
+(define (display-collision-resolution-hint collision)
+ (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 +589,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))
This bug report was last modified 7 years and 248 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.