aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2016-07-26 17:49:34 +0200
committerLudovic Courtès <ludo@gnu.org>2016-07-26 17:49:34 +0200
commit8173ceee1f31ab562118ff5171254a4b73b71400 (patch)
treeeba237bd3f70991c87996dcc24ed998f5d333b58
parentdebc6360e111e8efc8a938b2aef28e5b3616ada8 (diff)
downloadguix-8173ceee1f31ab562118ff5171254a4b73b71400.tar
guix-8173ceee1f31ab562118ff5171254a4b73b71400.tar.gz
import: pypi: Correctly handle new-style URLs.
Fixes <http://bugs.gnu.org/23997>. * guix/import/pypi.scm (guix-package->pypi-name): Rewrite using 'basename' and 'hyphen-package-name->name+version'. * tests/pypi.scm ("guix-package->pypi-name, old URL style") ("guix-package->pypi-name, new URL style"): New tests.
-rw-r--r--guix/import/pypi.scm13
-rw-r--r--tests/pypi.scm16
2 files changed, 23 insertions, 6 deletions
diff --git a/guix/import/pypi.scm b/guix/import/pypi.scm
index efa69081ef..343445aa22 100644
--- a/guix/import/pypi.scm
+++ b/guix/import/pypi.scm
@@ -33,6 +33,9 @@
#:use-module (web uri)
#:use-module (guix ui)
#:use-module (guix utils)
+ #:use-module ((guix build utils)
+ #:select ((package-name->name+version
+ . hyphen-package-name->name+version)))
#:use-module (guix import utils)
#:use-module ((guix download) #:prefix download:)
#:use-module (guix import json)
@@ -41,7 +44,8 @@
#:use-module (guix licenses)
#:use-module (guix build-system python)
#:use-module (gnu packages python)
- #:export (pypi->guix-package
+ #:export (guix-package->pypi-name
+ pypi->guix-package
%pypi-updater))
(define (pypi-fetch name)
@@ -92,11 +96,8 @@ 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)))
- ;; The URL has the form:
- ;; 'https://pypi.python.org/packages/source/' +
- ;; first letter of the package name +
- ;; '/' + package name + '/' + ...
- (substring source-url 42 (string-rindex source-url #\/))))
+ (hyphen-package-name->name+version
+ (basename (file-sans-extension source-url)))))
(define (wheel-url->extracted-directory wheel-url)
(match (string-split (basename wheel-url) #\-)
diff --git a/tests/pypi.scm b/tests/pypi.scm
index 379c288394..01d8a575ab 100644
--- a/tests/pypi.scm
+++ b/tests/pypi.scm
@@ -73,6 +73,22 @@ baz > 13.37")
(test-begin "pypi")
+(test-equal "guix-package->pypi-name, old URL style"
+ "psutil"
+ (guix-package->pypi-name
+ (dummy-package "foo"
+ (source (dummy-origin
+ (uri
+ "https://pypi.io/packages/source/p/psutil/psutil-4.3.0.tar.gz"))))))
+
+(test-equal "guix-package->pypi-name, new URL style"
+ "certbot"
+ (guix-package->pypi-name
+ (dummy-package "foo"
+ (source (dummy-origin
+ (uri
+ "https://pypi.python.org/packages/a2/3b/4756e6a0ceb14e084042a2a65c615d68d25621c6fd446d0fc10d14c4ce7d/certbot-0.8.1.tar.gz"))))))
+
(test-assert "pypi->guix-package"
;; Replace network resources with sample data.
(mock ((guix import utils) url-fetch