>From ae3f83c82c46d8dec3dce5a3ff89805111c8e7ab Mon Sep 17 00:00:00 2001 From: Caleb Ristvedt Date: Mon, 5 Jun 2017 22:34:59 -0500 Subject: [PATCH 5/7] guix: register-path: use new %store-database-directory * guix/config.scm.in (%store-database-directory): new variable. * guix/store.scm (register-path): use variables from (guix config) instead of using environment variables directly. --- guix/config.scm.in | 6 ++++++ guix/store.scm | 41 ++++++++++++++++++++++------------------- 2 files changed, 28 insertions(+), 19 deletions(-) diff --git a/guix/config.scm.in b/guix/config.scm.in index 8f2c4abd8..dfe5fe0db 100644 --- a/guix/config.scm.in +++ b/guix/config.scm.in @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2012, 2013, 2014, 2015, 2016 Ludovic Courtès +;;; Copyright © 2017 Caleb Ristvedt ;;; ;;; This file is part of GNU Guix. ;;; @@ -29,6 +30,7 @@ %store-directory %state-directory + %store-database-directory %config-directory %guix-register-program @@ -80,6 +82,10 @@ (or (getenv "NIX_STATE_DIR") (string-append %localstatedir "/guix"))) +(define %store-database-directory + (or (and=> (getenv "NIX_DB_DIR") canonicalize-path) + (string-append %state-directory "/db"))) + (define %config-directory ;; This must match `GUIX_CONFIGURATION_DIRECTORY' as defined in `nix/local.mk'. (or (getenv "GUIX_CONFIGURATION_DIRECTORY") diff --git a/guix/store.scm b/guix/store.scm index f32cdc6aa..77fd5b51e 100644 --- a/guix/store.scm +++ b/guix/store.scm @@ -1257,7 +1257,10 @@ makes a wrapper around a port which implements GET-POSITION." #:key (references '()) deriver prefix state-directory) ;; Priority for options: first what is given, then environment variables, - ;; then defaults. + ;; then defaults. %state-directory, %store-directory, and + ;; %store-database-directory already handle the "environment variables / + ;; defaults" question, so we only need to choose between what is given and + ;; those. "Register PATH as a valid store file, with REFERENCES as its list of references, and DERIVER as its deriver (.drv that led to it.) If PREFIX is given, it must be the name of the directory containing the new store to @@ -1271,28 +1274,28 @@ be used internally by the daemon's build hook." (state-directory (string-append state-directory "/db")) (prefix - (string-append prefix %state-directory "/db")) - ((getenv "NIX_DB_DIR") - (getenv "NIX_DB_DIR")) - ((getenv "NIX_STATE_DIR") - (string-append (getenv "NIX_STATE_DIR") "/db")) + ;; 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 - (string-append %state-directory "/db")))) + %store-database-directory))) (store-dir (if prefix - (string-append prefix %store-directory) - (or - (getenv "NIX_STORE_DIR") - (getenv "NIX_STORE") - %store-directory))) + ;; same situation as above + (string-append prefix %storedir) + %store-directory)) (to-register (if prefix - ;; note: we assume here that if path is, for example, - ;; /foo/bar/gnu/store/thing.txt, then an environment - ;; variable has been used to change the store - ;; directory to /foo/bar/gnu/store. - (string-append %store-directory "/" (basename path)) + (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)))) + (real-path (string-append store-dir "/" (basename path)))) (let-values (((hash nar-size) (nar-sha256 real-path))) (sqlite-register -- 2.13.0