From 9f554133be83f06d5a3d0bfc713331e59eb2116c Mon Sep 17 00:00:00 2001 From: Chris Marusich Date: Tue, 12 Jul 2016 22:53:10 -0700 Subject: [PATCH 2/9] Refactor: extract procedure: relative-generation-spec->number --- guix/profiles.scm | 16 ++++++++++++++++ guix/scripts/package.scm | 7 +------ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/guix/profiles.scm b/guix/profiles.scm index 38f69dd..3828d44 100644 --- a/guix/profiles.scm +++ b/guix/profiles.scm @@ -96,6 +96,7 @@ generation-number generation-numbers profile-generations + relative-generation-spec->number relative-generation previous-generation-number generation-time @@ -968,6 +969,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 b87aee0..1d8972c 100644 --- a/guix/scripts/package.scm +++ b/guix/scripts/package.scm @@ -774,12 +774,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