summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--nix/guix-register/guix-register.cc25
-rw-r--r--tests/guix-register.sh29
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`"