unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
* [WIP][PATCH] profiles: info-dir-file: Don't consider unwanted manifest entries
@ 2017-12-15 15:12 宋文武
  2017-12-15 15:40 ` Martin Castillo
  2017-12-18  9:28 ` Ludovic Courtès
  0 siblings, 2 replies; 5+ messages in thread
From: 宋文武 @ 2017-12-15 15:12 UTC (permalink / raw)
  To: guix-devel

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

Hello!

Currently we run profile hooks for all manifest inputs, so if you
install a new package to your profile, all profile hooks will be run
again, even if the new package doesn't provide info manuals, man pages,
etc.  Ideally only interested hooks need to be run, eg: if the new
package has info manuals, then the 'info-dir-file' hook will run.

I get it works somehow, but breaks the '--dry-run' functionality which I
have no idea how to preserve...


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-gexp-Add-eval-gexp.patch --]
[-- Type: text/x-patch, Size: 1735 bytes --]

From 3fd19f5f59c28689e55b3a7dede942014f9b7fb4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=AE=8B=E6=96=87=E6=AD=A6?= <iyzsong@member.fsf.org>
Date: Fri, 15 Dec 2017 22:20:38 +0800
Subject: [PATCH 1/2] gexp: Add 'eval-gexp'.

* guix/gexp.scm (eval-gexp): New procedure.
---
 guix/gexp.scm | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/guix/gexp.scm b/guix/gexp.scm
index 1929947d9..678e0c1e6 100644
--- a/guix/gexp.scm
+++ b/guix/gexp.scm
@@ -76,6 +76,7 @@
             gexp->derivation
             gexp->file
             gexp->script
+            eval-gexp
             text-file*
             mixed-text-file
             file-union
@@ -1161,6 +1162,21 @@ and '%load-compiled-path' to honor EXP's imported modules."
                          #:local-build? #t
                          #:substitutable? #f)))))
 
+(define* (eval-gexp exp #:optional (name "value"))
+  "Return as a monadic value the EXP (a gexp) evaluate to.  This is
+implemented by building a store file NAME that contains the textual
+representation of EXP's value, and then @code{read} from it."
+  (mlet* %store-monad
+      ((drv (gexp->derivation
+             name
+             (gexp (with-output-to-file (ungexp output)
+                     (lambda ()
+                       (write (eval (quote (ungexp exp)) (current-module))))))
+             #:local-build? #t
+             #:substitutable? #t))
+       (_   (built-derivations (list drv))))
+    (return (call-with-input-file (derivation->output-path drv) read))))
+
 (define* (text-file* name #:rest text)
   "Return as a monadic value a derivation that builds a text file containing
 all of TEXT.  TEXT may list, in addition to strings, objects of any type that
-- 
2.13.3


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: 0002-profiles-info-dir-file-Don-t-consider-unwanted-manif.patch --]
[-- Type: text/x-patch, Size: 2290 bytes --]

From ca6aecb94455c6e009d94bf6a0780a8f876bc85d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=AE=8B=E6=96=87=E6=AD=A6?= <iyzsong@member.fsf.org>
Date: Fri, 15 Dec 2017 22:38:41 +0800
Subject: [PATCH 2/2] profiles: info-dir-file: Don't consider unwanted manifest
 entries.

* guix/profiles.scm (info-dir-file): Use 'eval-gexp' to filter out those
manifest inputs that doesn't have info manuals.
---
 guix/profiles.scm | 27 +++++++++++++++++++++------
 1 file changed, 21 insertions(+), 6 deletions(-)

diff --git a/guix/profiles.scm b/guix/profiles.scm
index cedf9faa8..14b6c4253 100644
--- a/guix/profiles.scm
+++ b/guix/profiles.scm
@@ -683,7 +683,22 @@ MANIFEST."
   (define gzip                                    ;lazy reference
     (module-ref (resolve-interface '(gnu packages compression)) 'gzip))
 
-  (define build
+  ;; We only need to build the 'dir' file for inputs that does containing info
+  ;; manuals.
+  ;;
+  ;; XXX: This breaks '--dry-run', all manifest inputs will be built before
+  ;; returning the profile derivation...
+  (define interested
+    (eval-gexp
+     #~(filter
+        (lambda (input)
+          (file-exists? (string-append input "/share/info")))
+        '#$(manifest-inputs manifest))))
+
+  ;; XXX: We have to pass paths of inputs instead of paths of info files,
+  ;; because 'gexp-inputs' only adds inputs for strings which satisfies
+  ;; 'direct-store-path?'.
+  (define (build inputs)
     (with-imported-modules '((guix build utils))
       #~(begin
           (use-modules (guix build utils)
@@ -707,12 +722,12 @@ MANIFEST."
 
           (mkdir-p (string-append #$output "/share/info"))
           (exit (every install-info
-                       (append-map info-files
-                                   '#$(manifest-inputs manifest)))))))
+                       (append-map info-files '#$inputs))))))
 
-  (gexp->derivation "info-dir" build
-                    #:local-build? #t
-                    #:substitutable? #f))
+  (mlet* %store-monad ((inputs interested))
+    (gexp->derivation "info-dir" (build inputs)
+                      #:local-build? #t
+                      #:substitutable? #f)))
 
 (define (ghc-package-cache-file manifest)
   "Return a derivation that builds the GHC 'package.cache' file for all the
-- 
2.13.3


[-- Attachment #4: Type: text/plain, Size: 39 bytes --]



Needing help and directions, thanks!

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

* Re: [WIP][PATCH] profiles: info-dir-file: Don't consider unwanted manifest entries
  2017-12-15 15:12 [WIP][PATCH] profiles: info-dir-file: Don't consider unwanted manifest entries 宋文武
@ 2017-12-15 15:40 ` Martin Castillo
  2017-12-22 11:21   ` 宋文武
  2017-12-18  9:28 ` Ludovic Courtès
  1 sibling, 1 reply; 5+ messages in thread
From: Martin Castillo @ 2017-12-15 15:40 UTC (permalink / raw)
  To: 宋文武, guix-devel

Hi,

in the second patch file:
> +  ;; We only need to build the 'dir' file for inputs that does
containing info
> +  ;; manuals.
s/containing/contain

On 15.12.2017 16:12, 宋文武 wrote:> Hello!
>
> Currently we run profile hooks for all manifest inputs, so if you
> install a new package to your profile, all profile hooks will be run
> again, even if the new package doesn't provide info manuals, man pages,
> etc.  Ideally only interested hooks need to be run, eg: if the new
> package has info manuals, then the 'info-dir-file' hook will run.

One would need to filter man-pages too, right?
+ (define interested
+    (eval-gexp
+     #~(filter
+        (lambda (input)
+          (or (file-exists? (string-append input "/share/info"))
+              (file-exists? (string-append input "/share/man"))))
+        '#$(manifest-inputs manifest))))

>
> I get it works somehow, but breaks the '--dry-run' functionality which I
> have no idea how to preserve...
>
>
>
>
>
> Needing help and directions, thanks!
>

I can barely write scheme. I can't help much, sorry.

Martin

-- 
GPG: 7FDE 7190 2F73 2C50 236E  403D CC13 48F1 E644 08EC

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

* Re: [WIP][PATCH] profiles: info-dir-file: Don't consider unwanted manifest entries
  2017-12-15 15:12 [WIP][PATCH] profiles: info-dir-file: Don't consider unwanted manifest entries 宋文武
  2017-12-15 15:40 ` Martin Castillo
@ 2017-12-18  9:28 ` Ludovic Courtès
  2018-01-01 10:37   ` 宋文武
  1 sibling, 1 reply; 5+ messages in thread
From: Ludovic Courtès @ 2017-12-18  9:28 UTC (permalink / raw)
  To: 宋文武; +Cc: guix-devel

Hello!

iyzsong@member.fsf.org (宋文武) skribis:

> Currently we run profile hooks for all manifest inputs, so if you
> install a new package to your profile, all profile hooks will be run
> again, even if the new package doesn't provide info manuals, man pages,
> etc.  Ideally only interested hooks need to be run, eg: if the new
> package has info manuals, then the 'info-dir-file' hook will run.
>
> I get it works somehow, but breaks the '--dry-run' functionality which I
> have no idea how to preserve...

Indeed.  I had the idea of adding a notion of “build rounds”, which
would also be useful for grafts: you’d register (client-side) an extra
build round to be run after the current one.  For grafts, the first
round would return the ungrafted derivations.  For profile hooks, the
first round would return the profile without any hooks.  “-n” would
display what would be built/downloaded as part of the first round,
ignoring subsequent rounds.

I realize that’s a lot hand-waving, so I’ll have to see if I can get a
proof-of-concept ready in the coming weeks.

Ludo’.

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

* Re: [WIP][PATCH] profiles: info-dir-file: Don't consider unwanted manifest entries
  2017-12-15 15:40 ` Martin Castillo
@ 2017-12-22 11:21   ` 宋文武
  0 siblings, 0 replies; 5+ messages in thread
From: 宋文武 @ 2017-12-22 11:21 UTC (permalink / raw)
  To: Martin Castillo; +Cc: guix-devel

Martin Castillo <castilma@uni-bremen.de> writes:

> Hi,
>
> in the second patch file:
>> +  ;; We only need to build the 'dir' file for inputs that does
> containing info
>> +  ;; manuals.
> s/containing/contain
>

Okay, thanks!

> On 15.12.2017 16:12, 宋文武 wrote:> Hello!
>>
>> Currently we run profile hooks for all manifest inputs, so if you
>> install a new package to your profile, all profile hooks will be run
>> again, even if the new package doesn't provide info manuals, man pages,
>> etc.  Ideally only interested hooks need to be run, eg: if the new
>> package has info manuals, then the 'info-dir-file' hook will run.
>
> One would need to filter man-pages too, right?

Yes, that need be done in the 'manual-database' hook.

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

* Re: [WIP][PATCH] profiles: info-dir-file: Don't consider unwanted manifest entries
  2017-12-18  9:28 ` Ludovic Courtès
@ 2018-01-01 10:37   ` 宋文武
  0 siblings, 0 replies; 5+ messages in thread
From: 宋文武 @ 2018-01-01 10:37 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: guix-devel

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

> Hello!
>
> iyzsong@member.fsf.org (宋文武) skribis:
>
>> Currently we run profile hooks for all manifest inputs, so if you
>> install a new package to your profile, all profile hooks will be run
>> again, even if the new package doesn't provide info manuals, man pages,
>> etc.  Ideally only interested hooks need to be run, eg: if the new
>> package has info manuals, then the 'info-dir-file' hook will run.
>>
>> I get it works somehow, but breaks the '--dry-run' functionality which I
>> have no idea how to preserve...
>
> Indeed.  I had the idea of adding a notion of “build rounds”, which
> would also be useful for grafts: you’d register (client-side) an extra
> build round to be run after the current one.  For grafts, the first
> round would return the ungrafted derivations.  For profile hooks, the
> first round would return the profile without any hooks.  “-n” would
> display what would be built/downloaded as part of the first round,
> ignoring subsequent rounds.
>

Hello, happy new year!  So I have just disable profile hooks for the
'dry-run' now and send patches to guix-patches.

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

end of thread, other threads:[~2018-01-01 10:38 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-12-15 15:12 [WIP][PATCH] profiles: info-dir-file: Don't consider unwanted manifest entries 宋文武
2017-12-15 15:40 ` Martin Castillo
2017-12-22 11:21   ` 宋文武
2017-12-18  9:28 ` Ludovic Courtès
2018-01-01 10:37   ` 宋文武

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