~ruther/guix-local

349fd3b11f320453ad8eeb3031621d0ffcaf078d — Ludovic Courtès 12 years ago 5674a3f
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.
2 files changed, 44 insertions(+), 10 deletions(-)

M nix/guix-register/guix-register.cc
M tests/guix-register.sh
M nix/guix-register/guix-register.cc => nix/guix-register/guix-register.cc +16 -9
@@ 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);
    }

M tests/guix-register.sh => tests/guix-register.sh +28 -1
@@ 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`"