From patchwork Sun Jul 4 11:54:20 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Xinglu Chen X-Patchwork-Id: 31127 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 57F1B27BC78; Sun, 4 Jul 2021 12:55:28 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, MAILING_LIST_MULTI,SPF_HELO_PASS,T_DKIM_INVALID,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.2 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id B582027BC81 for ; Sun, 4 Jul 2021 12:55:27 +0100 (BST) Received: from localhost ([::1]:60472 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1m00ic-0004Gr-RX for patchwork@mira.cbaines.net; Sun, 04 Jul 2021 07:55:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49904) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1m00iF-0003od-G1 for guix-patches@gnu.org; Sun, 04 Jul 2021 07:55:03 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:57151) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1m00iF-0006zA-8c for guix-patches@gnu.org; Sun, 04 Jul 2021 07:55:03 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1m00iF-0000cf-8v for guix-patches@gnu.org; Sun, 04 Jul 2021 07:55:03 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#48999] [PATCH v2 3/3] scripts: import: hackage: Add option to import package from local filesystem. Resent-From: Xinglu Chen Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Sun, 04 Jul 2021 11:55:03 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 48999 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 48999@debbugs.gnu.org Cc: Ludovic =?utf-8?q?Court=C3=A8s?= , zimoun Received: via spool by 48999-submit@debbugs.gnu.org id=B48999.16253996702320 (code B ref 48999); Sun, 04 Jul 2021 11:55:03 +0000 Received: (at 48999) by debbugs.gnu.org; 4 Jul 2021 11:54:30 +0000 Received: from localhost ([127.0.0.1]:40461 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1m00hi-0000bM-AD for submit@debbugs.gnu.org; Sun, 04 Jul 2021 07:54:30 -0400 Received: from h87-96-130-155.cust.a3fiber.se ([87.96.130.155]:45494 helo=mail.yoctocell.xyz) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1m00hf-0000as-3V for 48999@debbugs.gnu.org; Sun, 04 Jul 2021 07:54:28 -0400 From: Xinglu Chen DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=yoctocell.xyz; s=mail; t=1625399661; bh=7C7QEzkflnhQc5ic1PfcaX7wJVpYn+YK5wpeZn2hic0=; h=From:To:Cc:Subject:In-Reply-To:References:Date; b=J7Q1N3UtN9As2vzxOiPsKCw0BNCLps8E1HumPc9IxX75lYEDBQbj6a6aKcrI3Fyzk ln5mGFVZM2osS1Xmp3YeTa7qnjQUkw9L4teup9sGOvfk+IN4flTbx1/AZiVH1P5pNf z3T8MHciLj4P7t9Pw54RKdd6mpowFLqw5xWYDygM= In-Reply-To: References: Message-Id: <52f526989b25468210fa05e62580589f2c1cc4ea.1625399149.git.public@yoctocell.xyz> Date: Sun, 04 Jul 2021 13:54:20 +0200 MIME-Version: 1.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches This adds a ‘--path’ option for importing a Haskell package from the local filesystem * guix/scripts/import/hackage.scm (show-help, %options): Add ‘-p’ and ‘--path’ options. (guix-import-hackage): Set the #:port and #:source keywords when the ‘--path’ option is used. --- guix/scripts/import/hackage.scm | 43 +++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/guix/scripts/import/hackage.scm b/guix/scripts/import/hackage.scm index 906dca24b1..8728791b52 100644 --- a/guix/scripts/import/hackage.scm +++ b/guix/scripts/import/hackage.scm @@ -1,6 +1,7 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015 Federico Beffa ;;; Copyright © 2018 Ricardo Wurmus +;;; Copyright © 2021 Xinglu Chen ;;; ;;; This file is part of GNU Guix. ;;; @@ -22,6 +23,7 @@ #:use-module (guix utils) #:use-module (guix packages) #:use-module (guix scripts) + #:use-module (guix import utils) #:use-module (guix import hackage) #:use-module (guix scripts import) #:use-module (srfi srfi-1) @@ -29,6 +31,7 @@ #:use-module (srfi srfi-37) #:use-module (ice-9 match) #:use-module (ice-9 format) + #:use-module (rnrs io ports) #:export (guix-import-hackage)) @@ -62,6 +65,8 @@ version.\n")) (display (G_ " -s, --stdin read from standard input")) (display (G_ " + -p, --path=DIR use local directory as source")) + (display (G_ " -t, --no-test-dependencies don't include test-only dependencies")) (display (G_ " -V, --version display version information and exit")) @@ -87,6 +92,11 @@ version.\n")) (alist-cons 'read-from-stdin? #t (alist-delete 'read-from-stdin? result)))) + (option '(#\p "path") #t #f + (lambda (opt name arg result) + (alist-cons 'read-path arg + (alist-delete 'read-path + result)))) (option '(#\e "cabal-environment") #t #f (lambda (opt name arg result) (alist-cons 'cabal-environment (read/eval arg) @@ -113,22 +123,39 @@ version.\n")) %default-options)) (define (run-importer package-name opts error-fn) - (let* ((arguments (list + (let* ((local-directory (assoc-ref opts 'read-path)) + (arguments (list package-name #:include-test-dependencies? (assoc-ref opts 'include-test-dependencies?) - #:port (if (assoc-ref opts 'read-from-stdin?) - (current-input-port) - #f) + #:port + (cond + ((assoc-ref opts 'read-from-stdin?) + (current-input-port)) + (local-directory + (open-file-input-port + (string-append local-directory + "/" package-name ".cabal"))) + (else #f)) + #:source + `(local-file ,local-directory + ,package-name + #:recursive? #t + #:select? ,(cond + ((git-repository? local-directory) + 'git-predicate) + ((hg-repository? local-directory) + 'hg-predicate) + (else '(const #t)))) #:cabal-environment (assoc-ref opts 'cabal-environment))) (sexp (if (assoc-ref opts 'recursive) ;; Recursive import (map (match-lambda - ((and ('package ('name name) . rest) pkg) - `(define-public ,(string->symbol name) - ,pkg)) - (_ #f)) + ((and ('package ('name name) . rest) pkg) + `(define-public ,(string->symbol name) + ,pkg)) + (_ #f)) (apply hackage-recursive-import arguments)) ;; Single import (apply hackage->guix-package arguments))))