guix-commits
[Top][All Lists]
Advanced

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

08/17: guix: register-path: return #t on success.


From: Caleb Ristvedt
Subject: 08/17: guix: register-path: return #t on success.
Date: Tue, 29 Aug 2017 02:07:48 -0400 (EDT)

reepca pushed a commit to branch guile-daemon
in repository guix.

commit a9e16a635551ebe952e22e0b87a1feacfd2df11a
Author: Caleb Ristvedt <address@hidden>
Date:   Thu Jun 8 02:56:37 2017 -0500

    guix: register-path: return #t on success.
    
    * guix/store.scm: (register-path): return #t on success.
---
 guix/store.scm | 96 ++++++++++++++++++++++++++++++----------------------------
 1 file changed, 50 insertions(+), 46 deletions(-)

diff --git a/guix/store.scm b/guix/store.scm
index 732065f..62b503b 100644
--- a/guix/store.scm
+++ b/guix/store.scm
@@ -1374,9 +1374,9 @@ future duplicates can hardlink to it."
         (link path links-path))))
 
 ;; TODO: Handle databases not existing yet (what should the default behavior
-;; be?  Figuring out how the C++ stuff currently does it sounds like a lot of
-;; grepping for global variables...). Also, return #t on success like the
-;; documentation says we should.
+;; be? The C++ version checks for a number in the file "schema" in the
+;; database directory and compares it to a constant, and uses that to decide
+;; whether to "upgrade" or initialize the database).
 
 (define* (register-path path
                         #:key (references '()) deriver prefix state-directory)
@@ -1394,49 +1394,53 @@ Return #t on success.
 
 Use with care as it directly modifies the store!  This is primarily meant to
 be used internally by the daemon's build hook."
-  (let* ((db-dir (cond
-                  (state-directory
-                   (string-append state-directory "/db"))
-                  (prefix
-                   ;; If prefix is specified, the value of NIX_STATE_DIR
-                   ;; (which affects %state-directory) isn't supposed to
-                   ;; affect db-dir, only the compile-time-customized
-                   ;; default should. 
-                   (string-append prefix %localstatedir "/guix/db"))
-                  (else
-                   %store-database-directory)))
-         (store-dir (if prefix
-                        ;; same situation as above
-                        (string-append prefix %storedir)
-                        %store-directory))
-         (to-register (if prefix
-                          (string-append %storedir "/" (basename path))
-                          ;; note: we assume here that if path is, for
-                          ;; example, /foo/bar/gnu/store/thing.txt and prefix
-                          ;; isn't given, then an environment variable has
-                          ;; been used to change the store directory to
-                          ;; /foo/bar/gnu/store, since otherwise real-path
-                          ;; would end up being /gnu/store/thing.txt, which is
-                          ;; probably not the right file in this case.
-                          path))
-         (real-path (string-append store-dir "/" (basename path))))
-    (let-values (((hash nar-size)
-                  (nar-sha256 real-path)))
-      (sqlite-register
-       #:dbpath (string-append db-dir "/db.sqlite")
-       #:path to-register
-       #:references references
-       #:deriver deriver
-       #:hash (string-append "sha256:"
-                             (bytevector->base16-string hash))
-       #:nar-size nar-size)
-      ;; reset-timestamps prints a message on each invocation that we probably
-      ;; don't want.
-      (with-output-to-port 
-          (%make-void-port "w")
-        (lambda ()
-          (reset-timestamps real-path)))
-      (deduplicate real-path store-dir hash))))
+  (false-if-exception
+   (let* ((db-dir (cond
+                   (state-directory
+                    (string-append state-directory "/db"))
+                   (prefix
+                    ;; If prefix is specified, the value of NIX_STATE_DIR
+                    ;; (which affects %state-directory) isn't supposed to
+                    ;; affect db-dir, only the compile-time-customized
+                    ;; default should. 
+                    (string-append prefix %localstatedir "/guix/db"))
+                   (else
+                    %store-database-directory)))
+          (store-dir (if prefix
+                         ;; same situation as above
+                         (string-append prefix %storedir)
+                         %store-directory))
+          (to-register (if prefix
+                           (string-append %storedir "/" (basename path))
+                           ;; note: we assume here that if path is, for
+                           ;; example, /foo/bar/gnu/store/thing.txt and prefix
+                           ;; isn't given, then an environment variable has
+                           ;; been used to change the store directory to
+                           ;; /foo/bar/gnu/store, since otherwise real-path
+                           ;; would end up being /gnu/store/thing.txt, which is
+                           ;; probably not the right file in this case.
+                           path))
+          (real-path (string-append store-dir "/" (basename path))))
+     (let-values (((hash nar-size)
+                   (nar-sha256 real-path)))
+       (sqlite-register
+        #:dbpath (string-append db-dir "/db.sqlite")
+        #:path to-register
+        #:references references
+        #:deriver deriver
+        #:hash (string-append "sha256:"
+                              (bytevector->base16-string hash))
+        #:nar-size nar-size)
+       ;; reset-timestamps prints a message on each invocation that we probably
+       ;; don't want.
+       (with-output-to-port 
+           (%make-void-port "w")
+         (lambda ()
+           (reset-timestamps real-path)))
+       (deduplicate real-path store-dir hash)
+       ;; If we've made it this far without an exception, I guess we've
+       ;; probably succeeded?
+       #t))))
 
 
 ;;;



reply via email to

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