diff options
author | Ludovic Courtès <ludo@gnu.org> | 2014-01-11 16:55:04 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2014-01-24 00:01:49 +0100 |
commit | 349fd3b11f320453ad8eeb3031621d0ffcaf078d (patch) | |
tree | 31cabce1d4fc986e2b43cb0af94844a3b6db90f7 | |
parent | 5674a3fdb6b4b0f744e2339167d415d8a7a265a0 (diff) | |
download | patches-349fd3b11f320453ad8eeb3031621d0ffcaf078d.tar patches-349fd3b11f320453ad8eeb3031621d0ffcaf078d.tar.gz |
guix-register: Support registration in the current store, without '--prefix'.
* nix/guix-register/guix-register.cc (register_validity): Leave
'info.path' unmodified when PREFIX is empty.
(main): Call 'settings.processEnvironment' early on.
Leave 'settings.nixStore' unmodified when PREFIX is empty.
-rw-r--r-- | nix/guix-register/guix-register.cc | 25 | ||||
-rw-r--r-- | tests/guix-register.sh | 29 |
2 files changed, 44 insertions, 10 deletions
diff --git a/nix/guix-register/guix-register.cc b/nix/guix-register/guix-register.cc index 14478f6a13..324673f346 100644 --- a/nix/guix-register/guix-register.cc +++ b/nix/guix-register/guix-register.cc @@ -1,5 +1,5 @@ /* GNU Guix --- Functional package management for GNU - Copyright (C) 2013 Ludovic Courtès <ludo@gnu.org> + Copyright (C) 2013, 2014 Ludovic Courtès <ludo@gnu.org> Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012, 2013 Eelco Dolstra <eelco.dolstra@logicblox.com> @@ -133,10 +133,13 @@ register_validity (LocalStore *store, std::istream &input, if (info.path == "") break; - /* Rewrite the input to refer final name, as if we were in a chroot - under PREFIX. */ - std::string final_prefix (NIX_STORE_DIR "/"); - info.path = final_prefix + baseNameOf (info.path); + if (!prefix.empty ()) + { + /* Rewrite the input to refer to the final name, as if we were in a + chroot under PREFIX. */ + std::string final_prefix (NIX_STORE_DIR "/"); + info.path = final_prefix + baseNameOf (info.path); + } /* Keep its real path to canonicalize it and compute its hash. */ std::string real_path; @@ -165,6 +168,9 @@ register_validity (LocalStore *store, std::istream &input, int main (int argc, char *argv[]) { + /* Honor the environment variables, and initialize the settings. */ + settings.processEnvironment (); + try { argp_parse (&argp, argc, argv, 0, 0, 0); @@ -173,10 +179,11 @@ main (int argc, char *argv[]) 'settings.nixStore', 'settings.nixDBPath', etc. */ LocalStore store; - /* Under the --prefix tree, the final name of the store will be - NIX_STORE_DIR. Set it here so that the database uses file names - prefixed by NIX_STORE_DIR and not PREFIX + NIX_STORE_DIR. */ - settings.nixStore = NIX_STORE_DIR; + if (!prefix.empty ()) + /* Under the --prefix tree, the final name of the store will be + NIX_STORE_DIR. Set it here so that the database uses file names + prefixed by NIX_STORE_DIR and not PREFIX + NIX_STORE_DIR. */ + settings.nixStore = NIX_STORE_DIR; register_validity (&store, *input); } diff --git a/tests/guix-register.sh b/tests/guix-register.sh index ca28fb0d95..ee633af4f9 100644 --- a/tests/guix-register.sh +++ b/tests/guix-register.sh @@ -1,5 +1,5 @@ # GNU Guix --- Functional package management for GNU -# Copyright © 2013 Ludovic Courtès <ludo@gnu.org> +# Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org> # # This file is part of GNU Guix. # @@ -29,6 +29,33 @@ rm -rf "$new_store" exit_hook=":" trap "chmod -R +w $new_store ; rm -rf $new_store $closure ; \$exit_hook" EXIT +# +# Registering items in the current store---i.e., without '--prefix'. +# + +new_file="$NIX_STORE_DIR/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-guix-register-$$" +echo "Fake store file to test registration." > "$new_file" + +# Register the file with zero references and no deriver. +guix-register <<EOF +$new_file + +0 +EOF + +# Make sure it's valid, and delete it. +guile -c " + (use-modules (guix store)) + (define s (open-connection)) + (exit (and (valid-path? s \"$new_file\") + (null? (references s \"$new_file\")) + (pair? (delete-paths s (list \"$new_file\")))))" + + +# +# Registering items in a new store, with '--prefix'. +# + mkdir -p "$new_store/$storedir" new_store_dir="`cd "$new_store/$storedir" ; pwd`" new_store="`cd "$new_store" ; pwd`" |