From mboxrd@z Thu Jan 1 00:00:00 1970 From: cmmarusich@gmail.com Subject: [PATCH 04/10] Extract procedure: relative-generation-spec->number Date: Fri, 28 Oct 2016 03:07:21 -0700 Message-ID: <20161028100727.1182-5-cmmarusich@gmail.com> References: <20161028100727.1182-1-cmmarusich@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:56822) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1c044o-0004Ss-1s for guix-devel@gnu.org; Fri, 28 Oct 2016 06:07:55 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1c044k-0003yx-1M for guix-devel@gnu.org; Fri, 28 Oct 2016 06:07:54 -0400 Received: from mail-pf0-x22e.google.com ([2607:f8b0:400e:c00::22e]:35123) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1c044j-0003yN-Pw for guix-devel@gnu.org; Fri, 28 Oct 2016 06:07:49 -0400 Received: by mail-pf0-x22e.google.com with SMTP id s8so35283682pfj.2 for ; Fri, 28 Oct 2016 03:07:49 -0700 (PDT) In-Reply-To: <20161028100727.1182-1-cmmarusich@gmail.com> List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: "Guix-devel" To: guix-devel@gnu.org From: Chris Marusich * 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 ;;; Copyright © 2015 Sou Bunnbu ;;; Copyright © 2016 Ricardo Wurmus +;;; Copyright © 2016 Chris Marusich ;;; ;;; 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 ;;; Copyright © 2016 Roel Janssen ;;; Copyright © 2016 Benz Schenk +;;; Copyright © 2016 Chris Marusich ;;; ;;; 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