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.
This commit is contained in:
parent
5674a3fdb6
commit
349fd3b11f
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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`"
|
||||
|
|
Loading…
Reference in New Issue