* 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 external index https://git.savannah.gnu.org/cgit/guix.git This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.