~ruther/guix-local

4eaac4b722b180b433b75127a30b871aaf9f0913 — Ludovic Courtès 9 years ago 750a423
import: pypi: Correctly handle multiple-URL origins.

Fixes <https://bugs.gnu.org/25635>.
Reported by Sergei Trofimovich <slyfox@inbox.ru>.

* guix/import/pypi.scm (guix-package->pypi-name)[url->pypi-name]: New
procedure.
Rewrite body to match lists in addition to strings.
* tests/pypi.scm ("guix-package->pypi-name, several URLs"): New test.
2 files changed, 20 insertions(+), 3 deletions(-)

M guix/import/pypi.scm
M tests/pypi.scm
M guix/import/pypi.scm => guix/import/pypi.scm +10 -3
@@ 1,7 1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2014 David Thompson <davet@gnu.org>
;;; Copyright © 2015 Cyril Roelandt <tipecaml@gmail.com>
;;; Copyright © 2015, 2016 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2015, 2016, 2017 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 89,9 89,16 @@ package."
(define (guix-package->pypi-name package)
  "Given a Python PACKAGE built from pypi.python.org, return the name of the
package on PyPI."
  (let ((source-url (and=> (package-source package) origin-uri)))
  (define (url->pypi-name url)
    (hyphen-package-name->name+version
     (basename (file-sans-extension source-url)))))
     (basename (file-sans-extension url))))

  (match (and=> (package-source package) origin-uri)
    ((? string? url)
     (url->pypi-name url))
    ((lst ...)
     (any url->pypi-name lst))
    (#f #f)))

(define (wheel-url->extracted-directory wheel-url)
  (match (string-split (basename wheel-url) #\-)

M tests/pypi.scm => tests/pypi.scm +10 -0
@@ 22,6 22,7 @@
  #:use-module (guix base32)
  #:use-module (guix hash)
  #:use-module (guix tests)
  #:use-module (guix build-system python)
  #:use-module ((guix build utils) #:select (delete-file-recursively which))
  #:use-module (srfi srfi-64)
  #:use-module (ice-9 match))


@@ 90,6 91,15 @@ baz > 13.37")
                           (uri
                            "https://pypi.python.org/packages/a2/3b/4756e6a0ceb14e084042a2a65c615d68d25621c6fd446d0fc10d14c4ce7d/certbot-0.8.1.tar.gz"))))))

(test-equal "guix-package->pypi-name, several URLs"
  "cram"
  (guix-package->pypi-name
   (dummy-package "foo"
                  (source
                   (dummy-origin
                    (uri (list "https://bitheap.org/cram/cram-0.7.tar.gz"
                               (pypi-uri "cram" "0.7"))))))))

(test-assert "pypi->guix-package"
  ;; Replace network resources with sample data.
    (mock ((guix import utils) url-fetch