unofficial mirror of bug-guix@gnu.org 
 help / color / mirror / code / Atom feed
* bug#29255: "Profile contains conflicting entries" could be more helpful
@ 2017-11-11  0:14 Ben Sturmfels
  2017-11-11 13:59 ` Ludovic Courtès
  0 siblings, 1 reply; 6+ messages in thread
From: Ben Sturmfels @ 2017-11-11  0:14 UTC (permalink / raw)
  To: 29255

Hi Folks,

When trying to install "python-twine", installation failed with the
following error:

$ guix package --install python-twine
The following package will be installed:
   python-twine	1.9.1	/gnu/store/fh72qswc2gpj1c1xb2gm23hfs1vx4lk2-python-twine-1.9.1

guix package: error: profile contains conflicting entries for python-requests:out
guix package: error:   first entry: python-requests@2.13.0:out /gnu/store/4paqanwmdw2d7ss9hdq7d34b43ycjgsv-python-requests-2.13.0
guix package: error:    ... propagated from python-twine@1.9.1
guix package: error:   second entry: python-requests@2.13.0:out /gnu/store/z4jqf8p2z73dscrjmbpwamdvyfdaqkgx-python-requests-2.13.0


This was quite baffling - it wasn’t clear to me why there was a
conflict, whether it was related to something I'd done and what I could
do to fix it.

If I understand correctly, the cause is that I had manually installed
"python-requests" at some stage and that only one version can be
available in my profile, and that "python-twine" depended on a different
version.

I believe the action I need to take to resolve the conflict is:

  guix package --install python-twine --upgrade python-requests


So I think the bug is that the user interface could be more helpful here.
It should probably either tell you what happened and what you can do to
fix it, or offer to resolve the conflict/perform the upgrade for you.

Regards,
Ben

^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#29255: "Profile contains conflicting entries" could be more helpful
  2017-11-11  0:14 bug#29255: "Profile contains conflicting entries" could be more helpful Ben Sturmfels
@ 2017-11-11 13:59 ` Ludovic Courtès
  2017-11-24 18:35   ` Ricardo Wurmus
  0 siblings, 1 reply; 6+ messages in thread
From: Ludovic Courtès @ 2017-11-11 13:59 UTC (permalink / raw)
  To: Ben Sturmfels; +Cc: 29255

Hi Ben,

Ben Sturmfels <ben@sturm.com.au> skribis:

> So I think the bug is that the user interface could be more helpful here.
> It should probably either tell you what happened and what you can do to
> fix it, or offer to resolve the conflict/perform the upgrade for you.

Would it be desirable or even feasible to resolve the conflict for you?
I wouldn’t want the tool to remove installed packages without asking me,
for instance.

Could you suggest messages you’d like to see in this case?

Thanks,
Ludo’.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#29255: "Profile contains conflicting entries" could be more helpful
  2017-11-11 13:59 ` Ludovic Courtès
@ 2017-11-24 18:35   ` Ricardo Wurmus
  2017-11-30 12:13     ` Ludovic Courtès
  0 siblings, 1 reply; 6+ messages in thread
From: Ricardo Wurmus @ 2017-11-24 18:35 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 29255, Ben Sturmfels


Ludovic Courtès <ludo@gnu.org> writes:

> Ben Sturmfels <ben@sturm.com.au> skribis:
>
>> So I think the bug is that the user interface could be more helpful here.
>> It should probably either tell you what happened and what you can do to
>> fix it, or offer to resolve the conflict/perform the upgrade for you.
>
> Would it be desirable or even feasible to resolve the conflict for you?
> I wouldn’t want the tool to remove installed packages without asking me,
> for instance.

Guix could resolve the conflict by upgrading the existing and
conflicting item in the profile.  In my experience that’s usually what a
user wants.

Guix could also remind the users to use “--manifest” or to upgrade items
in the profile.

> Could you suggest messages you’d like to see in this case?

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”).

I understand that it is challenging to accurately describe the version
of Guix in the presence of GUIX_PACKAGE_PATH.  With a more formal
definition of channels (e.g. requiring a description file for the
channel that includes a version or date string) this problem could be
side-stepped.

--
Ricardo

GPG: BCA6 89B6 3655 3801 C3C6  2150 197A 5888 235F ACAC
https://elephly.net

^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#29255: "Profile contains conflicting entries" could be more helpful
  2017-11-24 18:35   ` Ricardo Wurmus
@ 2017-11-30 12:13     ` Ludovic Courtès
  2017-12-10 22:47       ` Ludovic Courtès
  0 siblings, 1 reply; 6+ messages in thread
From: Ludovic Courtès @ 2017-11-30 12:13 UTC (permalink / raw)
  To: Ricardo Wurmus; +Cc: 29255, Ben Sturmfels

[-- Attachment #1: Type: text/plain, Size: 2686 bytes --]

Hi,

Ricardo Wurmus <rekado@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@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@2.7.13 /gnu/store/vysfxizaddh1q8s5qjgbdkzxx0585dzi-python-2.7.13
guix package: error:   second entry: python@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@1.14.10 /gnu/store/c4vl4hw5jccg0b23sfvs0kdnfdbxdlgm-cairo-1.14.10
guix package: error:    ... propagated from guile-cairo@1.4.1
guix package: error:   second entry: cairo@1.14.10 /gnu/store/nwxv9s2q8pi0m6gn6fyidpj8442dwp6f-cairo-1.14.10
guix package: error:    ... propagated from cairomm@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’.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Type: text/x-patch, Size: 1569 bytes --]

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))

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* bug#29255: "Profile contains conflicting entries" could be more helpful
  2017-11-30 12:13     ` Ludovic Courtès
@ 2017-12-10 22:47       ` Ludovic Courtès
  2017-12-10 22:53         ` Ben Sturmfels
  0 siblings, 1 reply; 6+ messages in thread
From: Ludovic Courtès @ 2017-12-10 22:47 UTC (permalink / raw)
  To: Ricardo Wurmus; +Cc: 29255-done, Ben Sturmfels

Hello!

ludo@gnu.org (Ludovic Courtès) skribis:

> Ricardo Wurmus <rekado@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:
>
> $ ./pre-inst-env guix package -p foo -i python@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@2.7.13 /gnu/store/vysfxizaddh1q8s5qjgbdkzxx0585dzi-python-2.7.13
> guix package: error:   second entry: python@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.
>
>
> and:
>
> $ ./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@1.14.10 /gnu/store/c4vl4hw5jccg0b23sfvs0kdnfdbxdlgm-cairo-1.14.10
> guix package: error:    ... propagated from guile-cairo@1.4.1
> guix package: error:   second entry: cairo@1.14.10 /gnu/store/nwxv9s2q8pi0m6gn6fyidpj8442dwp6f-cairo-1.14.10
> guix package: error:    ... propagated from cairomm@1.12.2
> hint: Try upgrading both `guile-cairo' and `cairomm', or remove one of them from the profile.

I’ve pushed the patch as commit
3b80b81358b3861ca3794105c8eb4395df97846b.  Hopefully these hints help
users get on the right track, and we can always adjust them.

Thanks,
Ludo’.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#29255: "Profile contains conflicting entries" could be more helpful
  2017-12-10 22:47       ` Ludovic Courtès
@ 2017-12-10 22:53         ` Ben Sturmfels
  0 siblings, 0 replies; 6+ messages in thread
From: Ben Sturmfels @ 2017-12-10 22:53 UTC (permalink / raw)
  To: Ludovic Courtès, Ricardo Wurmus; +Cc: 29255-done

[-- Attachment #1: Type: text/plain, Size: 1929 bytes --]

On 11/12/17 09:47, Ludovic Courtès wrote:

>> 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:
>>
>> $ ./pre-inst-env guix package -p foo -i python@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@2.7.13 /gnu/store/vysfxizaddh1q8s5qjgbdkzxx0585dzi-python-2.7.13
>> guix package: error:   second entry: python@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.
>>
>>
>> and:
>>
>> $ ./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@1.14.10 /gnu/store/c4vl4hw5jccg0b23sfvs0kdnfdbxdlgm-cairo-1.14.10
>> guix package: error:    ... propagated from guile-cairo@1.4.1
>> guix package: error:   second entry: cairo@1.14.10 /gnu/store/nwxv9s2q8pi0m6gn6fyidpj8442dwp6f-cairo-1.14.10
>> guix package: error:    ... propagated from cairomm@1.12.2
>> hint: Try upgrading both `guile-cairo' and `cairomm', or remove one of them from the profile.
> 
> I’ve pushed the patch as commit
> 3b80b81358b3861ca3794105c8eb4395df97846b.  Hopefully these hints help
> users get on the right track, and we can always adjust them.

That's Ludo, that's great!


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2017-12-10 22:54 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-11-11  0:14 bug#29255: "Profile contains conflicting entries" could be more helpful Ben Sturmfels
2017-11-11 13:59 ` Ludovic Courtès
2017-11-24 18:35   ` Ricardo Wurmus
2017-11-30 12:13     ` Ludovic Courtès
2017-12-10 22:47       ` Ludovic Courtès
2017-12-10 22:53         ` Ben Sturmfels

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).