;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2024 Jelle Licht ;;; ;;; 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 . (define-module (test-npm-binary) #:use-module ((gcrypt hash) #:select ((sha256 . gcrypt-sha256))) #:use-module (guix import npm-binary) #:use-module (guix base32) #:use-module (guix tests) #:use-module (srfi srfi-64) #:use-module (ice-9 iconv) #:use-module (ice-9 match) #:export (run-test)) (define foo-json "{ \"name\": \"foo\", \"dist-tags\": { \"latest\": \"1.2.3\", \"next\": \"2.0.1-beta4\" }, \"description\": \"General purpose utilities to foo your bars\", \"homepage\": \"https://github.com/quartz/foo\", \"repository\": \"quartz/foo\", \"versions\": { \"1.2.3\": { \"name\": \"foo\", \"description\": \"General purpose utilities to foo your bars\", \"version\": \"1.2.3\", \"author\": \"Jelle Licht \", \"devDependencies\": { \"node-megabuilder\": \"^0.0.2\" }, \"dependencies\": { \"bar\": \"^0.1.0\" }, \"repository\": { \"url\": \"quartz/foo\" }, \"homepage\": \"https://github.com/quartz/foo\", \"license\": \"MIT\", \"dist\": { \"tarball\": \"https://registry.npmjs.org/foo/-/foo-1.2.3.tgz\" } } } }") (define bar-json "{ \"name\": \"bar\", \"dist-tags\": { \"latest\": \"0.1.2\" }, \"description\": \"Core module in FooBar\", \"homepage\": \"https://github.com/quartz/bar\", \"repository\": \"quartz/bar\", \"versions\": { \"0.1.2\": { \"name\": \"bar\", \"description\": \"Core module in FooBar\", \"version\": \"0.1.2\", \"author\": \"Jelle Licht \", \"repository\": { \"url\": \"quartz/bar\" }, \"homepage\": \"https://github.com/quartz/bar\", \"license\": \"MIT\", \"dist\": { \"tarball\": \"https://registry.npmjs.org/bar/-/bar-0.1.2.tgz\" } } } }") (define test-source-hash "") (define test-source "Empty file\n") (define have-guile-semver? (false-if-exception (resolve-interface '(semver)))) (test-begin "npm") (unless have-guile-semver? (test-skip 1)) (test-assert "npm-binary->guix-package" (mock ((guix http-client) http-fetch (lambda* (url #:rest _) (match url ("https://registry.npmjs.org/foo" (values (open-input-string foo-json) (string-length foo-json))) ("https://registry.npmjs.org/bar" (values (open-input-string bar-json) (string-length bar-json))) ("https://registry.npmjs.org/foo/-/foo-1.2.3.tgz" (set! test-source-hash (bytevector->nix-base32-string (gcrypt-sha256 (string->bytevector test-source "utf-8")))) (values (open-input-string test-source) (string-length test-source)))))) (match (npm-binary->guix-package "foo") (`(package (name "node-foo") (version "1.2.3") (source (origin (method url-fetch) (uri "https://registry.npmjs.org/foo/-/foo-1.2.3.tgz") (sha256 (base32 ,test-source-hash)))) (build-system node-build-system) (arguments (list #:tests? #f #:phases (gexp (modify-phases %standard-phases (delete 'build) (add-after 'patch-dependencies 'delete-dev-dependencies (lambda _ (delete-dependencies '("node-megabuilder")))))))) (inputs (list node-bar-0.1.2)) (home-page "https://github.com/quartz/foo") (synopsis "General purpose utilities to foo your bars") (description "General purpose utilities to foo your bars") (license license:expat)) #t) (x (pk 'fail x #f))))) (test-end "npm") ', or the total amount of data deleted when 'maxFreed' is ULLONG_MAX. Ludovic Courtès 2019-10-16daemon: Remove traces of 'NIX_ROOT_FINDER'....This is a followup to 2e3e5d21988fc2cafb2a9eaf4b00976ea425629d. * build-aux/test-env.in: Remove mentions of 'NIX_ROOT_FINDER'. * nix/libstore/gc.cc (LocalStore::collectGarbage): Adjust comment accordingly. Ludovic Courtès 2019-09-08daemon: Invoke 'guix gc --list-busy' instead of 'list-runtime-roots'....* nix/scripts/list-runtime-roots.in: Remove. * guix/store/roots.scm (%proc-directory): New variable. (proc-file-roots, proc-exe-roots, proc-cwd-roots) (proc-fd-roots, proc-maps-roots, proc-environ-roots) (referenced-files, canonicalize-store-item, busy-store-items): New procedures, taken from 'list-runtime-roots.in'. * nix/libstore/globals.hh (Settings)[guixProgram]: New field. * nix/libstore/globals.cc (Settings::processEnvironment): Initialize 'guixProgram'. * nix/libstore/gc.cc (addAdditionalRoots): Drop code related to 'NIX_ROOT_FINDER'. Run "guix gc --list-busy". * nix/local.mk (nodist_pkglibexec_SCRIPTS): Remove 'scripts/list-runtime-roots'. * config-daemon.ac: Don't output nix/scripts/list-runtime-roots. * build-aux/pre-inst-env.in: Don't set 'NIX_ROOT_FINDER'. Set 'GUIX'. * doc/guix.texi (Invoking guix gc): Document '--list-busy'. * guix/scripts/gc.scm (show-help, %options): Add "--list-busy". (guix-gc)[list-busy]: New procedure. Handle the 'list-busy' action. Ludovic Courtès 2019-08-30daemon: Don't reply on 'st_blocks'....Ported by Ludovic Courtès <ludo@gnu.org> from <https://github.com/NixOS/nix/commit/a2c4fcd5e9782dc8d2998773380c7171ee53b813>. * nix/libstore/gc.cc (LocalStore::removeUnusedLinks): Use 'st.st_size' instead of 'st.st_blocks * 512'. * nix/libutil/util.cc (_deletePath): Likewise. Eelco Dolstra