Subject: [bug#36599] [PATCH] gnu: Add node-semver. (Updated)

From: [email-masked]
Date: Wed, 15 Apr 2020 15:36:06 +0000

Hi Efraim,

> Overall it looks good to me. I also checked npm¹ and it agrees that
> there are no dependencies for this package. Do you happen to know why
> there's a test directory installed? I don't know if it's supposed to be
> there but it seems strange to me

I didn't notice and I agree that tests shouldn't be installed but IIUC 
it's a limitation of the node-build-system that copies recursively the 
contents of the node_modules directory. I checked and it seems that 
other packages using the node-build-system have the same problem (i.e. 
node-color-name install test.js, node-far installs a test directory). 
One way to fix this could be adding an extra phase (either to each 
package or in the node-build-system with a special field indicating a 
list of tests directories) where we delete the test directory from  
node_modules preventing the copy.

On my system I get

orang3@frastanato ~/code/guix [env]$ du -sh 
/gnu/store/5kkb1nya9ws12b2qxsn0r7904nx6v5b5-node-semver-7.2.1
732K    /gnu/store/5kkb1nya9ws12b2qxsn0r7904nx6v5b5-node-semver-7.2.1

orang3@frastanato ~/code/guix [env]$ du -sh 
/gnu/store/5kkb1nya9ws12b2qxsn0r7904nx6v5b5-node-semver-7.2.1/lib/node_modules/semver/test/
264K    
/gnu/store/5kkb1nya9ws12b2qxsn0r7904nx6v5b5-node-semver-7.2.1/lib/node_modules/semver/test/

which is not much but amounts nearly to 1/3 of the total disk usage of 
semver. If you believe that another phase deleting the tests would be 
better I attached an attempt.

Giacomo

From 77ffe7c3a0be8e215f4f4ae0b780385ffe39c1a2 Mon Sep 17 00:00:00 2001
From: Giacomo Leidi <[email-masked]>
Date: Wed, 8 Apr 2020 00:59:13 +0200
Subject: [PATCH]  gnu: Add node-semver.

* gnu/packages/node-xyz.scm (node-semver): New variable.
---
 gnu/packages/node-xyz.scm | 32 ++++++++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/gnu/packages/node-xyz.scm b/gnu/packages/node-xyz.scm
index 44236ec469..93328969e5 100644
--- a/gnu/packages/node-xyz.scm
+++ b/gnu/packages/node-xyz.scm
@@ -1,5 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2020 Efraim Flashner <[email-masked]>
+;;; Copyright © 2020 Giacomo Leidi <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -244,3 +245,34 @@ protocol used in @code{node-lynx}.")
     (description "This package provides the Node.js @code{util.deprecate()}
 function with browser support.")
     (license license:expat)))
+
+(define-public node-semver
+  (package
+    (name "node-semver")
+    (version "7.2.1")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/npm/node-semver.git")
+                    (commit (string-append "v" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "06biknqb05r9xsmcflm3ygh50pjvdk84x6r79w43kmck4fn3qn5p"))))
+    (build-system node-build-system)
+    (arguments
+     `(#:tests? #f ;; FIXME: Tests depend on node-tap
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'install 'delete-tests-dir
+           (lambda _
+             ;; Delete tests to prevent installing them
+             (delete-file-recursively "test")
+             (delete-file-recursively "tap-snapshots")
+             #t)))))
+    (home-page "https://github.com/npm/node-semver")
+    (synopsis "Parses semantic versions strings")
+    (description
+     "@code{node-semver} is a JavaScript implementation of the
+@uref{https://semver.org/, SemVer.org} specification.")
+    (license license:isc)))
-- 
2.26.1