Ver a proveniência

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.
gn-latest-20200428
Ludovic Courtès há 2 anos
ascendente
cometimento
ea0a06cee2
Não foi encontrada uma chave conhecida para esta assinatura, na base de dados ID da chave GPG: 90B11993D9AEBB5
14 ficheiros alterados com 7 adições e 576 eliminações
  1. +0
    -1
      .gitignore
  2. +0
    -7
      Makefile.am
  3. +1
    -5
      build-aux/pre-inst-env.in
  4. +0
    -3
      gnu/build/install.scm
  5. +2
    -2
      gnu/build/vm.scm
  6. +0
    -36
      gnu/packages/package-management.scm
  7. +1
    -11
      guix/config.scm.in
  8. +1
    -1
      guix/scripts/system.scm
  9. +2
    -19
      guix/self.scm
  10. +0
    -254
      nix/guix-register/guix-register.cc
  11. +0
    -26
      nix/libstore/store-api.cc
  12. +0
    -4
      nix/libstore/store-api.hh
  13. +0
    -16
      nix/local.mk
  14. +0
    -191
      tests/guix-register.sh

+ 0
- 1
.gitignore Ver ficheiro

@@ -69,7 +69,6 @@
/etc/guix-publish.conf
/etc/guix-publish.service
/guix-daemon
/guix-register
/guix/config.scm
/libformat.a
/libstore.a


+ 0
- 7
Makefile.am Ver ficheiro

@@ -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


+ 1
- 5
build-aux/pre-inst-env.in Ver ficheiro

@@ -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.


+ 0
- 3
gnu/build/install.scm Ver ficheiro

@@ -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")


+ 2
- 2
gnu/build/vm.scm Ver ficheiro

@@ -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))))


+ 0
- 36
gnu/packages/package-management.scm Ver ficheiro

@@ -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)


+ 1
- 11
guix/config.scm.in Ver ficheiro

@@ -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@")



+ 1
- 1
guix/scripts/system.scm Ver ficheiro

@@ -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)


+ 2
- 19
guix/self.scm Ver ficheiro

@@ -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


+ 0
- 254
nix/guix-register/guix-register.cc Ver ficheiro

@@ -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;
}

+ 0
- 26
nix/libstore/store-api.cc Ver ficheiro

@@ -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;


+ 0
- 4
nix/libstore/store-api.hh Ver ficheiro

@@ -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,


+ 0
- 16
nix/local.mk Ver ficheiro

@@ -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



+ 0
- 191
tests/guix-register.sh Ver ficheiro

@@ -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

Carregando…
Cancelar
Guardar