guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

07/07: self: Add a progress report while loading modules.


From: Ludovic Courtès
Subject: 07/07: self: Add a progress report while loading modules.
Date: Wed, 22 Nov 2017 09:02:47 -0500 (EST)

civodul pushed a commit to branch wip-pull-reload
in repository guix.

commit 62dbd6e10b5317f8a167e40bf5a5421f48761c0e
Author: Ludovic Courtès <address@hidden>
Date:   Wed Nov 22 10:58:17 2017 +0100

    self: Add a progress report while loading modules.
    
    * guix/self.scm (reload-guix): Use 'call-with-progress-reporter'.  Use
    'G_' for internationalization.
    * po/guix/POTFILES.in: Add guix/self.scm.
---
 guix/self.scm       | 31 ++++++++++++++++++++++---------
 po/guix/POTFILES.in |  1 +
 2 files changed, 23 insertions(+), 9 deletions(-)

diff --git a/guix/self.scm b/guix/self.scm
index 3067c74..98a809c 100644
--- a/guix/self.scm
+++ b/guix/self.scm
@@ -26,7 +26,9 @@
   #:use-module (guix packages)
   #:use-module (guix sets)
   #:use-module (guix modules)
+  #:use-module (guix progress)
   #:use-module (guix build utils)
+  #:use-module (guix i18n)
   #:use-module (gnu packages)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-9)
@@ -563,8 +565,11 @@ list of file-name/file-like objects suitable as inputs to 
'imported-files'."
                              (resolve-module module #f #f
                                              #:ensure #f))
                            (source-module-closure '((guix packages)))))
-         (guix-submodules (recursive-submodules guix))
-         (gnu-submodules  (recursive-submodules gnu)))
+         (guix-submodules (lset-difference eq? (recursive-submodules guix) 
core))
+         (gnu-submodules  (recursive-submodules gnu))
+         (total           (+ 2 (length (delete-duplicates
+                                        (append core guix-submodules
+                                                gnu-submodules))))))
     (define (reload module)
       ;; Reload MODULE, unless it's already been reloaded indirectly in the
       ;; meantime.
@@ -579,18 +584,26 @@ list of file-name/file-like objects suitable as inputs to 
'imported-files'."
     ;; end up with a mixture of old and new modules when we reload (which
     ;; wouldn't work, because we'd have two different <package> record types,
     ;; for instance.)
-    (format log-port "Unloading current Guix...~%")
+    (format log-port (G_ "Unloading current Guix...~%"))
     (unload-module-tree! gnu)
     (unload-module-tree! guix)
 
     ;; When reloading, we compile the core modules and interpret the rest.
     ;; This appears to be the most efficient approach.
-    (format log-port "Loading new Guix...~%")
-    (for-each reload core)
-    (set! %load-should-auto-compile #f)
-    (for-each reload (append guix-submodules (list guix)))
-    (for-each reload (append gnu-submodules (list gnu)))
-    (format log-port "New modules successfully loaded.~%")))
+    (call-with-progress-reporter
+        (progress-reporter/bar total
+                               (G_ "Loading new modules...")
+                               log-port)
+      (lambda (report)
+        (let ((reload (lambda (module)
+                        (report)
+                        (reload module))))
+          (for-each reload core)
+          (set! %load-should-auto-compile #f)
+          (for-each reload (append guix-submodules (list guix)))
+          (for-each reload (append gnu-submodules (list gnu))))))
+
+    (format log-port (G_ "New modules successfully loaded.~%"))))
 
 
 ;;;
diff --git a/po/guix/POTFILES.in b/po/guix/POTFILES.in
index 6510b99..616daad 100644
--- a/po/guix/POTFILES.in
+++ b/po/guix/POTFILES.in
@@ -9,6 +9,7 @@ gnu/system/shadow.scm
 guix/scripts.scm
 guix/scripts/build.scm
 guix/discovery.scm
+guix/self.scm
 guix/scripts/download.scm
 guix/scripts/package.scm
 guix/scripts/gc.scm



reply via email to

[Prev in Thread] Current Thread [Next in Thread]