import: hackage: Handle Hackage revisions.
authorRobert Vollmert <rob@vllmrt.net>
Thu, 13 Jun 2019 19:39:14 +0000 (21:39 +0200)
committerTimothy Sample <samplet@ngyro.com>
Fri, 14 Jun 2019 02:18:52 +0000 (22:18 -0400)
commitca45da9fc9b1eee399ce4344b18cbb129daeca4c
tree361e65e3401f9c875ac5aa76ede6c6a5bcdab159
parent30825c46298c70028f70da1470eadbadf1e0d858
import: hackage: Handle Hackage revisions.

Hackage packages can have metadata revisions (Cabal file only) that are
not reflected in the source archive.  The Haskell build system has
support for this, but until now the Hackage importer would create a
package based on the revised Cabal file which would then build using the
old Cabal file.

Fixes <https://bugs.gnu.org/35750>.

* guix/import/cabal.scm (<cabal-package>): Add 'revision' field.
(eval-cabal): Parse 'x-revision:' property.
* guix/import/hackage.scm (read-cabal-and-hash): New procedure.
(hackage-fetch-and-hash): New procedure.
(hackage-fetch): Rewrite using 'hackage-fetch-and-hash'.
(hackage-module->sexp): Add 'cabal-hash' argument and use it to populate
the '#:cabal-revision' argument.
(hackage->guix-package): Use the new '-and-hash' functions to get the
hash of the Cabal file and pass it to 'hackage-module->sexp'.
* guix/tests/hackage.scm: Test import of Cabal file revision.

Signed-off-by: Timothy Sample <samplet@ngyro.com>
guix/import/cabal.scm
guix/import/hackage.scm
tests/hackage.scm