unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
* [bug#43581] [PATCH] guix build: Add '--without-tests'.
@ 2020-09-23 20:42 Ludovic Courtès
  2020-09-23 21:05 ` Jan Nieuwenhuizen
  2020-09-23 21:37 ` [bug#43581] " Ricardo Wurmus
  0 siblings, 2 replies; 4+ messages in thread
From: Ludovic Courtès @ 2020-09-23 20:42 UTC (permalink / raw)
  To: 43581; +Cc: Ludovic Courtès

* guix/scripts/build.scm (transform-package-tests): New procedure.
(%transformations, %transformation-options)
show-transformation-options-help): Add it.
* tests/scripts-build.scm ("options->transformation, without-tests"):
New test.
* doc/guix.texi (Package Transformation Options): Document it.
---
 doc/guix.texi           | 22 ++++++++++++++++++++++
 guix/scripts/build.scm  | 31 ++++++++++++++++++++++++++++---
 tests/scripts-build.scm | 14 ++++++++++++++
 3 files changed, 64 insertions(+), 3 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 949551a163..67d0a70ae0 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -9270,6 +9270,28 @@ guix build --with-branch=guile-sqlite3=master cuirass
 This is similar to @option{--with-branch}, except that it builds from
 @var{commit} rather than the tip of a branch.  @var{commit} must be a valid
 Git commit SHA1 identifier or a tag.
+
+@cindex test suite, skipping
+@item --without-tests=@var{package}
+Build @var{package} without running its tests.  This can be useful in
+situations where you want to skip the lengthy test suite of a
+intermediate package, or if a package's test suite fails in a
+non-deterministic fashion.  It should be used with care because running
+the test suite is a good way to ensure a package is working as intended.
+
+Turning off tests leads to a different store item.  Consequently, when
+using this option, anything that depends on @var{package} must be
+rebuilt, as in this example:
+
+@example
+guix install --without-tests=python python-notebook
+@end example
+
+The command above installs @code{python-notebook} on top of
+@code{python} built without running its test suite.  To do so, it also
+rebuilds everything that depends on @code{python}, including
+@code{python-notebook} itself.
+
 @end table
 
 @node Additional Build Options
diff --git a/guix/scripts/build.scm b/guix/scripts/build.scm
index 38e0516c95..f238e9b876 100644
--- a/guix/scripts/build.scm
+++ b/guix/scripts/build.scm
@@ -393,6 +393,25 @@ a checkout of the Git repository at the given URL."
         (rewrite obj)
         obj)))
 
+(define (transform-package-tests specs)
+  "Return a procedure that, when passed a package, sets #:tests? #f in its
+'arguments' field."
+  (define (package-without-tests p)
+    (package/inherit p
+      (arguments
+       (substitute-keyword-arguments (package-arguments p)
+         ((#:tests? _ #f) #f)))))
+
+  (define rewrite
+    (package-input-rewriting/spec (map (lambda (spec)
+                                         (cons spec package-without-tests))
+                                       specs)))
+
+  (lambda (store obj)
+    (if (package? obj)
+        (rewrite obj)
+        obj)))
+
 (define %transformations
   ;; Transformations that can be applied to things to build.  The car is the
   ;; key used in the option alist, and the cdr is the transformation
@@ -403,7 +422,8 @@ a checkout of the Git repository at the given URL."
     (with-graft  . ,transform-package-inputs/graft)
     (with-branch . ,transform-package-source-branch)
     (with-commit . ,transform-package-source-commit)
-    (with-git-url . ,transform-package-source-git-url)))
+    (with-git-url . ,transform-package-source-git-url)
+    (without-tests . ,transform-package-tests)))
 
 (define %transformation-options
   ;; The command-line interface to the above transformations.
@@ -423,7 +443,9 @@ a checkout of the Git repository at the given URL."
           (option '("with-commit") #t #f
                   (parser 'with-commit))
           (option '("with-git-url") #t #f
-                  (parser 'with-git-url)))))
+                  (parser 'with-git-url))
+          (option '("without-tests") #t #f
+                  (parser 'without-tests)))))
 
 (define (show-transformation-options-help)
   (display (G_ "
@@ -443,7 +465,10 @@ a checkout of the Git repository at the given URL."
                          build PACKAGE from COMMIT"))
   (display (G_ "
       --with-git-url=PACKAGE=URL
-                         build PACKAGE from the repository at URL")))
+                         build PACKAGE from the repository at URL"))
+  (display (G_ "
+      --without-tests=PACKAGE
+                         build PACKAGE without running its tests")))
 
 
 (define (options->transformation opts)
diff --git a/tests/scripts-build.scm b/tests/scripts-build.scm
index 32876e956a..12114fc8f5 100644
--- a/tests/scripts-build.scm
+++ b/tests/scripts-build.scm
@@ -264,5 +264,19 @@
                        ((("x" dep3))
                         (map package-source (list dep1 dep3))))))))))))
 
+(test-assert "options->transformation, without-tests"
+  (let* ((dep (dummy-package "dep"))
+         (p   (dummy-package "foo"
+                (inputs `(("dep" ,dep)))))
+         (t   (options->transformation '((without-tests . "dep")
+                                         (without-tests . "tar")))))
+    (with-store store
+      (let ((new (t store p)))
+        (match (bag-direct-inputs (package->bag new))
+          ((("dep" dep) ("tar" tar) _ ...)
+           ;; TODO: Check whether TAR has #:tests? #f when transformations
+           ;; apply to implicit inputs.
+           (equal? (package-arguments dep)
+                   '(#:tests? #f))))))))
 
 (test-end)
-- 
2.28.0





^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [bug#43581] [PATCH] guix build: Add '--without-tests'.
  2020-09-23 20:42 [bug#43581] [PATCH] guix build: Add '--without-tests' Ludovic Courtès
@ 2020-09-23 21:05 ` Jan Nieuwenhuizen
  2020-09-27 20:58   ` bug#43581: " Ludovic Courtès
  2020-09-23 21:37 ` [bug#43581] " Ricardo Wurmus
  1 sibling, 1 reply; 4+ messages in thread
From: Jan Nieuwenhuizen @ 2020-09-23 21:05 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 43581

Ludovic Courtès writes:

Hi!

--without-tests...beautiful!

> * guix/scripts/build.scm (transform-package-tests): New procedure.
> (%transformations, %transformation-options)

Nitpick, use comma                          ^

> show-transformation-options-help): Add it.

[..]

> +Turning off tests leads to a different store item.  Consequently, when
> +using this option, anything that depends on @var{package} must be
> +rebuilt, as in this example:

This makes sense, so I'm curious about it's usefulness in practice, but
there have been several times during porting sessions where I have
disabled tests by editing the package.

[..]

Otherwise, L*G*TM :-)

Testing...

--8<---------------cut here---------------start------------->8---
23:02:36 janneke@dundal:~/src/guix/master [env]
$ time ./pre-inst-env guix build automake --without-tests=automake --verbosity=1
The following derivation will be built:
   /gnu/store/0m9qp0rf74d6sray1ip6h050fzmrrya3-automake-1.16.2.drv
building /gnu/store/0m9qp0rf74d6sray1ip6h050fzmrrya3-automake-1.16.2.drv...
|offloading build of /gnu/store/0m9qp0rf74d6sray1ip6h050fzmrrya3-automake-1.16.2.drv to 'kluit.dezyne.org'
/gnu/store/7qsz3avcfk6b6am0zj9ahsmjy8x6drxr-automake-1.16.2

real	0m14.316s
user	0m1.203s
sys	0m0.072s
23:02:55 janneke@dundal:~/src/guix/master [env]
--8<---------------cut here---------------end--------------->8---

That's pretty amazing ;-)

Greetings,
Janneke

-- 
Jan Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond http://lilypond.org
Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com




^ permalink raw reply	[flat|nested] 4+ messages in thread

* [bug#43581] [PATCH] guix build: Add '--without-tests'.
  2020-09-23 20:42 [bug#43581] [PATCH] guix build: Add '--without-tests' Ludovic Courtès
  2020-09-23 21:05 ` Jan Nieuwenhuizen
@ 2020-09-23 21:37 ` Ricardo Wurmus
  1 sibling, 0 replies; 4+ messages in thread
From: Ricardo Wurmus @ 2020-09-23 21:37 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 43581


Ludovic Courtès <ludo@gnu.org> writes:

> * guix/scripts/build.scm (transform-package-tests): New procedure.
> (%transformations, %transformation-options)
> show-transformation-options-help): Add it.
> * tests/scripts-build.scm ("options->transformation, without-tests"):
> New test.
> * doc/guix.texi (Package Transformation Options): Document it.

This looks good to me.  It’s much more convenient for the casual user
than to clone the Guix repo and to edit the package definition there, or
to extend the package collection with GUIX_PACKAGE_PATH or even a
channel.

I suppose we’d have to fix all those packages that moved the check phase
without also checking for the “#:tests?” keyword.  There are quite a few
of those that thus wouldn’t be affected by “--without-tests”.

-- 
Ricardo




^ permalink raw reply	[flat|nested] 4+ messages in thread

* bug#43581: [PATCH] guix build: Add '--without-tests'.
  2020-09-23 21:05 ` Jan Nieuwenhuizen
@ 2020-09-27 20:58   ` Ludovic Courtès
  0 siblings, 0 replies; 4+ messages in thread
From: Ludovic Courtès @ 2020-09-27 20:58 UTC (permalink / raw)
  To: Jan Nieuwenhuizen; +Cc: 43581-done

Hi,

Jan Nieuwenhuizen <janneke@gnu.org> skribis:

>> * guix/scripts/build.scm (transform-package-tests): New procedure.
>> (%transformations, %transformation-options)
>
> Nitpick, use comma                          ^
>
>> show-transformation-options-help): Add it.

Oops yes, and I forgot to fix it before pushing.  :-/

>> +Turning off tests leads to a different store item.  Consequently, when
>> +using this option, anything that depends on @var{package} must be
>> +rebuilt, as in this example:
>
> This makes sense, so I'm curious about it's usefulness in practice, but
> there have been several times during porting sessions where I have
> disabled tests by editing the package.

Yeah, that’s the typical use case.

> $ time ./pre-inst-env guix build automake --without-tests=automake --verbosity=1
> The following derivation will be built:
>    /gnu/store/0m9qp0rf74d6sray1ip6h050fzmrrya3-automake-1.16.2.drv
> building /gnu/store/0m9qp0rf74d6sray1ip6h050fzmrrya3-automake-1.16.2.drv...
> |offloading build of /gnu/store/0m9qp0rf74d6sray1ip6h050fzmrrya3-automake-1.16.2.drv to 'kluit.dezyne.org'
> /gnu/store/7qsz3avcfk6b6am0zj9ahsmjy8x6drxr-automake-1.16.2
>
> real	0m14.316s
> user	0m1.203s
> sys	0m0.072s

That’s also one of the packages I had in mind.  :-)

Ricardo Wurmus <rekado@elephly.net> skribis:

> This looks good to me.  It’s much more convenient for the casual user
> than to clone the Guix repo and to edit the package definition there, or
> to extend the package collection with GUIX_PACKAGE_PATH or even a
> channel.

Yup.

> I suppose we’d have to fix all those packages that moved the check phase
> without also checking for the “#:tests?” keyword.  There are quite a few
> of those that thus wouldn’t be affected by “--without-tests”.

Right, hopefully there aren’t too many of those.

Pushed as f458cfbcc54ed87b1a87dd9e150ea276f17eab74, thanks!

Ludo’.




^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2020-09-27 20:59 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-23 20:42 [bug#43581] [PATCH] guix build: Add '--without-tests' Ludovic Courtès
2020-09-23 21:05 ` Jan Nieuwenhuizen
2020-09-27 20:58   ` bug#43581: " Ludovic Courtès
2020-09-23 21:37 ` [bug#43581] " Ricardo Wurmus

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).