From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Craven Subject: [PATCH 05/12] import: Add updater for rust crates. Date: Sun, 11 Dec 2016 18:25:30 +0100 Message-ID: <20161211172537.23315-6-david@craven.ch> References: <20161211172537.23315-1-david@craven.ch> Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:46276) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cG7tD-0008P3-8g for guix-devel@gnu.org; Sun, 11 Dec 2016 12:26:20 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cG7tC-0001Df-6o for guix-devel@gnu.org; Sun, 11 Dec 2016 12:26:19 -0500 Received: from so254-10.mailgun.net ([198.61.254.10]:51000) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1cG7tC-00016K-2R for guix-devel@gnu.org; Sun, 11 Dec 2016 12:26:18 -0500 In-Reply-To: <20161211172537.23315-1-david@craven.ch> List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: "Guix-devel" To: guix-devel@gnu.org * guix/import/crate.scm (crate-package?, latest-release, %crate-updater): New variables. * guix/scripts/refresh.scm (%updaters): Add crate updater. --- guix/import/crate.scm | 36 +++++++++++++++++++++++++++++++++++- guix/scripts/refresh.scm | 3 ++- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/guix/import/crate.scm b/guix/import/crate.scm index 766b2a12c..45d5bf846 100644 --- a/guix/import/crate.scm +++ b/guix/import/crate.scm @@ -35,7 +35,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." @@ -122,3 +123,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 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 bcc11a2d2..3d495963c 100644 --- a/guix/scripts/refresh.scm +++ b/guix/scripts/refresh.scm @@ -209,7 +209,8 @@ unavailable optional dependencies such as Guile-JSON." %hackage-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." -- 2.11.0