[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 04/10] Extract procedure: relative-generation-spec->number
From: |
cmmarusich |
Subject: |
[PATCH 04/10] Extract procedure: relative-generation-spec->number |
Date: |
Fri, 28 Oct 2016 03:07:21 -0700 |
From: Chris Marusich <address@hidden>
* guix/scripts/package.scm (switch-generation-action): Extract code from
here...
* guix/profiles.scm (relative-generation-spec->number): into this new
procedure here.
---
guix/profiles.scm | 17 +++++++++++++++++
guix/scripts/package.scm | 8 ++------
2 files changed, 19 insertions(+), 6 deletions(-)
diff --git a/guix/profiles.scm b/guix/profiles.scm
index e7319a8..6d707b1 100644
--- a/guix/profiles.scm
+++ b/guix/profiles.scm
@@ -5,6 +5,7 @@
;;; Copyright © 2015 Mark H Weaver <address@hidden>
;;; Copyright © 2015 Sou Bunnbu <address@hidden>
;;; Copyright © 2016 Ricardo Wurmus <address@hidden>
+;;; Copyright © 2016 Chris Marusich <address@hidden>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -97,6 +98,7 @@
generation-number
generation-numbers
profile-generations
+ relative-generation-spec->number
relative-generation
previous-generation-number
generation-time
@@ -1039,6 +1041,21 @@ former profiles were found."
'()
generations)))
+(define (relative-generation-spec->number profile spec)
+ "Return PROFILE's generation specified by SPEC, which is a string. The SPEC
+may be a N, -N, or +N, where N is a number. If the spec is N, then the number
+returned is N. If it is -N, then the number returned is the profile's current
+generation number minus N. If it is +N, then the number returned is the
+profile's current generation number plus N. Return #f if there is no such
+generation."
+ (let ((number (string->number spec)))
+ (and number
+ (case (string-ref spec 0)
+ ((#\+ #\-)
+ (relative-generation profile number))
+ (else number)))))
+
+
(define* (relative-generation profile shift #:optional
(current (generation-number profile)))
"Return PROFILE's generation shifted from the CURRENT generation by SHIFT.
diff --git a/guix/scripts/package.scm b/guix/scripts/package.scm
index 70ed0a7..96a22f6 100644
--- a/guix/scripts/package.scm
+++ b/guix/scripts/package.scm
@@ -5,6 +5,7 @@
;;; Copyright © 2014, 2016 Alex Kost <address@hidden>
;;; Copyright © 2016 Roel Janssen <address@hidden>
;;; Copyright © 2016 Benz Schenk <address@hidden>
+;;; Copyright © 2016 Chris Marusich <address@hidden>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -782,12 +783,7 @@ processed, #f otherwise."
#:key dry-run?)
"Switch PROFILE to the generation specified by SPEC."
(unless dry-run?
- (let* ((number (string->number spec))
- (number (and number
- (case (string-ref spec 0)
- ((#\+ #\-)
- (relative-generation profile number))
- (else number)))))
+ (let ((number (relative-generation-spec->number profile spec)))
(if number
(switch-to-generation* profile number)
(leave (_ "cannot switch to generation '~a'~%") spec)))))
--
2.9.2
- Add system roll-back and switch-generation commands, cmmarusich, 2016/10/28
- [PATCH 01/10] * gnu/system.scm (<boot-parameters>): Add 'store-device' and 'store-fs-mount-point'., cmmarusich, 2016/10/28
- [PATCH 05/10] Rename previous-grub-entries to grub-entries, cmmarusich, 2016/10/28
- [PATCH 07/10] Factor out procedure: install-grub-config, cmmarusich, 2016/10/28
- [PATCH 06/10] grub-entries: take a list of numbers on input, cmmarusich, 2016/10/28
- [PATCH 03/10] Refactor grub.cfg generation logic, cmmarusich, 2016/10/28
- [PATCH 09/10] Rename grub-entries to profile-grub-entries, cmmarusich, 2016/10/28
- [PATCH 02/10] Add 'device' field to <menu-entry>, cmmarusich, 2016/10/28
- [PATCH 04/10] Extract procedure: relative-generation-spec->number,
cmmarusich <=
- [PATCH 10/10] Mention new 'guix system' features in the manual, cmmarusich, 2016/10/28
- [PATCH 08/10] Implement switch-generation and roll-back, cmmarusich, 2016/10/28
- Re: Add system roll-back and switch-generation commands, Ludovic Courtès, 2016/10/29