guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

01/12: import: pypi: Do not consider requirements.txt files.


From: guix-commits
Subject: 01/12: import: pypi: Do not consider requirements.txt files.
Date: Mon, 1 Jul 2019 21:43:01 -0400 (EDT)

apteryx pushed a commit to branch master
in repository guix.

commit 01589acc5e114e46e314777bc0d60ebfa620e4f8
Author: Maxim Cournoyer <address@hidden>
Date:   Thu Mar 28 00:26:00 2019 -0400

    import: pypi: Do not consider requirements.txt files.
    
    PyPI packages are mandated to have a setup.py file, which contains a listing
    of the required dependencies.  The setuptools/distutils machinery embed
    metadata in the archives they produce, which contains this information. 
There
    is no need nor gain to collect the requirements from a "requirements.txt"
    file, as it is not the true record of dependencies for PyPI packages and may
    contain extraneous requirements or not exist at all.
    
    * guix/import/pypi.scm (guess-requirements): Update comment.
    [guess-requirements-from-source]: Do not attempt to parse the file
    requirements.txt.  Streamline logic.
    * tests/pypi.scm (test-requires.txt): Rename from test-requirements, to hint
    at the file being tested.
    ("pypi->guix-package"): Adapt so that the fake package contains a 
requires.txt
    file rather than a requirements.txt file.
    ("pypi->guix-package, wheels"): Likewise.
---
 guix/import/pypi.scm | 35 +++++++++++++----------------------
 tests/pypi.scm       | 23 ++++++++++++-----------
 2 files changed, 25 insertions(+), 33 deletions(-)

diff --git a/guix/import/pypi.scm b/guix/import/pypi.scm
index 3a20fc4..8269aa6 100644
--- a/guix/import/pypi.scm
+++ b/guix/import/pypi.scm
@@ -206,35 +206,26 @@ cannot determine package dependencies"))
           (call-with-temporary-directory
            (lambda (dir)
              (let* ((pypi-name (string-take dirname (string-rindex dirname 
#\-)))
-                    (req-files (list (string-append dirname 
"/requirements.txt")
-                                     (string-append dirname "/" pypi-name 
".egg-info"
-                                                    "/requires.txt")))
-                    (exit-codes (map (lambda (file-name)
-                                       (parameterize ((current-error-port 
(%make-void-port "rw+"))
-                                                      (current-output-port 
(%make-void-port "rw+")))
-                                         (system* "tar" "xf" tarball "-C" dir 
file-name)))
-                                     req-files)))
-               ;; Only one of these files needs to exist.
-               (if (any zero? exit-codes)
-                   (match (find-files dir)
-                     ((file . _)
-                      (read-requirements file))
-                     (()
-                      (warning (G_ "No requirements file found.\n"))))
+                    (requires.txt (string-append dirname "/" pypi-name
+                                                 ".egg-info" "/requires.txt"))
+                    (exit-code (parameterize ((current-error-port 
(%make-void-port "rw+"))
+                                              (current-output-port 
(%make-void-port "rw+")))
+                                 (system* "tar" "xf" tarball "-C" dir 
requires.txt))))
+               (if (zero? exit-code)
+                   (read-requirements (string-append dir "/" requires.txt))
                    (begin
-                     (warning (G_ "Failed to extract requirements files\n"))
+                     (warning
+                      (G_ "Failed to extract file: ~a from source.~%")
+                      requires.txt)
                      '())))))
           '())))
 
-  ;; First, try to compute the requirements using the wheel, since that is the
-  ;; most reliable option. If a wheel is not provided for this package, try
-  ;; getting them by reading either the "requirements.txt" file or the
-  ;; "requires.txt" from the egg-info directory from the source tarball. Note
-  ;; that "requirements.txt" is not mandatory, so this is likely to fail.
+  ;; First, try to compute the requirements using the wheel, else, fallback to
+  ;; reading the "requires.txt" from the egg-info directory from the source
+  ;; tarball.
   (or (guess-requirements-from-wheel)
       (guess-requirements-from-source)))
 
-
 (define (compute-inputs source-url wheel-url tarball)
   "Given the SOURCE-URL of an already downloaded TARBALL, return a list of
 name/variable pairs describing the required inputs of this package.  Also
diff --git a/tests/pypi.scm b/tests/pypi.scm
index 6daa44a..a0271ff 100644
--- a/tests/pypi.scm
+++ b/tests/pypi.scm
@@ -23,7 +23,7 @@
   #:use-module (gcrypt hash)
   #:use-module (guix tests)
   #:use-module (guix build-system python)
-  #:use-module ((guix build utils) #:select (delete-file-recursively which))
+  #:use-module ((guix build utils) #:select (delete-file-recursively which 
mkdir-p))
   #:use-module (srfi srfi-64)
   #:use-module (ice-9 match))
 
@@ -55,11 +55,12 @@
 (define test-source-hash
   "")
 
-(define test-requirements
-"# A comment
+(define test-requires.txt "\
+# A comment
  # A comment after a space
 bar
-baz > 13.37")
+baz > 13.37
+")
 
 (define test-metadata
   "{
@@ -107,10 +108,10 @@ baz > 13.37")
              (match url
                ("https://example.com/foo-1.0.0.tar.gz";
                 (begin
-                  (mkdir "foo-1.0.0")
-                  (with-output-to-file "foo-1.0.0/requirements.txt"
+                  (mkdir-p "foo-1.0.0/foo.egg-info/")
+                  (with-output-to-file "foo-1.0.0/foo.egg-info/requires.txt"
                     (lambda ()
-                      (display test-requirements)))
+                      (display test-requires.txt)))
                   (system* "tar" "czvf" file-name "foo-1.0.0/")
                   (delete-file-recursively "foo-1.0.0")
                   (set! test-source-hash
@@ -157,11 +158,11 @@ baz > 13.37")
          (lambda (url file-name)
            (match url
              ("https://example.com/foo-1.0.0.tar.gz";
-               (begin
-                 (mkdir "foo-1.0.0")
-                 (with-output-to-file "foo-1.0.0/requirements.txt"
+              (begin
+                (mkdir-p "foo-1.0.0/foo.egg-info/")
+                (with-output-to-file "foo-1.0.0/foo.egg-info/requires.txt"
                    (lambda ()
-                     (display test-requirements)))
+                     (display test-requires.txt)))
                  (system* "tar" "czvf" file-name "foo-1.0.0/")
                  (delete-file-recursively "foo-1.0.0")
                  (set! test-source-hash



reply via email to

[Prev in Thread] Current Thread [Next in Thread]