* bug#35872: messages that are redundant can be eliminated?
@ 2019-05-23 20:41 Andy Tai
2019-05-24 16:55 ` Ludovic Courtès
0 siblings, 1 reply; 6+ messages in thread
From: Andy Tai @ 2019-05-23 20:41 UTC (permalink / raw)
To: 35872
[-- Attachment #1: Type: text/plain, Size: 1461 bytes --]
on my guix installation (on an Ubuntu system but that detail should not
matter)
after running
%guix pull && guix package -u
these were printed:
----
...
New in this revision:
...
hint: Run `guix pull --news' to view the complete list of package changes.
hint: After setting `PATH', run `hash guix' to make sure your shell refers
to `/home/.../.config/guix/current/bin/guix'.
guix package: warning: Consider running 'guix pull' followed by
'guix package -u' to get up-to-date packages and security updates.
The following packages will be upgraded:
glibc-locales 2.28 → 2.28
/gnu/store/acl2wxzzkkcjv74rlqswdf9p8pwddlmk-glibc-locales-2.28
meson 0.50.0 → 0.50.0
/gnu/store/zc6r8b1rx3q7lqd8kvvpnm38ky925kmj-meson-0.50.0
guile 2.2.4 → 2.2.4
/gnu/store/9alic3caqhay3h8mx4iihpmyj6ymqpcx-guile-2.2.4
font-adobe-source-han-sans:cn 1.004 → 1.004
/gnu/store/zf59mg6g0afay9458aarh0rqcz852hhb-font-adobe-source-han-sans-1.004-cn
fontconfig 2.13.1 → 2.13.1
/gnu/store/cnafj0dn09qzy23xnrrjsq5zcdj4739j-fontconfig-2.13.1
epiphany 3.28.3.1 → 3.28.3.1
/gnu/store/n56bdjhqgq7a4a6ndqc3aymyrzvs12hl-epiphany-3.28.3.1
gnome-terminal 3.28.2 → 3.28.2
/gnu/store/r6i61wji0qmv9fqdyk65kx73nzxw8v80-gnome-terminal-3.28.2
nothing to be done
----
Now there seems nothing to be done during the guix package -u step so these
messages
glibc-locales 2.28 → 2.28...
were confusing and probably not necessary?
[-- Attachment #2: Type: text/html, Size: 2739 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#35872: messages that are redundant can be eliminated?
2019-05-23 20:41 bug#35872: messages that are redundant can be eliminated? Andy Tai
@ 2019-05-24 16:55 ` Ludovic Courtès
2020-03-24 17:20 ` Ludovic Courtès
2020-03-24 22:02 ` Ludovic Courtès
0 siblings, 2 replies; 6+ messages in thread
From: Ludovic Courtès @ 2019-05-24 16:55 UTC (permalink / raw)
To: Andy Tai; +Cc: 35872
Hi Andy,
Andy Tai <atai@atai.org> skribis:
> %guix pull && guix package -u
>
> these were printed:
> ----
> ...
> New in this revision:
> ...
> hint: Run `guix pull --news' to view the complete list of package changes.
>
> hint: After setting `PATH', run `hash guix' to make sure your shell refers
> to `/home/.../.config/guix/current/bin/guix'.
You should follow this advice, which would address this warning:
> guix package: warning: Consider running 'guix pull' followed by
> 'guix package -u' to get up-to-date packages and security updates.
:-)
> The following packages will be upgraded:
> glibc-locales 2.28 → 2.28
> /gnu/store/acl2wxzzkkcjv74rlqswdf9p8pwddlmk-glibc-locales-2.28
> meson 0.50.0 → 0.50.0
> /gnu/store/zc6r8b1rx3q7lqd8kvvpnm38ky925kmj-meson-0.50.0
> guile 2.2.4 → 2.2.4
> /gnu/store/9alic3caqhay3h8mx4iihpmyj6ymqpcx-guile-2.2.4
> font-adobe-source-han-sans:cn 1.004 → 1.004
> /gnu/store/zf59mg6g0afay9458aarh0rqcz852hhb-font-adobe-source-han-sans-1.004-cn
> fontconfig 2.13.1 → 2.13.1
> /gnu/store/cnafj0dn09qzy23xnrrjsq5zcdj4739j-fontconfig-2.13.1
> epiphany 3.28.3.1 → 3.28.3.1
> /gnu/store/n56bdjhqgq7a4a6ndqc3aymyrzvs12hl-epiphany-3.28.3.1
> gnome-terminal 3.28.2 → 3.28.2
> /gnu/store/r6i61wji0qmv9fqdyk65kx73nzxw8v80-gnome-terminal-3.28.2
>
> nothing to be done
This is a bug where the presence of propagated inputs leads ‘guix
upgrade’ to assume something would be upgraded, even when that’s not the
case. This can be reproduced with:
guix install -p foo guile
guix upgrade -p foo
I’ll see what can be done.
Thanks for reporting it,
Ludo’.
^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#35872: messages that are redundant can be eliminated?
2019-05-24 16:55 ` Ludovic Courtès
@ 2020-03-24 17:20 ` Ludovic Courtès
2020-03-24 17:36 ` Andy Tai
2020-03-24 22:02 ` Ludovic Courtès
1 sibling, 1 reply; 6+ messages in thread
From: Ludovic Courtès @ 2020-03-24 17:20 UTC (permalink / raw)
To: Andy Tai; +Cc: 35872
Hi,
Ludovic Courtès <ludo@gnu.org> skribis:
>> The following packages will be upgraded:
>> glibc-locales 2.28 → 2.28
>> /gnu/store/acl2wxzzkkcjv74rlqswdf9p8pwddlmk-glibc-locales-2.28
>> meson 0.50.0 → 0.50.0
>> /gnu/store/zc6r8b1rx3q7lqd8kvvpnm38ky925kmj-meson-0.50.0
>> guile 2.2.4 → 2.2.4
>> /gnu/store/9alic3caqhay3h8mx4iihpmyj6ymqpcx-guile-2.2.4
>> font-adobe-source-han-sans:cn 1.004 → 1.004
>> /gnu/store/zf59mg6g0afay9458aarh0rqcz852hhb-font-adobe-source-han-sans-1.004-cn
>> fontconfig 2.13.1 → 2.13.1
>> /gnu/store/cnafj0dn09qzy23xnrrjsq5zcdj4739j-fontconfig-2.13.1
>> epiphany 3.28.3.1 → 3.28.3.1
>> /gnu/store/n56bdjhqgq7a4a6ndqc3aymyrzvs12hl-epiphany-3.28.3.1
>> gnome-terminal 3.28.2 → 3.28.2
>> /gnu/store/r6i61wji0qmv9fqdyk65kx73nzxw8v80-gnome-terminal-3.28.2
>>
>> nothing to be done
>
> This is a bug where the presence of propagated inputs leads ‘guix
> upgrade’ to assume something would be upgraded, even when that’s not the
> case. This can be reproduced with:
>
> guix install -p foo guile
> guix upgrade -p foo
With commit 3e5ab0a7a9399bb098b9ced46bf3cbf4085c6bab, ‘guix upgrade’
writes “(dependencies changed)” instead of “2.28 → 2.28”, which should
already be less confusing.
Ludo’.
^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#35872: messages that are redundant can be eliminated?
2020-03-24 17:20 ` Ludovic Courtès
@ 2020-03-24 17:36 ` Andy Tai
0 siblings, 0 replies; 6+ messages in thread
From: Andy Tai @ 2020-03-24 17:36 UTC (permalink / raw)
To: Ludovic Courtès; +Cc: 35872
[-- Attachment #1: Type: text/plain, Size: 1711 bytes --]
Great, thanks. Minor thing but good for end user experience.
On Tue, Mar 24, 2020 at 10:20 AM Ludovic Courtès <ludo@gnu.org> wrote:
> Hi,
>
> Ludovic Courtès <ludo@gnu.org> skribis:
>
> >> The following packages will be upgraded:
> >> glibc-locales 2.28 → 2.28
> >> /gnu/store/acl2wxzzkkcjv74rlqswdf9p8pwddlmk-glibc-locales-2.28
> >> meson 0.50.0 → 0.50.0
> >> /gnu/store/zc6r8b1rx3q7lqd8kvvpnm38ky925kmj-meson-0.50.0
> >> guile 2.2.4 → 2.2.4
> >> /gnu/store/9alic3caqhay3h8mx4iihpmyj6ymqpcx-guile-2.2.4
> >> font-adobe-source-han-sans:cn 1.004 → 1.004
> >>
> /gnu/store/zf59mg6g0afay9458aarh0rqcz852hhb-font-adobe-source-han-sans-1.004-cn
> >> fontconfig 2.13.1 → 2.13.1
> >> /gnu/store/cnafj0dn09qzy23xnrrjsq5zcdj4739j-fontconfig-2.13.1
> >> epiphany 3.28.3.1 → 3.28.3.1
> >> /gnu/store/n56bdjhqgq7a4a6ndqc3aymyrzvs12hl-epiphany-3.28.3.1
> >> gnome-terminal 3.28.2 → 3.28.2
> >> /gnu/store/r6i61wji0qmv9fqdyk65kx73nzxw8v80-gnome-terminal-3.28.2
> >>
> >> nothing to be done
> >
> > This is a bug where the presence of propagated inputs leads ‘guix
> > upgrade’ to assume something would be upgraded, even when that’s not the
> > case. This can be reproduced with:
> >
> > guix install -p foo guile
> > guix upgrade -p foo
>
> With commit 3e5ab0a7a9399bb098b9ced46bf3cbf4085c6bab, ‘guix upgrade’
> writes “(dependencies changed)” instead of “2.28 → 2.28”, which should
> already be less confusing.
>
> Ludo’.
>
--
Andy Tai, atai@atai.org, Skype: licheng.tai, Line: andy_tai, WeChat:
andytai1010
Year 2019 民國108年
自動的精神力是信仰與覺悟
自動的行為力是勞動與技能
[-- Attachment #2: Type: text/html, Size: 2658 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#35872: messages that are redundant can be eliminated?
2019-05-24 16:55 ` Ludovic Courtès
2020-03-24 17:20 ` Ludovic Courtès
@ 2020-03-24 22:02 ` Ludovic Courtès
2020-03-30 22:12 ` Ludovic Courtès
1 sibling, 1 reply; 6+ messages in thread
From: Ludovic Courtès @ 2020-03-24 22:02 UTC (permalink / raw)
To: Andy Tai; +Cc: 35872
[-- Attachment #1: Type: text/plain, Size: 1018 bytes --]
(+Cc: Efraim following our discussion on IRC.)
Ludovic Courtès <ludo@gnu.org> skribis:
> This is a bug where the presence of propagated inputs leads ‘guix
> upgrade’ to assume something would be upgraded, even when that’s not the
> case. This can be reproduced with:
>
> guix install -p foo guile
> guix upgrade -p foo
I came up with an actual fix for that (attached), nice and clean, which
would allow ‘guix upgrade’ to correctly determine whether something is
going to be upgraded.
But then I realized that this cannot work in the presence of grafts:
first because ‘-n’ currently implies ‘--no-grafts’, so this is an apple
to orange comparison, and then because computing the output file name of
a grafted package can require building the package (grafts are “dynamic
dependencies”.)
So I’m willing to punt for now.
I wonder if there’s a UI trick we could use to avoid displaying too many
“(dependencies changed)” though.
Thoughts?
Ludo’.
[-- Attachment #2: Type: text/x-patch, Size: 6004 bytes --]
diff --git a/guix/profiles.scm b/guix/profiles.scm
index 20a2973579..cb95969926 100644
--- a/guix/profiles.scm
+++ b/guix/profiles.scm
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
;;; Copyright © 2014, 2016 Alex Kost <alezost@gmail.com>
;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
@@ -87,6 +87,7 @@
manifest-entry-search-paths
manifest-entry-parent
manifest-entry-properties
+ manifest-entry=?
manifest-pattern
manifest-pattern?
@@ -216,6 +217,32 @@
(output manifest-pattern-output ; string | #f
(default "out")))
+(define (list=? = lst1 lst2)
+ "Return true if LST1 and LST2 have the same length and their elements are
+pairwise equal per =."
+ (match lst1
+ (()
+ (null? lst2))
+ ((head1 . tail1)
+ (match lst2
+ ((head2 . tail2)
+ (and (= head1 head2) (list=? = tail1 tail2)))
+ (()
+ #f)))))
+
+(define (manifest-entry=? entry1 entry2)
+ "Return true if ENTRY1 is equivalent to ENTRY2."
+ (match entry1
+ (($ <manifest-entry> name1 version1 output1 item1 dependencies1 paths1)
+ (match entry2
+ (($ <manifest-entry> name2 version2 output2 item2 dependencies2 paths2)
+ (and (string=? name1 name2)
+ (string=? version1 version2)
+ (string=? output1 output2)
+ (equal? item1 item2) ;XXX: could be <package> vs. store item
+ (equal? paths1 paths2)
+ (list=? manifest-entry=? dependencies1 dependencies2)))))))
+
(define (manifest-transitive-entries manifest)
"Return the entries of MANIFEST along with their propagated inputs,
recursively."
diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm
index b5d16acec0..0650ec965c 100644
--- a/guix/scripts/package.scm
+++ b/guix/scripts/package.scm
@@ -200,6 +200,19 @@ non-zero relevance score."
(package-full-name package2))
(> score1 score2))))))))))
+(define (lower-manifest-entry store entry)
+ "Lower entry by replacing its package objects with their corresponding store
+item, recursively."
+ (let* ((output (manifest-entry-output entry))
+ (item (derivation->output-path
+ (package-derivation store (manifest-entry-item entry))
+ output)))
+ (manifest-entry
+ (inherit entry)
+ (item item)
+ (dependencies (map (cut lower-manifest-entry store <>)
+ (manifest-entry-dependencies entry))))))
+
(define (transaction-upgrade-entry store entry transaction)
"Return a variant of TRANSACTION that accounts for the upgrade of ENTRY, a
<manifest-entry>."
@@ -215,40 +228,37 @@ non-zero relevance score."
(output (manifest-entry-output old)))
transaction)))
- (match (if (manifest-transaction-removal-candidate? entry transaction)
- 'dismiss
- entry)
- ('dismiss
- transaction)
- (($ <manifest-entry> name version output (? string? path))
- (match (find-best-packages-by-name name #f)
- ((pkg . rest)
- (let ((candidate-version (package-version pkg)))
- (match (package-superseded pkg)
- ((? package? new)
- (supersede entry new))
- (#f
- (case (version-compare candidate-version version)
- ((>)
- (manifest-transaction-install-entry
- (package->manifest-entry* pkg output)
- transaction))
- ((<)
- transaction)
- ((=)
- (let ((candidate-path (derivation->output-path
- (package-derivation store pkg))))
- ;; XXX: When there are propagated inputs, assume we need to
- ;; upgrade the whole entry.
- (if (and (string=? path candidate-path)
- (null? (package-propagated-inputs pkg)))
- transaction
- (manifest-transaction-install-entry
- (package->manifest-entry* pkg output)
- transaction)))))))))
- (()
- (warning (G_ "package '~a' no longer exists~%") name)
- transaction)))))
+ (define (upgrade entry)
+ (match entry
+ (($ <manifest-entry> name version output (? string? path))
+ (match (find-best-packages-by-name name #f)
+ ((pkg . rest)
+ (let ((candidate-version (package-version pkg)))
+ (match (package-superseded pkg)
+ ((? package? new)
+ (supersede entry new))
+ (#f
+ (case (version-compare candidate-version version)
+ ((>)
+ (manifest-transaction-install-entry
+ (package->manifest-entry* pkg output)
+ transaction))
+ ((<)
+ transaction)
+ ((=)
+ (let* ((new (package->manifest-entry* pkg output)))
+ (if (manifest-entry=? (lower-manifest-entry store new)
+ entry)
+ transaction
+ (manifest-transaction-install-entry
+ new transaction)))))))))
+ (()
+ (warning (G_ "package '~a' no longer exists~%") name)
+ transaction)))))
+
+ (if (manifest-transaction-removal-candidate? entry transaction)
+ entry
+ (upgrade entry)))
\f
;;;
^ permalink raw reply related [flat|nested] 6+ messages in thread
* bug#35872: messages that are redundant can be eliminated?
2020-03-24 22:02 ` Ludovic Courtès
@ 2020-03-30 22:12 ` Ludovic Courtès
0 siblings, 0 replies; 6+ messages in thread
From: Ludovic Courtès @ 2020-03-30 22:12 UTC (permalink / raw)
To: Andy Tai; +Cc: 35872-done
Hi!
Ludovic Courtès <ludo@gnu.org> skribis:
> (+Cc: Efraim following our discussion on IRC.)
>
> Ludovic Courtès <ludo@gnu.org> skribis:
>
>> This is a bug where the presence of propagated inputs leads ‘guix
>> upgrade’ to assume something would be upgraded, even when that’s not the
>> case. This can be reproduced with:
>>
>> guix install -p foo guile
>> guix upgrade -p foo
>
> I came up with an actual fix for that (attached), nice and clean, which
> would allow ‘guix upgrade’ to correctly determine whether something is
> going to be upgraded.
>
> But then I realized that this cannot work in the presence of grafts:
> first because ‘-n’ currently implies ‘--no-grafts’, so this is an apple
> to orange comparison, and then because computing the output file name of
> a grafted package can require building the package (grafts are “dynamic
> dependencies”.)
I saw the light :-) and came up with a simple solution to this in commit
a357849f5b1314c2a35efeee237645b9b08c39f5. Basically, we do the complete
manifest entry comparison as in the patch I posted earlier, but we punt
if doing so would require building things (for grafts).
Anecdotal data: on my 288-item profile, “guix upgrade -n” would
previously report that 124 things need to be upgraded, and now it
reports 97 instead.
Ludo’.
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2020-03-30 22:13 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-05-23 20:41 bug#35872: messages that are redundant can be eliminated? Andy Tai
2019-05-24 16:55 ` Ludovic Courtès
2020-03-24 17:20 ` Ludovic Courtès
2020-03-24 17:36 ` Andy Tai
2020-03-24 22:02 ` Ludovic Courtès
2020-03-30 22:12 ` Ludovic Courtès
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).