diff options
author | David Craven <david@craven.ch> | 2016-09-22 11:40:58 +0200 |
---|---|---|
committer | David Craven <david@craven.ch> | 2016-12-14 16:30:42 +0100 |
commit | 8ac529878640de632356895fbcaeeed6c1cb335e (patch) | |
tree | 25ac42be793630a474ed26a618324d055f3c7971 | |
parent | 3e0c036584b41bcc08a8c8e040295716108bb0b2 (diff) | |
download | guix-8ac529878640de632356895fbcaeeed6c1cb335e.tar guix-8ac529878640de632356895fbcaeeed6c1cb335e.tar.gz |
import: Add updater for rust crates.
* guix/import/crate.scm (crate-package?, latest-release,
%crate-updater): New variables.
* guix/scripts/refresh.scm (%updaters): Add crate updater.
* doc/guix.texi: Add crate updater to table.
-rw-r--r-- | doc/guix.texi | 2 | ||||
-rw-r--r-- | guix/import/crate.scm | 36 | ||||
-rw-r--r-- | guix/scripts/refresh.scm | 3 |
3 files changed, 39 insertions, 2 deletions
diff --git a/doc/guix.texi b/doc/guix.texi index 5db20ecdfa..a5424b4e01 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -5396,6 +5396,8 @@ the updater for @uref{https://rubygems.org, RubyGems} packages. the updater for @uref{https://github.com, GitHub} packages. @item hackage the updater for @uref{https://hackage.haskell.org, Hackage} packages. +@item crate +the updater for @uref{https://crates.io, Crates} packages. @end table For instance, the following command only checks for updates of Emacs diff --git a/guix/import/crate.scm b/guix/import/crate.scm index e78e3ad9ca..3a19fc70cf 100644 --- a/guix/import/crate.scm +++ b/guix/import/crate.scm @@ -36,7 +36,8 @@ #:use-module (srfi srfi-2) #:use-module (srfi srfi-26) #:export (crate->guix-package - guix-package->crate-name)) + guix-package->crate-name + %crate-updater)) (define (crate-fetch crate-name callback) "Fetch the metadata for CRATE-NAME from crates.io and call the callback." @@ -123,3 +124,36 @@ VERSION, INPUTS, NATIVE-INPUTS, HOME-PAGE, SYNOPSIS, DESCRIPTION, and LICENSE." (define (crate-name->package-name name) (string-append "rust-" (string-join (string-split name #\_) "-"))) +;;; +;;; Updater +;;; + +(define (crate-package? package) + "Return true if PACKAGE is a Rust crate from crates.io." + (let ((source-url (and=> (package-source package) origin-uri)) + (fetch-method (and=> (package-source package) origin-method))) + (and (eq? fetch-method download:url-fetch) + (match source-url + ((? string?) + (crate-url? source-url)) + ((source-url ...) + (any crate-url? source-url)))))) + +(define (latest-release package) + "Return an <upstream-source> for the latest release of PACKAGE." + (let* ((crate-name (guix-package->crate-name package)) + (callback (lambda* (#:key version #:allow-other-keys) version)) + (version (crate-fetch crate-name callback)) + (url (crate-uri crate-name version))) + (upstream-source + (package (package-name package)) + (version version) + (urls (list url))))) + +(define %crate-updater + (upstream-updater + (name 'crates) + (description "Updater for crates.io packages") + (pred crate-package?) + (latest latest-release))) + diff --git a/guix/scripts/refresh.scm b/guix/scripts/refresh.scm index 72f51cbff8..2a06405a14 100644 --- a/guix/scripts/refresh.scm +++ b/guix/scripts/refresh.scm @@ -210,7 +210,8 @@ unavailable optional dependencies such as Guile-JSON." ((guix import cpan) => %cpan-updater) ((guix import pypi) => %pypi-updater) ((guix import gem) => %gem-updater) - ((guix import github) => %github-updater))) + ((guix import github) => %github-updater) + ((guix import crate) => %crate-updater))) (define (lookup-updater-by-name name) "Return the updater called NAME." |