guix-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] Help Ruby packages be reproducible


From: Ricardo Wurmus
Subject: Re: [PATCH] Help Ruby packages be reproducible
Date: Wed, 30 Dec 2015 09:26:20 +0100
User-agent: mu4e 0.9.13; emacs 24.5.1

Ben Woodcroft <address@hidden> writes:

> From 3d23171d88b9f38c90efa469f6519b52b15a1d01 Mon Sep 17 00:00:00 2001
> From: Ben Woodcroft <address@hidden>
> Date: Wed, 30 Dec 2015 10:27:33 +1000
> Subject: [PATCH] build: ruby: Remove cached gem after install.

> The .gem file stored in GEM_HOME after install is both redundant and an
> archive that stores timestamped files which makes builds non-deterministic. So
> delete it after 'gem install'.

Good idea!  I don’t know if the existence of the cached gem is checked
for by any Ruby tools (bundler or the like).  Is there some
documentation about this cache?

> -    (zero? (apply system* "gem" "install" (first-matching-file "\\.gem$")
> -                  "--local" "--ignore-dependencies"
> -                  ;; Executables should go into /bin, not /lib/ruby/gems.
> -                  "--bindir" (string-append out "/bin")
> -                  gem-flags))))
> +    (apply system* "gem" "install" gem-name
> +           "--local" "--ignore-dependencies"
> +           ;; Executables should go into /bin, not /lib/ruby/gems.
> +           "--bindir" (string-append out "/bin")
> +           gem-flags)
> +    ;; Remove the cached gem file as this is unnecessary and contains
> +    ;; timestamped files rendering builds not reproducible.
> +    (delete-file (string-append gem-home "/cache/" gem-name))
> +    #t))

I’d prefer to keep ‘(zero? ...)’ and only delete the file when the
‘system*’ call above succeeded.  It would be nice if we could propagate
any bad return value from ‘system*’ to the end of the procedure.

Maybe something like this:

  (and (zero? (apply system* ...))
       (begin (delete-file ...) #t))

It’s a bit clunky but the return value would still be #f if ‘system*’
fails.  What do you think?

~~ Ricardo




reply via email to

[Prev in Thread] Current Thread [Next in Thread]