unofficial mirror of help-guix@gnu.org 
 help / color / mirror / Atom feed
From: Vincent Legoll <vincent.legoll@gmail.com>
To: Leo Famulari <leo@famulari.name>, guix-devel <guix-devel@gnu.org>
Cc: help-guix <help-guix@gnu.org>
Subject: Re: guix pull avoidance
Date: Tue, 23 Aug 2016 15:13:57 +0200	[thread overview]
Message-ID: <CAEwRq=rOkhT8wMxRiqkF0sSCDHsV9Z9039yA_oNXtnKyKMUBzg@mail.gmail.com> (raw)
In-Reply-To: <CAEwRq=oTY7qRTXxt2aPxRjPxU8usOZPLAtrGEFwamX38OUyq4A@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 1246 bytes --]

Hello,

On Tue, Aug 23, 2016 at 10:39 AM, Vincent Legoll
<vincent.legoll@gmail.com> wrote:
> On Mon, Aug 22, 2016 at 8:01 PM, Leo Famulari <leo@famulari.name> wrote:
>> On Mon, Aug 22, 2016 at 04:34:41PM +0200, Vincent Legoll wrote:
>>> when one does guix pull, it is done only for that user, another one
>>> doing it subsequently (or at the same time) is going to download
>>> and compile the whole (identical) thing again, is it possible to switch
>>> a user to a previously dl'ed revision, like just changing a symlink in
>>> ~/.guix-profile to point to /gnu/store/*-guix-latest, or something like
>>> that ?
>>
>> The 2nd user who does `guix pull` will not recompile if nothing has
>> changed.
>
> Sorry, I wasn't being clear enough, I also want to avoid download.
>
>> You can change which Guix you use by changing what the symlink at
>> '~/.config/guix/latest' points to.
>
> OK thanks that's what I wanted to know

How's the following totally untested, probably buggy patch ?

it's in RFC, to show the intended effects...

What's inside:

- create a symlink /gnu/store/latest pointing to the last installed
/gnu/store/*-guix-latest
- make ~/.config/guix/latest point to that, if --nodownload option is given...

WDYT ?

-- 
Vincent Legoll

[-- Attachment #2: 0001-Add-nodownload-CLI-option.patch --]
[-- Type: text/x-patch, Size: 4664 bytes --]

From 0a4209c49eac41b728500fbdfa17f38aa2a4d210 Mon Sep 17 00:00:00 2001
From: Vincent Legoll <vincent.legoll@gmail.com>
Date: Tue, 23 Aug 2016 15:06:12 +0200
Subject: [PATCH] Add --nodownload CLI option

* guix/scripts/pull.scm (show-help, %option): add new option
                        (guix-pull): handle --nodownload option
                        (build-and-install): add store parameter,
                                             create $STORE/latest symlink

Signed-off-by: Vincent Legoll <vincent.legoll@gmail.com>
---
 guix/scripts/pull.scm | 36 ++++++++++++++++++++++++------------
 1 file changed, 24 insertions(+), 12 deletions(-)

diff --git a/guix/scripts/pull.scm b/guix/scripts/pull.scm
index a4824e4..e7775c0 100644
--- a/guix/scripts/pull.scm
+++ b/guix/scripts/pull.scm
@@ -79,6 +79,8 @@ Download and deploy the latest version of Guix.\n"))
       --url=URL          download the Guix tarball from URL"))
   (display (_ "
       --bootstrap        use the bootstrap Guile to build the new Guix"))
+  (display (_ "
+      --nodownload       only switch to the last downloaded version of Guix"))
   (newline)
   (display (_ "
   -h, --help             display this help and exit"))
@@ -99,6 +101,9 @@ Download and deploy the latest version of Guix.\n"))
         (option '("bootstrap") #f #f
                 (lambda (opt name arg result)
                   (alist-cons 'bootstrap? #t result)))
+        (option '("nodownload") #f #f
+                (lambda (opt name arg result)
+                  (alist-cons 'nodownload? #t result)))
 
         (option '(#\h "help") #f #f
                 (lambda args
@@ -184,7 +189,7 @@ contained therein."
     ;; tree.
     (build source #:verbose? verbose?)))
 
-(define* (build-and-install tarball config-dir
+(define* (build-and-install tarball config-dir store
                             #:key verbose?)
   "Build the tool from TARBALL, and install it in CONFIG-DIR."
   (mlet* %store-monad ((source        (build-from-source tarball
@@ -197,6 +202,7 @@ contained therein."
     (if built?
         (mlet* %store-monad
             ((latest -> (string-append config-dir "/latest"))
+             (latest-in-store -> (string-append store "/latest"))
              (done      (indirect-root-added latest)))
           (if (and (file-exists? latest)
                    (string=? (readlink latest) source-dir))
@@ -205,6 +211,7 @@ contained therein."
                 (return #t))
               (begin
                 (switch-symlinks latest source-dir)
+                (switch-symlinks latest-in-store source-dir)
                 (format #t
                         (_ "updated ~a successfully deployed under `~a'~%")
                         %guix-package-name latest)
@@ -224,18 +231,23 @@ contained therein."
   (with-error-handling
     (let* ((opts  (parse-options))
            (store (open-connection))
+           (config-dir (config-directory))
            (url   (assoc-ref opts 'tarball-url)))
-      (let ((tarball (download-to-store store url "guix-latest.tar.gz")))
-        (unless tarball
-          (leave (_ "failed to download up-to-date source, exiting\n")))
-        (parameterize ((%guile-for-build
-                        (package-derivation store
-                                            (if (assoc-ref opts 'bootstrap?)
-                                                %bootstrap-guile
-                                                (canonical-package guile-2.0)))))
-          (run-with-store store
-            (build-and-install tarball (config-directory)
-                               #:verbose? (assoc-ref opts 'verbose?))))))))
+      (if (assoc-ref opts 'nodownload?)
+          (let ((latest -> (string-append config-dir "/latest"))
+                (latest-in-store -> (string-append store "/latest")))
+            (switch-symlinks latest latest-in-store))
+          (let ((tarball (download-to-store store url "guix-latest.tar.gz")))
+            (unless tarball
+              (leave (_ "failed to download up-to-date source, exiting\n")))
+            (parameterize ((%guile-for-build
+                            (package-derivation store
+                                                (if (assoc-ref opts 'bootstrap?)
+                                                    %bootstrap-guile
+                                                    (canonical-package guile-2.0)))))
+              (run-with-store store
+                (build-and-install tarball config-dir store
+                                   #:verbose? (assoc-ref opts 'verbose?)))))))))
 
 ;; Local Variables:
 ;; eval: (put 'with-PATH 'scheme-indent-function 1)
-- 
1.9.1


  reply	other threads:[~2016-08-23 13:14 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-22 14:34 guix pull avoidance Vincent Legoll
2016-08-22 18:01 ` Leo Famulari
2016-08-23  8:39   ` Vincent Legoll
2016-08-23 13:13     ` Vincent Legoll [this message]
2016-08-24  8:57       ` Vincent Legoll
2016-08-28 13:54         ` Vincent Legoll
2016-08-29 16:10         ` Ludovic Courtès

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://guix.gnu.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAEwRq=rOkhT8wMxRiqkF0sSCDHsV9Z9039yA_oNXtnKyKMUBzg@mail.gmail.com' \
    --to=vincent.legoll@gmail.com \
    --cc=guix-devel@gnu.org \
    --cc=help-guix@gnu.org \
    --cc=leo@famulari.name \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).