guix-commits
[Top][All Lists]
Advanced

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

02/02: guix build: Allow directories to be passed to --with-source.


From: Ludovic Courtès
Subject: 02/02: guix build: Allow directories to be passed to --with-source.
Date: Thu, 11 Jun 2015 09:45:17 +0000

civodul pushed a commit to branch master
in repository guix.

commit a43b55f1a6fa0eb712b2610b86a1775383d3f2cd
Author: Ludovic Courtès <address@hidden>
Date:   Thu Jun 11 11:19:12 2015 +0200

    guix build: Allow directories to be passed to --with-source.
    
    * guix/scripts/build.scm (package-with-source)[tarball-base-name]: 
Gracefully
      handle file names that lack an extension.
      Pass #:recursive? #t to 'download-to-store'.
    * guix/download.scm (download-to-store): Add #:recursive? parameter and pass
      it to 'add-to-store'.
    * doc/guix.texi (Invoking guix build): Add an example of --with-source with 
a
      directory.
---
 doc/guix.texi          |    7 +++++++
 guix/download.scm      |    9 +++++----
 guix/scripts/build.scm |   13 ++++++++++---
 3 files changed, 22 insertions(+), 7 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index be7a292..c70d100 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -3438,6 +3438,13 @@ candidates:
 guix build guile --with-source=../guile-2.0.9.219-e1bb7.tar.xz
 @end example
 
address@hidden or to build from a checkout in a pristine environment:
+
address@hidden
+$ git clone git://git.sv.gnu.org/guix.git
+$ guix build guix --with-source=./guix
address@hidden example
+
 @item --no-grafts
 Do not ``graft'' packages.  In practice, this means that package updates
 available as grafts are not applied.  @xref{Security Updates}, for more
diff --git a/guix/download.scm b/guix/download.scm
index 6b03494..3f7f7ba 100644
--- a/guix/download.scm
+++ b/guix/download.scm
@@ -282,14 +282,15 @@ in the store."
                             )))))
 
 (define* (download-to-store store url #:optional (name (basename url))
-                            #:key (log (current-error-port)))
+                            #:key (log (current-error-port)) recursive?)
   "Download from URL to STORE, either under NAME or URL's basename if
-omitted.  Write progress reports to LOG."
+omitted.  Write progress reports to LOG.  RECURSIVE? has the same effect as
+the same-named parameter of 'add-to-store'."
   (define uri
     (string->uri url))
 
   (if (or (not uri) (memq (uri-scheme uri) '(file #f)))
-      (add-to-store store name #f "sha256"
+      (add-to-store store name recursive? "sha256"
                     (if uri (uri-path uri) url))
       (call-with-temporary-output-file
        (lambda (temp port)
@@ -298,6 +299,6 @@ omitted.  Write progress reports to LOG."
                   (build:url-fetch url temp #:mirrors %mirrors))))
            (close port)
            (and result
-                (add-to-store store name #f "sha256" temp)))))))
+                (add-to-store store name recursive? "sha256" temp)))))))
 
 ;;; download.scm ends here
diff --git a/guix/scripts/build.scm b/guix/scripts/build.scm
index 2307f76..7fd05da 100644
--- a/guix/scripts/build.scm
+++ b/guix/scripts/build.scm
@@ -77,19 +77,26 @@ the new package's version number from URI."
     ;; Return the "base" of FILE-NAME, removing '.tar.gz' or similar
     ;; extensions.
     ;; TODO: Factorize.
-    (cond ((numeric-extension? file-name)
+    (cond ((not (file-extension file-name))
+           file-name)
+          ((numeric-extension? file-name)
            file-name)
           ((string=? (file-extension file-name) "tar")
            (file-sans-extension file-name))
+          ((file-extension file-name)
+           (tarball-base-name (file-sans-extension file-name)))
           (else
-           (tarball-base-name (file-sans-extension file-name)))))
+           file-name)))
 
   (let ((base (tarball-base-name (basename uri))))
     (let-values (((name version)
                   (package-name->name+version base)))
       (package (inherit p)
                (version (or version (package-version p)))
-               (source (download-to-store store uri))))))
+
+               ;; Use #:recursive? #t to allow for directories.
+               (source (download-to-store store uri
+                                          #:recursive? #t))))))
 
 
 ;;;



reply via email to

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