aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2018-06-08 11:03:31 +0200
committerLudovic Courtès <ludo@gnu.org>2018-06-14 11:17:00 +0200
commitea0a06cee2ba05451f94714a4f913db02efbe92c (patch)
tree8447b4531818371310470446a17f77d313bb991a
parentdf2f6400b1fbc282ef4d6dd7124ea1c17adc23c2 (diff)
downloadgnu-guix-ea0a06cee2ba05451f94714a4f913db02efbe92c.tar
gnu-guix-ea0a06cee2ba05451f94714a4f913db02efbe92c.tar.gz
Remove 'guix-register' and its traces.
* Makefile.am (SH_TESTS): Remove tests/guix-register.sh. * build-aux/pre-inst-env.in (GUIX_REGISTER): Remove. * gnu/build/install.scm (directives): Remove outdated comment. * gnu/build/vm.scm (root-partition-initializer): Update comment. * gnu/packages/package-management.scm (guix-register): Remove. * guix/config.scm.in (%sbindir, %guix-register-program): Remove. * guix/scripts/system.scm (install): Adjust docstring. * guix/self.scm (make-config.scm): Remove #:guix. Do not generate %sbindir and %guix-register-program. (specification->package): Remove "guix". * nix/guix-register/guix-register.cc: Remove. * nix/libstore/store-api.cc (decodeValidPathInfo): Remove. * nix/libstore/store-api.hh (decodeValidPathInfo): Remove declaration. * nix/local.mk (sbin_PROGRAMS, guix_register_SOURCES) (guix_register_CPPFLAGS, guix_register_LDFLAGS): Remove. * tests/guix-register.sh: Remove.
-rw-r--r--.gitignore1
-rw-r--r--Makefile.am7
-rw-r--r--build-aux/pre-inst-env.in6
-rw-r--r--gnu/build/install.scm3
-rw-r--r--gnu/build/vm.scm4
-rw-r--r--gnu/packages/package-management.scm36
-rw-r--r--guix/config.scm.in12
-rw-r--r--guix/scripts/system.scm2
-rw-r--r--guix/self.scm21
-rw-r--r--nix/guix-register/guix-register.cc254
-rw-r--r--nix/libstore/store-api.cc26
-rw-r--r--nix/libstore/store-api.hh4
-rw-r--r--nix/local.mk16
-rw-r--r--tests/guix-register.sh191
14 files changed, 7 insertions, 576 deletions
diff --git a/.gitignore b/.gitignore
index e2568ed5fe..35d50b35af 100644
--- a/.gitignore
+++ b/.gitignore
@@ -69,7 +69,6 @@
/etc/guix-publish.conf
/etc/guix-publish.service
/guix-daemon
-/guix-register
/guix/config.scm
/libformat.a
/libstore.a
diff --git a/Makefile.am b/Makefile.am
index f4cdba94a2..61a19b6b9e 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -405,13 +405,6 @@ SH_TESTS = \
tests/guix-graph.sh \
tests/guix-lint.sh
-if BUILD_DAEMON
-
-SH_TESTS += tests/guix-register.sh
-
-endif BUILD_DAEMON
-
-
TESTS = $(SCM_TESTS) $(SH_TESTS)
AM_TESTS_ENVIRONMENT = abs_top_srcdir="$(abs_top_srcdir)" GUILE_AUTO_COMPILE=0
diff --git a/build-aux/pre-inst-env.in b/build-aux/pre-inst-env.in
index 14315d40d4..286a81591c 100644
--- a/build-aux/pre-inst-env.in
+++ b/build-aux/pre-inst-env.in
@@ -1,7 +1,7 @@
#!/bin/sh
# GNU Guix --- Functional package management for GNU
-# Copyright © 2012, 2013, 2014, 2015, 2017 Ludovic Courtès <ludo@gnu.org>
+# Copyright © 2012, 2013, 2014, 2015, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
# Copyright © 2017 Eric Bavier <bavier@cray.com>
#
# This file is part of GNU Guix.
@@ -55,10 +55,6 @@ NIX_BUILD_HOOK="$abs_top_builddir/nix/scripts/offload"
@BUILD_DAEMON_OFFLOAD_FALSE@# No offloading support.
@BUILD_DAEMON_OFFLOAD_FALSE@unset NIX_BUILD_HOOK
-# The 'guix-register' program.
-GUIX_REGISTER="$abs_top_builddir/guix-register"
-export GUIX_REGISTER
-
# The following variables need only be defined when compiling Guix
# modules, but we define them to be on the safe side in case of
# auto-compilation.
diff --git a/gnu/build/install.scm b/gnu/build/install.scm
index 06ecb39952..5a5e703872 100644
--- a/gnu/build/install.scm
+++ b/gnu/build/install.scm
@@ -110,9 +110,6 @@ STORE."
("/var/guix/gcroots/booted-system" -> "/run/booted-system")
("/var/guix/gcroots/current-system" -> "/run/current-system")
-
- ;; XXX: 'guix-register' creates this symlink with a wrong target, so
- ;; create it upfront to be sure.
("/var/guix/gcroots/profiles" -> "/var/guix/profiles")
(directory "/bin")
diff --git a/gnu/build/vm.scm b/gnu/build/vm.scm
index 803cd5996a..73d0191de7 100644
--- a/gnu/build/vm.scm
+++ b/gnu/build/vm.scm
@@ -346,7 +346,7 @@ SYSTEM-DIRECTORY is the name of the directory of the 'system' derivation."
;; Optionally, register the inputs in the image's store.
(when register-closures?
(unless copy-closures?
- ;; XXX: 'guix-register' wants to palpate the things it registers, so
+ ;; XXX: 'register-closure' wants to palpate the things it registers, so
;; bind-mount the store on the target.
(mkdir-p target-store)
(mount (%store-directory) target-store "" MS_BIND))
@@ -365,7 +365,7 @@ SYSTEM-DIRECTORY is the name of the directory of the 'system' derivation."
(display "populating...\n")
(populate-root-file-system system-directory target)
- ;; 'guix-register' resets timestamps and everything, so no need to do it
+ ;; 'register-closure' resets timestamps and everything, so no need to do it
;; once more in that case.
(unless register-closures?
(reset-timestamps target))))
diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index 786d2a53e9..24cf3ad015 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -294,42 +294,6 @@ the Nix package manager.")
;; Alias for backward compatibility.
(define-public guix-devel guix)
-(define-public guix-register
- ;; This package is for internal consumption: it allows us to quickly build
- ;; the 'guix-register' program, which is referred to by (guix config).
- ;; TODO: Remove this hack when 'guix-register' has been superseded by Scheme
- ;; code.
- (package
- (inherit guix)
- (properties `((hidden? . #t)))
- (name "guix-register")
-
- ;; Use a minimum set of dependencies.
- (native-inputs
- (fold alist-delete (package-native-inputs guix)
- '("po4a" "graphviz" "help2man")))
- (propagated-inputs
- `(("gnutls" ,gnutls)
- ("guile-git" ,guile-git)))
-
- (arguments
- (substitute-keyword-arguments (package-arguments guix)
- ((#:tests? #f #f)
- #f)
- ((#:phases phases '%standard-phases)
- `(modify-phases ,phases
- (replace 'build
- (lambda _
- (invoke "make" "nix/libstore/schema.sql.hh")
- (invoke "make" "-j" (number->string
- (parallel-job-count))
- "guix-register")))
- (delete 'copy-bootstrap-guile)
- (replace 'install
- (lambda _
- (invoke "make" "install-sbinPROGRAMS")))
- (delete 'wrap-program)))))))
-
(define-public guile2.0-guix
(package
(inherit guix)
diff --git a/guix/config.scm.in b/guix/config.scm.in
index aeea81bd3f..4490112e07 100644
--- a/guix/config.scm.in
+++ b/guix/config.scm.in
@@ -1,5 +1,5 @@
;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2012, 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2018 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2017 Caleb Ristvedt <caleb.ristvedt@cune.org>
;;;
;;; This file is part of GNU Guix.
@@ -26,13 +26,11 @@
%storedir
%localstatedir
%sysconfdir
- %sbindir
%store-directory
%state-directory
%store-database-directory
%config-directory
- %guix-register-program
%system
%libgcrypt
@@ -70,9 +68,6 @@
(define %sysconfdir
"@guix_sysconfdir@")
-(define %sbindir
- "@guix_sbindir@")
-
(define %store-directory
(or (and=> (getenv "NIX_STORE_DIR") canonicalize-path)
%storedir))
@@ -91,11 +86,6 @@
(or (getenv "GUIX_CONFIGURATION_DIRECTORY")
(string-append %sysconfdir "/guix")))
-(define %guix-register-program
- ;; The 'guix-register' program.
- (or (getenv "GUIX_REGISTER")
- (string-append %sbindir "/guix-register")))
-
(define %system
"@guix_system@")
diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm
index 9112177bfb..727f1ac55f 100644
--- a/guix/scripts/system.scm
+++ b/guix/scripts/system.scm
@@ -198,7 +198,7 @@ TARGET, and register them."
bootcfg bootcfg-file)
"Copy the closure of BOOTCFG, which includes the output of OS-DRV, to
directory TARGET. TARGET must be an absolute directory name since that's what
-'guix-register' expects.
+'register-path' expects.
When INSTALL-BOOTLOADER? is true, install bootloader using BOOTCFG."
(define (maybe-copy to-copy)
diff --git a/guix/self.scm b/guix/self.scm
index ed3f31cdbc..3023ae379b 100644
--- a/guix/self.scm
+++ b/guix/self.scm
@@ -89,8 +89,6 @@ GUILE-VERSION (\"2.0\" or \"2.2\"), or #f if none of the packages matches."
("gzip" (ref '(gnu packages compression) 'gzip))
("bzip2" (ref '(gnu packages compression) 'bzip2))
("xz" (ref '(gnu packages compression) 'xz))
- ("guix" (ref '(gnu packages package-management)
- 'guix-register))
("guile2.0-json" (ref '(gnu packages guile) 'guile2.0-json))
("guile2.0-ssh" (ref '(gnu packages ssh) 'guile2.0-ssh))
("guile2.0-git" (ref '(gnu packages guile) 'guile2.0-git))
@@ -565,7 +563,6 @@ the modules, and DEPENDENCIES, a list of packages depended on. COMMAND is the
#:gzip gzip
#:bzip2 bzip2
#:xz xz
- #:guix guix
#:package-name
%guix-package-name
#:package-version
@@ -630,8 +627,7 @@ the modules, and DEPENDENCIES, a list of packages depended on. COMMAND is the
(define %dependency-variables
;; (guix config) variables corresponding to dependencies.
- '(%libgcrypt %libz %xz %gzip %bzip2 %nix-instantiate
- %sbindir %guix-register-program))
+ '(%libgcrypt %libz %xz %gzip %bzip2 %nix-instantiate))
(define %persona-variables
;; (guix config) variables that define Guix's persona.
@@ -653,7 +649,7 @@ the modules, and DEPENDENCIES, a list of packages depended on. COMMAND is the
(string<? (symbol->string (car name+value1))
(symbol->string (car name+value2))))))
-(define* (make-config.scm #:key libgcrypt zlib gzip xz bzip2 guix
+(define* (make-config.scm #:key libgcrypt zlib gzip xz bzip2
(package-name "GNU Guix")
(package-version "0")
(bug-report-address "bug-guix@gnu.org")
@@ -669,8 +665,6 @@ the modules, and DEPENDENCIES, a list of packages depended on. COMMAND is the
%guix-version
%guix-bug-report-address
%guix-home-page-url
- %sbindir
- %guix-register-program
%libgcrypt
%libz
%gzip
@@ -688,17 +682,6 @@ the modules, and DEPENDENCIES, a list of packages depended on. COMMAND is the
(define %guix-bug-report-address #$bug-report-address)
(define %guix-home-page-url #$home-page-url)
- (define %sbindir
- ;; This is used to define '%guix-register-program'.
- ;; TODO: Use a derivation that builds nothing but the
- ;; C++ part.
- #+(and guix (file-append guix "/sbin")))
-
- (define %guix-register-program
- (or (getenv "GUIX_REGISTER")
- (and %sbindir
- (string-append %sbindir "/guix-register"))))
-
(define %gzip
#+(and gzip (file-append gzip "/bin/gzip")))
(define %bzip2
diff --git a/nix/guix-register/guix-register.cc b/nix/guix-register/guix-register.cc
deleted file mode 100644
index 16dae62b3d..0000000000
--- a/nix/guix-register/guix-register.cc
+++ /dev/null
@@ -1,254 +0,0 @@
-/* GNU Guix --- Functional package management for GNU
- Copyright (C) 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
- Copyright (C) 2007, 2008, 2009, 2010, 2011, 2012,
- 2013 Eelco Dolstra <eelco.dolstra@logicblox.com>
-
- This file is part of GNU Guix.
-
- GNU Guix is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or (at
- your option) any later version.
-
- GNU Guix is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. */
-
-/* This file derives from the implementation of 'nix-store
- --register-validity', by Eelco Dolstra, as found in the Nix package
- manager's src/nix-store/nix-store.cc. */
-
-#include <config.h>
-
-#include <globals.hh>
-#include <local-store.hh>
-
-#include <iostream>
-#include <fstream>
-#include <cstdlib>
-#include <cstdio>
-
-#include <argp.h>
-#include <gcrypt.h>
-
-using namespace nix;
-
-/* Input stream where we read closure descriptions. */
-static std::istream *input = &std::cin;
-
-
-
-/* Command-line options. */
-
-const char *argp_program_version =
- "guix-register (" PACKAGE_NAME ") " PACKAGE_VERSION;
-const char *argp_program_bug_address = PACKAGE_BUGREPORT;
-
-static char doc[] =
-"guix-register -- register a closure as valid in a store\
-\v\
-This program is used internally when populating a store with data \
-from an existing store. It updates the new store's database with \
-information about which store files are valid, and what their \
-references are.";
-
-#define GUIX_OPT_STATE_DIRECTORY 1
-#define GUIX_OPT_DEDUPLICATE 2
-
-static const struct argp_option options[] =
- {
- { "prefix", 'p', "DIRECTORY", 0,
- "Open the store that lies under DIRECTORY" },
- { "state-directory", GUIX_OPT_STATE_DIRECTORY, "DIRECTORY", 0,
- "Use DIRECTORY as the state directory of the target store" },
- { "no-deduplication", GUIX_OPT_DEDUPLICATE, 0, 0,
- "Disable automatic deduplication of registered store items" },
- { 0, 0, 0, 0, 0 }
- };
-
-
-/* Prefix of the store being populated. */
-static std::string prefix;
-
-/* Whether to deduplicate the registered store items. */
-static bool deduplication = true;
-
-/* Parse a single option. */
-static error_t
-parse_opt (int key, char *arg, struct argp_state *state)
-{
- switch (key)
- {
- case 'p':
- {
- prefix = canonPath (arg);
- settings.nixStore = prefix + NIX_STORE_DIR;
- settings.nixDataDir = prefix + NIX_DATA_DIR;
- settings.nixLogDir = prefix + NIX_LOG_DIR;
- settings.nixStateDir = prefix + NIX_STATE_DIR;
- settings.nixDBPath = settings.nixStateDir + "/db";
- break;
- }
-
- case GUIX_OPT_STATE_DIRECTORY:
- {
- string state_dir = canonPath (arg);
-
- settings.nixStateDir = state_dir;
- settings.nixDBPath = state_dir + "/db";
- break;
- }
-
- case GUIX_OPT_DEDUPLICATE:
- deduplication = false;
- break;
-
- case ARGP_KEY_ARG:
- {
- std::ifstream *file;
-
- if (state->arg_num >= 2)
- /* Too many arguments. */
- argp_usage (state);
-
- file = new std::ifstream ();
- file->open (arg);
-
- input = file;
- }
- break;
-
- default:
- return (error_t) ARGP_ERR_UNKNOWN;
- }
-
- return (error_t) 0;
-}
-
-/* Argument parsing. */
-static struct argp argp = { options, parse_opt, 0, doc };
-
-
-/* Read from INPUT the description of a closure, and register it as valid in
- STORE. The expected format on INPUT is that used by #:references-graphs:
-
- FILE
- DERIVER
- NUMBER-OF-REFERENCES
- REF1
- ...
- REFN
-
- This is really meant as an internal format. */
-static void
-register_validity (LocalStore *store, std::istream &input,
- bool optimize = true,
- bool reregister = true, bool hashGiven = false,
- bool canonicalise = true)
-{
- ValidPathInfos infos;
-
- while (1)
- {
- ValidPathInfo info = decodeValidPathInfo (input, hashGiven);
- if (info.path == "")
- break;
-
- 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;
- real_path = prefix + "/" + settings.nixStore + "/" + baseNameOf (info.path);
-
- if (!store->isValidPath (info.path) || reregister)
- {
- /* !!! races */
- if (canonicalise)
- canonicalisePathMetaData (real_path, -1);
-
- if (!hashGiven)
- {
- HashResult hash = hashPath (htSHA256, real_path);
- info.hash = hash.first;
- info.narSize = hash.second;
- }
- infos.push_back (info);
- }
- }
-
- store->registerValidPaths (infos);
-
- /* XXX: When PREFIX is non-empty, store->linksDir points to the original
- store's '.links' directory, which means 'optimisePath' would try to link
- to that instead of linking to the target store. Thus, disable
- deduplication in this case. */
- if (optimize)
- {
- /* Make sure deduplication is enabled. */
- settings.autoOptimiseStore = true;
-
- std::string store_dir = settings.nixStore;
-
- /* 'optimisePath' creates temporary links under 'settings.nixStore' and
- this must be the real target store, under PREFIX, to avoid
- cross-device links. Thus, temporarily switch the value of
- 'settings.nixStore'. */
- settings.nixStore = prefix + store_dir;
- for (auto&& i: infos)
- store->optimisePath (prefix + i.path);
- settings.nixStore = store_dir;
- }
-}
-
-
-int
-main (int argc, char *argv[])
-{
- /* Initialize libgcrypt, which is indirectly used. */
- if (!gcry_check_version (GCRYPT_VERSION))
- {
- fprintf (stderr, "error: libgcrypt version mismatch\n");
- exit (EXIT_FAILURE);
- }
-
- /* Tell Libgcrypt that initialization has completed, as per the Libgcrypt
- 1.6.0 manual (although this does not appear to be strictly needed.) */
- gcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0);
-
- /* Honor the environment variables, and initialize the settings. */
- settings.processEnvironment ();
-
- try
- {
- argp_parse (&argp, argc, argv, 0, 0, 0);
-
- /* Instantiate the store. This creates any missing directories among
- 'settings.nixStore', 'settings.nixDBPath', etc. */
- LocalStore store;
-
- 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, deduplication);
- }
- catch (std::exception &e)
- {
- fprintf (stderr, "error: %s\n", e.what ());
- return EXIT_FAILURE;
- }
-
- return EXIT_SUCCESS;
-}
diff --git a/nix/libstore/store-api.cc b/nix/libstore/store-api.cc
index 6742d2ed49..9e07c67e97 100644
--- a/nix/libstore/store-api.cc
+++ b/nix/libstore/store-api.cc
@@ -226,32 +226,6 @@ string StoreAPI::makeValidityRegistration(const PathSet & paths,
return s;
}
-
-ValidPathInfo decodeValidPathInfo(std::istream & str, bool hashGiven)
-{
- ValidPathInfo info;
- getline(str, info.path);
- if (str.eof()) { info.path = ""; return info; }
- if (hashGiven) {
- string s;
- getline(str, s);
- info.hash = parseHash(htSHA256, s);
- getline(str, s);
- if (!string2Int(s, info.narSize)) throw Error("number expected");
- }
- getline(str, info.deriver);
- string s; int n;
- getline(str, s);
- if (!string2Int(s, n)) throw Error("number expected");
- while (n--) {
- getline(str, s);
- info.references.insert(s);
- }
- if (!str || str.eof()) throw Error("missing input");
- return info;
-}
-
-
string showPaths(const PathSet & paths)
{
string s;
diff --git a/nix/libstore/store-api.hh b/nix/libstore/store-api.hh
index e957cedebc..2d9dcbd573 100644
--- a/nix/libstore/store-api.hh
+++ b/nix/libstore/store-api.hh
@@ -371,10 +371,6 @@ std::shared_ptr<StoreAPI> openStore(bool reserveSpace = true);
string showPaths(const PathSet & paths);
-ValidPathInfo decodeValidPathInfo(std::istream & str,
- bool hashGiven = false);
-
-
/* Export multiple paths in the format expected by ‘nix-store
--import’. */
void exportPaths(StoreAPI & store, const Paths & paths,
diff --git a/nix/local.mk b/nix/local.mk
index b4c6ba61a4..140c78df37 100644
--- a/nix/local.mk
+++ b/nix/local.mk
@@ -120,7 +120,6 @@ libstore_a_CXXFLAGS = $(AM_CXXFLAGS) \
$(SQLITE3_CFLAGS) $(LIBGCRYPT_CFLAGS)
bin_PROGRAMS = guix-daemon
-sbin_PROGRAMS = guix-register
guix_daemon_SOURCES = \
%D%/nix-daemon/nix-daemon.cc \
@@ -138,24 +137,9 @@ guix_daemon_LDADD = \
guix_daemon_headers = \
%D%/nix-daemon/shared.hh
-
-guix_register_SOURCES = \
- %D%/guix-register/guix-register.cc
-
-guix_register_CPPFLAGS = \
- $(libutil_a_CPPFLAGS) \
- $(libstore_a_CPPFLAGS) \
- -I$(top_srcdir)/%D%/libstore
-
-# XXX: Should we start using shared libs?
-guix_register_LDADD = \
- libstore.a libutil.a libformat.a -lz \
- $(SQLITE3_LIBS) $(LIBGCRYPT_LIBS)
-
if HAVE_LIBBZ2
guix_daemon_LDADD += -lbz2
-guix_register_LDADD += -lbz2
endif HAVE_LIBBZ2
diff --git a/tests/guix-register.sh b/tests/guix-register.sh
deleted file mode 100644
index 521735b8a4..0000000000
--- a/tests/guix-register.sh
+++ /dev/null
@@ -1,191 +0,0 @@
-# GNU Guix --- Functional package management for GNU
-# Copyright © 2013, 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
-#
-# This file is part of GNU Guix.
-#
-# GNU Guix is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or (at
-# your option) any later version.
-#
-# GNU Guix is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
-
-#
-# Test the 'guix-register' command-line utility.
-#
-
-guix-register --version
-
-new_store="t-register-$$"
-closure="t-register-closure-$$"
-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
-
-# Register an idendical file, and make sure it gets deduplicated.
-new_file2="$new_file-duplicate"
-cat "$new_file" > "$new_file2"
-guix-register <<EOF
-$new_file2
-
-0
-EOF
-
-guile -c "
- (exit (= (stat:ino (stat \"$new_file\"))
- (stat:ino (stat \"$new_file2\"))))"
-
-# Make sure both are valid.
-guile -c "
- (use-modules (guix store))
- (define s (open-connection))
- (exit (and (valid-path? s \"$new_file\")
- (valid-path? s \"$new_file2\")
- (null? (references s \"$new_file\"))
- (null? (references s \"$new_file2\"))))"
-
-
-#
-# Registering items in a new store, with '--prefix'.
-#
-
-mkdir -p "$new_store/$storedir"
-new_store_dir="`cd "$new_store/$storedir" ; pwd -P`"
-new_store="`cd "$new_store" ; pwd -P`"
-
-to_copy="`guix build guile-bootstrap`"
-cp -r "$to_copy" "$new_store_dir"
-copied="$new_store_dir/`basename $to_copy`"
-
-# Create a file representing a closure with zero references, and with an empty
-# "deriver" field. Note that we give the file name as it appears in the
-# original store, and 'guix-register' translates it to match the prefix.
-cat >> "$closure" <<EOF
-$to_copy
-
-0
-EOF
-
-# Register it.
-guix-register -p "$new_store" < "$closure"
-
-# Doing it a second time shouldn't hurt.
-guix-register --prefix "$new_store" "$closure"
-
-# Same, but with the database stored in a different place.
-guix-register -p "$new_store" \
- --state-directory "$new_store/chbouib" "$closure"
-
-# Register duplicate files.
-cp "$new_file" "$new_file2" "$new_store_dir"
-guix-register -p "$new_store" <<EOF
-$new_file
-
-0
-EOF
-guix-register -p "$new_store" <<EOF
-$new_file2
-
-0
-EOF
-
-copied_duplicate1="$new_store_dir/`basename $new_file`"
-copied_duplicate2="$new_store_dir/`basename $new_file2`"
-
-# Make sure there is indeed deduplication under $new_store and that there are
-# no cross-store hard links.
-guile -c "
- (exit (and (= (stat:ino (stat \"$copied_duplicate1\"))
- (stat:ino (stat \"$copied_duplicate2\")))
- (not (= (stat:ino (stat \"$new_file\"))
- (stat:ino (stat \"$copied_duplicate1\"))))))"
-
-# Delete them.
-guix gc -d "$new_file" "$new_file2"
-
-# Now make sure this is recognized as valid.
-
-ls -R "$new_store"
-for state_dir in "$localstatedir/guix" "/chbouib"
-do
- NIX_STORE_DIR="$new_store_dir"
- NIX_STATE_DIR="$new_store$state_dir"
- NIX_LOG_DIR="$new_store$state_dir/log/guix"
- NIX_DB_DIR="$new_store$state_dir/db"
- GUIX_DAEMON_SOCKET="$NIX_STATE_DIR/daemon-socket/socket"
-
- export NIX_IGNORE_SYMLINK_STORE NIX_STORE_DIR NIX_STATE_DIR \
- NIX_LOG_DIR NIX_DB_DIR GUIX_DAEMON_SOCKET
-
- # Check whether we overflow the limitation on local socket name lengths.
- if [ `echo "$GUIX_DAEMON_SOCKET" | wc -c` -ge 108 ]
- then
- # Mark the test as skipped even though we already did some work so
- # that the remainder is not silently skipped.
- exit 77
- fi
-
- guix-daemon --disable-chroot &
- subdaemon_pid=$!
- exit_hook="kill $subdaemon_pid"
-
- final_name="$storedir/`basename $to_copy`"
-
- # At this point the copy in $new_store must be valid, and unreferenced.
- # The database under $NIX_DB_DIR uses the $final_name, but we can't use
- # that name in a 'valid-path?' query because 'assertStorePath' would kill
- # us because of the wrong prefix. So we just list dead paths instead.
- guile -c "
- (use-modules (guix store) (srfi srfi-1) (srfi srfi-34))
-
- (define s
- (let loop ((i 5))
- (guard (c ((nix-connection-error? c)
- (if (<= i 0)
- (raise c)
- (begin
- (display \"waiting for daemon socket...\")
- (newline)
- (sleep 1)
- (loop (- i 1))))))
- (open-connection \"$GUIX_DAEMON_SOCKET\"))))
-
- (exit (lset= string=?
- (pk 1 (list \"$copied\" \"$copied_duplicate1\"
- \"$copied_duplicate2\"))
- (pk 2 (dead-paths s))))"
-
- # Kill the daemon so we can access the database below (otherwise we may
- # get "database is locked" errors.)
- kill $subdaemon_pid
- exit_hook=":"
- while kill -0 $subdaemon_pid ; do sleep 0.5 ; done
-
- # When 'sqlite3' is available, check the name in the database.
- if type -P sqlite3
- then
- echo "select * from ValidPaths where path=\"$final_name\";" | \
- sqlite3 "$NIX_DB_DIR/db.sqlite"
- fi
-done