[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] guix package: Add '--switch-generation' option.
From: |
Alex Kost |
Subject: |
Re: [PATCH] guix package: Add '--switch-generation' option. |
Date: |
Wed, 08 Oct 2014 01:32:58 +0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux) |
Ludovic Courtès (2014-10-07 20:00 +0400) wrote:
> Alex Kost <address@hidden> skribis:
>
> [...]
>
>> +(define (switch-to-generation profile number)
>> + "Atomically switch PROFILE to the generation NUMBER."
>> + (let ((current (generation-number profile))
>> + (file (generation-file-name profile number)))
>> + (cond ((not (file-exists? profile))
>> + (format (current-error-port)
>> + (_ "profile '~a' does not exist~%")
>> + profile))
>> + ((not (file-exists? file))
>> + (format (current-error-port)
>> + (_ "generation ~a does not exist~%")
>> + number))
>> + (else
>> + (format #t (_ "switching from generation ~a to ~a~%")
>> + current number)
>> + (switch-symlinks profile file)))))
>
> Could this procedure raise an exception instead of writing messages?
> The reason is that I’d like UI code to remain in (guix scripts package),
> in the Emacs code, and in guix-web, with (guix profiles) remaining
> generic.
I see, thanks for the explanation.
> It’d be enough for me to just call ‘switch-symlinks’ and let it throw
> ‘system-error’ if something’s wrong. The exception will be caught, the
> user will see a “No such file” error, and ‘guix package’ with exit with
> non-zero (this is done by ‘call-with-error-handling’.)
‘switch-symlinks’ does not throw an error even if files don't exist, so…
> It’s less informative than what you did, though. The other option would
> be to define specific error condition types and throw them from here.
>
> WDYT?
… I tried to make it this way, thank you for pointing. I made another
commit for adding and using condition types (3 patches are attached
now).
Also I moved ‘process-query’ inside ‘with-error-handling’ (because I
used ‘raise’ there). Could there be unwanted consequences after that?
> My apologies for being sloppy and not catching it earlier!
No problem at all. I hope you catch something now if it is there.
>
> [...]
>
>> + (('switch-generation . pattern)
>> + (let* ((number (string->number pattern))
>> + (number (and number
>> + (case (string-ref pattern 0)
>> + ((#\+ #\-)
>> + (relative-generation profile number))
>> + (else number)))))
>> + (if number
>> + (switch-to-generation profile number)
>> + (format (current-error-port)
>> + "Cannot switch to generation '~a'~%" pattern)))
>
> Use ‘leave’ instead of ‘format’ here, with lower-case “cannot”.
Done.
0001-profiles-Add-condition-types-for-profile-and-generat.patch
Description: Text Data
0002-profiles-Add-procedures-for-switching-generations.patch
Description: Text Data
0003-guix-package-Add-switch-generation-option.patch
Description: Text Data
- [PATCH] emacs: Add support for deleting generations., (continued)
- [PATCH] emacs: Add support for deleting generations., Alex Kost, 2014/10/05
- Re: [PATCH] emacs: Add support for deleting generations., Ludovic Courtès, 2014/10/05
- Re: [PATCH] emacs: Add support for deleting generations., Alex Kost, 2014/10/05
- Re: [PATCH] emacs: Add support for deleting generations., Ludovic Courtès, 2014/10/05
- Re: [PATCH] emacs: Add support for deleting generations., Alex Kost, 2014/10/05
- Re: [PATCH] emacs: Add support for deleting generations., Ludovic Courtès, 2014/10/06
[PATCH] guix package: Add '--switch-generation' option., Alex Kost, 2014/10/06
Re: [PATCH] guix package: Export generation procedures., Andreas Enge, 2014/10/05