guix-commits
[Top][All Lists]
Advanced

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

05/07: database: Register each store item only once.


From: Ludovic Courtès
Subject: 05/07: database: Register each store item only once.
Date: Sun, 23 Sep 2018 17:34:31 -0400 (EDT)

civodul pushed a commit to branch master
in repository guix.

commit bb3b6ccb05550fbfbeb459c68819a752327d6e1e
Author: Ludovic Courtès <address@hidden>
Date:   Sun Sep 23 23:11:30 2018 +0200

    database: Register each store item only once.
    
    Fixes <https://bugs.gnu.org/32600>.
    Reported by Leo Famulari.
    
    * guix/store/database.scm (register-items): Check whether TO-REGISTER is
    in DB by calling 'path-id',  and skip the reset-timestamps,
    registration, and deduplication phases when it is.
---
 guix/store/database.scm | 24 ++++++++++++++----------
 1 file changed, 14 insertions(+), 10 deletions(-)

diff --git a/guix/store/database.scm b/guix/store/database.scm
index 5d094fa..341276b 100644
--- a/guix/store/database.scm
+++ b/guix/store/database.scm
@@ -290,18 +290,22 @@ Write a progress report to LOG-PORT."
     (define real-file-name
       (string-append store-dir "/" (basename (store-info-item item))))
 
-    (let-values (((hash nar-size) (nar-sha256 real-file-name)))
+    ;; When TO-REGISTER is already registered, skip it.  This makes a
+    ;; significant differences when 'register-closures' is called
+    ;; consecutively for overlapping closures such as 'system' and 'bootcfg'.
+    (unless (path-id db to-register)
       (when reset-timestamps?
         (reset-timestamps real-file-name))
-      (sqlite-register db #:path to-register
-                       #:references (store-info-references item)
-                       #:deriver (store-info-deriver item)
-                       #:hash (string-append "sha256:"
-                                             (bytevector->base16-string hash))
-                       #:nar-size nar-size
-                       #:time registration-time)
-      (when deduplicate?
-        (deduplicate real-file-name hash #:store store-dir))))
+      (let-values (((hash nar-size) (nar-sha256 real-file-name)))
+        (sqlite-register db #:path to-register
+                         #:references (store-info-references item)
+                         #:deriver (store-info-deriver item)
+                         #:hash (string-append "sha256:"
+                                               (bytevector->base16-string 
hash))
+                         #:nar-size nar-size
+                         #:time registration-time)
+        (when deduplicate?
+          (deduplicate real-file-name hash #:store store-dir)))))
 
   (mkdir-p db-dir)
   (parameterize ((sql-schema schema))



reply via email to

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