From mboxrd@z Thu Jan 1 00:00:00 1970 From: cmmarusich@gmail.com Subject: [PATCH 1/5] profiles: Extract a procedure for getting relative generation numbers. Date: Tue, 1 Nov 2016 22:48:11 -0700 Message-ID: <20161102054815.11253-2-cmmarusich@gmail.com> References: <87d1ihscmr.fsf@gnu.org> <20161102054815.11253-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]:42142) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1c1oPX-0007Dy-OD for guix-devel@gnu.org; Wed, 02 Nov 2016 01:48:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1c1oPW-0002JY-NE for guix-devel@gnu.org; Wed, 02 Nov 2016 01:48:31 -0400 Received: from mail-pf0-x22a.google.com ([2607:f8b0:400e:c00::22a]:35686) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1c1oPW-0002J6-GR for guix-devel@gnu.org; Wed, 02 Nov 2016 01:48:30 -0400 Received: by mail-pf0-x22a.google.com with SMTP id i88so5300147pfk.2 for ; Tue, 01 Nov 2016 22:48:30 -0700 (PDT) In-Reply-To: <20161102054815.11253-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/profiles.scm (relative-generation-spec->number): New procedure. * guix/scripts/package.scm (switch-generation-action): Use it. --- guix/profiles.scm | 19 +++++++++++++++++++ guix/scripts/package.scm | 8 ++------ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/guix/profiles.scm b/guix/profiles.scm index 96f8b65..33a5f50 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,23 @@ 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 (if (memv number (profile-generations profile)) + number + #f)))))) + + (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